Nach dem Umstellen auf 4 Bit musst du in Nibbles senden, und zwar zuerst das HIGH, danach das LOW.
Hallo!
Ich werd verrückt.
Mein Display will einfach nicht.
Bitte kann mir wer helfen. Ich will das Display mit 4bit-Daten ansprechen.
Danke im Vorraus
mfg Christian
Code:/* Displayansteuerung 2x20 Display an ATmega8 Pinbelegung: PORTD = (x,E,RS,RW,D7,D6,D5,D4) */ #include <avr/io.h> #include <stdlib.h> #define LCD_RS 5 #define LCD_E 7 void warten(int t) // Warteschleife { int h; for (;t>0;t--) { for (h=1600;h>0;h--) {} } return; } void lcd_enable( int d ) { PORTD = d; PORTD |= 1<<LCD_E; PORTD &= ~(1<<LCD_E); } void lcd_init( void ) { PORTD = 0x00; lcd_enable(0x03); // 8 bit mode warten( 500 ); lcd_enable(0x03); warten( 200 ); lcd_enable(0x03); warten( 200 ); lcd_enable(0x02); // 4 bit mode warten( 200 ); lcd_enable(0x08); // 2zeilig, 5*8 warten( 200 ); lcd_enable(0x01); // clear Display warten( 200 ); lcd_enable(0x0F); // Disp., Cursor, blink. ein warten( 200 ); } void main(void) // Hauptprogramm { DDRD = 0xFF; lcd_init(); }
Nach dem Umstellen auf 4 Bit musst du in Nibbles senden, und zwar zuerst das HIGH, danach das LOW.
Disclaimer: none. Sue me.
Hallo,
ich glaub das mit den Bits passt nicht ganz zusammen, zumindest nicht mit der Bemerkung zur Pinbelegung !
ich mein RS und Enable Pin.
Dann fällt mir noch ein, wie schnell Taktet der µC ?
die Daten des LCD werden mit fallender Flanke von Enable übernommen, dazu muss das Enable eine gewisse Zeit auch oben sein, damit es erkannt wird, bei Dir geht das, meiner Meinung, etwas zu schnell mit dem setzen und löschen.
Jau, das Enable sollte etwas gehalten werden.
Die Warteschleife ist nicht so optimal, möglicherweise kloppt GCC die in die Tonne, weil da nix passiert.
Bau mal ein
asm volatile (";");
anstatt dem {} ein.
Disclaimer: none. Sue me.
Danke für die schnellen Antworten. Jetzt habe ich es geschafft.
Es war von allem etwas falsch.
Lesezeichen