Forum: Compiler & IDEs avr-libc tutorial


von Tom (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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).

von Tom (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.