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

1

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;

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 al poner 1 y 0 para respetar los bits PORTD y PORTB) pero no hay señal PWM.

Sin embargo, si intento usar 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;

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

Intenté 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?

ACTUALIZACIÓN 1

Lo siento por omitir parte del código. Las definiciones de los puertos van antes del código principal:

DDRB =  0b00001010;
PORTB = 0b11110101;
DDRC =   0b0000000;
PORTC =  0b1111110;
DDRD =  0b01101000;
PORTD = 0b10010011;
    
pregunta Roman Matveev

1 respuesta

2

Malas noticias para mí:

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

Recibí esto en un AVRFreaks forum de un miembro.

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

    
respondido por el Roman Matveev

Lea otras preguntas en las etiquetas