Lyckas inte få igång HD44780-kompatibel LCD
Postat: 12 juli 2008, 17:53:20
Jag köpte en 16x2 LCD-display från Kjell som enligt dom ska vara kompatibel med HD44780. Därför följer jag guiden från elektronikwikin för att försöka initiera den. Det enda som händer när jag skickat de 7 "config-bytesen" är att jag ser 16 svarta rutor på översta/understa raden och inget på den andra. Jag har ca 1s delay mellan varje skickande av data till displayen.
Jag antar att när man initierat ska se något annat än svarta rutor, eller?
Värt att nämna är att kontakterna på LCDn är numrerade med 1 på den 3:e kontakten från vänster och 14 på den längst till höger, frågan är alltså vad de två "onumrerade" längst till vänster är till för. Elektronikwikiguiden är ett par år gammal och kanske inte stämmer längre? Någon annan kanske känner till någon bättre?
Det är ju ganska många som använt en sådan här display och jag hoppas någon känner igen problemet och kan komma med något värdefullt tips...
Här är hela koden. E ligger på 0x10 på PORTC och "databyten" på PORTD. PORTB har en led på 0:e biten.
Jag antar att när man initierat ska se något annat än svarta rutor, eller?
Värt att nämna är att kontakterna på LCDn är numrerade med 1 på den 3:e kontakten från vänster och 14 på den längst till höger, frågan är alltså vad de två "onumrerade" längst till vänster är till för. Elektronikwikiguiden är ett par år gammal och kanske inte stämmer längre? Någon annan kanske känner till någon bättre?
Det är ju ganska många som använt en sådan här display och jag hoppas någon känner igen problemet och kan komma med något värdefullt tips...
Här är hela koden. E ligger på 0x10 på PORTC och "databyten" på PORTD. PORTB har en led på 0:e biten.
Kod: Markera allt
int main(void) {
TRISB = 0;
TRISC = 0;
TRISD = 0;
PORTB = 0;
//Init start here
PORTC = 0x00;
PORTD = 0x00;
Delay_ms(100);
PORTD = 0x30;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
//Flash a led to show that a byte has been sent
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x30;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x30;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x38;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x08;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x01;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
PORTD = 0x06;
PORTC = 0x10;
Delay_ms(100);
PORTC = 0x00;
PORTB = 1;
Delay_ms(10);
PORTB = 0;
Delay_ms(200);
while(1) {
//Blink a led repetively to know the init is done
PORTB = 1;
Delay_ms(10);
PORTB = 0;
Delay_ms(10);
}
return 0;
}