Semplice Schema con Microcontrollore per Pilotare uno o più LED RGB e Generare Qualsiasi Colore Possibile…
INTRO
Come si sa, con i tre colori fondamentali, rosso, verde e blu, è possibile creare qualsiasi colore, compreso il nero che è la mancanza di questi tre colori e il bianco che è la somma di questi tre colori alla massima potenza. In commercio sono disponibili led RGB ovvero si hanno 3 LED in un unico package con 4 contatti, in alternativa si possono usare tre led separati con una lente che unisce i tre colori oppure con una specie di collettore, ma l’effetto è peggiore rispetto al LED RGB incapsulato. Ad esempio se si vuole creare un colore con il LED RGB si può usare lo strumento di Paint per personalizzare il colore:
Ad esempio se si vuole il viola di figura il rosso deve avere una intensità di 224, il verde di 16 e il blu di 224. Si potrebbe anche costruire un sistema RGBW ovvero rosso, verde, blu e bianco per creare colori più caldi e luminosi, solo che in commercio non esistono LED incapsulati RGBW ma si possono creare con LED singoli o uno RGB e un LED bianco.
Per modificare l’intensità si può utilizzare il PWM visto che il valore va sa 0 a 255 come il valore dei colori.
CODICE
Il codice è molto semplice, si vanno ad utilizzare due PWM hardware usando le strutture interne del PIC18F252 in questo caso mentre il terzo PWM è software. È stata scelta una frequenza di 3921Hz, quindi un periodo di 255µS. Il PWM software consiste nel tenere acceso per parte dei 255 µS un pin e per il resto del periodo spento. Quindi posso tenere acceso il pin scelto per 128µS e per 127µS ottenendo un duty cycle del 50% e un valore di intensità di 128. Stessa cosa per il duty cycle hardware, settando il duty cycle da 0 a 255 si varia intensità e duty cycle.
Il codice è:
void main() { //Programma principale
TRISC = 0; //PORTC uscite
PORTC = 0; //PORTC 0
PWM1_Init(3921); //Frequenza PWM1 3921Hz
PWM1_Set_Duty(192); //Valore 192 DC=75%
PWM1_Start(); //Avvia PWM1 (uscita pin 13)
PWM2_Init(3921); //Frequenza PWM2 3921Hz
PWM2_Set_Duty(192); //Valore 192 DC=75%
PWM2_Start(); //Avvia PWM2 (uscita pin 12)
while(1){ //Ciclo infinito
PORTC.B0 = 1; //Accendi il pin 11
delay_us(175); //Mantieni acceso per 175us
PORTC.B0 = 0; //Spegni pin 11
delay_us(80); //Mantieni spento per 80us
} //Valore 175 DC= 68%
} //Fine programma
Prima di tutto si vanno a settare PORTC come uscite e si azzera l’uscita. Si setta prima il primo PWM con una frequenza di 3921Hz e valore 192 ovvero 75% di duty cycle, poi il secondo PWM con stessa frequenza e stesso valore di duty cycle, mentre per il PWM software, chiuso in un ciclo infinito, si ha una frequenza di 3921Hz visto che la somma dei ritardi è 255µS mentre il duty cycle è 68%. Tutti i duty cycle possono essere settati da 0 a 255 e anche quello software, l’unica accortezza è mantenere la somma dei ritardi a 255µS.
LED RGB
Per i LED sono importanti due parametri; il primo è la tensione mentre la seconda è la corrente. In questo modo si può dimensionare la resistenza di protezione oppure il generatore di corrente per pilotare i LED. I dati più importanti sono:
Quindi prima di tutto si ha la piedinatura, ovvero come sono configurati i pin dei LED, in figura si ha un LED a catodo comune, ovvero tutti i catodi dei tre LED sono connessi insieme, poi si ha il diagramma di irradiazione che indica come si diffonde la luce.
La “Forward current” è la corrente diretta di funzionamento, ovvero la corrente che fluisce quando sono accesi, mentre la “Forward Voltage” è la caduta di tensione sul LED con una corrente di 20mA. Si hanno 2V circa per il LED rosso mentre 3.2V per i LED verdi e blu.
Il LED può essere pilotato con una tensione, ad esempio si usa una tensione da 5V e una resistenza di protezione, oppure può essere pilotato con una corrente, ovvero si utilizza uno specchio di corrente o un riferimento in corrente ad esempio da 20mA.
SCHEMA
Lo schema è molto semplice, si ha il microcontrollore alimentato a 5V e con un quarzo da 4MHz e due condensatori come oscillatori. La resistenza R4 mantiene alto il pin MCLR, così che non si resetti il microcontrollore. Si hanno 3 uscite che sono le 3 uscite del PWM e a queste uscite sono connessi 3 LED con le rispettive resistenze di protezioni.
Lo schema è il seguente:
Visto che il LED rosso ha una tensione di 2V, l’alimentazione è 5V mentre supponiamo la corrente 20mA allora R1 sarà da 150ohm, per il LED verde u blu invece, essendo la tensione 3.2V, supponendo la stessa corrente ovvero 20mA, invece servono due resistenze da 100ohm.
In verde si ha il segnale in uscita del pin 12, ovvero del LED verde, in rosa si ha il segnale in uscita del pin 13, ovvero del LED rosso mentre il blu si ha il segnale del pin 11 ovvero del LED blu.
La configurazione dei FUSES è la seguente:
Si ha un oscillatore XT, il mux del modulo CCP2 è abilitato e si ha un brownout reset se VCC<2V.
DOWNLOAD
Lo schema con la simulazione, i file .hex e .c sono disponibili al seguente LINK!!!
scusate ,sarò contro corrente, ma io da neofita PREFERISCO i vecchi circuiti e schemi PIUTTOSTO CHE AFFIDARMI ad un preconfezionato ARDUINO …preferisco sbattere contro i miei errori per imparare piuttosto che avere la “pappa pronta “…POI UN GIORNO MI DIVERITRO’ AD USARE le innumerevoli applicazioni ..ma PRIMA DEVO ARRIVARCI DA SOLO