domingo, 22 de enero de 2017

PWM avr III: Generación de señal pwm con AVR - práctica.

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:

  1. Introducción a PWM
  2. PWM avr II - Generación de señal pwm con AVR
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