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