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.

  1. Se premiamo i pulsanti in maniera casuale non succede nulla (non si attiva il Tag Rfid)
  2. Se premiamo il maniera continuata per almeno 2,5 secondi il pulsante P1 allora si attiva il sistema accendendo il tag Rfid. La situazione viene segnalata con un rapido lampeggio del Led azzurro e dalla presenza del segnale acustico che segue il lampeggio del LED. In questa situazione delle pressioni casuali e fortuite dello stesso pulsante P1 non hanno effetto (il Tag rimane in trasmissione), mentre la pressione del pulsante P2 comporta una segnalazione del LED verde che indica che il trasmettitore e' acceso. La segnalazione di accensione del trasmettitore e' bistabile, ovvero realizzata secondo una logica Toggle del pulsante P2 ma temporizzata/ritardata di mezzo secondo (vedere la relazione tra la terza riga "P2" e l'ultima riga "GP4").
  3. Lo spegnimento del dispositivo e subordinato alla pressione volontaria per almeno 2,5 secondi del pulsante P1 e quando avviene e' segnalata con un lampeggio di mezzo secondo del Led rosso accompagnato da una segnalazione acustica della medesima lunghezza.
  4. Le operazioni da eseguire devono essere pensate per impedire azioni indesiderate di accensione e spegnimento dato che il dispositivo e' pensato per impeghi di sicurezza e monitoraggio ambientale.
     


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:

  • Standby current -> 1nA alla tensione di 2V
  • Operating current -> 8,5uA a 32KHz e alla tensione di 2 volt, ma con 1Mhz di clock l'assorbimento sale a 100uA.

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:

  1. Led blu -> segnala l'accensione del dispositivo ed e' connesso all'uscita GP5.
  2. Led rosso -> segnala lo spegnimento del dispositivo ed e' connesso all'uscita GP2.
  3. Led verde -> segnala, su rischiesta, se il Tag e' posto in trasmissione ed e' connesso a GP4.

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 0,08 pollici per 0,05 pollici. Analogamente per le altre misure che vediamo in questa libreria come 0603 o il microscopico 0402.

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 la Micro-Gt nano potra' trovare, una volta adattato il firmware, applicazioni diverse adatate alle vostre esigenze, quindi il numero dei pulsanti e dei led di uscita potrebbe variare.

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 la Micro-Gt mini".
 

 

 

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 12F.
 

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 0 a GPIO 5.

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:

  • cliccare in maniera rapida e casuale su P1 -> non deve succedere nulla
  • mantenere cliccato per t>2,5 sec P1 -> il sistema risponde con tre lampi rapidi sul LED blu e contestualmente emette tre squilli sul buzzer.  Il Tag Rfid si accende e lo stato e’ segnalato con GPIO1 che rimane acceso fisso.
  • provare delle pressioni casuali e brevi su P1 -> non succede nulla, nessun cambio di stato
  • agendo su P2, quando R-Fid e’ acceso -> ad ogni fronte di discesa cambia di stato il LED verde. Se R-Fid era spento non succede nulla.
  • Premendo per t>2,5 secondi P1 -> si spegne il Tag Rfid  e lo spegnimento e’ segnalato con un’azione monostabile di 0,5 secondi sul LED rosso. In questa situazione qualsiasi pressione dei pulsanti per un tempo t<2,5 secondi non ha alcun effetto.

 

Dai test effettuati sul firmware in maniera simulata con RealPic Simulator nella giornata del 13 Aprile 2012   il sistema risulta conforme alle specifiche fornite con i diagrammi corsa tempo per cui si può procedere alla prototipizzazione hardware reale.

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 Micro-GT dispone di uno zoccolo textool a 40 pin in grado di alloggiare praticamente ogni PIC purche' con il passo standard dual in line, ovvero il classico pth.

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 10 cm.

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 la Micro-GT IDE e la Micro-Gt mini ma per dovere di cronaca ho riportato che esistono anche altri metodi.

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 la Micro-GT nano.

 

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 Nascita della Micro-GT nano" is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Italy License

 

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