Tratando de tener el modo Fast PWM cuando TOP == ORCA
.
Funciona bien con OCA
alternar (midiendo la frecuencia correcta), pero no funciona en modo no inversor.
cli();
// Fast PWM Mode
TCCR2A = 0;
TCCR2A |= _BV(WGM20) | _BV(WGM21) | _BV(COM2A0) | _BV(COM2A1); // Inverting mode fails
//TCCR2A |= _BV(WGM20) | _BV(WGM21) | _BV(COM2A1); // Non-Inverting mode fails
//TCCR2A |= _BV(WGM20) | _BV(WGM21) | _BV(COM2A0); // Toggle mode OK
// Prescaler set to 1024 (p.162)
TCCR2B = 0;
TCCR2B |= _BV(CS20) | _BV(CS21) | _BV(CS22) | _BV(WGM22);
// Enable interrupt on counter match
TIMSK2 |= _BV(OCIE2A);
OCR2A = 127;
sei();
Actualizar con más información:
MCU=Atmega328. En el modo sin inversión, acabo de obtener un 1 constante en la salida y el modo de inversión da un 0 lógico. Esperaba ver la frecuencia
me responderé a mí mismo. El pin OC2A no está generando frecuencia, porque OCR2A está ocupado manteniendo el valor SUPERIOR. Puede contener el valor SUPERIOR o el valor de comparación de salida. Entonces debería usar OCR2B.
Para resolver el problema de su controlador, intente esto:
Acabo de usar el ejemplo de código fuente de
http://www.electronicsplanet.ch/mikrocontroller/avrcodesammlung/atmega16timer0fastpwm.htm
Y funcionó. Pero gracias a tus explicaciones, entiendo por qué funciona ;-)
Anindo Ghosh
Pablo
Pablo