[Ronald] had to scramble to get his submission in, but we’re glad he did. His demo video shows the display of a 1980′s CD player working with Music Player Daemon. It’s really just the original display itself that works, but the project is not yet finished. However, is far enough along to show our URL when a track reaches the 22:00 mark.
The display is driven by an ATmega32 chip which uses a USB connection to receive commands from the computer running MPD. [Ronald] had troubles figuring out how to send int values over USB so he hacked his own protocol that just uses the LSB of each byte coming over the bus. After the break you can see the video, and read the description which he included with his submission. There is also a code package available here.
The final aim is to have an MPD (music player daemon) based player inside a 1980′s CD player box (working), using the original LCD (working), being able to use the original remote control (working), being able to play DVD’s (work in progress), stuff like that.
My plan is to put the schematics and source on the internet, and submit it to obdev.at because I think it’s a new way to use their USB driver. Because I’m still developing the pc-side software, I hadn’t done yet. I only heard of the Fubarino-contest yesterday, and I thought it would be doable to mod my project, so I did it.
First, I forgot the schematics. They’re quite easy: it’s a general Atmega32 (no ATmega8, since I mostly use those I mistyped it below) HID Bootloader loaded device. Two pins of PORTD are used to drive the back plane. Four out of five 1.1K 1% resistors are used as pull up / down resistors to generate the 2.5V level required for a two backplane LCD configuration.
A bit of background. For driving a generic LCD with two backplanes, two square waves with middle value are needed, along with square waves for the segments (e.g. figure 2 at http://www.freescale.com/webapp/sps/site/overview.jsp?code=784_LPBB_LCDTIPS). The timing needs to be precise, to prevent the LCD segments for degrading. Any DC offset large enough can kill it…
PORTA, PORTB, PORTC are all connected to the segments. One additional pin on PORTD is connected to the ‘play’ segment (it seems single backplane), one segment is connected to all ‘off’ segments (I did not have enough pins to drive all segments).
Because I did not know how to send 0×00 characters using USB, I made my own protocol by sending the LSBit of the 2×3 data bytes as the first three of a fourth data byte, and untangle those in the ATmega code. The first three data bytes all have ’1′ as LSB.
In my project design I decided to do most of the logic on the pc-side, and use the ATmega more or less as a framebuffer. That made it harder for me to mod it to show some text, and to implement the easter egg trigger.
To show the text (the full http://hackaday.com was impossible on this LCD, so I made the closest I could :-)), I used the pc-client first to generate the hex codes of the characters, and then copied those into the ATMega source, modified the LSB’s until it looked well.
And that’s about all I can do before the deadline… I hoped to document this all in the code, but ah well.. . It might be enough for you to understand.
The easter egg is in the video at 1:06.