Hacking the iCruze Display |
(Updated June 6, 2010)
The iCruze is a 2 line LCD display that was made by Monster for an iPod stereo interface. It was a MONSTER FLOP!!!
Several people including myself having been trying to use it for a general purpose LCD display with the Arduino or other micro-controllers.
iCruze Specs
I have successfully connected an ATMEL AVR ICSP programmer to it and was able to read the chip.
Thanks to EB4APL in Spain for the iCruze schematic
Memory dump and assembly listing of original iCruze software
The Attiny26 has a USI port which is a very bad serial interface. It HALF implements I2C (TWI), HALF implements the SPI interface and does about 1/4 of the work for a UART. There are some good ap notes on the Atmel site for using it AVR307 for the UART. But I could not get any of them to work reliably.
I was able to get I2C working EXCEPT, I had to slow the bus down on the master for it to recognize it and then the code did not handle addressing and it would print anything sent to any I2C address.
I wrote a simple software bit-banged receive which worked but not at full speed.
I have implemented an interrupt driving bit-bang receive hard coded to 9600 baud. It seems to work perfectly with my testing so far. Refer to my source code for theory of operation.
AVR Memory Usage ---------------- Device: attiny26 Program: 1508 bytes (73.6% Full) (.text + .data + .bootloader) Data: 90 bytes (70.3% Full) (.data + .bss + .noinit)I know this says the RAM is 70% full, but the rest of it is used at runtime so there is nothing left. I had to play with the size of the character buffer to get it run reliably.
This guy in Spain started the process of hacking the iCruze, he figured out the schematic. I found some on ebay and got 20 of them REAL CHEAP.
Since the controller board used an Atmel AVR chip and I have been doing a lot of Arduino and AVR programming I took it on as a challenge.
The process was as follows:
avrdude -c usbtiny -p t26 -t
Option 1: If you have Eclipse, WinAVR or any other AVR development environment you can download the source and proceed as you normally would. Note, this will NOT work with Arduino IDE. The size limitations do not allow a bootloader to be present so Arduino cannot be made to work.
Option 2: If you have an ICSP programmer, you can program from the HEX file that is included in the above ZIP file. Below is how to use avrdude to program it. I use a "usbtiny" USB->ICSP programmer.
Either way you will need a ICSP programmer of any type.
$ avrdude -c usbtiny -p t26 -U flash:w:icruzeLCD.hex avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e9109 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "icruzeLCD.hex" avrdude: input file icruzeLCD.hex auto detected as Intel Hex avrdude: writing flash (1708 bytes): Writing | ################################################## | 100% 1.45s avrdude: 1708 bytes of flash written avrdude: verifying flash memory against icruzeLCD.hex: avrdude: load data flash data from input file icruzeLCD.hex: avrdude: input file icruzeLCD.hex auto detected as Intel Hex avrdude: input file icruzeLCD.hex contains 1708 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.89s avrdude: verifying ... avrdude: 1708 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you.
If you cut the RJ-11 connector off the end of the cable you have 4 wires