RGB LED CONTROLLER

icona-rgbSemplice 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:

strumento-colori-paint

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:

carateristiche-led-rgb

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:

schema-controller-rgb

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:

fuses-sesore-distanza-ad-ultrasuoni

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!!!




 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

1 pensiero su “RGB LED CONTROLLER

  1. 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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *