Hallo Zusammen... Ich versuche nun schon seit mehreren Tagen ein 4x20Zeichen Charakterdisplay anzusteuern und schaffe es einfachnicht! Kann mir jemand helfen? Ich verwende den PORTC des STK500 /STK501 Boards von Atmel! Interner Oszillator von 1Mhz ATMega 128 Habe den Prozessor erst in Betrieb genommen kann es sein, dass ich noch irgendwelche Fusebits setzen muss (M103C habe ich ausgeschaltet) oder liegt es an meiner Software und Überlegungsfehlern? Benutze das AVR Studio 4 mit WINAVR und habe die Frequenz des Mikrocontrollers unter den Projekteinstellungen eingestellt! Das Display zeigt entweder ein weisses P in schwarzem Rahmen an oder bleibt dauerhaft unbeschrieben. Aber so wie ich mein Programm verstehe sollte ich oben Links immer ein Grosses H sehen können! Was habe ich noch falsch eingestellt? Delayfunktionen für 1Mhz zu gross? Funktioniert die Anstuerung wegen des Internen Oszillators nicht? Herzlichen Dank für euere Mitsuche...
Hallo, Poste mal wie du das Display genau angeschlossen hast, dann am besten noch dein Programm damit man dir helfen kann. Den Typ des Display solltest du auch bekannt geben ansonsten ist das ein Rätselraten. :) Alexey
Im Anhang ist der Code welchen ich für das Display geschriben habe: LCD_Functions_AVR.c // C File mit den Funktionen LCD_Functions_AVR.h // H File mit der Portdefinition und Unterprogramm defiitionen AVRLCD.c // Hauptprogramm Ich verwende ein PC2004 Display von Powertec welches mit dem HD44780 Controller arbeitet... Pinbelegung PORTC PIN0 -> LCD D4 PORTC PIN1 -> LCD D5 PORTC PIN2 -> LCD D6 PORTC PIN3 -> LCD D7 PORTC PIN4 -> LCD RS PORTC PIN5 -> LCD E PORTC PIN6 -> LCD Background (wird mittels Transistor geschalten) PORTC PIN7 ->
michael wrote:
> da fehlt noch ne r/w leitung !
..die man aber nicht unbedingt berücksichtigen muss, wenn man nichts von
dem Display auslesen will. In diesem Fall sollte man jedoch dem Display
genügend Zeit zum reagieren lassen. Richtiges Timing ist dann wichtig!
Da ich nur senden will habe ich die R/W Leitung auf GND gehängt wie im Tutorial http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD beschriben. Gibt es keine Tipps was ich beim ersten anbsteuern des Atmel Chips beachten muss bin mir fast sicher ich habe irgendwo ein Fusebit oder sonst eine Einstellung vergessen! Wie ist es mit der Delayfunktion kann ich diese wie im Programm genutzt benützen? oder bekommt er so irgend ein Problem? Wenn ich... while (1) { LCD_CUR_SET(1,1); LCD_4BIT_ENABLE(0x48, 1); } ...benutze was sollte auf dem Display stehen? Meinen Buchstaben? oder sendet er mir das ganze zu schnell und ich kann es nicht lesen? Was zeigen würde weshalb das Display immer unbeschriben bleibt? Besten Dank für eure Anregungen!
Das das Display nicht so reagiert, wie es soll, aber dennoch irgendwas undefiniertest macht, deutet meiner Meinung nach auf einen Verdrahtungsfehler, kurzschluss auf den Datenleitungen oder ein Timingproblem hin. Falsche CMD-Codes sind natürlich auch nicht ausgeschlossen aber eher unwahrscheinlich. Möglich wäre ausserdem, das der Kontroller nach dem Einschalten anfängt signale zu schicken, obwohl das Display noch garnicht bereit ist. Solange du die maximalen Wert der delay-Funktion selbst nicht überschreitest, gibt es eine zu grosse Wartezeit, die die kommunikation Stören könnte. Nur zu kurze Delayzeiten sind tödlich.
void Enable (void) { LCD_PORT = LCD_PORT | 0x20; _delay_us (50); LCD_PORT = LCD_PORT & ~0x20; LCD_PORT = 0x00; } Mach die Letzte Zeile weg (=0x00), oder noch besser ersetze sie duch ein kleines Delay, dann wirds gehn sofern du kein sonstiges Timingproblem hast.
Leider funktioniert das Programm auch mittels... void Enable (void) { LCD_PORT = LCD_PORT | 0x20; _delay_us (50); LCD_PORT = LCD_PORT & ~0x20; _delay_us (50); } nicht! Was nun auf einem Timingfehler hinweist! Aber das komische ist, wenn der Mikrocontroller läuft und ich die Speisung des LCD's trenne und danach neu verbinde erscheinen auf dem LCD die zwei schwarzen balken. Wenn ich nun den Controller resete verschwinden diese und das display bleibt unbeschrieben! Das zeigt, dass die Initialisierung doch funktionieren müsste! oder nicht? Wie finde ich heraus ob mein Displaykontroller wirklich ein HD44780 ist? Im Internet finde ich kein explizites Datenblatt für dieses Display bei welchem ich den Typ entnehmen kann. Wie finde ich heraus, ob ich den maximalen Wert der delay-Funktion überschreite oder nicht? verwende die _delay_ms _delay_us aus der util/delay.h Bibliothek! Habe diesen Text gefunden: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29 Verwende WinAVR-20071221
"Die Wartezeit der Funktion _delay_ms() ist auf 262,14ms/F_CPU (in MHz) begrenzt, d.h. bei 20 MHz kann man nur max. 13,1ms warten." Wasn daran unverständlich? Ausserdem misachtest du die Möglichkeit auf einen Verdrahtungsfehler...
Okey werde die Verdrahtung nochmals prüfen könnte wirklich an der liegen... Sage dann mal bescheid wenns soweit ist...
Also habe ein neues Display genommen und eine neue verdrahtung gemacht! Es funktioniert immer noch nicht! An was könnte es sonst noch liegen?
Da Du das AVR Studio verwendest, kannst Du zur Simulation mal den HAPSIM aufschalten. Damit kannst Du ein LCD simulieren und testen ob zumindest dein Ansteuercode funktioniert. siehe http://www.helmix.at/hapsim
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.