Reeper
23.02.2007, 17:02
Hallo,
ich habe ein kleines, jedoch für mich wichtiges Verständnisproblem.
Laut Datenblatt eines Atmega's 32 wird für den Timer1 bei CTC diese Formel für die gewünschte Frequenz berechnet:
Quarzfrequenz / (2*Prescaler*(1+OCR1A))
Dies ist soweit logisch, man kann diesen Wert von OCR1A ja in dezi oder in hex schreiben.
Mein Problem ist dieser Ausdruck:
OCR1A = (unsigned short) ((unsigned long) F_CPU / IRQS_PER_SECOND-1);
Wenn man nun Quarzfrequenz durch die IRQ's/s berechnet, dann erhält man einen komplett anderen Wert.
Beispiel:
https://www.roboternetz.de/wissen/index.php/Hallo_Welt_für_AVR_(LED_blinken)
Quarzfrequenz: 1MHz
IRQ's/s: 2000
gewünschte Frequenz: 0,5Hz
Laut der o.g. mir nicht verständlichen Ausdruck erhält man für OCR1A=500.
Wenn man nun die Formel aus dem Datenblatt mit einem Prescaler von 1 anwendet, dies: OCR1A=999999 bzw. 0xF423F.
Könnt ihr mir bitte diesen Ausdruck erklären 8-[
Gruß
Stefan
ich habe ein kleines, jedoch für mich wichtiges Verständnisproblem.
Laut Datenblatt eines Atmega's 32 wird für den Timer1 bei CTC diese Formel für die gewünschte Frequenz berechnet:
Quarzfrequenz / (2*Prescaler*(1+OCR1A))
Dies ist soweit logisch, man kann diesen Wert von OCR1A ja in dezi oder in hex schreiben.
Mein Problem ist dieser Ausdruck:
OCR1A = (unsigned short) ((unsigned long) F_CPU / IRQS_PER_SECOND-1);
Wenn man nun Quarzfrequenz durch die IRQ's/s berechnet, dann erhält man einen komplett anderen Wert.
Beispiel:
https://www.roboternetz.de/wissen/index.php/Hallo_Welt_für_AVR_(LED_blinken)
Quarzfrequenz: 1MHz
IRQ's/s: 2000
gewünschte Frequenz: 0,5Hz
Laut der o.g. mir nicht verständlichen Ausdruck erhält man für OCR1A=500.
Wenn man nun die Formel aus dem Datenblatt mit einem Prescaler von 1 anwendet, dies: OCR1A=999999 bzw. 0xF423F.
Könnt ihr mir bitte diesen Ausdruck erklären 8-[
Gruß
Stefan