Moin Moin und Mahlzeit, ich habe ein LCD vom Typ: YM-1602C. Wie man auf dem Anhang sehen kann, zeigt es nicht das was ich sehen will. Laut Datenblatt ist es wohl nicht richtig inizialisiert. Aber wir finden den Fehler im C Code nicht. Das Display hat einen SPLC780 und soll HD44780 kompatibel sein. Daher haben wir den Code aus dem Tutorial genommen und die Portpins angepasst. Weiß jemand einen Rat?
Hallo, Hellseher befragen? Ich befürchte, hier im Forum hat keiner eine so gut funktionierende Galskugel, daß er sowohl Deinen Schaltplan als auch den geänderten Code erkennen kann... Was erhoffst Du also bei der Fragestellung? Die Bestätigung, daß das Display wohl nicht initialisiert wird, kann ich Dir geben. Gruß aus Berlin Michael
Kommt mir irgendwie bekannt vor... Hast du sicher richtig initialisiert? So vom Gefühl her sieht das aus nach nur 1 Zeile initialisiert und dann der Kontrast viel zu hoch. Hast du ein Poti am Kontrasteingang?
Welcher Controller nimmst du denn? Bei den AVR gibt es eine fertige Bibliothek für die Ansteuerung eines Alpha- numerischen Display mit 2x16 oder 2x24 Zeichen.
Noch eine Idee: Im Bild sind nur 4 Datenleitungen zu sehen. Wenn der Code aber für 8 bit Busbreite ist, geht im 1. Init.-Schritt u.A. die Information "2 Zeilen" verloren.
Anbei erst ein mal der C-Code. Schaltplan folgt. @Florian: Ich habe ein Poti am Kontrasteingang und auch wenn ich es runter drehe ändert sich nichts. @Stefan: Ich nehme den ATMega32. Die Konstillation ist identisch mit der des E-Blockdisplaymoduls. Wenn ich dieses verwende, läßt es sich initialisieren. @Florian 2ter Eintrag: Der Code ist für den 4Bit Betrieb gedacht. Siehe Dateianhang
Anbei Schaltplan. Kontakte habe ich schon zig mal überprüft, man ist ja auch nur eine Mensch. In der C Datei sind auch die #Defines angepasst. Schon mal Danke für Eure Antworten, geht ja ratzfatz hier.
Hallo, nicht alles durchgeschaut, aber in der Init: LCD_PORT &= 0xF0; //löscht P0..3 => 0bxxxx 0000 LCD_PORT |= 0x03; // => 0bxxxx 0011 LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 =INSTRUKTION // LCD_PORT &= ~(1<<LCD_RW); // RW auf 0 =INSTRUKTION Wer setzt hier wo RW auf 0 für schreiben? Gruß aus Berlin Michael
Hallo Michael, danke für deine schnelle Antwort. Aber RW ist immer konstant auf GND, da ich nur auf das Display schreiben möchte und nichts auslesen muss. Dies wird auch im Schaltplan deutlich. MfG auch Michael
Gast schrieb:
> Wenns das nicht war, leg mal die anderen 4 Datenleitungen auf GND.
Das ist unnötig bzw. kontraproduktiv: Die Pins haben einen internen
Pullup. Wenn schon, dann also an Vcc.
> Das ist unnötig bzw. kontraproduktiv: Die Pins haben einen internen > Pullup. Wenn schon, dann also an Vcc. Hat leider auch nicht geholfen.
void lcd_init(void) { // ben�tigte PortPins auf Ausgang schalten LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN); // Initialisierungsroutine 4Bit-Modus 0x3, muss 3mal hintereinander gesendet werden _delay_ms(15); Geh da mal mit dem Delay höher auf 50 oder mehr. Obwohl ich bei dem Aufbau eher auf Hardwarefehler tippe.
Das mit der Pause hat holger schon erwähnt, davon abgesehen sieht die init gut aus. Der SPLC ist etwas zickig, das war der einzige Controller der mit meiner Standardsoftware nicht ohne weiteres laufen wollte (von getesteten >20 LCDs). Hier gibts z.B. einen Thread dazu: Beitrag "LCD --> klappt nur bei DB7 anfassen"
Hallo Leute, danke für Eure so zahlreichen Antworten. Es scheint aber am Display zu liegen, da ein Baugleiches, was ein Kollege besorgt hat, funktioniert. Werde das Display umtauschen. MfG Michael
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.