ATmega48PA: no se puede ejecutar PWM en los pines OC0A y OC2A

Tengo algunos problemas al intentar ejecutar Fast PWM en los pines OC0A y OC2A.

El código es el siguiente:

TCNT0 = 0;
TCNT2 = 76/2;
OCR0B = 76;
OCR2B = 76;
OCR0A = 10;
OCR2A = 10;
TCCR0A = 0b11000011;
TCCR2A = 0b10000011;
TCCR0B = 0b1010;
TCCR2B = 0b1010;

Así que supongo que los temporizadores se ejecutarán con una velocidad de 1:8 desde 0 (y 38 para el temporizador 2) hasta la parte superior definida por los registros OCRxB (76) y cambiarán el estado de los pines en TOP (76) y OCRxA (10).

Eso no funciona: los pines OC0A y OC2A se conectan a los temporizadores (ya que no puedo cambiar su estado poniendo 1 y 0 respetando los bits PORTD y PORTB) pero no hay señal PWM.

Sin embargo, si trato de usar los pines OC0 B y OC2 B , todo funciona:

TCNT0 = 0;
TCNT2 = 76/2;
OCR0A = 76;
OCR2A = 76;
OCR0B = 10;
OCR2B = 10;
TCCR0A = 0b00110011;
TCCR2A = 0b00100011;
TCCR0B = 0b1010;
TCCR2B = 0b1010;

Es necesario tener en cuenta que, en este caso, los pines OC0A y OC2A se pueden controlar directamente cambiando el estado del pin (lo que prueba que no tengo fallas esquemáticas).

Traté de reemplazar los valores de OCRxA y OCRxB en el primer código, pero eso no ayudó:

TCNT0 = 0;
TCNT2 = 76/2;
OCR0A = 76;
OCR2A = 76;
OCR0B = 10;
OCR2B = 10;
TCCR0A = 0b11000011;
TCCR2A = 0b10000011;
TCCR0B = 0b1010;
TCCR2B = 0b1010;

¿Alguna idea?

ACTUALIZAR 1

Perdón por omitir parte del código. Las definiciones de puertos van antes del código principal:

DDRB =  0b00001010;
PORTB = 0b11110101;
DDRC =   0b0000000;
PORTC =  0b1111110;
DDRD =  0b01101000;
PORTD = 0b10010011;
¿Dónde estás configurando tus puertos? DDRA y DDRD?
¡Hola, @Hayman! Omití esta parte. Acabo de ponerlo en la ACTUALIZACIÓN 1. ¡F5 en la publicación!
OC2A Utiliza el bit 3 de datos del puerto B, que ha establecido en 0, esto debe establecerse como una salida. OC0B y OC2B son bits de datos 3 y 5 en el puerto D que configuró en 1, lo que explica por qué funcionan bien
@Hayman DDRB.3 se establece en uno: DDRB = 0b0000 1 010;
Lo siento, tienes razón, ese es mi error. Sin embargo, sigo creyendo que el error radica en las definiciones, ya que cambió el código principal y verificó su circuito.
@Hayman, tenga en cuenta que puedo controlar esos pines con los bits PORTD.6 y PORTB.3 (si COMxA1 = COMxA0 = 0). Así que el esquema debería estar bien.

Respuestas (1)

Malas noticias para mí:

'No obtendrá un PWM útil en el pin OCnA en un AVR8 si selecciona un modo que tiene OCRnA como TOP. Como ha descubierto, puede usar OCR0A como TOP y OCR0B para el servicio y la salida en OC0B. O use un modo con un TOP fijo, y luego puede obtener PWM en ambos pines OC.

Esto lo recibí en el foro AVRFreaks de un miembro.

Entonces parece que no podré configurar el PWM para que funcione en pines OCxA con registros OCxA como valor TOP. :(((