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.
Die C-Freaks benutzen die LCD-Routinen von Peter Fleury. ...
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
> C ist überhaupt nicht mein Ding,
Dafür ist deine Analyse aber erstklassig.
Respekt.
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.
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.