Forum: Mikrocontroller und Digitale Elektronik LCD Ansteuerung 4Bit funktioniert nicht!


von Chrislight (Gast)


Angehängte Dateien:

Lesenswert?

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...

von Alexey (Gast)


Lesenswert?

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

von Chrislight (Gast)


Angehängte Dateien:

Lesenswert?

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 ->

von michael (Gast)


Lesenswert?

da fehlt noch ne r/w leitung !

von Niels H. (monarch35)


Lesenswert?

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!

von Chrislight (Gast)


Lesenswert?

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!

von Niels H. (monarch35)


Lesenswert?

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.

von MSBT (Gast)


Lesenswert?

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.

von Chrislight (Gast)


Lesenswert?

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

von Niels H. (monarch35)


Lesenswert?

"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...

von Chrislight (Gast)


Lesenswert?

Okey werde die Verdrahtung nochmals prüfen könnte wirklich an der 
liegen... Sage dann mal bescheid wenns soweit ist...

von Chrislight (Gast)


Lesenswert?

Also habe ein neues Display genommen und eine neue verdrahtung gemacht! 
Es funktioniert immer noch nicht! An was könnte es sonst noch liegen?

von Rainer I. (raih)


Lesenswert?

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
Noch kein Account? Hier anmelden.