120x24 dot LED sign - Reverse engineering and improvement

Keep a log of a project build here. Be sure to include pictures and as much documentation as possible.

120x24 dot LED sign - Reverse engineering and improvement

Postby martinmunk » July 24th, 2012, 10:11 pm

Hey guys

I got a lot of help on this project at in the "general talk" part of the forum an realized it would fit in here more.

The first thread: http://forums.hackaday.com/viewtopic.php?f=2&t=2319

And i pic of the project in question:

Image

I have two goals in this project

1. Reverse engineer the controller board
2. Make a new controller board
(3. Learn ;) )

Any input and questions are appreciated!

I'll post below
Last edited by martinmunk on February 24th, 2015, 6:20 am, edited 1 time in total.
martinmunk
 
Posts: 14
Joined: January 6th, 2012, 5:48 pm

Re: 120x21 dot LED sign - Reverse engineering and improvemen

Postby martinmunk » July 24th, 2012, 10:23 pm

Soo. First update goes:

k-ww tipped me off how to read the am27c256 EPROM chip on the controller and this post is about my try to this exact thing.

To read it i need a MCU with 15 adress lines and 8 data lines. For this i used a Atmel ATmega32 and my STK500 board.

Hooked-up it looks like this:

Image
Image

As of now my code is as follows

Code: Select all
#define F_CPU 3686400UL

#include <avr/io.h>
#include "uart.h"
#include <util/delay.h>

int main()
{
   char tegn = 0x00;
   uint16_t output = 0;
   
   //Init
   DDRA = 0xFF;
   DDRB = 0xFF;
   DDRC = 0x00;
   
   PORTA = 0x00;
   PORTB = 0x00;

   InitUART(9600, 8);
   
   
   while(1)
   {
      PORTA = output;
      PORTB = (output >> 8);
      if(output == 0b1000000000000000)  //I have to blocks of debug-code in here as the output to the serial line seems strange somehow.
      {
         SendChar('1');
         SendChar('5');
         SendChar('b');
         SendChar('i');
         SendChar('t');
      }
      if(output == 0b0000000000000000)
      {
         SendChar('1');
         SendChar('6');
         SendChar('b');
         SendChar('i');
         SendChar('t');
      }   
      output++;

      _delay_us(50);
      
      tegn = PINC;
      SendChar(tegn);
   }
}


Some of my problems with this is that it newer sends the "16bit" message and not always the "15bit" one :?

For further debugging i hooked up my Logic16 logic analyzer:
Image

And got this output:
Image

I'd really appreciate if you can help me figure out what is "off" here!
IE to me it seems that the IC is sent 0b10001100 at T=60ms but sends 0b01000010 (0x42) to the PC...
Note that the parallel data and the serial data is off by almost a whole data packet off course.

Anyway. Off to bed. I've been at work all night :shock:
martinmunk
 
Posts: 14
Joined: January 6th, 2012, 5:48 pm

Re: 120x21 dot LED sign - Reverse engineering and improvemen

Postby semicolo » July 25th, 2012, 7:55 pm

well the 5 first bytes received on your logic analyzer do spell '16bit'
0x31, 0x36, 0x62, 0x69, 0x74.
If the following bytes are always the same, your setup seems to be good enough to read the eprom.

Maybe you didn't set the serial port settings quite right on the pc when trying to receive the data?
User avatar
semicolo
 
Posts: 270
Joined: December 13th, 2011, 3:32 pm

Re: 120x21 dot LED sign - Reverse engineering and improvemen

Postby martinmunk » February 8th, 2015, 8:16 pm

Soo, the project has been dead for about... well 2.5 years now :shock:

I recently got the time and reason to continue, as a i have an EE course called "Advanced MicroProcessors" where we have to do a project and want to use the display.

I scrap'ed the idea of revers-engineering the controller board and jumped straight to the protocol between the controller and the daisy-chained LED driver boards.

Preliminary continuity tests between the bus and component on the board gave me an idea about the pinout of the connector.

Poking around with my Logic16 gave my some understanding as well, but not much.

After this i threw in som single wires (i forgot the term) in the connection. (all hail AliExpress for saving me the work of doing these plugs by hand!)

Image

Anyway...
With this i could start pulling wires to see what effect they had on the display in relation to my preliminary pinout.

What i saw on the logic analyzer seemed noisy, but i wasn't sure if it was noise or not as i could only do 100 MHz on a single wire on the Saleae. And so i hooked up a 20 y/o logic analyzer that had been sitting on a shelf at my school for years.

Image

After spending half an hour getting it to boot it from floppy-disks, we realized how much of an improvements modern GUI's are over old gear and we gave up on it!

Back to the Saleae

Image
Image

I had eight lines that seem like data lines and 24 that clearly controlling the 24 lines of the display, but the communication on the data lines still didn't make any sense.

I'd been searching for some sort of clock for the data and found it after realizing the i had placed a hook wrong, eureka!

There was a _lot_ going on on the display lines when the clock was flat, and on the assumption that it did not affect i programmed up a ATMega324P with som basic code...

Image

One line working!!!

A few more hours fiddling around with the code i had a working display with a static image and a frame counter!

Image

Now we're ready for the actual part of the AMS course, doing some proper MCU work!

EDIT: Logic screenshots coming!
martinmunk
 
Posts: 14
Joined: January 6th, 2012, 5:48 pm


Return to Project Logs

Who is online

Users browsing this forum: No registered users and 2 guests

cron