
Zitat von
ad°FX
Hab ich das Datenblatt richtig verstanden, dass ein Update der OCR2x erst bei Bottom stattfindet? Ich kann demzufolge also in der Main die Compare-Register ändern und muss das nicht über ISR machen?
Richtig, die sind gepuffert.
Zu deinem Problem: Ich finde keinen Fehler im Code, im Simulator (AVR Simulator 2, der andere setzt beim Timer keine Pins) funktioniert er problemlos.
Ach ja, ein Systemtakt von 72kHz ist sehr wenig ...
Testcode:
PHP-Code:
#include <avr/io.h>
int main(void) {
TCCR2A |= (1<<COM2A0) | (1<<COM2A1); // Setze OC2A bei Compare, reset@bottom, inverted Mode
TCCR2A |= (1<<COM2B1); // Lösche OC2B bei Compare, set@bottom
TCCR2A |= (1<<WGM20) | (1<<WGM21); // WaveFormGenerator --> fast PWM Mode
OCR2A = 128;
DDRD |= (1<<PD6) | (1<<PD7); // PD6&7 als Ausgang um PWM-Signal sichtbar zu machen
TCCR2B |= (1<<CS22); // Prescaler auf 64 (PWM-Freq=1,125kHz) und start Counter2
char last = PIND;
for(;;) {
char in = PIND;
if (last != in) {
last = in;
GPIOR0 = last; // set breakpoint here
}
}
}
mfG
Markus
Lesezeichen