AVR Taktfrequenz herausfinden 8515

Gast #4308032
Hi,
ich wollte eine Uhr mit Hilfe eines LCDs und AVR 8515 16-PU darstellen.
Die Ausgabe klappt.
Nur ist die Uhr zu langsam.
Im Datenblatt steht 16 Mhz für den 8515 16-PU


###So habe ich den Timer eingestellt:

TCCR0 = (1<<WGM01) | (1<<CS00) | (1<<CS01);//CTC Modus, Prescaler 64

OCR0 = 125-1; // Formel S. 86 Datenblatt -> [f(avr)/(f(ocn)*2*presc) -1]

TIMSK |= (1<<OCIE0);  //Compare Interrupt erlauben

###

der brauch immer 4 Sekunden  für eine echte Sekunde...
*habe ich eine Falsche Formel für OCR0?
*habe ich mich im Datenblatt vertan bezgl. 16Mhz vom AVR?
Gast #4308047
Hi

>der brauch immer 4 Sekunden  für eine echte Sekunde...

Diese Einstellungen erzeugen alle 0,5ms einen Interrupt. Wie kommst du 
dann auf 4s?

MfG Spess
Gast #4308051
Oh habe grade eine LED Toggle Funktion mit _delay rasugenommen...
jetzt läufts schneller.
Habe weiterhin #define F_CPU 4000000UL gewählt nur zum testen.
werde es jetzt wieder auf #define F_CPU 16000000UL umstellen
Gast #4308056
Hi

>Habe weiterhin #define F_CPU 4000000UL gewählt nur zum testen.
>werde es jetzt wieder auf #define F_CPU 16000000UL umstellen

Und was soll das? Ein #define F_CPU ändert nichts an der Taktfrequenz 
des Controllers. Das muss über die Fuses passieren.

MfG Spess
Gast #4308057
Habs jetzt im Sekundentakt geschafft.

--> ja alle 4 sekunden wurde die Sekundenzahl auf meinem LCD um 1 
Sekunde erhöht.

Danke für die Hilfe .
Soweit funktioniert das.

0.5  ms?

hmm ich dachte [f(avr)/(f(ocn)*2*presc) -1] = OCR0 = 
[16Mhz/(1000Hz*2*64)-1]
=125-1

also dass bei 1000Hz jede ms ein IR kommt.
Gast #4308061
Es kommt vor allem darauf an, welche Taktquelle Du tatsächlich 
verwendest und mit welcher Frequenz die schwingt.
Das zu wissen, würde Dir erlauben, gezielt vorzugehen, bzw. Abweichungen 
auf ihre Ursache zurückzuführen.
Gast #4308062
spess53 schrieb:
> Und was soll das? Ein #define F_CPU ändert nichts an der Taktfrequenz
> des Controllers. Das muss über die Fuses passieren.

Ja genau. Das ist ja nur für die Software.
Damit der Compiler weiß womit er arbeiten soll oder?

danke für die schnellen antworten. (habe das problem ja bereits gelöst)
Gast #4308068
Es wäre halt schön, falls Du, da Du ja die Allgemeinheit um Hilfe 
bittest, dieser Allgemeinheit auch etwas hinterlässt, was ihr 
weiterhilft. Dazu gehört eine vollständige Beschreibung der Fakten. D.h. 
Quelltext und Schaltplan und Zustand der Fuses.

So, wie es jetzt ist, ist die Lösung nur Dir bekannt und mit den 
vorliegenden Fakten kann niemand sonst etwas anfangen.
Gast #4308076
Hi

>hmm ich dachte [f(avr)/(f(ocn)*2*presc) -1] = OCR0 =
>[16Mhz/(1000Hz*2*64)-1]=125-1

>also dass bei 1000Hz jede ms ein IR kommt.

Nein das würde eine CTC-Frequenz von 1kHz ergeben. Und die erzeugt zwei 
Interrupts pro Periode.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.