Forum: Mikrocontroller und Digitale Elektronik AVR Taktfrequenz herausfinden 8515


von würfelork (Gast)


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

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

von würfelork (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von würfelork (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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.

von würfelork (Gast)


Lesenswert?

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)

von Klaus (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

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.