tja, ein häufiges problem, und ich hab es auch, hab hier schon viel gelesen, und einieges probiert, aber nix klappt! also ich hab ein 4x20 LCD, die 1. und 3. Zeile hat schwarze balken. das kann an der lib liegen. das merkwürdige ist, das wenn ich den controller unter spannung reinstecke, und bissl wackel gehts hin und wieder... kann das ein zeitproblem in der initialisierung sein? auch wenn ich hin und her wackeln schreibe, von nem üblichen wackelkontackt seh ich mal ab, man weiß nie, aber schaut nicht danach aus! im Anhang das Datenblatt des LCD hier der code #define F_CPU 4000000 #include <avr\io.h> #include <util\delay.h> #include <lcd_neu.h> volatile unsigned int i; unsigned int x; main() { // Ausgänge und Eingänge DDRB = 0x60; // Taster-Pin's als Eingänge, Freigabe Pin's als Ausgänge DDRD = 0x02; // LED-Pin als Ausgang i=0; // LED erstmal aus PORTB = 0x1f; // PORTB Taster-Anschlüsse intern mit PULL-UP's beschalten for(x=0;x<100;x++) { _delay_ms(16); } lcd_init(); _delay_ms(16); while(1) { if (!(PINB&0x01)) // abfrage ob Bit1 nicht High ist, //also gedrückt ist(Taster schaltet LOW durch) { // mit einem Taster einschalten i=1; } if (!(PINB&0x02)) // abfrage ob Bit2 nicht High ist, //also gedrückt ist(Taster schaltet LOW durch) { // mit anderem Taster ausschalten i=0; } if(i) { PORTD=0x00; // LED an lcd_home(); //set_cursor(3,3); lcd_string("Hallo"); } else { PORTD=0xff; // LED aus lcd_home(); lcd_string("o"); } //lcd_string("h"); } } die LED verändert ihren zustand...
4-zeilige LCDs, wie du es auch eines verwendest, verhalten sich IMHO von der Ansteuerung her wie zweizeilige. D.h. du hast von der Ansteuerung her kein 4*20 LCD, sondern ein 2*40. Änder mal set_cursor(3,3); in: set_cursor(23,1); Nun müsste es eigentlich funktionieren...
das set_cursor(3,3); ist auskommentiert, nur das lcd_home(); ist wirksam, wenn dann mal eine reaktion kommt startet er auch in der 1. Zeile links.
im betrieb den controller entfernen und wieder reinstecken, mal kommt eine reaktion und mal nicht, schwarze balken sind jetzt weg, aber die ausgabe kommt mal und mal nicht, das riecht doch danach das die initialisierung mal funktioniert und mal nicht... oder?? hab die lib mal angehängt, bin über jede hilfe dankbar!
Das ist ein gängiges Problem. Nimm einfach funktionierenden Code, der sich hier oder anderswo leicht findet. Suche benutzen.
Dass hier: > LCD_RS_DDR |= (1<<LCD_RS); > // muss 3mal hintereinander gesendet werden zur Initialisierung > > _delay_ms(15); > > LCD_PORT_4 &= ~(1<<LCD_D4); > LCD_PORT_5 |= (1<<LCD_D5); Mal so ändern: LCD_RS_DDR |= (1<<LCD_RS); // muss 3mal hintereinander gesendet werden zur Initialisierung _delay_ms(15); LCD_PORT_4 |= (1<<LCD_D4); LCD_PORT_5 |= (1<<LCD_D5);
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.