Home > Multiply Integrated Chordic Keyboard > Mick’s Integrated Chordic Keyboard — second design

Mick’s Integrated Chordic Keyboard — second design

February 2nd, 2006 Leave a comment Go to comments


Mick’s Inte­grated Chordic Keyboard

First up. Why?
Well, the answer is that I’m get­ting tired of using the stan­dard qwerty key­board. Even though I can type fairly fast, I am not a touch typ­ist, and only use 6 fin­gers any­way. With those 6 fin­gers I can get to 100wpm, but I have to look at the key­board for fin­ger placement.

What would be nice is to have a key­board that I could take with me any­where. Some­thing I can put in my pocket, can con­nect to my Nokia phone via Blue­tooth, or my iPAQ via blue­tooth, IR or ser­ial. Then there’s my 12 odd PCs at home, and not to men­tion work. Some­thing with a small screen would be nice so as to eas­ily learn the new fin­ger place­ment. Some­thing that can last at least a week on bat­ter­ies. Mmmm.

Require­ments:

To that end here’s a list of require­ments I’ve gathered:

  1. Small, light­weight and cheap.
  2. Low power drain — Should min­i­mize the use of bat­ter­ies as much as possible.
  3. Min­i­mize com­po­nent count — sim­ple design.
  4. 8 dot Braille based — although flex­i­ble enough to sup­port other ‘stan­dards. Like 6 dot Braille, or GKOS
  5. Two handed oper­a­tion — After scout­ing around the net it would seem that the best per­for­mance comes from two handed oper­a­tion. Being able to open a door while I type isn’t a pri­or­ity for me.
  6. Portable — Will have to use RF or IR for that.
  7. Flex­i­ble — Should sup­port USB, PS/2, or RS232 with­out device drivers.
  8. Mouse sup­port — Joy­stick or track­point is prob­a­bly the best for that. Although I’m also think­ing of touch­pad, scroll wheels, track­ball and accelerom­e­ters for future releases.
  9. Needs a small dis­play — for those times I need to attach to a ser­ial con­sole, and also for learn­ing the new keys. I found these really cool color LCD mod­ules which would be perfect.
  10. Needs a PS/2 passthrough — for those peo­ple at work who can’t use it. This is imper­a­tive for com­puter rooms.
  11. Quick devel­op­ment — I’ll need a self-programming MCU that can be re-programmed via ser­ial. Of course the #1 micro pro­duc­ers is Microchip, and Atmel.
  12. Recharg­ing — Has­sle free re-charging. I don’t want to have to take bat­ter­ies out to re-charge. Even bet­ter would be con­nec­tion­less charg­ing, (like those elec­tric toothbrushes).

Design:

I’ve decided the best way to tackle this is to mod­u­lar­ize things. I’m a big fan of write once use many. So the idea here is to break down the con­po­nents of the design into mod­ules. This will also allow me to grad­u­ally develop and lead onto big­ger things. The down­side to this is that it’s slightly more expen­sive. I could make the whole key­board by using one chip, but it’s not as flex­i­ble. This way I can use these mod­ules in other projects later on.

NOTE: I orig­i­nally was intend­ing to use Microchip’s PIC MCUs, but found they were lim­ited in var­i­ous ways. So I’m going with Atmel’s AVR chipset — much bet­ter. If I get time, I’ll doc­u­ment the dif­fer­ences between the two, and why I chose the AVRs. This is the sec­ond design the ini­tial design is here.

In the end I decided to use the recently released ATmega8 MCUs for the mod­ules. This’ll mean that this design will be around for a long time. They cost a lit­tle bit more than the PIC chips, but have a whole swag of fea­tures. Big code space, lot’s of I/O options, self-programming, UART, I2C. All for $5! Really nice! Also no need for an exter­nal crys­tal, (like all PICs, and AVRs).

  • Key­board mod­ule — will have the eight braille key­bord but­tons, a MODE but­ton, and a joy­stick, (eas­i­est to imple­ment). This will be the key­board mod­ule, and can be plugged into either the PS/2 port or a ser­ial port, (or ser­ial to USB adapter). Also sup­port I2C bus, so that it can be attached to other mod­ules, and has an LCD display.
  • Wire­less mod­ule — Will pro­vide the key­board mod­ule with RF and IR trans­mis­sion, and a PS/2 bridge. This means for a full wire­less setup, I’ll need two of these mod­ules and one key­board module.

