Nokia 3410 LCD connect to mbed don't work

14 Jul 2012

Hi all,

I took a lcd from a old Nokia 3410 and i tried to connect to mbed but it doesn't work.

This LCD uses a Philips OM6206 (102x65) and the real resolution is 96x65

The Nokia 3410 LCD is similar to nokia 3310 LCD, in this page the principal differences: http://www.module.ro/nokia_3510.html

I connected the LCD to mbed in this way:

LCD 3410 pinMbed pin
1 - VddVout
2 - SCKP13
3 - SDINP11
4 - DCP7
5 - SCEP5
6 - GNDGND
7 - VOUT4.7uF capacitor to Ground
8 - RESP6

I saw that there are a lot of libraries developed for the Nokia 3310 LCD (for example: N3310LCD, PCD8544_LCD, and other).

This is the code:

#include "mbed.h"

Serial pc(USBTX, USBRX);

SPI _spi(p11, NC, p13);         // mosi, miso, sclk,
DigitalOut _cs(p5);             // cs
DigitalOut _rst(p6);            // rst
DigitalOut _dc(p7);             // dc

#define LCD_X_RES  102
#define LCD_Y_RES  72


void init();
void lcd_clear();        
void write_lcd(char data);
void test_writeChar(char test_pattern);

// 6 x 8 font
// 1 pixel space at left and bottom
// index = ASCII - 32// 6 x 8 font
// 1 pixel space at left and bottom
// index = ASCII - 32

unsigned char font6_8[][6] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    { 0x00,0x00, 0x06, 0x09, 0x09, 0x06 }    // horiz lines
};



  void init()
  {
        _dc = 1;                        // display data byte
        _cs = 1;                        // chip disabled
  
    // use default SPI format
        _spi.format(8, 0);
        _spi.frequency(4000000);            // 4MHz
      
        wait_ms(1);
        _rst = 0;
        wait_ms(1);
        _rst = 1;
               
        
   // LCD Controller initialization    
        write_lcd(0x21);    // LCD Extended Commands  
        write_lcd(0xC8);    // Set LCD Vop (Contrast)
        write_lcd(0x06);    // Set Temp coefficent
        write_lcd(0x12);    // LCD bias mode 1:65
        write_lcd(0x20);      // h=0 use basic instruction set
        write_lcd(0x0c);      // LCD in normal mode
        
        lcd_clear();
  }
  
  
  void lcd_clear()
  {    
        _dc = 1;                        // display data byte
        _cs = 0;          

        for(int tick = 0; tick < (LCD_X_RES*LCD_Y_RES); tick++)
             _spi.write(0x00);         // Command gets sent
   
        _cs = 1;
  }
  
  
  void write_lcd(char data)
  {    
         // bring CS low for write
        _dc = 0;                    // command byte
        _cs = 0;                    // chip enabled
  
        _spi.write(data);
        _cs = 1;                    // chip disabled
  }
 
  
void test_writeChar(char test_pattern)
 {           
            _dc = 1;                // display data byte
            _cs = 0;                // chip enabled
            _spi.write(0x00);
            
           for(int i = 0; i < 6; i++)
                  _spi.write(font6_8[test_pattern - 0x20][i]);         // Command gets sent
                  
            _cs = 1;       
 }
 


int main()
{

    init();

    
    pc.printf("init end \n");
    
    while(1)
    {
        test_writeChar(0x61);               // 0x61 == a
        pc.printf("%c \n", 0x61);
        wait(1);
    }
    
}

With this code the LCD doesn't work.

Can someone help me to understand the problem?

Thanks,
Edoardo

OPS I made a mistake on the title, the title correct is: "Nokia 3410 LCD connected to mbed doesn't work"

15 Jul 2012

Hi Edoardo,

Did you try a lower spi frequency like 1MHz? I use a matrix of 6 x 3410 displays and it works fine with 1Mhz (see http://mbed.org/users/Wimpie/code/PCD8544MS/)

Greetings, Wimpie

16 Jul 2012

Hi Wimpie,
I tried with 1MHz but the lcd doesn't work. In the next days I'll look at your code.

Thanks for the answer.

Best Regards,
Edoardo