Beginner schrieb:
> In den Kommentaren steht doch drinnen, ..."Toggle on Compare match
> OC1A", ...Force Output.....usw...
> verbirgt sich hinter Deinem Code etwas Anderes ?
Das was 'kommentar' geschrieben hat ist für den Compiler verbindlich.
Die Bits werden tatsächlich gesetzt (Sofern man sich nicht im Register
vertan hat).
Dein Kommentar ... ist Schall und Rauch. Du kannst da hinschreiben was
du willst. Deswegen muss das noch lange nicht mit den Bitnamen
übereinstimmen.
Nur so als Beispiel:
Du hast geschrieben
1 | TIMSK = 0b00100000;//bit 6: OCIE1A Timer/Counter1 Output Compare Interrupt Enable
|
Genausogut hättest du auch schreiben können
1 | TIMSK = 0b00100000;//bit 6: OFVIE1 Timer/Counter1 Overflow Interrupt Enable
|
Interessiert keine Sau (und vor allen Dingen nicht den Compiler) dass
der Kommentar falsch ist.
Benutzt du aber eine der beiden Schreibweisen
1 | TCCR1A = _BV(OCIE1A);
|
2 | TCCR1A = ( 1 << OCIE1A );
|
dann kann der Kommentar nicht falsch sein, weil es keinen Kommentar
gibt und auch nicht braucht, der mich darüber aufklärt, dass das Output
Compare Bit des Timers 1 (und zwar vom Kanal A) gesetzt wird. Das steht
nämlich im Code! Das dadurch das Bit 6 auf 1 gesetzt wird, ist nett, mir
aber völlig wurscht. Das ist ein Detail, das ich nicht wissen brauche,
das weiß dafür der Compiler. Was ich wissen will ist, das das OCIE1A
gesetzt wird! Und da das im Code steht, und nicht in einem Kommentar,
kann ich mich auch darauf verlassen, dass das OCIE1A auch wirklich
gesetzt wird. Egal welche konkrete Bitnummer es jetzt im TCCR1A hat.
Nota Bene:
Ist dir aufgefallen, dass ich (absichtlich) bei
1 | TIMSK = 0b00100000;//bit 6: OCIE1A Timer/Counter1 Output Compare
|
das 1 Bit um 1 Stelle nach rechts geschoben habe? Das ist nicht mehr Bit
6 sondern Bit 5. Ich wette es ist dir nicht aufgefallen. Und auch nach
dem 10-ten mal drüberlesen wäre es dir nicht aufgefallen. Selbst wenn du
draufkommst, das deine ISR nicht angesprungen wird, wäre es dir nicht
sofort aufgefallen, denn du hättest dich immer am (falschen) Kommentar
orientiert. Soviel zur Relevanz von derartigen Detail-Kommentaren und
deren Wert bzw. deren Tendenz zu Verschleierung und Verwirrung, wenn es
um Fehlersuche geht.
Wenn du etwas mittels Code ausdrücken kannst, dann tu das auch!
Das spart dir zum einen das Kommentarschreiben und sorgt zudem dafür,
dass dieser nicht geschriebene Kommentar nicht falsch sein kann.
> das erklärt mir aber noch nicht wieso sich beim ändern des
> Compare Wertes die Frequenz des ausgegebenen Signal nicht
> ändert ?
Welchen Timer Modus benutzt du denn?
Wenn OCR1A die Frequenz ändern soll, sollte das der CTC Modus sein. Hast
du den eingestellt?
Und wo ist eigentlich die ISR zum freigegebenen Interrupt?