Hallo! Ich hatte vor kurzem schon einmal auf der Seite Beitrag "LCD-Display Ansteuern mit ATmega2561 funktioniert nicht" berichtet, dass ich versuche ein LCD-Display anzusteuern. Da dies nicht funktionierte, (auch nachdem ich das Tutorial durchging) hatte ich mir gedacht, dass das Display defekt ist. Somti habe ich dieses Ausgebaut und mit einem Display Namens "CP5 94V-0 KW" ersetzt. Nun funktioniert das Display allerdings immernoch nicht und ich weiß nicht woran es liegen kann. Wenn ich das Poti (das ich zuum Kontrast einstellen eingebaut habe) drehe, ändert sich nur der Kontrast von der ersten und der zweiten Spalte. Beim Vorhergehenden Display (welches nur ein zweireihiges war) änderte sich überhaupt nur die erste Zeile. Wisst ihr woran das liegen könnte? danke Cyberfoxx PS: im Anhang noch meine Header-Datei Ich habe auch gelesen dass die Display-Pins 7-10 mit den Pins 11-14 verbunden weden müssen. Ist das wahr?
Hi! also weiß keine eine Begründung? Wie bereits im anderen Beitrag beschrieben, wird ein ATmega2561 verwendet und die Pins für das Display für den 4-bit Betrieb sind PE4-PE7. Und die Pind R/S und Enable sind auf PG0 und PG2. Dies habe ich alles in der lcd_routines.h umgestellt. Was mich allerdings verwundert ist, wo wird der R/W-Pin (PG1) definiert? oder kann dieser Pin einfach auf low gesetzt werden (0... Write) lg Cyberfoxx
>wo wird der R/W-Pin (PG1) definiert? Nirgends. >oder kann dieser Pin einfach auf low gesetzt werden (0... Write) Bingo!
> oder kann dieser Pin einfach auf low gesetzt werden (0... Write) > lg Cyberfoxx es ist klar dass du nichts siehst weil das display im undef. zustand ist bzw ich denke mal default. mäßig vll sogar auf lesen(also high) gestellt ist du musst ihn explizit auf low ziehen um drauf schreieben zu können stand aber meine ich auch im tut
OK, Danke. Muss ich wohl im tum überlesen haben. Werds gleich mal ausprobieren
Hat leider auch nichts genützt. Ist es wahr dass die Pins 7-10 mit den Pins 11-14 hardwaremäßig verbunden weden müssen?
Hallo, Pin 7 - 10 bleiben frei 11 - 14 sind die Datenleitungen und werden mit dem Atmega verbunden. R/W auf Masse. Gilt aber nur bei einer Standardbelegung des Display.
Habe mit dem Oszi nachgemessen. Die Pins 2(Vdd),4(RS),7-10 und 13 waren bei mir dauerhaft auf High, der Rest auf Low (abgesehen von Pin 3--> Spannung von Poti für Kontrast). Habe nun die Leitung zu den Pins 7-10 abgezwickt, hat aber auch nichts genützt. Sollte sich der Pegel auf den Pins 11-14 und der Pin 4 sich nicht durchgehend wechseln? In meiner main-Schleife steht:
1 | lcd_setcursor( 0, 0 ); |
2 | _delay_ms(18); |
3 | lcd_data('T'); |
Richtigstellung: auf Pin 13 ist ein Puls-Muster zu erkennen (meist 5 Pulse dann Pause). Die Pegel von 7-10 sind immernoch high.
Hallo, wie schon gesagt, Pin 7 - 10 am Display bleiben frei. Du willst ja nur eine 4 Bit - Ansteuerung machen. Überprüfe deine Änderungen in der LCD-Routines.h. Du hast zwar deine vermeintlichen Anpassungen vorgenommen, aber die Kommentare nicht geändert. Ist dadurch unübersichtlich für jemanden der sich ansonsten mit PICs beschäftigt. Ich meine damit mich.
Hi! Die 4 Leitungen sind bereits entfernt. Und anbei die Datei mit den geänderten Kommentaren. Handelt sich nur um die Zeilen
1 | #define LCD_PORT PORTE
|
2 | #define LCD_DDR DDRE
|
3 | |
4 | // 4 Bit LCD Datenbus DB4-DB7, das unterste Bit DB4 kann auf den Portbits 0..4 liegen
|
5 | |
6 | // LCD DB4-DB7 <--> PORTC Bit PE4-PE7
|
7 | #define LCD_DB PE4
|
8 | |
9 | // LCD Steuersignale RS und EN
|
10 | |
11 | // LCD RS <--> PORTC Bit PG0 (RS: 0=Data, 1=Command)
|
12 | #define LCD_RS PG0
|
13 | |
14 | // LCD EN <--> PORTC Bit PG2 (EN: 1-Impuls für Daten)
|
15 | #define LCD_EN PG2
|
So wie der Code jetzt ist, müssen RS und EN mit am gleichen PORT wie die Datenports hängen, also bei Dir PORTE. Sonst müsstest du die PORTx und DDRx Angaben in lcd-routines.c an den entsprechenden Stellen ändern! Gruß, Markus
Danke! Werde diese Anpassungen gleich mals machen. Noch eine Frage für mein Verständniss: Bedeutet das, dass für den µC egal ist ob PA0, PB0, PC0 etc. im Code steht und für ihn das alles 0x00 bedeutet (und PA1, PB1 usw. 0x01)??? --> Px0: 0x00 Px1: 0x01 Px2: 0x02 Px3: 0x04 Px4: 0x08 usw.?
Juhu!!! Danke! an dem ist es gelegen. Nun funktioniert es wie es soll.
Cyberfoxx schrieb > Bedeutet das, dass für den µC egal ist ob PA0, PB0, PC0 etc. im Code > steht und für ihn das alles 0x00 bedeutet (und PA1, PB1 usw. 0x01)??? Jep, für den Compiler ist das nur 'ne Zahl, genauso wie du das schon erkannt hast. Das soll den Code eigentlich übersichtlicher machen, aber impliziert halt möglicherweise wie in Deinem Fall etwas Anderes. PORTE = (1<<PA0) ist technisch das Gleiche wie PORTE = (1<<PE0) da PE0 = PA0 = 0
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.