Markus B. wrote:
> Die Interrupts hatte ich mit sei() freigegeben, aber nicht hier in den
> Code gepackt. Werd ich hier jedoch direkt nachholen...
>
> Den Rest hab ich mal auf die Schnelle umgestellt. Müßte dann so aussehen
> denk ich mal:
>
>
1 | > SIGNAL (SIG_OUTPUT_COMPARE1A) {
|
2 | > {
|
3 | > OCR1A = 1000000 / 256 - 1;
|
4 | >
|
5 | > --- bla bla bla - led blinken etc ---
|
6 | > }
|
7 | >
|
Du hast das Prinzip der Compare-Geschichte offensichtlich nicht
verstanden. Der Wert in OCR1A ändert sich nicht und muss deshalb auch
nicht jedes Mal neu geladen werden (genau das ist ja der Vorteil
gegenüber dem Timer-Nachladen!). Nur wenn die Zeit bis zum nächsten
Compare geändert werden soll, muss in OCR1A ein neuer Wert rein.
Wenn Du nur den der Compare-Einheit zugehörigen Pin (OC1A) umschalten
willst, dann kannst Du Dir das komplette Interrupt-Zeugs übrigens
schenken und den Timer das in Hardware erledigen lassen => Einmal OCR1A
schreiben, Timer starten, den Rest macht er selber...
Abgesehen davon sind SIGNAL und die damit zusammenhängenden Vektornamen
mit SIG_XXX veraltet und sollten nicht mehr verwendet werden. Schau
bitte im AVR-GCC-Tutorial nach, wie es richtig geht.