Estoy usando un ATtiny85 para generar una salida PWM (usando Timer0 en modo OCR), y esto La salida PWM se enciende y apaga a intervalos regulares. Estoy encontrando que cuando se enciende la salida PWM, hay un retraso antes de que realmente comience a emitir.
Mire la captura de pantalla a continuación, la línea verde muestra el estado en el que estoy poniendo el PWM (activado o desactivado a través de TCCR1) y, sin embargo, hay un retraso de lo que parece un ciclo completo antes de que comience. También he intentado restablecer TCNT0 a 0, pero esto no tuvo ningún efecto.
(La base de tiempo es 20 µs.)
SET(DDRB, PB1);
SET(DDRB, PB2);
// Set up PWM for 460 kHz with 8 MHz clock
TCCR1 = (1<<PWM1A) | (1<<COM1A1) | (1<<COM1A0) | (1<<CS10); // Prescaler = none;
GTCCR = (1<<FOC1A);
OCR1A = 9; // 460.750 kHz
OCR1C = 18;
#define BIT_DELAY ((1000000/38400))
while(1) {
SET(TCCR1, PWM1A);
SET(PORTB, PB2);
_delay_us(BIT_DELAY);
CLR(TCCR1, PWM1A);
CLR(PORTB, PB2);
_delay_us(BIT_DELAY);
}