mikrocontroller.net

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


Autor: Chrislight (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...

Autor: Alexey (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chrislight (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ->

Autor: michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da fehlt noch ne r/w leitung !

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Chrislight (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MSBT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chrislight (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...


Verwende WinAVR-20071221

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Chrislight (Gast)
Datum:

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

Autor: Chrislight (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rainer I. (raih)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.