Hallo, ich bin verzweifelt. Ich versuche seit Tagen ein 2x16 Zeichen LCD-Display anzusteuern, aber irgendwie will es einfach nicht funktionieren. Ich glaube das Problem liegt schon in der initialisierung, da wenn ich die Kontrastspannung verändere nur die obere Zeile "erscheint". Kann mir bitte jemand helben? Danke!! LG
Seltsame Programmiersprache ist das C??? Aber hier scheint der hund begraben zu sein. LCD_DATA = LCD_DATA & 0x0F; // Höherwertigeres Nibble löschen SWAPF(befehl,1); // Höherwertige- und Niederwertige Nibbles vertauschen temp = befehl & 0xF0; // Niederwert. Nibble ausmaskieren LCD_DATA = LCD_DATA | temp; // High-Nibble an LCD übergeben Du wolltest sicherlich das höher wertige Nibble ausgeben. Dann solltest dies nicht löschen. vllt hilft dir das. temp = befehl; LCD_DATA = LCD_DATA & 0xF0; //Höherwertigeres Nibble zuerst senden LCD_DATA = LCD_DATA | befehl LCD_DATA = LCD_DATA & 0x0F; // dann Niederwertigeres Nibble senden LCD_DATA = LCD_DATA | befehl
Natalie Propier das mal in deinem Code aus Mußt allerdings etwas anpassen. // Ausgabe eines Kommandos void LCD_Command ( uint8_t data ) { uint8_t d = data; LCD_Busy(); LCD_DDR |= ((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << LCD_D4 ) ); // D4 - D7 als Ausgang LCD_PORT &= ~((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << LCD_D4 ) ); // D4 - D7 Zurücksetzen // Erst High-Byte senden data >>= 4; if (data & 0x01 ) { LCD_PORT |= (1 << LCD_D4); } if (data & 0x02) { LCD_PORT |= (1 << LCD_D5); } if (data & 0x04) { LCD_PORT |= (1 << LCD_D6); } if (data & 0x08) { LCD_PORT |= (1 << LCD_D7); } LCD_PORT |= (1 << LCD_EN ); // Daten stehen an _delay_us(50); LCD_PORT &= ~(1 << LCD_EN ); // Übernahme mit fallender Flanke LCD_Busy(); LCD_DDR |= ((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << LCD_D4 ) ); // D4 - D7 als Ausgang LCD_PORT &= ~((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << LCD_D4 ) ); // D4 - D7 Zurücksetzen // Low-Byte senden data = d; data &= 0x0F; if (data & 0x01 ) { LCD_PORT |= (1 << LCD_D4); } if (data & 0x02) { LCD_PORT |= (1 << LCD_D5); } if (data & 0x04) { LCD_PORT |= (1 << LCD_D6); } if (data & 0x08) { LCD_PORT |= (1 << LCD_D7); } LCD_PORT |= (1 << LCD_EN ); // Daten stehen an _delay_us(50); LCD_PORT &= ~(1 << LCD_EN ); // Übernahme mit fallender Flanke }
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.