Hi, ich habe ein Problem mit meinem 2x8 Zeichen LCD (EA DIPS082-HNLED), laut Datenblatt bestückt mit einem KS0066 Kontroller der HD 44780 kompatibel sein soll. Anschlussbelegung: ATmega8 @4MHz PORTC LCD µC 1-GND 2-+5V 3-Kontrast 4-RS------------->PC4 5-R/W------------>PC5 6-E-------------->PC6 7-D0----->GND 8-D1----->GND 9-D2----->GND 10-D3----->GND 11-D4------------->PC0 12-D5------------->PC1 13-D6------------->PC2 14-D7------------->PC3 Als Anhang hab ich die lcd.c beigefügt. Das Display reagiert kein bisschen, nur in der ersten Reihe sind alle Dots zu sehen. Wer hat Erfahrung mit dem ATmega8, kann es Probleme geben weil PC6 auch gleich Reset (liegt auf High) ist? Wenn ich den PORTB nehme liegt PB6 und PB7 am externen Quarz, kann es auch da zu Komplikationen kommen? Hier mein Programm zum Testen des LCD: #include <avr/io.h> #include <lcd.h> #include <lcd.c> #include <stdint.h> #include <stdlib.h> #include <avr/delay.h> int main(void){ DDRB = 0xFF; //Ausgang DDRC = 0xFF; //Ausgang lcd_init(LCD_DISP_ON_CURSOR_BLINK); lcd_home(); lcd_puts("Test"); PORTB |= (1<<PB0); //Zum test eine LED leuchten lassen while(1); } Die LED leuchtet aber das LCD zeigt nichts an! :-(
Die Schaltungsvariante aus dem Toturial bringt mir auch nicht viel, ist ja so gut wie die selbe. Ich denke irgendwas mit der lcd.h stimmt nicht. Was bedeutet eigentlich 'LCD_LINE_LENGTH'? Die DDRAM Adressen der zwei Zeilen hab ich überprüft und müssten stimmen. (siehe Anhang)
Komisch, als ich eben meine Schaltung wieder in Betrieb nehmen wollte (Seit gestern nichts mehr gemacht), musste ich feststellen dass die LED nicht mehr leuchtet! Ich habe nichts verändert. Daraufhin habe ich das Programm noch etwas verkürtzt: int main(void){ DDRB = 0xFF; //Ausgang DDRC = 0xFF; //Ausgang lcd_init(LCD_DISP_ON_CURSOR_BLINK); //lcd_home(); //lcd_puts("Test"); PORTB |= (1<<PB0); while(1); } Das Resultat war das selbe, die LED leuchtet nicht mehr! Logisch gesehen muss das Programm davor hhängen bleiben! Aber wieso? Hab ich irgendwas übersehen?
So etwas verhextes, das mit der LED war wohl ein Kontakt Problem. Jetzt geht sie wieder an aber das LCD reagiert immer noch nicht! :-((
Wenn du PC6 verwenden willst must du Reset disablen, dann kannst du aber nicht mehr ISP sondern nur mehr High-Voltage programmieren. PB 6 und 7 kannst du verwenden wenn du den internen Oszillator nimmst, dann sind das normale I/O.
Hmm, der interne Oszillator soll doch nicht so genau sein, oder irre ich mich? Irgendwie ist der ATmega8 vom Pinout nicht so toll geplant. Kennst du dich etwas mit LCD's und der Library von Peter Fleury aus?
Juhu ich hab den Fehler gefunden! Es liegt tatsächlich an den Ports und deren doppelte Belegung. Ich habe das Display mal an PortD angeschlossen und die lcd.h auf PORTD umgeschrieben. Damit funktioniert es einwandfrei. So kann ich es nicht belassen, ich muss die Ansteuerung wahrscheinlich auf zwei Ports aufteilen. Aber wie genau muss ich das in der lcd.h eintragen?
Garnicht! Da kannst du die halbe Bibliothek umschreiben oder gleich nen größeren Controller verwenden. Alternativ einen Portexpander verwenden, wird aber noch aufwendiger.
Falsch Alex ! Meine Lib kann sehr wohl auf so konfiguriert werden, dass die LCD Leitungen auf verschiedene Ports aufgeteilt werden. Steht doch in der Beschreibung meiner LCD lib: http://homepage.sunrise.ch/mysunrise/peterfleury/group__pfleury__lcd.html Bitte akutelle Version meiner Lib verwenden, oben angefügtes lcd.h ist veraltet !
Nach der lcd.h ist das kein Problem. Steht über den #define Anweisungen. Jedem Pin den entsprechenden Port zuweisen.
@Peter Sorry, muss wohl mal wieder ein Update durchführen. Benutze wohl aktuell nur ältere Versionen der Library.
Also würde das ganze z.B. so aussehen!? #define LCD_PORT PORTB /**< port for the LCD lines */ #define LCD_DATA0_PORT LCD_PORT /**< port for 4bit data bit 0 */ #define LCD_DATA1_PORT LCD_PORT /**< port for 4bit data bit 1 */ #define LCD_DATA2_PORT LCD_PORT /**< port for 4bit data bit 2 */ #define LCD_DATA3_PORT LCD_PORT /**< port for 4bit data bit 3 */ #define LCD_DATA0_PIN 0 /**< pin for 4bit data bit 0 */ #define LCD_DATA1_PIN 1 /**< pin for 4bit data bit 1 */ #define LCD_DATA2_PIN 2 /**< pin for 4bit data bit 2 */ #define LCD_DATA3_PIN 3 /**< pin for 4bit data bit 3 */ #define LCD_RS_PORT LCD_PORT /**< port for RS line */ #define LCD_RS_PIN 4 /**< pin for RS line */ #define LCD_RW_PORT LCD_PORT /**< port for RW line */ #define LCD_RW_PIN 5 /**< pin for RW line */ #define LCD_E_PORT PORTD /**< port for Enable line */ #define LCD_E_PIN 7 /**< pin for Enable line */
Ich habe eine Problem bei meinem LCD EA DIPS082-HNLED 2x8 Zeichen. Ich möchte gerne die Hintergrundbeleuchtung extern mit einem Poti steuern. Wie muss ich dies machen? Im Datenblatt ist dies beschrieben jedoch weiss ich nicht genau wie. Im Datenblatt LED-Beleuchtung steht von einem Vorwiderstand RLED doch auf der Rückseite des LCD steht nur R1 bis R5 und Rosc. Welchen Widerstand muss ich jetzt auslöten?
Nicole wrote: > Ich habe eine Problem bei meinem LCD EA DIPS082-HNLED 2x8 Zeichen. > Bitte hijacke keinen so alten Thread. Das Thema dieses Originalthreads hat ausser der Display-Bezeichnung mit deinem Problem nicht das Geringste zu tun. > Ich möchte gerne die Hintergrundbeleuchtung extern mit einem Poti > steuern. Wie muss ich dies machen? Im Datenblatt ist dies beschrieben > jedoch weiss ich nicht genau wie. Mit einem Poti. Den Abgreifer des Potis legst du auf + der Displaybeleuchtung. Die anderen beiden Poti Pins kommen nach + und nach - Das ist die Minimalvariante. Nicht besonders sicher, wenn du das Poti an den + Endausschlag stellst, kann es sein, dass Rauchwölkchen aufsteigen. Also zwischen Abgreifer und dem + der Displaybeleuchtung noch einen Widerstand einfügen. o------------+ | --- Poti | | +-----+ <--------| |-----o + Displaybeleuchtung | | +-----+ --- R | o------------+-----------------o - Displaybeleuchtung > Im Datenblatt LED-Beleuchtung steht > von einem Vorwiderstand RLED doch auf der Rückseite des LCD steht nur R1 > bis R5 und Rosc. Welchen Widerstand muss ich jetzt auslöten? Meist muss man gar keinen Widerstand auslöten. Für das Poti nimmst du probehalber mal 200 Ohm (ist im Datenblatt was angegeben, welchen Strom die Beleuchtung maximal verträgt? Wenn ja, dann rechnest du dir darüber den Poti Wert aus). Für den zusätzlichen Widerstand würde ich auch mal mit so um die 100 Ohm beginnen und ev. kleiner gehen, solange bis das Display schön hell, aber nicht zu hell leuchtet. Ich weiss nicht warum Andreas seinen Beitrag zurückgezogen hat. Aber er hat schon recht: Ein per Software dimmbare LCD Hintergrundbeleuchtung hat schon was. Dazu braucht man lediglich eine PWM, einen Transistor und einen Widerstand und natürlich einen freien Pin am Prozessor. Aber dann kann man die Helligkeit per Programm einstellen. Macht man das ganze dann noch interaktiv, mit 2 Tastern die man sowieso für sein Bedienteil braucht, dann sieht das schon richtig gut aus und ist obendrein noch simpler im Gehäusebau.
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.