Close

First attempt to drive the LCD

A project log for Reusing a controllerless LCD Display

Reverse engineering the Hosiden HLM8218 Display from an old photocopier

matiMati 04/23/2017 at 08:270 Comments

The screen needs a -18V power supply for the LCD and 5V for the logic, so I'm using one from a DVD player.

After connecting the power supply, the display resurrected and showed some noise

The very first arduino code used digitalWrite, it was extremely slow, so after investigating about using the ATMega328 registers I came up with this code:

#define S_LOW (PORTB&=(~(1<<5)));
#define S_HIGH (PORTB|=(1<<5));
#define CP1_LOW (PORTB&=(~(1<<1)));
#define CP1_HIGH (PORTB|=(1<<1));
#define CP2_LOW (PORTB&=(~(1<<0)));
#define CP2_HIGH (PORTB|=(1<<0));

void setup() {
pinMode(13,OUTPUT); // S
pinMode(9,OUTPUT); //CP1
pinMode(8,OUTPUT);//CP2

//Only 2 out of 4 pixels should be drawn
analogWrite(3,200);
analogWrite(4,200);
}

void loop() {
  S_HIGH
  CP1_HIGH
  asm("nop");asm("nop");
  CP1_LOW
  asm("nop");asm("nop");
  S_LOW
  
  for(int y=0;y<240;y++){
    CP1_HIGH
    asm("nop");asm("nop");
    CP1_LOW
    for(int bx=0;bx<80;bx++){//4 pixel block
          CP2_HIGH
          asm("nop");asm("nop");
          //send pixels here
          CP2_LOW
          asm("nop");asm("nop");
    }
  }
}

Great, it shows 2 pixels per block as expected, but I need to figure out why some lines are missing (maybe EMI?)

So that's all for today, next task: Fill the entire screen with pixels and then map an array to the screen.

Discussions