Schema con Microcontrollore per Realizzare l’Effetto Fuoco a LED per Modellismo o Presepe…
INTRO
Per il modellismo o specialmente per il presepe si può utilizzare il seguente schema che grazie a tre LED simula l’effetto fiamma tremolante. In questo schema sono stati usati un LED giallo, uno rosso chiaro e uno rosso scuro per simulare le varie sfumature della fiamma. Questi tre LED possono essere del colore desiderato. Lo schema presentato è per due diversi microcontrollori, uno molto piccolo e senza necessità di circuito di clock e l’altro più grande. Questi due microcontrollori sono in ordine il PIC12F675 e il PIC18F252. Il codice è scritto in C per Mikroc.
CODICE PIC12F675
Il codice deve semplicemente accendere e spegnere 3 LED con tempi random. Si utilizza quindi la funzione rand() che genera un numero random da 0 a 32767. Il codice è:
#define LED1 GPIO.F0 //Definizione nomi LED
#define LED2 GPIO.F1
#define LED3 GPIO.F2
int rand1, rand2, rand3; //Definizione variabili
void main() { //Programma principale
TRISIO = 0; //PIN definiti come uscite
LED1 = 1; //Accendi LED
LED2 = 1;
LED3 = 1;
while(1){ //Ciclo infinito
rand1 = rand() % 60 + 1; //Ritardo random 1
rand2 = rand() % 50 + 1; //Ritardo random 2
rand3 = rand() % 40 + 1; //Ritardo random 3
LED1 = LED1^1; //Cambia valore LED1
Vdelay_ms(rand1); //Attendi rand1
LED2 = LED2^1; //Cambia valore LED2
Vdelay_ms(rand2); //Attendi rand2
LED3 = LED3^1; //Cambia valore LED3
Vdelay_ms(rand3); //Attendi rand3
}
}
Prima di tutto si definiscono le porte GPIO 0, 1 e 2 con i nomi dei LED1, LED2 e LED3. Si definiscono i tre ritardi di accensione e spegnimento dei tre LED e nel programma principale si inizializzano tutti i pin di I/O come uscite e si accendono i LED.
Nel ciclo infinito si calcolano i tre ritardi, il primo è la divisione di un numero random per 60 e infine si somma 1, il secondo è simile ma il numero random è diviso per 50 e infine il terzo per 40. Questi tre ritardi vengono infine usati per accendere e spegnere secondo essi i tre LED.
I fuses se si usa questo PIC sono così configurati.
CODICE PIC18F252
Anche questo codice deve semplicemente accendere e spegnere 3 LED con tempi random. Si utilizza quindi la funzione rand() che genera un numero random da 0 a 32767. Il codice è:
#define LED1 PORTB.F0 //Definizione nomi LED
#define LED2 PORTB.F1
#define LED3 PORTB.F2
int rand1, rand2, rand3; //Definizione variabili
void main() { //Programma principale
TRISB = 0; //PIN definiti come uscite
LED1 = 1; //Accendi LED
LED2 = 1;
LED3 = 1;
while(1){ //Ciclo infinito
rand1 = rand() % 60 + 1; //Ritardo random 1
rand2 = rand() % 50 + 1; //Ritardo random 2
rand3 = rand() % 40 + 1; //Ritardo random 3
LED1 = LED1^1; //Cambia valore LED1
Vdelay_ms(rand1); //Attendi rand1
LED2 = LED2^1; //Cambia valore LED2
Vdelay_ms(rand2); //Attendi rand2
LED3 = LED3^1; //Cambia valore LED3
Vdelay_ms(rand3); //Attendi rand3
}
}
Prima di tutto si definiscono le porte TRISB 0, 1 e 2 con i nomi dei LED1, LED2 e LED3. Si definiscono i tre ritardi di accensione e spegnimento dei tre LED e nel programma principale si inizializzano tutti i pin di I/O del PORTB come uscite e si accendono i LED.
Nel ciclo infinito si calcolano i tre ritardi, il primo è la divisione di un numero random per 60 e infine si somma 1, il secondo è simile ma il numero random è diviso per 50 e infine il terzo per 40. Questi tre ritardi vengono infine usati per accendere e spegnere secondo essi i tre LED.
Per quanto riguarda i fuses, è tutto disabilitato tranne il BROWN OUT RESET e lo STACK OVERFLOW mentre l’oscillatore selezionato è HS.
SCHEMA
Lo schema se si utilizza il PIC12F675 è il seguente:
Il clock viene generato internamente mentre il pin di reset è disattivato, quindi serve solo l‘alimentazione di 5V connessa al pin 1 e 8 rispettivamente positivo e negativo oltre che i LED. Si utilizzano due resistenze da 390ohm per i LED rossi e una da 220ohm per il LED giallo. Il valore della resistenza di protezione è R=(5-Vled)/Iled dove Vled è la tensioni dei LED e Iled è la corrente che assorbono.
Lo schema per il PIC18F252 è il seguente:
L’alimentazione è sempre 5V ed è connessa ai pin 20, 19 e 8. Viene utilizzato un circuito di clock formato da C1, C2 e il cristallo da 4MHz X1 mentre la resistenza R1 serve per evitare che il pin di reset sia abilitato.
Per quanto riguarda i LED le protezioni di protezione sono uguali e calcolate nello stesso modo.
DOWNLOAD
Potete scaricare le simulazioni dei due circuiti e i codici sia con MIKROC che già compilati al seguente LINK!!!