En aquest projecte utilitzarem una de les característiques de ATmega32A per ajustar la brillantor del LED d’1 watt. El mètode que s’utilitza per ajustar la velocitat del LED és PWM (Pulse Width Modulation). Aquest tutorial PWM sobre microcontrolador AVR explica detalladament el concepte i la generació de PWM de PWM (també podeu consultar aquest senzill circuit de generador de PWM). Penseu en un circuit simple com es mostra a la figura.

Ara bé, si l'interruptor de la figura superior es tanca contínuament durant un període de temps, la bombeta s'encendrà contínuament durant aquest temps. Si l’interruptor es tanca durant 8 ms i s’obre durant 2 ms durant un cicle de 10 ms, la bombeta només s’encendrà en el termini de 8 ms. Ara, el terminal mitjà en un període de 10 ms = Temps d’activació / (Temps d’encès + Temps d’APAGAT), s’anomena cicle de treball i és del 80% (8 / (8 + 2)), de manera que la mitjana la tensió de sortida serà del 80% de la tensió de la bateria.
En el segon cas, l’interruptor es tanca durant 5 ms i s’obre durant 5 ms durant un període de 10 ms, de manera que el voltatge mitjà del terminal a la sortida serà del 50% de la tensió de la bateria. Digueu si la tensió de la bateria és de 5V i el cicle de treball és del 50% i, per tant, la tensió mitjana del terminal serà de 2,5V.
En el tercer cas, el cicle de treball és del 20% i el voltatge mitjà del terminal és del 20% de la tensió de la bateria.
A ATMEGA32A tenim quatre canals PWM, és a dir, OC0, OC1A, OC1B i OC2. Aquí utilitzarem el canal OC0 PWM per variar la brillantor del LED.
Components necessaris
Maquinari:
Microcontrolador ATmega32
Font d'alimentació (5v)
Programador AVR-ISP
Condensador 100uF, LED de 1 watt
Transistor TIP127
Botons (2 peces)
Condensador 100nF (104) (2 peces), Resistències de 100Ω i 1kΩ (2 peces).
Programari:
Atmel studio 6.1
Progisp o màgia flash
Diagrama de circuits i explicació de treball

La figura anterior mostra el diagrama del circuit del regulador LED amb microcontrolador AVR (també podeu comprovar aquest senzill circuit regulador LED).
A ATmega, per a quatre canals PWM, hem designat quatre pins. Només podem prendre sortida PWM només en aquests pins. Com que estem utilitzant PWM0, hauríem de prendre el senyal PWM al pin OC0 (PORTB 3rd PIN). Com es mostra a la figura, estem connectant la base del transistor al pin OC0 per accionar el LED d'alimentació. Aquí hi ha una altra cosa sobre quatre canals PWM, dos són canals PWM de 8 bits. Utilitzarem un canal PWM de 8 bits aquí.
Es connecta un condensador a cadascun dels botons per evitar rebots. Sempre que es prem un botó hi haurà una mica de soroll al passador. Tot i que aquest soroll s’estabilitza en mil·lisegons. Per a un controlador, els pics aguts abans de l'estabilització actuen com a desencadenants. Aquest efecte es pot eliminar mitjançant programari o maquinari, perquè el programa sigui senzill. Estem utilitzant el mètode de maquinari afegint un condensador de descàrrega.
Els condensadors anul·len l'efecte del rebot dels botons.
A ATMEGA hi ha un parell de maneres de generar PWM, que són:
1. Fase PWM correcta
2. PWM ràpid
Aquí ho farem senzill, de manera que farem servir el mètode FAST PWM per generar el senyal PWM.
Primer a triar la freqüència de PWM, això depèn de l'aplicació normalment, per a un LED qualsevol freqüència superior a 50Hz faria. Per aquest motiu, escollim el comptador de rellotge 1MHZ. Per tant, no escollim cap prescalar. Un prescalar és un número que està tan seleccionat per obtenir un comptador de rellotge menor. Per exemple, si el rellotge de l'oscil·lador és de 8 MHz, podem triar un prescalar de '8' per obtenir un rellotge d'1 MHz per al comptador. El prescalar es selecciona en funció de la freqüència. Si volem més impulsos de període de temps, hem de triar un prescalar superior.
Ara per treure el rellotge PWM RÀPID de 50Hz de l’ATMEGA, hem d’habilitar els bits adequats al registre “ TCCR0 ”. Aquest és l’únic registre que hem de molestar per obtenir FWB PWM de 8 bits.

Aquí, 1. CS00, CS01, CS02 (GROC): seleccioneu el prescalar per triar el rellotge de comptador. La taula de prescalar adequada es mostra a la taula següent. Així doncs, per prescalificar-ne un (rellotge oscil·lador = rellotge comptador).
de manera que CS00 = 1, els altres dos bits són nuls.

2. El WGM01 i el WGM00 s’alteren per triar els modes de generació de formes d’ona, segons la taula següent, per a PWM ràpids. Tenim WGM00 = 1 i WGM01 = 1;

3. Ara sabem que PWM és un senyal amb una relació de treball diferent o diferents temps d’APAGADA d’ACTIVACIÓ. Fins ara hem escollit la freqüència i el tipus de PWM. El tema principal d’aquest projecte rau en aquesta secció. Per obtenir una relació de tasques diferent, escollirem un valor entre 0 i 255 (2 ^ 8 a causa de 8 bits). Suposem que escollim un valor 180, ja que el comptador comença a comptar a partir de 0 i arriba al valor 180, la resposta de sortida es pot activar. Aquest activador pot ser invertit o no invertit. És a dir, es pot dir que la sortida es tira cap amunt en arribar al recompte o es pot dir que es tira cap avall en arribar al recompte.
Aquesta selecció de tirar cap amunt o cap avall és escollida pels bits CM00 i CM01.
Com es mostra a la taula, perquè la sortida pugui ser alta en comparar i la sortida es mantingui elevada fins al valor màxim (com es mostra a la figura inferior). Hem de triar el mode d'inversió per fer-ho, així que COM00 = 1; COM01 = 1.

Com es mostra a la figura següent, OCR0 (registre de comparació de sortida 0) és el byte que emmagatzema el valor triat per l'usuari. Per tant, si canviem OCR0 = 180, el controlador desencadena el canvi (alt) quan el comptador arriba a 180 des de 0.

Ara, per variar la brillantor del LED, hem de canviar la RELACIÓ DE DEURE del senyal PWM. Per canviar la relació de tasques, hem de canviar el valor OCR0. Quan canviem aquest valor d’OCR0, el comptador triga un temps diferent a arribar a l’OCR0. Per tant, el controlador treu la sortida en diferents moments.
Per tant, per a PWM de diferents cicles de treball, hem de canviar el valor OCR0.
Al circuit tenim dos botons. Un botó serveix per augmentar el valor OCR0 i, per tant, el DATY RATIO del senyal PWM, l’altre és per disminuir el valor OCR0 i, per tant, el DUTY RATIO del senyal PWM.
