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