Hallo,
ich will einen 16Bit Timer nutzen und einen Interrupt ca. alle 4sek 
erzeugen.
Bei 16Mhz des Arduino Uno sollte es bei Timer1 mit einem Prescaler von 
1024 funktionieren...tut es leider bei mir nicht. Ich erhalte alle 33ms 
einen Interrupt wenn ich in das TCCR1B-Register den Wert 5 lade, das 
entspricht CS10 und CS12 gleich 1.
Versuche ich mit:
"TCCR1B |= ((1<<CS12) | (1<<CS10));"
das Register zu laden funktioniert der Timer nicht. Ich habe deshalb mir 
das Register auf die serielle Schnittstelle schreiben lassen und siehe 
da es wird der Wert 7 geladen -> also 111
Ich verstehe nicht wo die Fehler liegen!
Meine Fragen sind:
1.) Wieso kann ich das Register nicht laden wie es in C üblich ist, bzw. 
wie schreibe ich es richtig?
2.) Warum bekomme ich anstatt alle 4sek einen Überlauf-Interrupt alle 
33ms?
PS: Ich nutze die Arduino Software
| 1 | #include <avr/io.h>
 | 
| 2 | #include <avr/interrupt.h>
 | 
| 3 | volatile long Zeit1=0;
 | 
| 4 | 
 | 
| 5 | void setup() {
 | 
| 6 | //TCCR1B |= ((1<<CS12) | (1<<CS10));     // Prescaler 1024
 | 
| 7 | TCCR1B = 5;
 | 
| 8 | TIMSK1=(1<<TOIE1);
 | 
| 9 | interrupts();
 | 
| 10 | Serial.begin(9600);
 | 
| 11 | Serial.println("Start");
 | 
| 12 | Serial.println(TCCR1B);
 | 
| 13 | 
 | 
| 14 | 
 | 
| 15 | 
 | 
| 16 | }
 | 
| 17 | 
 | 
| 18 | void loop() {
 | 
| 19 | 
 | 
| 20 |   // put your main code here, to run repeatedly:
 | 
| 21 | while(1){
 | 
| 22 |   };
 | 
| 23 | 
 | 
| 24 | }
 | 
| 25 | ISR(TIMER1_OVF_vect){
 | 
| 26 |   Zeit1=millis();
 | 
| 27 |   Serial.println(Zeit1); 
 | 
| 28 |   }
 |