Was steht denn in Deinem Datenblatt zum TCCR1B? Kennst Du überhaupt das Datenblatt - und diese Stelle? Besser mal selber lesen als es sich vorlesen lassen ?.. ist CS02 nicht der 256 prescaler? .. ich meine schon...
Werbung
Was steht denn in Deinem Datenblatt zum TCCR1B? Kennst Du überhaupt das Datenblatt - und diese Stelle? Besser mal selber lesen als es sich vorlesen lassen ?.. ist CS02 nicht der 256 prescaler? .. ich meine schon...
Ciao sagt der JoeamBerg
achso sind CS 10 11 und 12.. ich konnte jetzt aber nicht genau feststellen, welcher welchen wert hat...
- - - Aktualisiert - - -
kann das sein, dass die richtige lösung CS100 lautet??
- - - Aktualisiert - - -
ahne CS 12...?
ja danke :-D
ich habe jetzt noch eine doofe frage aber was soll schon passieren..
also die 1 ms habe ich jetzt aber ich soll ja jede zweite LED 9 ms leuchten lassen.
muss ich dafür einen zweiten timer einfügen oder reicht dass mit diesem invertierenden befehl bei else? ist das programm denn sonst richtig??
grüss dich,
Ich habe noch etwas am quellcode geändert.
Wenn ich das programm laufen lasse, funktioniert es immernoch nicht so wie gewünscht...
warum hast du in dein Interrupt eine Endlosschleife?Code:ISR (TIMER1_OVF_vect) { long timer_1 = 0 ; // Variable "Timer1" deklarieren long timer_2 = 0 ; // Variable "Timer2" deklarieren while (1) { timer_1 ++; // Vorladewert von 0 an inkrementieren PORTB = 0xAA ; // ungerade LED´s werden für 1 ms beleuchtet if (timer_1 = preload_value_1) { TIMSK = (1 << TOIE1); // 1 ms ist vergangen -> Interrupt einschalten } else { timer_2 ++; PORTB=0x55 ; // gerade LED´s werden für 9 ms beleuchtet if (timer_2 = preload_value_2) { TIMSK = (1 << TOTIE1); // 9 ms sind vergangen-> Interrupt einschalten } } } }
Dein Programm ist schneller beendet, als der Timer1 sein Interrupt auslöst.Code:int main (void) { DDRB |=(1<<PB2); // Output 1 DDRB |=(1<<PB3); // Output 2 sei (); }
Und du greifst gar nicht auf deine init_Timer1 Funktion zu. Also läuft dieser erst gar nicht an.
Lesezeichen