Gute Abend,
ich möchte ein Software-UART auf einem Attiny programmieren.
Der (einzige) Timer 0 läuft im 10 Bit Fast PWM Modus, Compare Match A
erzeugt ein PWM Signal. Compare Match B soll einen Interrupt auslösen.
In der ISR setze ich das Compare-Register auf einen neuen Wert um die
Bitzeiten zu erzeugen.
1 | //Timer-Init in der Main:
|
2 | TCCR0A = (1<<COM0A1) | (1<<WGM01) | (1<<WGM00);
|
3 | TCCR0B = (1<<WGM02) | (1<<CS01) | (1<<CS00);
|
4 |
|
5 |
|
6 | ISR(TIM0_OVF_vect){
|
7 | OCR0B += 100; //Nächsten Interrupt in 100 Timer-Ticks
|
8 | }
|
Das funktioniert so nicht, der neue Wert in OCR0B wird erst nach dem
nächsten Timer-Überlauf übernommen. Von diesem Puffer habe ich
Datenblatt gelesen, hatte aber angenommen er ist nur für OCR0A aktiv
(COM0A1 Bit gesetzt).
Wie kann man diesen Puffer umgehen?