Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

MM5453 LCD display driver

Status
Not open for further replies.

Enochsson

New Member
Anybody who has any experience using the MM5453 LCD display driver?

I have built a prototype but I can't get it to work. All segments on the LCD are always on.
Wired it according to the datasheet https://www.ti.com/lit/ds/symlink/mm5453.pdf.
Test code below:

void loop(){
static boolean segments[32] = { 1,0,1,1,0,1,1,1, //1-8
0,1,1,1,1,0,1,1, //9-16
1,1,1,0,1,1,1,1, //17-24
1,1,0,1,1,1,1,1}; //25-32
//First send a startbit 1
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, HIGH);

//Send the 32 bits of data
for (uint8_t i = 0; i < 32; i++){
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, segments ? HIGH : LOW);
}

//3 more clock pulses to get a total of 36 clock pulses
for (uint8_t i = 0; i < 3; i++){
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
}
}
 
I found you need 37 clocks... Start bit , 32 data bits and 4 end bits... However!!! You also have a sign bit to deal with.

1 start bit, 1 sign bit 32 data bits then 2 null clocks then lastly 1 single clock to initiate the latch..

Capture.jpg


THEN!!!! You also need to clock the data in on the rising edge..... So load the data_pin first then clock it in
C:
void loop(){
    static boolean segments[32] = { 1,0,1,1,0,1,1,1, //1-8
       0,1,1,1,1,0,1,1, //9-16
       1,1,1,0,1,1,1,1, //17-24
       1,1,0,1,1,1,1,1}; //25-32
   //First send a startbit 1
   digitalWrite(DATA_PIN, HIGH);
    digitalWrite(CLOCK_PIN, HIGH);
    digitalWrite(CLOCK_PIN, LOW);
   //Then the sign
   digitalWrite(DATA_PIN, LOW);
   digitalWrite(CLOCK_PIN, HIGH);
   digitalWrite(CLOCK_PIN, LOW);

//Send the 32 bits of data
    for (uint8_t i = 0; i < 32; i++){
   digitalWrite(DATA_PIN, segments[i] ? HIGH : LOW);
    digitalWrite(CLOCK_PIN, HIGH);
    digitalWrite(CLOCK_PIN, LOW);

    }

    //3 more clock LOW pulses to get a total of 36 clock pulses
   digitalWrite(DATA_PIN, LOW);
    for (uint8_t i = 0; i < 2; i++){
       digitalWrite(CLOCK_PIN, HIGH);
       digitalWrite(CLOCK_PIN, LOW);
       }
   // Then the latch....
   digitalWrite(DATA_PIN, HIGH);
   digitalWrite(CLOCK_PIN, HIGH);
   digitalWrite(CLOCK_PIN, LOW);

    }
}
 
Last edited:
As a guide.... I have the clocks here exactly the same as you..

Here is the driver in basic... The Flash bit lets the display flash (turns of each digit)

Code:
Proc spilcdout(data As Word, flash As Bit)
Dim x As Byte
Dim y As Byte
Dim div As Word
Dim tmp As Byte
div = 1000
   PORTB.4 = 1
   Call clock()
   PORTB.4 = 0
  
   For y = 0 To 3
     tmp = data Mod 10
     data = data / 10
     tmp = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f), tmp
     If y = 1 Then tmp = tmp + 0x80
     If flash Then tmp = 0
     For x = 0 To 7
       PORTB.4 = tmp.0
       Call clock()
       tmp = tmp / 2
     Next x
   Next y
   PORTB.4 = 0
   Call clock()
   Call clock()
   Call clock()
   Call clock()
End Proc

The clock routine is just a pulse on the CLK pin and y is the decimal place...
 
No success!
I have tried both your suggestions but still can't get any respons on the LCD.
I also think I have tried all possible combination of clock pulses and databits possible but still nothing:banghead:
I also have checked and measured the wiring over and over again to be sure it is according to the datasheet.
I'm totally out of ideas now.
 
Just curious... do you have a part number for the LCD display you're using that you can share with us?
 
I'll have to take a look... The thing is the old system used this display.. The boards come to me wired and parts fitted so I just need to worry about the serial wiring.... The MM5453 is under the display and there is alight reflector in between them to light the display.... I have some disassembled boards so I'll have a look tomorrow...
 
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top