das ist hier mein erster Beitrag und hoffe, dass Ihr mir dabei helfen könnt.
Ich versuche die Timer in Atmel320p zu verstehen. Ich habe ein Code geschrieben welche am pin D12 an Arduino nano ein Signal generiert. Das overflow Interrupt von Timer0 wird abgefangen und pin D12 getoggelt. Wie erwartet, ohne prescaling und TIMSK0 |= (1<<TOIE0) kriege ich am pin ein Signal mit f = 16MHz/256/2 = 31,2 kHz.
Ich habe spielerisch den Register mit TIMSK0 |= (1<<TOIE0) | (1 << OCIE0A) initialisiert. Jetzt bekomme ich ein Frequenz von 25 kHz. Warum sinkt die Frequenz wenn ich das Compare A Interrupt dazu schalte?
Wenn du den Interrupt aktivierst solltest du auch eine ISR erstellen. Sonst kann es sein dass der Controller einfach ins Nirvana springt weil in dem Interruptvektor eine 0 steht
Serenifly:
Wenn du den Interrupt aktivierst solltest du auch eine ISR erstellen. Sonst kann es sein dass der Controller einfach ins Nirvana springt weil in dem Interruptvektor eine 0 steht
Ok, vielen Dank erstmal.. Ich habe jetzt das CTC Mode. Ich habe OCR0A = 1 mit der Gedanke, dass
f = 16 MHz / (2*(1 +1 )) = 4MHz .. Was ich bekomme ist f = 205KHz. Wo ist mein Denkfehler?
mit Interrupt schaffst du keine 4MHz. Du musst einen Pin am Timerausgang direkt toggeln. Die ISR selbst benötigt auch paar Takte zur Abarbeitung bis die Zeile toggeln abgearbeitet wird.
Etwas kann man noch rausholen per PIN Register statt PORT.
PINB = (1 << 4)
Da ist der ATMega zu langsam, dass schaffst Du nicht per Interrupt. Wenn Du so hohe Frequenzen willst, musst Du die HW den Pin toggeln lassen (Pin OC0A)