Conoscete i Pic? Se siete su questo sito….o li conoscete perché li usate regolarmente…o perché li avete usati in passato “inconsapevolmente***”
Facciamo finta che non sappiate di cosa stiamo parlando.
Sono dei piccoli processori prodotti dalla Microchip. Economici, disponibili in moltissime versioni e facilmente programmabili.
Sono la passione degli smanettoni, visto che con pochi euro possiamo dire a un processore (attraverso un linguaggio di programmazione) quello che vogliamo che faccia al posto nostro.
Si programmano anche con poca spesa….si puo’ comprare il programmatore di casa madre (il PICKit) o ce lo possiamo costruire in casa cercando su internet gli schemi dei famosi Ludipipo, Multipipo..ecc ecc. Iniziate a ricordare verooo***??? 🙂
Per il progettino che andremo ad analizzare ho usato un Pic 12f675. E’ un processore a 8 piedini molto semplice da utilizzare ma al tempo stesso molto potente (pensate che puo’ arrivare a 20Mhz).
Noi lo utilizzeremo in configurazione standard e ci faremo bastare “solamente” 4 Mhz.
Ha un costo molto basso (circa 1,5 euro) e spesso proprio per il prezzo e la semplicità lo fa preferire a chi lo volesse utilizzare al posto di un temporizzatore (il famoso NE555).
Noi oggi lo useremo per far lampeggiare 2 led (uno giallo e uno rosso) in maniera casuale in modo da simulare la fiamma di un fuoco.
Il tutto e’ nato per creare il fuoco in un piccolo presepe. Volevo qualcosa di semplice, piccolo e alimentabile a 3 volt in modo da usare una normale batteria a bottone (come quelle usate nelle schede madri dei computer).
Ecco lo schema….
Prima di montare il tutto dobbiamo programmare il processore…io uso come IDE MplabX e come compilatore PicC della Hi-Tech.
Ecco il codice
#define PIC_CLK 4000000
#define _LEGACY_HEADERS
#include <pic.h>
#include <stdlib.h>
#include “delay.c”
#define LED GPIO0
#define LEDD GPIO1
__CONFIG (INTIO & WDTEN & PWRTEN & MCLRDIS & BOREN);
int main (int)
{
ANSEL = 0b00000000;
CMCON = 7;
VRCON = 0;
WPU = 0;
IOCB = 0;
TRISIO = 0;
int randx,randy;
while(1)
{
randx=rand()%70+1;
randy=rand()%50+1;
LED=LED^1;
DelayMs(randx);
LEDD=LEDD^1;
DelayMs(randy);
}
}
Magari un po brutto…magari scritto male….ma funziona 🙂
Visto che c’e’ chi non ha come compilare il tutto vi allego direttamente il file .HEX pronto per essere programmato.
Si intende che il circuito debba essere inserito in un contenitore in modo da visualizzare il fuoco con la luce dei led riflessa…
….mi spiego meglio con un breve video
Simulatore di fiamma con pic12f675 from danilo larizza on Vimeo.
Buon Lavoro!!!