Mick’s Integrated Chordic Keyboard – second design
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:
- Small, lightweight and cheap.
- Low power drain – Should minimize the use of batteries as much as possible.
- Minimize component count – simple design.
- 8 dot Braille based – although flexible enough to support other ‘standards. Like 6 dot Braille, or GKOS
- 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.
- Portable – Will have to use RF or IR for that.
- Flexible – Should support USB, PS/2, or RS232 without device drivers.
- 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.
- 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.
- Needs a PS/2 passthrough – for those people at work who can’t use it. This is imperative for computer rooms.
- 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.
- 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 <- 24 - Y-axis joystick
| |
LED status 6 -< PD4 ADC0 <- 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)
| |
+-------------+
No related posts.