Hi ! Ich verzweifle langsam an der ansteuerung eines hd44780 kompatiblen displays in c. In ASM war das alles kein problem aber jetzt in c bekomm ichs nicht hin ! hab auch schon gesucht aber leider nichts gefunden. das einzige was der code macht ist, dass auf dem display ein p angezeigt wird (auch wenn lcd_text auskommentiert wird). das p kommt glaub ich aus der zeile: init = 0b00001110; LCD_command(); kann jamand sich vielleicht mal den code anschauen und sagen was ich falsch mache? wär wirklich super nett ! und der code is ja nicht so lang. Vielen Dank !
Wie wäre es mit einer fertigen Routine. Suche in diesem Forum nach "Fleury" Hubert
Wie lautet deine Pinbelegung? Wo befindet sich die Funtkion *lcd_renew()* ? Was bringt es dir in *LCD_init()* später ständig die Variable init zu setzten, obwohl du danach nur die Funktion *LCD_command()* aufrufst, die unabhängig von init ist ?
normal müsst des so aussehen: init = 0b00001110; LCD_command(init); lcd_renew() ist lcd_enable(). (wurde nur zu debug zwecken verwendet.) ich versteh langsam nix mehr! es wird immer nur son p angezeigt egal was ich mach ! ich saß an dem code jetzt sicher schon 20 std und bekomms net hin ! die fertige routine will ich nicht verwenden, weil die zu kompliziert für mich ist und ich wills schliesslich lernen ! MFG Zoomie
Ich verwende eine etwas abgewandelte Routine ohne R/W. LCD_init wird nur einmal aufgerufen um z.b.den 4-Bit Modus zu aktivieren. lcd_renew kenne ich nicht. In der zugehörigen Lib sind alle Funktionen beschrieben. Hubert
Hauptschleife vergessen !!! main() darf niemals beendet werden !!! Du hast ja kein OS wohin Du zurückkehren kannst. Peter
hab jetzt for(;;); eingefügt hat nix verändert....warum denn auch des display behält des ja eh im speicher und dann isses doch egal wenn der mc "abstürtzt". Und interrupts hab ich eh keine drinne. Ich bin voll am verzweifeln.... MfG
Füg mal noch die komplette Anschlußbelegung zu und ersetze die Zahlen durch Pin Namen (z.B. LCD_E usw.). Peter
Hallo! ich hab mal ein schaltplan in zu meinen aufbau gemacht. mich wundert es, dasses mit asm auf anhieb funktioniert hat. In prinzip funktioniert ja die initialisierung, weil das display ca. 1 sec nach dem start ein "p" anzeigt und das zeigt es auch an wenn ich die funktion LCD_Text() nicht aufrufe. das p wird nach dem init = 0b00001110; LCD_command(init); angezeigt. kann es sein, dass mit dem timeing was nicht stimmt ? MfG simon
int init = 0b00000111; Das geht doch mit der aktuellen Version des avr-gcc bzw. WinAVR noch gar nicht!?
Doch, Eric hat meinen Patch stillschweigend ins WinAVR aufgenommen, da es ein frequently requested item ist.
Woran lag es denn jetzt? Nur für den Fall das irgendwann jemand mit einem ähnlichem Problem diesen Thread liest. :-)
keine ahnung ! hab die komplette routine selber geschriben (mit hilfe von der asm datei), und dann gings (und das sogar auf anhieb) ! Und das ohne probleme ! MfG Zoomie
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.