Hacking the iCruze Display

If you use this or find it helpful, please drop me a note at
msproul -at- skychariot.com

(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

There is an unused 6 pin connector on the iCruze controller board. The pins are as follows These pins exactly match the ICSP programming connector for the AVR processor.

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.

Development

Serial communications

Memory Footprint

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.

The HACK

This has been a very fun and rewarding experience, I have learned a lot. It all started when my dad got one of the iCruze displays to use with his high accuracy Trimble GPS. Some other people had modified the iCruze by removing the controller and putting on their own controller (that uses a PIC chip). My dad found this web site done by a guy in Spain http://www.cembreros.jazztel.es/icruze/icruze_en.htm

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:

Click here for source and Hex file

How to use it

You can do 2 things with the above file.

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.

POWER: The iCruze has a 7805 regulator so you can either drive it with 6-9 volts OR, do as I did and put in a jumper to bypass the regulator and then drive it with 5 volts from the Arduino.

If you cut the RJ-11 connector off the end of the cable you have 4 wires


If you look closely you can see an orange wire connecting the red wire to pin 6 on the right angle connector.
This bypasses the 7805 regulator.

Here it is connected to an Arduino.
If you want to leave the RJ-11 connector and use it, the pin out is below. Remember the RJ-11 is 6 pins and the iCruze only uses the middle 4. You can also use an RJ-45 female connector such as sparkfun BOB-00716 and sparkfun RJ45 8-Pin Connector PRT-00643

RJ-11 pin numbers

RJ-45 pin numbers

(These pin numbers have been tested with the sparkfun parts listed above)

Further HACKing

Whate else can be done with it?