Hallo, bin Anfänger und habe schon ein Teil der Tutorial "BESTANDEN" habe ein LCD angeschlossen und Nach langem rumsuchen, lesen und probieren compeliert mein Code jetzt ohne Probleme, dann an der Controller und hat erst nicht funktioniert! wieder lesen lesen und lesen, dann mit verschiedene Code in Assembler probiert (Ini Routinen usw.) und nichts! dann wollte fast schon alles zum Fenster WEG SCHMEISSEN zum letzt habe ich gestern Abend mit dem C Code (von Turorial) probiert und auf ein Mal hat funktioniert! ABER !! wenn ich die Spannung weg nehme und wieder anschließe kommt nichts erst wenn ich an den Controller (Atmega16) 3 bis 5 mal reset drucke kommt an der LCD die "Hallo Welt“! Heute wollte ich mal wieder testen und nichts, Spannung an reset reset... und auch nichts! jetzt bin ich genau wie am Anfang ohne eine Ahnung was da los ist! Ausgang Situation: Atmega16 Quartz 14745600 LCD HD44780 im 4 bit Modus ich bin für jede Hilfe dankbar!! bevor ich das ganze weg schmeiße möchte mindestens verstehen warum nicht funktioniert!! besten Dank Gruß Martin
Könnte das übiche timing Problem sein.. Hast Du in lcd-routines.h F_CPU richtig angepasst? Bist Du sicher, daß der Prozessor richtig resettet?
Hallo Bernhard, danke für deine Antwort. >> Hast Du in lcd-routines.h F_CPU richtig angepasst? meinst du den Wert von Quartz in .h oder? wenn dann ja ich habe es in der Makefile und in lcd-routines.h angepasst. >> Bist Du sicher, daß der Prozessor richtig resettet? ups... da habe ich keine Ahnung bzw. wie kann ich das testen? wie kann ich hier in Forum 3 Dateien posten oder hängen, so kann ich dann die .h und .c hier posten. Gruß
Martin wrote: >>> Bist Du sicher, daß der Prozessor richtig resettet? > ups... da habe ich keine Ahnung bzw. wie kann ich das testen? Mach als erste Aktion in deinem Programm eine LED an und nach einer kurzen Wartezeit wieder aus. Dieses Signal erkennst du auf jeden Fall: Wenn nach dem Reset die LED kurz aufleuchtet, dann hat der Prozessor resettet. Das könnte unter Umständen sogar dann dein LCD Problem lösen. Der Controller am LCD braucht auch nach einem Reset etwas Zeit um das LCD 'hochzufahren'. Wenn dein Programm mit der Initialisierungs- sequenz ein klein wenig zu früh anfängt, dann ist das LCD noch nicht soweit. Ist aber nur eine Vermutung. Wenn ein LCD nicht spurt, dann ist eine Verlängerung aller Zeiten erst mal keine so schlechte Idee. > wie kann ich hier in Forum 3 Dateien posten oder hängen, so kann ich > dann die .h und .c hier posten. Mach 3 Postings draus.
Hallo, habe mich auch letztens mit so was rum geschlagen. Gucke doch mal hier: http://www.goblack.de/desy/digitalt/aktoren/lcd-hd44780/eigenschaften.html Überprüfe noch mal alle Leitungen am Controller ob er auch richtig angeschlossen ist. Den R/W Pin kannst du auch zum Testen auf GND(0V) legen (Nur Senden möglich dann). Das hier ist meine Init für einen KS0076B aber im 8Bit Modus sollte aber auch für den HD4478 Controller gehen. Quelltext (in C): void Display_Init(void) { _delay_ms(15); //Zeit laut Datenblatt Display_Enable = 0; //Enable Pin auf 0 PORTD = 0x30; //Init 1 //Daten Setzen DB0 bis DB7 bzw. DB3 Display_Enable = 1; //Enable Pin auf 1 (Daten werden Gelesen) _delay_ms(5); //Zeit damit Daten gelesen werden können //------------------------------- Display_Enable = 0; //usw........... PORTD = 0x30; //Init 2 Display_Enable = 1; _delay_ms(5); //------------------------------- Display_Enable = 0; PORTD = 0x30; //Init 3 Display_Enable = 1; _delay_ms(5); //------------------------------- Display_Enable = 0; PORTD = 0x38; // Set Function = 8Bit interface, 2 Line<Hier 4Bit Display,5x7 Dots Display_Enable = 1; _delay_ms(5); //------------------------------- Display_Enable = 0; PORTD = 0x0F; // Display On = On,Curser On, Blinking on Display_Enable = 1; _delay_ms(5); //------------------------------- Display_Enable = 0; PORTD = 0x01; // Display Clear Display_Enable = 1; _delay_ms(5); //------------------------------- Display_Enable = 0; PORTD = 0x06; // Entry Mode Set = Increase, not shifted Display_Enable = 1; _delay_ms(5); Display_Enable = 0; }//ENDE der Init Wenn alles geklappt hat Solltest du einen Blinkenden Cursor sehen. Gruß Dominik
Hallo, danke für die Antworte, so fühlt sich man nicht allein mit dem ganzem Kram :-) oder? @ Karl heinz >> Mach als erste Aktion in deinem Programm eine LED an und nach einer >> kurzen Wartezeit wieder aus. alles klar, am andere Port oder? @ Dominik >> Überprüfe noch mal alle Leitungen am Controller ob er auch richtig >> angeschlossen ist. habe ich etwa 1000 mal gemacht und sollte iO sein da nach dem Kompilierung und übertragen des C-Codes auf ein Mal war mein Text am LCD ohne ein Hardware eingrifft. - Quelltext (in C): - void Display_Init(void) - { -_delay_ms(15); //Zeit laut Datenblatt umm... habe von LCD leider kein Datenblatt anbei mein Code bzw. habe von Tutorial übernommen Gruß
Hallo, also jetzt ist wieder Zeit zum testen :-) ich habe gerade der Zeit der Initialisierung von 15 auf 100ms erhöht also >> _delay_ms(100); und sieht besser aus wenn die Spannung da ist dan ist mein Text da! @Karl heinz >> Mach als erste Aktion in deinem Programm eine LED an und nach einer >> kurzen Wartezeit wieder aus. habe ich folgendes gemacht: int main(void) { PORTB |= (1<<PB1); lcd_init(); lcd_data('T'); lcd_data('e'); lcd_data('s'); lcd_data('t'); set_cursor(0,2); lcd_string("Hola Mundo!"); while(1) { } return 0; } Pin 1 leuchtet, wenn ich reset drucke dann geht er aus und wieder an, also ist der reset von Controller in Ordnung oder? Gruß Martin
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.