Hallo an alle, kurz gesagt, ich habe folgendes Problem: das LCD Display zeigt nur die letzten 8 Stellen an "block" an, egal was ich mache... und bei der Fehlersuche im Quellcode steh ich aufm Schlauch. Ich habe die Codes des Tutorials genommen und angepasst, aber es klappt net so richtig... im Anhang mal der Schaltplan (D0 - D3 ist NICHT angeschlossen) und der Quellcode... Vielleicht kann mir einer von euch einen kleinen Denkanstoß geben?! Vielen Dank!
Der Code funktioniert so nicht. Der COde ist nicht dafür ausgelegt, dass die Steuerleitungen auf einem anderen Port liegen ans die Datenleitung. Das muss dir doch selber auffallen, dass du in der Konfiguration nirgends PORTC bzw. DDRC reinschreiben musstest. Man könnte den Code natürlich umschreiben und für die Steuerleitungen einen anderen PORT (samt Makro) einführen. Aber für dich dürfte es wohl am einfachsten sein, wenn du dir die LCD Routinen vom P.Fleury holst. DOrt kannst du für jede einzelne Leitung Port und Portpin einstellen.
:
Bearbeitet durch User
Hallo Karl Heinz, Das habe ich auch schon probiert, ich vergass zu erwähnen das es ein splc780d treiber ist... ich habe das mit der fleury lib probiert das klappt leider auch nicht...
Arne Pf schrieb: > Hallo Karl Heinz, > > Das habe ich auch schon probiert, ich vergass zu erwähnen das es ein > splc780d treiber ist... Soweit ich das bei einem kurzen Durchscrollen des Datenblattes gesehen habe, ist das ein HD44780 kompatibler IC. Sollte also keine Probleme machen > ich habe das mit der fleury lib probiert das > klappt leider auch nicht... Hast du die auch RICHTIG konfiguriert? Du hast deine Datenleitungen an einem anderen Port als die Control-Leitungen! Das muss in der Kondifguration auch berücksichtigt werden!. Wenn in deiner lcd.h nirgends das Wort 'PORTC' auftaucht, dann ist auch die Fleury Lib nicht richtig konfiguriert. Es reicht eben nicht, nur hier
1 | #define LCD_PORT PORTA /**< port for the LCD lines */ |
den PORTD einzutragen. Denn damit würden die Steuerleitungen
1 | ....
|
2 | #define LCD_RS_PORT LCD_PORT /**< port for RS line */ |
3 | #define LCD_RS_PIN 4 /**< pin for RS line */ |
4 | #define LCD_RW_PORT LCD_PORT /**< port for RW line */ |
5 | #define LCD_RW_PIN 5 /**< pin for RW line */ |
6 | #define LCD_E_PORT LCD_PORT /**< port for Enable line */ |
7 | #define LCD_E_PIN 6 /**< pin for Enable line */ |
8 | ....
|
bei unveränderter Einstellung ja auch auf den PORTD gelegt werden. Die sind aber am PORTC. Also musst du das auch eintragen
1 | ....
|
2 | #define LCD_RS_PORT PORTC /**< port for RS line */ |
3 | #define LCD_RS_PIN 0 /**< pin for RS line */ |
4 | #define LCD_RW_PORT PORTC /**< port for RW line */ |
5 | #define LCD_RW_PIN 1 /**< pin for RW line */ |
6 | #define LCD_E_PORT PORTC /**< port for Enable line */ |
7 | #define LCD_E_PIN 2 /**< pin for Enable line */ |
8 | ....
|
dass diese Leitungen am PORTC sind. Hast du das gemacht? (Und ja, die Fleury Lib kann das korrekt behandeln) Ein anderes mögliches Problem ist natürlich, dass all diese Libs auf den 4 Bit Modus ausgelegt sind. Daher gehen sie ja auch davon aus, dass alle Leitungen an einem Port liegen. IN deinem AUfbau liegen aber alle 8 Datenleitungen an einem µC Port. Je nachdem, welchen Zustand diese Leitungen bei der Initialisierung haben, könnte ich mir vorstellen, dass sie die Initialisierung beeinflussen. Ist das LCD erst mal in den 4 Bit Modus geschaltet, gibt es kein Problem mehr. Aber erst mal muss man in den 4 Bit Modus kommen.
:
Bearbeitet durch User
ok, es klappt jetzt, nach kleiner Änderung:
1 | /* now configure for 4bit mode */
|
2 | //LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN); // LCD_FUNCTION_4BIT_1LINE>>4
|
3 | lcd_e_toggle(); |
4 | delay(64); /* some displays need this additional delay */ |
//LCD_DATA0_PORT &= ~_BV(LCD_DATA0_PIN); <-- Ohne diesen Befehl klappt das mit dem Initialisieren. Danke!!! Anleitung lesen hilft... aber jetzt zeigt es mit nur ??? und komische Zeichen auf allen stellen an, anstatt nem 'a'
1 | lcd_gotoxy(0,0); |
2 | lcd_home(); |
3 | lcd_putc('a'); |
So, die Initialisierung geht, das Display zeigt auch Zeichen an, aber nur die ersten 8! Der Rest fehlt... Hat einer ne Idee woran das noch liegen kann?! Fehlerbehebung wegen der Zeichen ist folgende: in der lcd.c bei LCD_INIT ganz unten folgende Schritte einfügen:
1 | lcd_command(0b00100000); |
2 | lcd_command(0b00001000); |
3 | lcd_command(0b00000001); |
Damit wird das display laut treiber anleitung initialisiert.
Arne Pfäffle schrieb: > So, > > die Initialisierung geht, das Display zeigt auch Zeichen an, aber nur > die ersten 8! Der Rest fehlt... > > Hat einer ne Idee woran das noch liegen kann?! Du kannst doch nicht einfach die Umschaltung in den 4 Bit Modus aus der Initialisierung rausnehmen und denken das wär schon alles gewesen. Wenn du nicht in den 4 Bit Modus schaltest, dann musst du logischerweise auch die Ausgabefunktionen auf unterster Ebene umschreiben. Denn die gehen noch immer davon aus, dass das LCD im 4 Bit Modus ist und daher pro auszugebendem Byte 2 Übertragungen notwendig sind. Dein LCD ist aber nicht im 4 Bit Modus, ergo gestaltet sich die Ausgabe anders.
Das display ist im 4-bit modus, die ausgabe einzelner chars geht ohne Probleme nur werden strings bis max 8 zeichen ausgegeben, der rest wird beschnitten... das ist mein Problem...
Hallo Arne, das ist auch richtig so, da das LCD die 1x16 Zeichen in 2x 8 Zeichen verwaltet. Siehe: http://docs-europe.electrocomponents.com/webdocs/0f25/0900766b80f25dfc.pdf rechts unten DISPLAY CHARACTER ADDRESS CODE. Dann musst du halt die Ausgaberoutine umschreiben, so dass ein Zeichenzähler mit läuft und bei erreichen von Zeichen 8 die DDRAM Adresse 0x40 vorher schreibt.
:
Bearbeitet durch User
Ahhh alles klar! Des probier ich dann morgen mal aus, vielen Dank für den Tipp!! Gruß Arne
Hallo Uwe, daas mit dem 2 x 8 Zeichen war das Problem! Display geht jetzt danke! Gruß Arne
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.