Key­board module:

Excuse the ASCII art, but this is the rough design of the pinouts of the ATmega8 and their func­tion. Note the mys­te­ri­ous lack of crys­tal! These chips are bloody good eh?!

                               ATmega8-KYB

                            +-------------+
                            |             |
        Key MODE         1 s> RST     SCL +- 28 - Wireless CLK
                            |             |
        UART/uLCD Rx     2 -> RXD     SDA +- 27 - Wireless DATA
                            |             |
        UART/uLCD Tx     3 -< TXD     PC3 +- 26 - PS2 kyb data
                            |             |
        PS2 mouse clk    4 -> INT0    PC2 +- 25 - PS2 mouse data
                            |             |
        PS2 kyb clk      5 -> INT1   ADC1 &lt;- 24 - Y-axis joystick
                            |             |
        LED status       6 -< PD4    ADC0 &lt;- 23 - X-axis joystick
                            |             |
        Vcc              7 -+ VCC     GND +- 22 - Gnd
                            |             |
        GND              8 -+ GND    AREF +- 21 - Analog Vref
                            |             |
        Key R2           9 -> PB6    AVCC +- 20 - Analog Vcc
                            |             |
        Key R3          10 -> PB7     PB5 <- 19 - Key R1
                            |             |
        Wireless INT    11 -> PD5     PB4 <- 18 - Key R0
                            |             |
        Enable uLCD     12 -< PD6     PB3 <- 17 - Key L3
                            |             |
        Enable UART     13 -< PD7     PB2 <- 16 - Key L2
                            |             |
        Key L0          14 -> PB0     PB1 <- 15 - Key L1
                            |             |
                            +-------------+

So the idea here is to keep the I2C and UART bus use­able for either stand­alone use or attached to the Wire­less or Dis­play mod­ules. It’s all pretty basic stuff, the only thing of note is that I am using the MODE key, (pro­vides pullup to pin 6), to also sup­ply power
to the joy­stick resis­tors. This is an attempt to min­i­mize cur­rent drain. If I didn’t do this I’d have the joy­stick pots con­stantly drain­ing bat­ter­ies. This also means that I only sam­ple the joy­stick ports when the MODE but­ton is pressed, (no acci­den­tally bang­ing the joy­stick). It also means that I can switch the R1, R2, and R3 keys into ‘mouse mode’ in which they become the left, mid­dle and right but­tons. This is a nat­ural fit for me since I’m a right handed mouse type person.

Just a plug here for a great pro­to­typ­ing place I found. Have a look at www.sparkfun.com. They are gad­get made, and have a lot of cool gad­gets. Fairly rea­son­able prices too.

I’ve ordered all the bits and while I’m wait­ing I started fool­ing around with boxes.


Wire­less module:

                                ATmega8-WIRELESS

                            +-------------+
                            |             |
        Key MODE         1 s> RST     SCL +- 28 - Keyboard CLK
                            |             |
        UART/uLCD/IR Rx  2 -> RXD     SDA +- 27 - Keyboard DATA
                            |             |
        UART/uLCD/IR Tx  3 -< TXD     PC3 +- 26 - PS2 kyb data
                            |             |
        PS2 mouse clk    4 -> INT0    PC2 +- 25 - PS2 mouse data
                            |             |
        PS2 kyb clk      5 -> INT1    PC1 +- 24 -
                            |             |
        LED status       6 -< PD4     PC0 +- 23 -
                            |             |
        Vcc              7 -+ VCC     GND +- 22 - Gnd
                            |             |
        GND              8 -+ GND    AREF +- 21 - Analog Vref
                            |             |
        Disable HID      9 -+ PB6    AVCC +- 20 - Analog Vcc
                            |             |
        Enable IR       10 -< PB7     SCK >- 19 - RF (CLK1)
                            |             |
        Keyboard INT    11 -< PD5    MISO <- 18 - RF (DATA) <--
                            |             |
        Enable uLCD     12 -< PD6    MOSI >- 17 - RF (DATA) -->
                            |             |
        Enable UART     13 -< PD7      SS >- 16 - RF (CE)
                            |             |
        RF (PWR_UP)     14 -< PB0     PB1 >- 15 - RF (CS)
                            |             |
                            +-------------+

No related posts.

  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.