En este tutorial les voy a mostrar como generar una señal PWM en AVR. Antes sería bueno que lean mis post anteriores sobre PWM:
En este tutorial vamos a trabajar con el TIMER0. Lo primero que haremos será setean el TIMER0 en modo fast PWM. Para ello se debe configurar el Timer Counter Control Register 0 (TCCR0). En el atmega2560, este registro se encuentra dividido en dos registros TCCR0A y TCCR0B (8 bits cada uno). Los registros se pueden ver a continuación.
COM - Compare Match Output
Este bit controla el comportamiento del pin Output Compare (OC0A). Si ambos pin son seteados a 1, el pin OC0A tiene el comportamiento normal. Cuando el pin OC0A está conectado al pin, la función del bin COM0A1:0 dependenderá del valor de los bits WGM02:0
En este ejemplo pondremos el valor del COM0A1 en 0 y el COM0A0 en 0.
WGM - Waveform Generation Mode
Según el datasheet para configurar el TIMER0 en modo fast pwm se deben colocar los bits WGM00 y WGM01 en 1. Estos bits (mas el WGM02 del TCCR0B) controlan la secuencia de conteo del contador, el valor máximo del contador, y la forma de la señal que se genera.
CS - Clock Select
Este bit que se encuentra en el TCCR0B se utiliza para seleccionar un clock de entrada para el TIMER. Seteamos en 1 al CS0.
Programa de ejemplo
Para ver lo que hace este código, habría que conectar un led en el PB7 (digital pin 13 del Arduino Mega) y se vería que prende y apaga, haciendo variar el brillo de la luz.
No hay comentarios:
Publicar un comentario