mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Initialisierung für 4-Bit Modus eines HD44780 LCDs


Autor: Joachim Rodler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Problem bei der Initialisierung des HD44780 kompatiblen 
LCDs.

Ich wollte die Assembler Routine

http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

als C-Code schreiben. Allerdings funktiniert das bei mir nicht.

Habe im angang mal meinen Code angehängt.

Beim rumsurven habe ich entdeckt, dass es einige .h Files gibt, die mir 
diesen Vorgang abnehmen. Könnte mir da bitte jemand welche empfehlen.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die C-Freaks benutzen die LCD-Routinen von Peter Fleury.

...

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vorweg: C ist überhaupt nicht mein Ding, Assembler ja...

Trotzdem schau ich oft in solche C-Fragen rein, kann ja sein, ich nutze 
doch mal C... ;)

void toggle_E()
{
  PORTB=(1<<5);lcd_delay(500);       // E=1
  PORTB=(0<<5);lcd_delay(500);        // E=0
}

Wenn ich C wenigstens richtig lesen kann, setzt die erste Zeile
PORTB auf 0b00100000

Die zweite Zeile schiebt sinnlos eine 0 durch die Gegend (schon oft 
genug diskutiert), setzt also letztlich
PORTB auf 0b00000000

void lcd_init()
{
  DDRB=0xFF;                      Port B alles auf Ausgang
  lcd_delay(1000);                und warten (worauf eigentlich?)
  PORTB=(0<<4);                   PORTB auf 0b00000000 (????)
  lcd_delay(500);                 warten (worauf?)
  PORTB=0b00000011;toggle_E();    PORTB auf 0b00000011, dann PORTB auf 
0b00100000, nur nutzen jetzt obiges setzen auf 0b00000011 nichts mehr...
  PORTB=0b00000000;toggle_E();
  toggle_E();
  toggle_E();
  PORTB=0b00000010;toggle_E();
  PORTB=0b00000000;toggle_E();

  lcd_cls();
}

Da Du ja auch nicht verraten hast, was am Port B wo dranhängt...

So zumindest wird das meiner Meinung nach nichts.

Versuche zu verstehen, was der ASM-Code mit dem Display eigentlich 
macht, Datenblatt des HD44780 liegt im Netz.

Gruß aus Berlin
Michael

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> C ist überhaupt nicht mein Ding,

Dafür ist deine Analyse aber erstklassig.
Respekt.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt näher auf den Code einzugehen, wie ein Display vom Ablauf her 
initialisiert werden soll, sollte dir zumindestens geläufig sein. 
Fremden Code einfach übernehmen oder von ASM -> C zu übersetzen macht 
nie wirklich Sinn.

> lcd_delay(1000);                und warten (worauf eigentlich?)

Na ja, nachdem Einschalten 15 mSec. warten vermute ich mal, denn das ist 
der erste Schritt. Das läßt sich an deinem Delay aber nicht erkennen.

Dann z.B. 3x38H (entry mode increment + shift), wait 4,1 mSec.
Dann Clear Display 0x01, wait 4,1 mSec.

RS und ENABLE BIT noch beachten und die Initialisierung sollte 
abgeschlossen sein.

Nun kannst du Zeichen Ausgeben.

Mach dir also einen Ablaufplan und kommentier deinen Code mal 
entsprechend. Dann ists leichter zu helfen.

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.