mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten delay LCD ATMEGA64


Autor: Philipp Putzer (putzer_philipp)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.