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

Mick’s Integrated Chordic Keyboard – second design

February 2nd, 2006 Mick Leave a comment Go to comments


Mick’s Integrated Chordic Keyboard

First up. Why?
Well, the answer is that I’m getting tired of using the standard qwerty keyboard. Even though I can type fairly fast, I am not a touch typist, and only use 6 fingers anyway. With those 6 fingers I can get to 100wpm, but I have to look at the keyboard for finger placement.

What would be nice is to have a keyboard that I could take with me anywhere. Something I can put in my pocket, can connect to my Nokia phone via Bluetooth, or my iPAQ via bluetooth, IR or serial. Then there's my 12 odd PCs at home, and not to mention work. Something with a small screen would be nice so as to easily learn the new finger placement. Something that can last at least a week on batteries. Mmmm.

Requirements:

To that end here’s a list of requirements I’ve gathered:

  1. Small, lightweight and cheap.
  2. Low power drain – Should minimize the use of batteries as much as possible.
  3. Minimize component count – simple design.
  4. 8 dot Braille based – although flexible enough to support other ‘standards. Like 6 dot Braille, or GKOS
  5. Two handed operation – After scouting around the net it would seem that the best performance comes from two handed operation. Being able to open a door while I type isn’t a priority for me.
  6. Portable – Will have to use RF or IR for that.
  7. Flexible – Should support USB, PS/2, or RS232 without device drivers.
  8. Mouse support – Joystick or trackpoint is probably the best for that. Although I’m also thinking of touchpad, scroll wheels, trackball and accelerometers for future releases.
  9. Needs a small display – for those times I need to attach to a serial console, and also for learning the new keys. I found these really cool color LCD modules which would be perfect.
  10. Needs a PS/2 passthrough – for those people at work who can’t use it. This is imperative for computer rooms.
  11. Quick development – I’ll need a self-programming MCU that can be re-programmed via serial. Of course the #1 micro producers is Microchip, and Atmel.
  12. Recharging – Hassle free re-charging. I don’t want to have to take batteries out to re-charge. Even better would be connectionless charging, (like those electric toothbrushes).

Design:

I’ve decided the best way to tackle this is to modularize things. I’m a big fan of write once use many. So the idea here is to break down the conponents of the design into modules. This will also allow me to gradually develop and lead onto bigger things. The downside to this is that it’s slightly more expensive. I could make the whole keyboard by using one chip, but it’s not as flexible. This way I can use these modules in other projects later on.

NOTE: I originally was intending to use Microchip’s PIC MCUs, but found they were limited in various ways. So I’m going with Atmel’s AVR chipset – much better. If I get time, I’ll document the differences between the two, and why I chose the AVRs. This is the second design the initial design is here.

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

  • Keyboard module – will have the eight braille keybord buttons, a MODE button, and a joystick, (easiest to implement). This will be the keyboard module, and can be plugged into either the PS/2 port or a serial port, (or serial to USB adapter). Also support I2C bus, so that it can be attached to other modules, and has an LCD display.
  • Wireless module – Will provide the keyboard module with RF and IR transmission, and a PS/2 bridge. This means for a full wireless setup, I’ll need two of these modules and one keyboard module.

Keyboard module:

Excuse the ASCII art, but this is the rough design of the pinouts of the ATmega8 and their function. Note the mysterious lack of crystal! 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 useable for either standalone use or attached to the Wireless or Display modules. It’s all pretty basic stuff, the only thing of note is that I am using the MODE key, (provides pullup to pin 6), to also supply power
to the joystick resistors. This is an attempt to minimize current drain. If I didn’t do this I’d have the joystick pots constantly draining batteries. This also means that I only sample the joystick ports when the MODE button is pressed, (no accidentally banging the joystick). It also means that I can switch the R1, R2, and R3 keys into ‘mouse mode’ in which they become the left, middle and right buttons. This is a natural fit for me since I’m a right handed mouse type person.

Just a plug here for a great prototyping place I found. Have a look at www.sparkfun.com. They are gadget made, and have a lot of cool gadgets. Fairly reasonable prices too.

I’ve ordered all the bits and while I’m waiting I started fooling around with boxes.


Wireless 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)
                            |             |
                            +-------------+

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • email
  • LinkedIn
  • Slashdot
  • StumbleUpon
  • Technorati
  • Twitter

No related posts.

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