LCD Ansteuerung 4Bit funktioniert nicht!

Gast #782691
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...
Angehängte Dateien:
Gast
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
Gast
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 ->
Angehängte Dateien:
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!
Gast
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.
Gast
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.
Gast
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...
Gast
Also habe ein neues Display genommen und eine neue verdrahtung gemacht! 
Es funktioniert immer noch nicht! An was könnte es sonst noch liegen?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.