Funktionierendes Script, um Timer-Register Nr. 2 am Atmel AVR 328P zu schalten. Besonderheiten: im CTC-Modus bleiben die Pins 3 und 11 passiv, es müssen aktiv die Timer-Interrupts gesetzt werden. Im 011-Fast-PWM werden automatisch die Pins 3 und 11 angesteuert. Achtung: die ‚tone()‘-Funktion läuft nicht mehr bei Nutzung de Timer2-Registers.
<span style="color: #00979c;">void</span> <span style="color: #5e6d03;">setup</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span> <span style="color: #000000;">{</span> <span style="color: #434f54;">//Disable Interrupts, damit man die Register setzen kann.</span> <span style="color: #000000;">cli</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">// BIT Nr. 1 2 3 4 5 6 7 8</span> <span style="color: #434f54;">// TCCR2A = [ COM2A1 | COM2A0 | COM2B1 | COM2B0 | -- | -- | WGM21 | WGM20 ]</span> <span style="color: #434f54;">// TCCR2B = [ FOC2A | FOC2B | -- | -- | WGM22 | CS22 | CS21 | CS20 ]</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">//Register 2A und 2B löschen.</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">0</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2B</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">0</span><span style="color: #000000;">;</span> <span style="color: #434f54;">//Counter auf 0 zurücksetzen</span> <span style="color: #000000;">TCNT2</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">0</span><span style="color: #000000;">;</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">//Compare Match Output, Funktionsmodus setzen</span> <span style="color: #434f54;">// 00: OC2A aus | 10: NichtInvertiert | 11: Invertiert</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">COM2A1</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">0</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">COM2A0</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// 00: OC2B aus | 10: NichtInvertiert | 11: Invertiert</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">COM2B1</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">0</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">COM2B0</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">//WGM: Waveform Generation Bits</span> <span style="color: #434f54;">//100: PWM Phasenkorrigiert bei 255 | 010: CTC Clear Timer on Compare !!!!</span> <span style="color: #434f54;">//101: PWM Phasenkorrigiert bei OCR0A | 011: Fast-PWM bei OCR2A und OCR2B!!!!</span> <span style="color: #000000;">TCCR2B</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">0</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">WGM22</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">WGM21</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2A</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">0</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">WGM20</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Prescaler Values, Basis ist 16 MHz; 000: "Disabled" Timer ist ausgeschaltet</span> <span style="color: #434f54;">// 001: /1 | 010: /8 | 011: /32 | 100: /64 DEFAULT | 101: /128 | 110: /256 | 111: /1024</span> <span style="color: #000000;">TCCR2B</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">CS22</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2B</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">0</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">CS21</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">TCCR2B</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">CS20</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">//Duty Cyles für die Pins: Output Compare Register</span> <span style="color: #000000;">OCR2A</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">255</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Pin 11 für 011-Fast-PWM-Modus und beliebigem Pin bei 010-CTC-Modus</span> <span style="color: #000000;">OCR2B</span> <span style="color: #434f54;">=</span> <span style="color: #000000;">1</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Pin 3</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">// Nur relevant bei CTC-Modus</span> <span style="color: #000000;">TIMSK2</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">OCIE2A</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Für Interrupt-Einschalten für OCR2A bei CTC-Modus an beliebigem Pin.</span> <span style="color: #000000;">TIMSK2</span> <span style="color: #434f54;">|=</span> <span style="color: #000000;">(</span><span style="color: #000000;">1</span> <span style="color: #434f54;"><<</span> <span style="color: #000000;">OCIE2B</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">// Für Interrupt-Einschalten für OCR2A bei CTC-Modus an beliebigem Pin.</span> <span style="color: #434f54;">//Enable interrupts</span> <span style="color: #000000;">sei</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">/////////////////////////////////////////////////</span> <span style="color: #434f54;">//Für Fast-PWM-Modus 011</span> <span style="color: #d35400;">pinMode</span><span style="color: #000000;">(</span><span style="color: #000000;">3</span><span style="color: #434f54;">,</span> <span style="color: #00979c;">OUTPUT</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #d35400;">pinMode</span><span style="color: #000000;">(</span><span style="color: #000000;">11</span><span style="color: #434f54;">,</span> <span style="color: #00979c;">OUTPUT</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #434f54;">//Für CTC-Modus an beliebigem Pin, hier 12:</span> <span style="color: #d35400;">pinMode</span><span style="color: #000000;">(</span><span style="color: #000000;">12</span><span style="color: #434f54;">,</span> <span style="color: #00979c;">OUTPUT</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #d35400;">pinMode</span><span style="color: #000000;">(</span><span style="color: #000000;">13</span><span style="color: #434f54;">,</span> <span style="color: #00979c;">OUTPUT</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">}</span> <span style="color: #00979c;">void</span> <span style="color: #5e6d03;">loop</span><span style="color: #000000;">(</span><span style="color: #000000;">)</span> <span style="color: #000000;">{</span> <span style="color: #000000;">}</span> <span style="color: #000000;">ISR</span><span style="color: #000000;">(</span><span style="color: #000000;">TIMER2_COMPA_vect</span><span style="color: #000000;">)</span> <span style="color: #000000;">{</span> <span style="color: #d35400;">digitalWrite</span><span style="color: #000000;">(</span><span style="color: #000000;">12</span><span style="color: #434f54;">,</span><span style="color: #434f54;">!</span><span style="color: #d35400;">digitalRead</span><span style="color: #000000;">(</span><span style="color: #000000;">12</span><span style="color: #000000;">)</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">}</span> <span style="color: #434f54;">///////////////////////////////////</span> <span style="color: #000000;">ISR</span><span style="color: #000000;">(</span><span style="color: #000000;">TIMER2_COMPB_vect</span><span style="color: #000000;">)</span> <span style="color: #000000;">{</span> <span style="color: #d35400;">digitalWrite</span><span style="color: #000000;">(</span><span style="color: #000000;">13</span><span style="color: #434f54;">,</span><span style="color: #434f54;">!</span><span style="color: #d35400;">digitalRead</span><span style="color: #000000;">(</span><span style="color: #000000;">13</span><span style="color: #000000;">)</span><span style="color: #000000;">)</span><span style="color: #000000;">;</span> <span style="color: #000000;">}</span>