Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten delay LCD ATMEGA64


von Philipp P. (putzer_philipp)


Lesenswert?

Hi!

Ich hab schon vor einiger Zeit ein naja ziemlich schräges Verhalten bei 
meinen µC (AVR ATmega64) beobachtet.
Also: Ich habe ein Programm ca 20kB, haufen Texte für LCD im Flash 
(werden auch von dort gelesen/ans LCD geschrieben). Nun hab ich das 
ganze auf dem µC testen gewollt, dort kann ich direkt zuschauen wie sich 
die Zeilen aufbauen, also nicht das wirklich Wahre.
Im Makefile habe ich FCPU auf 16MHz gesetzt, im Programm selbst nirgends 
anders umdefiniert oder sonstwas. Das Seltsame daran ist nun, dass wenn 
ich im Makefile den Takt auf 1MHz setze, das LCD tadellos und schnell 
läuft. (Fast bei der Init happerts etwas). Hab den Takt an den Clock 
Pins gemessen, sind 16MHz, Fuse-Bits stimmen auch.

Kann mir jemand so ein Verhalten erkären? Daran, dass ich die Zeichen 
vom Flash lese kanns wohl nicht liegen? Das würde sich doch nicht mit 
dem Ändern der FCPU im Makefile ergeben?

Einen Teil der LCD-Routine blicke ich nicht ganz:
#define delay(us)  _delay_loop_2 (((F_CPU/4000)*us)/1000)  // wartet µs

Der Fehler stört mich eigetlich schon lange, aber jetzt wird das Ganze 
langsam fertig, jetzt muss es schon richtig gehen!

Vielen Dank und schöne Grüße
Philipp

von Oliver (Gast)


Lesenswert?

Das setzten von F_CPU im Programm oder makefile hat keinerlei Einfluß 
darauf, mit welchem Takt der Prozessor wirklich läuft. Das dient nur 
dazu, dem Programm mitzuteilen, wie schnell der Prozessortakt 
eingestellt wurde.

Den Prozessortakt ändert man über die Fuse-Einstellungen. Wenn du die 
nicht entsprechend einstellst hast, läuft der Prozessor immer nur mit 
der default-Einstellung von 1MHz am internen Oszillator, egal, ob da ein 
externer Quarz dranhängt, oder nicht.

Da aber alle delay-Konstanten im Programm über F_CPU passsend zu 16 MHz 
Takt berechnet wurden, sind jetzt alle delays um den Faktor 16 zu lang. 
Setzt du F_CPU auf 1MHz, dann stimmt alles, und es funzt.

google, Datenblatt, und Forumssuche zum Thema Fuses und avr helfen dir 
weiter.

Oliver

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.