Hallo Ich bin gerade dabei, aus dem avr-libc Tutorial das Beispiel stdiodemo durchzuprobieren. Allerdings versuche ich, das Ganze auf einem Mega8 zum Laufen zu bringen, da ich keinen Mega16 zur Hand habe. Dazu also das Makefile angepasst, das LCD an Port B anstatt A angeschlossen und den #define für den Port geändert. Leider scheint bei der LCD-Initialisierung etwas schief zu gehen: Kommentiere ich lcd_init() aus, funktioniert das Programm (der UART Teil), mit der Funktion drin geht nix. Ich konnte sogar so weit eingrenzen, dass ein Zugriff auf DDRB (zum Umschalten der Portrichtung) anscheinend das Programm zum Absturz bringt (leider nicht immer konsequent reproduzierbar). Zugriffe auf DDRC und DDRD sind kein Problem. Ich bin gerade ziemlich ratlos. Hat jemand ne Idee dazu? Tom
Habe es jetzt selbst mal ausprobieren können. Gehangen hat bei mir nichts, trotzdem ging die LCD-Ausgabe erst einmal nicht. Da ich das Ganze aber auf einem STK500 gestöpselt habe, hab' ich mir das mit dem Pinout dann noch einmal genau angesehen. PB6 und PB7 beim ATmega8 waren ursprünglich (d.h. beim AT90S2333/4333) keine GPIO-Pins, sondern ausschließlich Taktpins. Damit sind diese Pins der STK500-Fassung SCKT3200A2 nicht an PB6/PB7, sondern an XT1/XT2 geroutet. Wenn ich mein LCD-Display entsprechend umstöpsele und den XTAL-Jumper des STK500 ziehe (damit der XT1-Pin auch frei ist), funktioniert das Demo auch mit einem ATmega8 ohne weitere Änderungen als den von dir genannten (also HD44780_PORT in defines.h und MCU_TARGET im Makefile).
Hallo Ich hab das Ganze jetzt auch am Laufen, nach einiger Sucherei hab ich herausgefunden, dass das Programm bei der Abfrage des BUSY Flags stehen bleibt. Mit einer etwas konservativeren Einstellung des LCD Timings gehts dann auch relativ zuverlässig, aber ab und zu geths auch wenn ich die originale Datei (und Timings) nehme. Komisch... Wenn ich schon nen halben Tag suche, möchte ich doch wenigstens wissen, warums jetzt geht ;-) Tom
Ja, würde mich auch interessieren. Ich habe mir zumindest die größte Mühe gegeben, mich an die Timing-Werte des HD44780-Datenblatts zu halten. Andererseits ist das Timing ohnehin nur während der Initialisierung entscheidend, danach wird ja alles via BUSY abgefragt. Du kannst ja mal auf Verdacht die Wartezeiten in der HD44780-Initialisierung vergrößern und dann gucken, welche davon für dein Problem zuständig ist. Kann schon sein, dass der eine oder andere HD44780-Clone sich hier anders verhält. Wenn du was gefunden hast, schicke mir bitte eine Mail oder schreibe einen Bug-Eintrag bei avr-libc, damit wir das dort auch ändern können.
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.