Moin moin ich verzweifele langsam. hab mir das AVR: LCD Tutorial durchgelesen und mir eigenen code für die ansteuerung geschrieben. Seltsamerweise wird aber nichts angezeigt, obwohl ich alles zig mal überprüft habe. weiss einfach nicht wo der fehler liegen soll. hier ist der code, vllt ist es ja etwas so offensichtliches und ich seh mal wieder dan wald vor lauter bäumen nicht: #include <avr/io.h> #include <util/delay.h> #define F_CPU 16000000 #define LCD_D0 PD0 //DB4 #define LCD_D1 PD1 //DB5 #define LCD_D2 PD2 //DB6 #define LCD_D3 PD3 //DB7 #define LCD_RS PD4 #define LCD_RW PD5 #define LCD_E PD6 void lcd_enable(void) { _delay_us(50); PORTD |= (1<<LCD_E); _delay_us(50); PORTD &= ~(1<<LCD_E); } void lcd_init(void) { _delay_ms(20); PORTD |= (1<<LCD_D0); PORTD |= (1<<LCD_D1); for(uint8_t i=0;i<3;i++){ _delay_ms(5); lcd_enable(); } PORTD &= ~(1<<LCD_D0); _delay_ms(5); lcd_enable(); } void lcd_cmd(uint8_t cmd) { uint8_t nibble=0x00; nibble = (cmd>>4) & 0b00001111; //oberes nibble PORTD = nibble; lcd_enable(); nibble= cmd & 0b00001111; //unteres nibble PORTD = nibble; lcd_enable(); _delay_us(50); } void lcd_data(uint8_t data){ uint8_t nibble=0x00; nibble = (data>>4) & 0b00001111; //oberes nibble nibble |= (1<<LCD_RS); PORTD = nibble; lcd_enable(); nibble= data & 0b00001111; //unteres nibble nibble |= (1<<LCD_RS); PORTD = nibble; lcd_enable(); _delay_us(50); } void lcd_clear(void) { lcd_cmd(0b00000001); } int main(void) { DDRD = 0xFF; //PD0-PD7: Ausgänge Display PORTD = 0x00; lcd_init(); lcd_cmd(0b00101000); //4Bit 2 Zeilen 5x8 lcd_cmd(0b00001100); //Display ein Cursor aus kein Blinken lcd_cmd(0b00000110); //inkrement / kein Scrollen lcd_clear(); lcd_data('T'); lcd_data('e'); lcd_data('s'); lcd_data('t'); while(1) { _delay_ms(10); } } wäre über einen tipp echt dankbar! gruß winni
Siehst du schwarze balken? Kontrast richtig eingestellt (Poti!)?
danke für die fixe antwort! ja den schwarzen balken seh ich, wenn ich die lcd funktionen entferne. hab kein poti, der kontrast-pin hängt direkt auf gnd.
Alternativ kann es auch sein, das dein Display-Controller etwas mehr Zeit zum "Hochfahren" braucht, d.h. vor lcd_init() könnte noch eine längere Pause nützlich sein. Oder aber du brauchst eine andere Initialisierungssequenz, das kommt auch schon mal vor (die Reichelt-Displays sind z.B. etwas eigen)
Mach mal ein poti hin und dreh dran, es kann sein, dass deine Buchstaben komplett weg sind wegen einer falschen Kontrasteinstellung (ist der häufigste Fehler)
Und woher sollen wir wissen, welches LCD-Display Du verwendest? Da lohnt sich das Lesen Deines Codes noch nicht. Für die gängigen LCD-Controller gibt es schon fertige libraries. Warum das Rad neu erfinden?
benutze das RT162-display mit dem controller HD44780. hab im grunde versucht den asm-code aus dem tutorial (http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD) in c umzusetzten. eine lcd-library hab ich schon erfolgreich zum laufen gebracht, möchte aber meine eigenen erfahrungen damit machen. vllt ist ja etwas mit den bit-shift operationen falsch oder ich vertausche die oberen und unteren nibbles? mache es im prinzip aber genau so wie der asm code im tutorial.
Winni schrieb: > eine lcd-library hab ich schon erfolgreich zum laufen > gebracht, Fein, dann funktioniert die Hardware also. Wenn Du was eigenes schreiben möchtest, dann würde ich nicht versuchen anhand eines asm-Codes das umzuschreiben. Ich würde hergehen und versuchen, jeden Initialisierungsschritt aus dem HS44780 Datenblatt umzusetzen.
Winni schrieb: > #include <util/delay.h> > #define F_CPU 16000000 Wie soll der Compiler bei dieser Reihenfolge die Konstanten für die Delays richtig berechnen?
Wolfgang schrieb: > Wie soll der Compiler bei dieser Reihenfolge die Konstanten für die > Delays richtig berechnen? das ist ein guter punkt, hatte ich beim posten des codes irgendwie vertauscht...daran lag es aber auch nicht :( lese mich jetzt erstmal ins datenblatt des controllers ein...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.