Let's GO PIC!!!
cap. 26
SMD no fear !
Nascita della Micro-GT
nano.
Questo capitolo di "Let's
GO PIC !!!" ha una impostazione un po' diversa
rispetto alle precedenti, vi troverete infatti le basi di programmazione per un
PIC piccolo e parecchio datato ma che e' risultato ottimale per la
soluzione di un problema reale che ci e' stato proposto, ovvero alloggiare un
sistemino di controllo con ben 4 uscite, piu' una derivata dalle precedenti con
una logica a diodi, e 2 ingressi digitali in un solo centimetro quadrato.
Descrizione del progetto.
Qualche giorno fa, una
persona, ora divenuta un amico, mi ha contattato via mail chiedendo un aiuto
relativamente allo sviluppo della parte elettronica, non di sua competenza,
della sua tesi di laurea.
Inizialmente mi
spiego' che come aspirante "industrial design"
stava sviluppando un oggetto con un cad di modellazione 3D, non
bene specificato, che conteneva un Tag Rfid. Il problema di sua principale
competenza era di sviluppare uno "Chassy" (leggasi scatola) con un
design accativante, ma che integresse le funzionalita' di accensione, spegnimento
e diagnostica del trasmettitore Rfid.
Detta cosi'
sembrava sufficiente integrare nel contenitore un semplice Flip Flop, e difatti
mi chiese di inviargli un esemplare dell'oggetto che aveva visto al link:
http://www.gtronic.it/energiaingioco/it/scienza/flipflop/flipflop.html
Decisi di fargli
alcune domande per focalizzare bene il problema e fu proprio durante questa
sorta di intervista che ci vennero di comune accordo delle idee abbastanza
innovative.
In primo luogo
decidemmo di dotare il dispositivo di una interfaccia
utente "visuale" ovvero di un insieme di Led che indichino lo stato
di accensione, spegnimento e diagnostica del Tag Rfid, si e' dovuto quindi
decidere un insieme di reazioni, segnalazioni e tempistiche luminose che
in sostanza costituiscano un codice di funzionamento.
Si e' pensato di
dotare il sistema di segnalazioni acustiche codificate, e non ultima cosa di
tenere sotto controllo i consumi di tutto il sistema.
Ne e' derivato un
diagramma corsa tempo che mette in relazione tutto l'I/O
del microcontroller con il tempo con gli eventi imposti dall'operatore e le
reazioni di controllo.
Nell'immagine
vediamo la funzionalita' che ci si e' posti come abbiettivo.
Anche se il
problema e' molto specifico, potra' essere usato come base per eseguire una
miriade di lavori similari, vediamo quindi una breve analisi.
Il diagramma corsa tempo era, impostato prima della
scielta del Microcontroller, non tiene conto di una cosa importante che
riguarda il terzo pin di ingresso, percui, come spieghero' piu' avanti, si e'
dovuto per forza di cose spostare il secondo pulsante di input dal pin GP1 ad
appunto il pin GP3. Ne consegue che nella versione definitiva pur rimanendo
identico nella forma il diagramma corsa tempo ha la
quarta riga rinominata GP3 e il comando dell'Rfid su GP1.
Scelta del microcontroller
I primi parametri che hanno
discriminato la scielta sono stati la dimensione estremamente ridotta come
anche l'igombro.
Il secondo parametro e' il consumo
energetico e la tensione Vdd accettata, dato che il dispositivo sara'
alimentato da una batteria da 3V, che ne deve
garantire lunghissimi tempi di accensione.
La nuova tecnologia "nano watt"
permette alla casa costruttrice di dichiarare:
Ci sono delle dissipazioni aggiuntive che
si possono eliminare disabilitando le periferiche non in uso ed altre
caratteristiche specifiche, ad esempio il watch dog timer che da solo assorbe
300nA aggiuntivi, sempre alla tensione di 2V, mentre
il timer hardware integrato richiede 4uA a 32Khz sempre alla tensione di
alimentazione di 2V.
Questo device non necessita di un cristallo
di quarzo per operare dato che contiene un oscillatore interno di ben 4Mhz.
Dato che l'oggetto progettato sara'
aliemntato con la batteria di 3V, rimarra' operativo
senza problemi, anche quando scaricandosi, dovesse scendere a circa 2V.
I comparatori analogici interni, pur
essendo hardware, sono programmabili via software.
Il microcontroller piu' adatto e' parso
subito essere il PIC12F629.
Nello stesso PCB potrebbe
essere alloggiato il 12F675 che mette a disposizione anche i convertitori
analogici digitali. Il data book e' in comune con con
il 675 e la principale differenza e' indicata nell'architettura sotto
riportata.
Notiamo la presenza di un solo port dedicato all'I/O e di soli 6 pin, del resto stiamo parlando di un microcontroller che ha solo 8 pin.
I quattro canali
analogici AN0-AN3 sono disponibili, come chiaramente indicato nel solo modello
675, mentre i comparatoratori, realizzati hardware tramite operazionali
interni, sono presenti in entrambi i modelli.
In alto a destra
sono evidenziati, in verde, i punti di I/O configurati come ingressi e in rosso
quelli configurati come uscite.
Come per gli
altri modelli di PIC abbiamo disponibile in uscita 20mA.
Focalizziamo
l'attenzione sul pin GP3, noterete che la freccia e' solo entrante quindi non
e' possibile configurare questo pin come uscita.
Schema elettrico
Lo schema elettrico mostra
alcune caratteristiche particolari rispetto al classico schema a
microcontrollore. In primo luogo notiamo la mancanza dell'oscillatore al quarzo
come anche la mancanza della resistenza di pullup all'ingresso GP0. Il 12F629
dispone infatti di oscillatore interno a 4Mhz e di
resistenze di pullup interne su quasi tutti i pin di I/O tranne,
sfortunatamente, il GP3, che risulta essere abbinato al pulsante P2 ed impone
quindi la presenza della resistenza.
Micro-GT nano
(5 uscite e 2 ingressi).
Attenzione particolare va posta
sull'acquisto del buzzer che vede essere di tipo alimentabile in continua e che
non assorba piu' dei circa 20 mA disponibili alla porta. Si ovvia il problema
non pilotando direttamente il buzzer ma la base di un transistor (che potra'
anche essere smd), ma va comunque posto un limite e un severo controllo al
consumo per non scaricare troppo presto la batteria. Si deve avere un
certo margine di sicurezza nell'assorbimento del dispositivo dato che quasi
meta' della corrente disponibile la stiamo inviando ai LED di segnalazione
anche se ad alta efficienza.
I Led, a partire da quello piu' a sinistra
sono:
I diodi di tipo 1N4148 o similari
implementano una logica OR che accende il buzzer emettendo il segnale acustico.
L'uscita GP1 e' portata alla base del BJT
di tipo BC337 che pilota il Tag Rfid, ovvero il dispositivo di trasmissione.
La domanda che sorge spontanea e': Com'e'
possibile alloggiare tutta questa roba in un solo centimetro quadrato?
Sviluppo del PCB
Per una realizzazione
domestica del dispositivo si e' deciso di usare il FidoCad, un software semplice
e intuitivo di libera distrubuzione che potete ottenere cliccando su questo
link: Download FidoCAd
Il
download e l'istallazione sara' molto rapido dato che si tratta di un programma
molto leggero. Usando un applicativo chiamato "Wine" (windows
istaller) potrete farlo funzionare anche con il sistema operativo UBUNTU.
Attenzione alle resistenze SMD che useremo.
Quelle della corretta dimensione si trovano nella libreria "SMD Vari"
alla voce 0805. come vediamo nella succesiva immagine.
A guardare questi
oggetti nell'immagine ci si fa un'idea di dimensione piu' grande della realta',
ma questi componenti sono lunghi circa due millimetri e chi non avesse un
minimo di manualita' potrebbe avere difficolta' anche ad afferali, e per
qualcuno addirittura a vederli.
La sigla,
standardizzata a nome, 0805 indica la misura espressa in porzione di pollice
della vista in pianta dell'oggetto rettangolare, ovvero
Esternamente
hanno l'aspetto di un puntino rettangolare nero.
IL PIC lo
troviamo nella libreria "IC SMD SOIC" alla voce "SO8" ed ha
l'aspetto mostrato in figura.
Ora possiamo
iniziare lo sbroglio del circuito tenendo presente che molti componenti sono
montati nel frontalino e non nel PCB come ad esempio gli ingombranti LED, i
Pulsanti il Tag Rfid, Buzzer, la batteria.
Alla fine
otteniamo questo supporto PCB che come vediamo rientra nelle misure richieste
di 10mm X 10mm ovvero un centimetro quadrato.
Le piazzole
rappresentate non dovranno essere forate dato che un foro del diametro di 1mm e' piu' grande della piazzola stessa, ma saranno la base
su cui saldare i fili posti in appoggio orrizontale. In questa fase di
saldatura e' bene spellare il filo della misura strattamente necessaria (anche
meno di un millimetro) e di eseguire delle prestagnature compatte e pulite data
la vicinanza con le piazzole attigue.
Si ricorda che
nella tecnica smd a single layer, come nel nostro caso, lo sbroglio e' effettuato
dal lato componenti che e' anche il lato saldature,
quindi state vedendo nella foto l'oggetto dallo stesso lato in cui andremo a
saldare i componeti e non va eseguita alcuna inversione speculare nella fase di
fotoincisione.
Dopo al fase di sviluppo dovremmo vedere quanto visibile in
questa foto in cui si e' deciso di produrre almeno una striscia di stampati al
fine di ottimizzare l'utilizzo dei supporti standard autoimprimenti 100x160mm.
Come di consueto
la striscia larga circa un centimetro e mezzo viene tagliata dalla basetta
disponibile usando la classica forbice da lamiera comunemente chiamata cesoia .
Procuriamoci
dei componenti smd
Come primo passo procuriamoci GRATUITAMENTE
dei componenti smd. Ogni vecchia scheda, anche non
funzionante, che abbiamo a casa e' una vera e propria miniera di componenti,
quasi inesauribile ed in grado di darci, a seconda di quanta pazienza mettiamo
nella ricerca, quasi qualsiasi componente.
Nel video che propongo per primo vediamo
come procurarci delle minuscole resistenze con package 0805 del valore che ci
interessa.
Procuriamoci un normale tester e la prima
scheda madre di PC bruciata che ci viene in mano.
video:
identificare i componenti smd da recuperare.
Riassumendo, nel video vediamo che con il
tester in ohm posto in fondoscala 20k, andiamo a
puntare su tutte le resistenze che vediamo in giro, tenendo presente che
alcune potrebbero dare misurazioni diverse dal valore indicato dato che queste
sono inserite nel contesto di una rete elettrica che a priori non conosciamo.
In linea di massima pero' il valore letto sara' esatto o fortemente indicativo.
video:
dissaldare i componenti smd senza distruggerli.
Alcune immagini
di fonte internet, che vediamo qui sotto, chiariscono la forma, l'aspetto e le
dimensioni di questo componente resistivo.
Per
standardizzare un po', si tende a distinguere la componentistica per colore,
difatti (almeno per le prime esperienze) i
componenti della forma sopra mostrata di colore nero saranno di certo
resistenze, mentre quelli grigi potrebbero (sempre in prima grossolana
approssimazione) essere dei condensatori smd. Attenzione che questa non e' ne
una regola ne una verita' ma solo un aiuto per un primo approccio.
E' comunque
evidente, usando un tester quando il rettangolino nero invece di essere una resistenza
sia un diodo.
Le resistenze di
questo tipo sono generalmente in grado di dissipare 1/8 o anche 1/4 di watt.
Ovviamente il
codice colori per leggere il valore perde ogni significato dato che non vi
sarebbe assolutamente lo spazio per riportalo nel corpo della resistenza, ma
per chi avesse gli occhi buoni , o fosse munito di una
buona lente, segnalo che sulle resistenze da 10K che abbiamo staccato durante
le riprese c'e' stampigliato il numero 103 che interpretiamo come 10 seguito da
tre zeri, ovvero 10k.
Analogamente per
i condensatori con package 0805. Vediamo l'aspetto del tipico condensatore
ceramico da, ad esempio, 100nF.
condensatore
smd 0805.
Per quanto
riguarda i transistor in smd, saranno facilmente distinguibili
dato che ovviamante hanno tre reofori e non due come le resistenze i
diodi e i condensatori.
Il tipico transistor smd ha l'aspetto che vediamo nella figura qui sotto.
Transistor
smd "sot".
Si tratta del
classico package sot-23. La sigla SOT significa small outline
transistor. Per capire,
una volta recuperato il componente, se e' funzionante e dargli una prima
identificazione sommaria, colleghiamoci tre filetti di tipo wrap ai terminali e
infiliamo letteralmente a caso nelle boccole di test hfe del nostro multimetro.
Se una delle varie combinazioni ci restituisce un valore di hfe allora abbiamo
scoperto se abbiamo davanti un PNP e un NPN, se
funziona e ovviamente quanto guadagna.
Queste
informazioni ci sono abbastanza sufficienti per
costruirgli attorno una rete di polarizzazione smd e fissare il punto lavoro.
Per
approfondimenti su questo tema vi rimando alla mia pubblicazione "beginner
BJT" pubblicata su grix.
Se questa prova
non dovesse dare alcun risultato sul display del tester non significa
categoricamente che il componente e' rotto ma indica che sicuramente non e' un
transistor bjt, difatti il medesimo package e' impiegato per i regolatori di
tensione, per i mosfet, e addirittura per certi diodi controllati o zener.
Vediamo ad
esempio un diodo denominato SOD small outline diode.
Diodo smd
"sod".
Benche' il diodo
smd disponga di due reofori, il footprint del CAD potra' essere il medesimo
delle resistenze 0805.
Faccendo un
accenno al costo del materiale nuovo, sappiate che sono molto economici e che
non ha nessun senso comprare il singolo esemplare, ad esempio uno stock di 100
resistenze 0805 costa al dettaglio 0,90 euro, ma comprati in internet a
confezioni di 5000 il prezzo si contiene nell'intorno di 6 euro compresa la
spedizione.
Saldature dei componenti smd
La parola d'ordine, per chi
per la prima volta si cimenta con l'SMD e' "no
fear!!!" ovvero niente paura. Al contrario di quello che si puo' pensare
di primo acchitto non solo e' possibile ma addirittura divertente e con il
tempo che passa indispensabile. Dobbiamo innanzitutto autoconvicerci che e'
possibile saldare smd anche con cio' che abbiamo in casa senza dover comprare
particolare strumentazione, e che alla fine ci risultera' anche piu' economico.
In linea di principio potremmo, e lo
dimostrero' con i video che seguono, saldare questi minuscoli componenti con a stessa tecnica che abbiamo usato fino ad oggi con i
PTH (pin through the holes) ovvero senza flussanti, senza trecciole,
e senza altre tecniche a aria calda ecc. ecc.
Vediamo subito il video che vale piu' di
cento righe scritte!!!
video: saldatura di esempio nel PCB della Micro-GT nano.
La resistenza
saldata durante la ripresa video.
Si procede poi alla saldatura degli altri
componenti. La prassi dice di saldare prima i circuiti integrati e poi gli
altri componenti anche se in questo caso, a scopo ditaddico, abbiamo saldato
prima la resistenza di pullup.
L'aspetto finale della Micro-GT nano,
completamente assemblata e' nella sottostante foto in cui i vari dipositivi di
controllo e uscita, leggasi pulsanti, e led, nonche' la batteria di
alimentazione e il buzzer non sono alloggiato nel pcb stesso.
Questo e' normale dato che
I numerosi fili che vediamo uscire dal PCB
vanno ai pulsanti e ai led di segnalazione oltre che ovviamente
all'alimentazione.
Il filo rosso che si intravede nel lato
sinistro andra' al positivo della batteria mentre i neri costituisco la massa
quindi altre al negativo della batteria anche i ritorni comuni dei catodi dei
led, dei pulsanti e il negativo del buzzer.
Micro-GT nano
10x10mm, con assemblate tutte le R, transistor e i
diodi dello schema.
Nel prossimo video vediamo le saldature
manuali effettuate sul PIC smd montato sul progetto SiderMicro-GT che non sara'
mai pubblicato perche' venduto ad una azienda
commitente. Accenno solo al fatto che si tratta di un controllo
muticanale per analisi termiche ad alte temperature.
Video:
saldatura di un chip smd con saldatore tradizionale.
La fase di ispezione delle saldature la
effettuiamo usando un monocolo per applicazioni micro meccaniche. Nel video
successivo vi presenta questo oggetto Giuliano Gentili, conosciuto su grix per la sua recente pubblicazine "controllo di livello"
con
Video:
ispezione saldature eseguite.
L'immagine ad alta risoluzione che vediamo
qui sotto mostra il lavoro finito con le saldature effettuate in primo piano.
Sviluppo del firmware dedicato.
La programmazione avviene
usando il compilatore Hitech, adottato dalla MicroChip ed integrato
nell'ambiente dalla casa stessa. La creazione del progetto, con tutti i suoi
passi, e' descritta nel capitolo 1 del corso online Let's GO PIC!!!, quindi non viene rispiegata adesso, si segnala solo che
al paso in cui si definisce il compilatore da usare va selezionato "hitech
universal tool suite" perche' comprende anche la famiglia
Creiamo quindi un progetto, utilizzando
"project wizard", facendo attenzione di selezionare il device 12F629
e inserendo i file delay.h, delay.c, always.h e il file Rfid_sorrentino che vi
siete creati facendo copia incolla con il sorgente
"C" che posto qui sotto.
La finestra del progetto, all'interno dell'ambiente Mplab dovrebbe quindi avere l'aspetto che vedete in questa immagine.
Facendo una breve divagazione, che funga
anche da ripasso o da breve introduzione al linguaggio per quei lettori che non
abbiano letto i 25 capitoli precedenti, esporro' alcuni concetti fondamentali
della programmazione.
In linguaggio ANSI C, si distingue tra file contenenti il sorgente
e le funzioni salvando il file stesso con estensione “.c”
e i cosi detti file di intestazione (detti file header) salvati con estensione
.h.
Gli header contengono le
definizioni di quei costrutti che non sono nativi del linguaggio C propriamente
detto ma delle sue varie distribuzioni come appunto la versione rilasciata da
Hitech ed integrata nella piattaforma MpLab dedicata alla programmazione dei
Microcontrollori.
Non avrebbe senso per una ANSI C standard un costrutto del tipo GPIO1 e simili
dato che questo si riferisce direttamente a un pin di controllo digitale del
micro controller stesso.
Gli header sono quindi
quelle estensioni del software di base che permetteranno di compilare
correttamente tutti quei comandi che fanno riferimenti a registri
interni e periferiche del microcontrollore.
Secondo questa filosofia
non esiste un limite all’espandibilità’ del linguaggio dato
che in mancanza di uno specifico comando o funzione che lo implementa il
programmatore esperto puo’ procedere alla customizzazione implementandolo.
I file header
costituiscono una sorta di macro espansione del codice sorgente contenuto nei file sorgenti .c dato che
durante il passaggio di linking effettuato dal compilatore il contenuto di
questi file viene sostituito alla riga che lo chiama in causa con la direttiva
al preprocessore indicata sotto.
#include “delay.h”
Questa riga viene
sostituita con tutto il codice contenuto nel file delay.h per quanto esteso
esso sia.
Analisi del sorgente.
Procediamo all’analisi del
codice sorgente da cui, dopo la fase di compilazione si ottiene il file .hex
ovvero il file esadecimale da riversare nella memoria flasch del
microcontrollore con l’ausilio del programmer Micro-Gt mini.
Aggiungiamo
solo poche fondamentali premesse:
//
identifica che quanto scritta alla sua destra e’ un commento ed e’
ignorato dal compilatore
// GPIO identifica un
particolare pin del microcontrollore 12F629 prescelto
//TRISIO definisce la
direzione del segnale nei pin di I/O ovvero se sono input o output
// le parentesi graffe {}
indicano inizio e fine di un corpo di una funzione
//le parentesi tonde ( )
indicano un elenco di parametri da passare ad una funzione
//while indica al processore di eseguire il suo corpo tra graffe fintanto che e’ verificata la condizione
//tra parentesi tonde, ad esempio while(1) {} rappresenta un ciclo
infinito dato che 1 e’ sempre vero.
//ogni riga di comando
finisce con ;
//
/* e */ rappresenta un commento che puo’ comprendere piu’
righe
//
#include e’ una direttiva al preprocessore che impone la sostituzione
della riga stesso con il file
// che viene indicato
subito dopo, esegue quindi una macro espansione del codice.
//
#define A B sostituisce in tutto il sorgente alla variabile B l’etichetta
mnemonica A
// char definisce una
variabile a 8 bit che puo’ contenere sia un intero che un vero e proprio carattere
Sorgenti del firmware
/*********************************************************
*
Progetto 12rfid-Sorrentino
*
*
PIC12F629
*
*
ing.Marco Gottardo - Mirko Musto
*
*
13/Aprile/2012
*
*
Piattaforma
Micro-GT
nano
*
*
simulabile in REALPIC
simulator
*
*
resistenze di PULLUP (normal 0 ->pressed 1 *
*********************************************************/
#define _LEGACY_HEADERS
//definisce macro da versione 9.81 del compiler Hitech
//permette la definizione dei
fuse all'interno del sorgente
#include <pic.h>
//definisce
i registri interni del PIC per conoscena del compilatore
//parentesi angolari perche' si trova in cartella include
#include <htc.h>
//permette l'uso delle routine di interrupt
#include "delay.h"
//permette l'uso dei temporizzatori con cicli di attesa
#include "settaggi.h"
//definisce
le impostazioni delle porte in ingresso o uscita
//definisce anche lo stato delle altre periferiche associate
#define P1
GPIO0 //Pulsante di comando di
accensione dell'Rfid
#define P2
GPIO3 //non puo' essere uscita per limitazioni
hardware, assegna il pulsante P2 al pin 4 del PIC
#define
LED_green GPIO4
//assegna il LED verde al pin 3 del PIC
#define
LED_red GPIO2
// assegna il LED rosso al pin 5 del PIC
#define
LED_blu GPIO5
//assegna il led blu (oppure bianco) la pin 2 del PIC
#define
Rfid
GPIO1 //assegna il comando do accensione
dell’RFid al pin 6 del PIC
//Macro di configurazione
dei bit di impostazione primaria detti fuse
__CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN &
WDTDIS & INTIO); //oscillatore interno a 4 Mhz
char t=0x00; //definizione e inizializzane a zero della variabile
t
void allarmeON(); //predichiarazione della funzione di accensione
dei LED dell’interfacci HMI
void allarmeOFF(); //predichiarazione della funzione di spegnimento
dispositivo R-Fid
void main() { //inizio del programma principale che cicla
automaticamente
TRISIO
= 0x09; //definisce, con il meno significativo a destra
output I pin con 0 e input I pin con 1 nel binario 1001
//le prossime righe
definisco le impostazioni di base del micro prima di eseguire il ciclo
LED_red = 0x00;
//partenza con Led rosso spento
Rfid =
0x00; //partenza con R-Fid spento
LED_green = 0x00; //partenza con led verde spento
LED_blu = 0x00; //partenza con
led blu spento
CMCON = 0x07;
//comparatori analogiciinterni disabilitati per non influenzare le uscite
digitali
VRCON = 0x00;
//riferimenti nulli ai comparatori
WPU = 0b000011;
//abilita resistenze di pull-up interne dove vale
1
OPTION =
0x00;
INTCON = 0x00; //preset del vettore
di
interrupt
IOC = 0X00;
DelayS(1); //attende 1 secondo prima di proseguire per
stabilizzare le impostazioni
while(1)
{
//inizio ciclo infinito da cui non si esce a meno di uno spegnimento hardware
if(P1==0){while(P1==0){DelayMs(250);//controllo
pressione P1 con antirimbalzo
t++; //incrementa di uno la variabile di
conteggio eventi
if(t>=9){ se la variabile e’ minore di 9 allora….
if(Rfid==0){allarmeON();}
//se il tag rfid era spento lo accende
else{allarmeOFF(); //altrimenti lo spegne
if(LED_green==1) LED_green=0; //se il led verde era
acceso allora lo spegne
}
while(P1==0){DelayMs(250);} //se e’ premuto il tasto
P1..con un ritardo che impedisce I rimbalzi meccanici
}
}
t=0x00;} //resetta la variabile di
conteggio
if(P2==0){while(P2==0){DelayMs(250); //controlla il
tasto P2 e verifica che non ci siano rimbalzi
t++; //incrementa la variabile di conteggio
if(t>=2){if(Rfid==1){LED_green=!LED_green;}
while(P2==0){DelayMs(250);}}
}
t=0x00;}
} // end del while(1)
ovvero fine del ciclo infinito
} //end main ovvero fine
del programma principale
void allarmeON(){char conta=0x00; //inizio routine di lampeggio del led
blu
Rfid=0x01;
while(conta<=2){LED_blu=0x01; //accensione
del LED blu (oppure bianco)
DelayMs(150);
DelayMs(150);
LED_blu=0x00; //spegnimento del LED blu (oppure bianco)
DelayMs(150);
DelayMs(150);
conta++;
//incrementa conteggio dei lampeggi
}
} //fine routine di lampeggio del led blu (oppure
bianco)
void allarmeOFF(){ Rfid=0x00; //inizio routine di spegnimento del
dispositivo R-fid e delle sue segnalazioni mostabili al LED rosso
LED_red=0x01; //accensione del LED rosso
DelayMs(250); //attesa
DelayMs(250); //attesa
LED_red=0x00; //spegnimento del LED rosso
}
.Da questo link puoi scaricare il
firmware gia' compilato ovvero il file hex -> download file hex
La fase di
simulazione.
Prima di procedere alla
messa in produzione di un progetto e’ d’obbligo eseguire una simulazione
approfondita e dettagliata della funzionalita’ di almeno un prototipo sia
relativamente al firmware che all’hardware.
La simulazione del
firmware può avvenire utilizzando più strumenti di cui citiamo solo quello ufficialmente
indicato dalla casa costruttrice del microcontrollore, il proteus e uno piu’
leggero ma semplice ed intuitivo chiamato RealPic simulator.
Per il test del firmware
sviluppato useremo la versione demo di RealPic
simulator.
L’icona di lancio del progetto precedentemente salvato e’ la seguente.
Strumento di simulazione software Realpic simulator
Scarica il progetto di simulazione RalPic
Una volta lanciato il
programma Realpic simulator si possono
verificare due distinte situazioni, la prima che si sia lanciato a partire
semplicemente dall’icona di lancio e quindi ci si trova nella situazione di una
attivazione “neutra” dell’ambiente, mentre se lo abbiamo lanciato usando il
file rpp (Real pic project, scaricato dal link sovrastante, che presume che
realpic sia istallato nel vostro PC) la cui icona e’ rappresentata
nell’immagine troveremo il file hex precaricato e le impostazioni dei device
visual preconfigurate.
Affinche' il lancio del
simulatore sia precaricato corretamente e' bene che i
due file scaricati (hex e rpp) si trovino nella medesima cartella.
Supponendo che non
abbiamo a disposizione il il file .rpp procederemo
come segue.
La prima azione sarà quella di selezionare il corretto microcontrollore agendo sull’apposito menù a tendina.
impostazione del corretto microcontroller nel
simulatore
Successivamente si deve impostare la frequenza di clock relativa alla velocità di esecuzione del programma da parte del core del controllore reale e della velocità del controllore emulato, nel caso specifico selezioneremo 4Mhz anche se avremo il clock interno ovevro non monteremo il cristallo di quarzo per la ragione che lo spazio disponibile per il supporto pcb e’ davvero limitato.
selezione delle velocita’ di
esecuzione reale e simulata del programma
Dopo avere selezionato
processore e velocità di esecuzione sarà possibile caricare in sequenza il file
.hex e gli oggetti visual che mi rappresentano l’I/O
del micro controller.
Il programma potrà essere
eseguito correttamente solo dopo che gli oggetti di controllo visuale saranno
stati configurati coerentemente con il programma
da eseguire.
E’ intuitivo che ad un
pulsante dovremmo assegnare un ingresso del PIC e non una uscita
predefinendo anche quale sarà l’azione di questo pulsante.
Per ragioni di protezione
dai disturbi elettromagnetici di ambiente e’ necessario che i pulsanti sia
configurati in logica negata, ovvero vera’ ritenuto un comando valido una
transizione dallo stato logico alto allo stato logico basso.
La situazione descritta
viene presentata come normal 1 -> pressed zero
Vediamo nella prossima
immagine come configurare i pulsantil abbinandoli al giusto pin di I/O e
all’azione da eseguire.
assegnazione dei pulsanti virtuali
ai corretti pin del micro controller
configurazione dell’azione dei
pulsanti virtuali
In maniera analoga a
quanto fatto per gli ingressi operiamo per
impostare le uscite decidendo che la segnalazione che ci interessa e’
semplicemente l’azione dell’HMI (human machine interface) costituita dalle spie
LED codificate.
Lo strumento adatto e’
disponibile in Realpic simulator come vediamo nella prossima immagine.
I LED virtuali potranno assumere
anche i corretti colori indicati sul diagramma corsa tempo precedentemente
esposto.
Dopo avere selezionato il
LED rosso nella barra degli strumenti visual si procede per trascinamento
nell’area di lavoro e alla successiva configurazione a cui si accede cliccando
con il tasto destro del mouse nel primo led verde.
L’azione comporterà
l’apertura di un menu a tendina con varie possibilità di scelta come in figura.
impostazione delle uscite digitali
virtuali
Definiamo
l’indirizzamento dei pin sul LED, bastera’ impostare il primo come GPIO 0 e
successivamente selezionare dallo stesso menu l’opzione “Next follow” passando
il parametro “down”. Automaticamente verranno impostati tutti i LED da GPIO
Potremo
poi cliccare su Led Color e definire i colori come indicati sul diagramma corsa
tempo.
Inseriamo
quindi due segnalatori acustici “buzzer” anche se il nostro progetto ne
presenta solo uno, questo perche’ sara’ possibile
indirizzarli ad un solo pin di uscita e la presenza dei due avra’ una
funzionalita’ finale analoga ad un unico buzzer connesso in locica OR DL Diode
Logic.
Dopo
aver trascinato i due buzzer procediamo al loro indirizzamento.
indirizzamento del buzzer simulato
Dopo
avere eseguito tutte le impostazioni previste il simulatore avrà l’aspetto
mostrato nell’immagine, in cui i LED gialli rappresenteranno solo l’eco
hardware dello stato dei pulsanti di ingresso.
RealPic simulator impostato per la simulazione del firmware
Eseguire la simulazione con RealPic
Dopo
avere correttamente impostato il simulatore come mostato al paragrafo
precedente si dovra’ procedere all’esecuzione del ciclo macchina agendo sui
pulsanti virtuali e valutando la correttezza delle risposte sull’HMI
simulata nei LED colorati.
Con
il diagramma corsa tempo alla mano proviamo tutte le
condizioni possibili di funzionamento eseguendo anche quelle manovre che
potrebbero mettere in crisi la logica programmata.
La
risposta del simulatore deve in ogni caso rispettare il diagramma corsa tempo.
Accendiamo
il processore virtuale cliccando nel triangolo verde che lancia in esecuzione
il firmware.
Sequenza di azioni da eseguire:
Dai test effettuati sul
firmware in maniera simulata con RealPic Simulator nella giornata del
Vediamo il filmato in cui si testa il firmware con la piattaforma Micro-GT versatile IDE.
video: collaudo del firmware su piattaforma Micro-GT
versatile I.D.E.
Come flaschare
il PIC smd.
Come possiamo vedere
dalle immagini sovrastanti,
La domanda che sorge
spontanea e', sara' possibile programmare un pic SMD con questa piattaforma?
Dato che l'architettura interna e' identica la programmazione deve essere
uguale, si tratta quindi di "accrocchiare" alla meno
peggio un sistemino che addatta le piedinature.
La soluzione che ho
pensato e' semplice e si e' dimostrata efficace, e' bastato collegare dei
tratti a 4 conduttori flat su ogni lato del PIC lunghi
circa
Nella foto sottostante vediamo il collegamento.
interfacciamento del PIC smd con il programmer.
Una volta espansi i pin
prolungandoli con il cavetto flat possiamo connettere il device allo zoccolo
texttool della Micro-GT IDE avendo l'accortezza di allinearlo alla parte bassa
dello zoccolo. Questo avvertenza serve per non
trovarci con segnali fissi quali l'alimentazione su pin sbagliati di questo
housing. Fatto questo colleghiamo il cavo ICSP come indicato nel data book del
12F629.
Per chi possiede uno starter kit della MicroChip bastera' collegarsi come si vede nella prossima immagine.
Se usate il programmer
della figura sovrastante, andate sul menu' device di MpLab e selezionate
12F629.
Non dovrete preoccuparvi
del settaggio dei fuse perche' come potete vedere dal
sorgente sono gia' settati correttamente a livello firmware tramite la riga di
codice:
__CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN &
WDTDIS & INTIO); //oscillatore interno a 4 Mhz .
MpLab riconosce i programmer in questo menu':
Le
fasi successive sono:
1)
caricamento del file .hex nella memoria del PC
2)
riversamento del programma dalla memoria del PC all'area flasch del PIC.
Il punto 1) si esegue da "file"
-> "import", questa e' l'unica e corretta maniera per caricare un
file hex. Vedrete aprirsi una finestra di
esplorazione. Navigate nelle cartelle fino a trovare il file che volete
caricare e fate doppio click.
Una volta che il file hex e' caricato in RAM, allora accendete il programmer agendo su:
Se il sistema risponde vedrete accersi le icone di manipolazine della flasch eprom a cura del programmer, ovvero queste:
Agendo sulla
terza icona inizia il trasferimento del file alli'interno del PIC. Vedrete il
flusso di dati scorrere nell'angolo in baso a sinistra
con un puntatore che mostra la riga di memoria in fase di programmazione. Se
tutto va bene il sistema risponde OK, se qualcosa va storto vi dice che le
righe della memoria del PIC non risultano uguali alle righe del programma hex
che avete in memoria RAM del computer.
Personalmente uso
Integrazione della Micro-GT nano con lo
chassy.
Diamo ora uno
sguardo alla parte di competenza di Mauro Sorrentino (ora dott. Sorrentino ..hehehe).
Usando un CAD 3D ha sviluppato lo chassy che possiamo vedere nella foto sottostante.
Vediamo una foto dell'assemblaggio della Micro-GT nano all'interno dello chassy.
Dimensioni comparate con la batteria CR3220. I pulsanti sono i classici "omron" da stampato.
Nella foto sono messi in evidenza i cavi di alimentazione positiva e negativa dalla batteria, e il cavo nero che collega i catodi comuni dei LED. Queste saldature sono state fatte da Mauro e devo dire che date le ridotte dimensioni e che si tratta di prime esperienze, si possono considerare un buon lavoro.
Il pulsante di accensione agisce sul LED indicato in questa figura come previsto dal diagramma corsa tempo posto al all'inizio dell'articolo.
Vediamo la risposta del sistema su questo LED come nella prossima immagine.
Lo spegnimento viene invece segnalato nel led Rosso nella prossima foto.
La segnalazione rimanente è quella che segnala l'azione acustica sul buzzer, si veda sempre il diagramma corsa tempo. Questo Led sarà giallo o bianco come quello montato in questo prototipo.
Non ci resta che presentare una visione di insieme del dispositivo terminato.
vista
frontale del dispositivo "Balia" disegnato da Mauro Sorrentino e che
contiene
Vista di insieme del dispositivo.
Nell'immagine seguente leggiamo la pagina introduttiva dei ringraziamenti nella tesi di Mauro.
Scarica la
relazione tecnica/tesi di Mauro sorrentino -> Download tesi Sorrentino.
Ora sta a voi sbizzarirvi
con altre creazioni per la nuova nata Micro-GT nano.
Voglio ricordarvi
che esiste una paginetta dedicata solo a questa piattaforma che si trova all'indirizzo
http://www.gtronic.it/community/community.html
Ogni vostro
intervento sara' graditissimo.
Un ringraziamento
a tutti gli amici che compaiono nei video postati con questo articolo come
Mirco, Marco Visentini, Alejandro.
un augurio di serenita' e salute a tutti voi
che avete letto questo articolo. Un augurio speciale va Mauro Sorrentino
affinchè possa avere una lunga e serena carriera iniziata questa settimana con
la sua laurea con un meritato 110 e lode.
Marco.
This opera
"Let's GO PIC26!!! SMD no fear
appendice.
E quando non si giocattola con
l'elettronica cosa si fa? I pochi momenti che
ci restano liberi li passiamo tra amici in quella grande citta' universitaria
che e' Padova.
E' una citta' sempre giovane e piena di
movimento.
Sono molto famosi i mercoledi' universitari
a base di spriz ! un intruglio rosso leggermente
alcolico che si usa tenere in mano mentre si chiacchera in una delle numerose
piazze o nell'affollatissimo getto.
Uno dei punti di ritrovo e' anche il bed
and brekfast della nostra amica Jenny dove ci si puo' anche lanciare in uno
spensierato karaoke.
Ecco la nostra amica Jenny che alle tre di notte ha ancora la forza per cantarci una canzone:
jenny del
B&B William
Il sito web del
bed and brekfast di jenny lo ha realizzato Marco Visentini ed e' visibile
all'indirizzo: http://www.bb-yewilliam.it/
Personalmente
credo sia il posto migliore dove passare un weekend con gli amici o con la
famiglia se ci si trova a Padova di passaggio o in visita turistica.
Siamo a pochi metri dalla stazione quindi e' anche comodo da raggiungere.
....ed anche oggi ho fatto quasi mattina !
Marco G as
ad.noctis