20140327 (Th) ASETNIOP Keyboard

Scope creep is something I had only seen at work.  My boss would get a project and the client would gradually slip in a new feature here and a neat gizmo there or try to swap out a simple sensor for a more complex one.  A project rarely turned out as expected.  Once I recognized scope creep in my own projects I saw it EVERYWHERE.  I could start out with a color changing robot and by the end it was big enough to have its own school district.  It is natural to want to improve on a project but those “improvements” threaten the likelihood of success or even completion.

A while ago I made a controller for tattoo machines that used a µcontroller to set the machine speed as opposed to raising and lowering voltage like a traditional tattoo machine power supply.  Then I wanted to add some switches, then I wanted to do a fancy trick with potentiometers, then I put it in a fancy enclosure, then I put extra terminals on it, then I got a bigger-than-necessary SSR, then I wanted to give it an infrared emitter.  By a miracle of willpower I finished it.

Tattoo machine controller

These guys took the opposite approach.  Their device does one thing.  It’s a simple enough concept with a neat result.  For myself, I want to find a middle ground where my projects have a few neat gizmos but are still elegant.

Enough background.


The "expander" example included with the Digispark distribution of the Arduino software only shows how to use the I/O expander as an output.  In this case to give a “Knight Rider” or “Cylon” effect with LEDs.

The downloaded libraries rely on the “wires” library which only works with the traditional line of Arduinos not the ATTiny85 used in this project.  Some people have reported they cobbled together a working model but it seems like putting a square peg in a DB-9 port.

At first it was hypothesized that the I²C pins were interfering with the USB communication since the computer gave a “Device not recognized” error each time.  This was not the case.  The USB uses pins 3&4 while the I²C is done on pins 0 & 2.  Pin 1 is the onboard LED.  To leverage the onboard LED the NeoPixel line has been moved to pin 5.  The schematic has been updated to show this.

The schematics now have labels for each of the Digispark pins which shows below it.

Pages 6-20 of the MCP23008 datasheet have been printed to review the I²C protocol in hopes of bypassing the need for another library.  The “TinyWireM” library should be all that is necessary.  A serial I²C LCD may be implemented after the first prototype is finished.  It would only require a TRRS splitter on either of the existing ports.

To do:
• Glue switch boards in place
• Study I²C protocol
• Follow outlined program agenda
Journal page 1
Journal page 2

Updated schematic