7/24/2019 FlowCode_completo.pdf
1/87
ElettronicaIn~ Giugno 2013 127
cors
o
FLOW
CODE
al giorno dellinvenzione del primotransistor, avvenuta ormai nel1947, lelettronica diventata parte
integrante della nostra vita, e sarebbeimpensabile ormai, credere di poter farea meno di questo tassello fondamentaledella storia dellevoluzione umana. Unadelle derivazioni pi comuni di questadisciplina sicuramente rappresentata dalmondo dei dispositivi embedded. Quandofacciamo una telefonata, o navighiamosu internet usando il nostro smartphone,quando guidiamo la nostra auto, quandofacciamo la spesa pagando con la no-stra carta di credito, in ognuna di questecircostanze, diversi dispositivi elettronici
dotati di intelligenza elaborano milioni diinformazioni al secondo, semplicandocila vita. Dietro tali dispositivi, veri e propriinstancabili ed invisibili servitori dei nostrigiorni, si cela comunque la mano delluo-
mo: qualcuno ne ha ideato le funzionalit,li ha progettati elettronicamente e ne hasviluppato la logica. Anche lo sviluppo deisistemi embedded ha subito una sua evolu-zione nel corso degli anni, e si passati daidispositivi totalmente analogici ai sistemi amicrocontrollore che, per svolgere il compi-to specico, devono essere opportunamen-te programmati, usando appositi linguaggidi programmazione. La programmazione,vero e proprio cuore dello sviluppo, stata
corso di programmazione in
FLOWCODEdi Francesco Ficili e Daniele Defilippi
D
Flowcode permette
di apprendere in
maniera molto
intuitiva lo sviluppo
di software per
applicazioni
embedded, in
quanto il codice
viene scritto facendo
uso di oggetti
grafici, in luogo dei
classici linguaggi
di programmazione
come il C e
lAssembler.
Prima puntata.
7/24/2019 FlowCode_completo.pdf
2/87
cors
oFLOWCOD
E128 Giugno 2013 ~ ElettronicaIn
e 18 (8-bit), Microchip dsPIC30F, dsPIC33F, dsPI-
C33E e PIC24 (E, H ed F), Atmel AVR e piattaforma Arduino, Atmel ARM.
Il concetto su cui si basa Flowcode lusodi una rappresentazione graca basata sudiagrammi di usso (o owchart, da cuiil nome Flowcode) per lo sviluppo di unprogramma per target embedded. Questoapproccio permette di rimpiazzare limple-mentazione basata sulle keywords, tipica deilinguaggi di programmazione tradizionali.Un esempio di frammento di codice gracoscritto in Flowcode riportato in Fig. 2.Lambiente di sviluppo, oltre a generare
leseguibile per la programmazione delchip (ed eventualmente anche la tradu-zione in codice sorgente C), integra unsimulatore ed un ICD (in-circuit debugger)per eseguire il debuggingdel codice diretta-mente sul target. Una delle caratteristichepi interessanti di Flowcode , come vedre-mo in dettaglio nelle prossime puntate, ladisponibilit di una ricca libreria di compo-nenti per lutilizzo delle periferiche nor-malmente integrate nei microcontrollori.Luso dei componenti semplica notevol-
mente laccesso alle periferiche, anche nelcaso delle periferiche pi complesse, come
per anni appannaggio di poche aziendenel mondo, essendo di fatto inaccessibilealle aziende non specializzate ed ai priva-ti, per via degli altissimi costi dei sistemidi sviluppo. Negli ultimi ventanni, conlavvento dei primi controllori basati sumemorie FLASH (riprogrammabili elettri-camente), il costo dei sistemi di sviluppo calato vertiginosamente, rendendo questotipo di tecnologie accessibili anche aglisviluppatori privati ed al mondo hobbi-stico. Sono cos comparsi i primi ambientidi sviluppo software e compilatori (gene-ralmente basati su linguaggi come il C elassembler) a basso costo. Tali ambientihanno, comunque, continuato a mantenerecaratteristiche di complessit duso ed i
linguaggi utilizzati richiedono, per esse-re impiegati efcacemente, delle basi diprogrammazione non indifferenti. Cos losviluppo su sistemi embedded diventatopi accessibile dal punto di vista econo-mico, ma le difcolt tecniche nelluso deitoolssono rimaste comunque uno scoglionotevole da superare per i neoti dellaprogrammazione software. Per ovviare aproblematiche di questo tipo sta nascendo,in questi anni, una nuova generazione diambienti di sviluppo, che ha lo scopo di
astrarre le difcolt intrinseche di un lin-guaggio di programmazione text-based, fa-cendo uso di formalismi pi comuni. Unodegli esponenti di spicco di questa nuovagenerazione di ambienti di sviluppo Flowcode, prodotto da Matrix Multimedia,azienda leader nel settore della produzionedi sistemi di sviluppo hardware/softwareper microcontrollori.
Programmazione grafica con Flowcode
Lambiente di sviluppo Flowcode, giuntoormai alla versione 5, nasce per ovviare alproblema della complessit degli ambientidi sviluppo tradizionali e per consentirelo sviluppo di applicazioni embeddedcomplesse anche a chi ha una minima(se non nulla) conoscenza di linguaggi diprogrammazione. Flowcode un completoIDE (Integrated Development Enviroment)per microcontrollori ad 8, 16 e 32-bit. Gliattuali target supportati sono: Microchip PICmicro della serie 10, 12, 16
Fig. 1
Logo della Matrix
Multimedia.
Fig. 2
Esempio
di codice
Flowcode.
7/24/2019 FlowCode_completo.pdf
3/87
cors
o
FLOW
CODE
ElettronicaIn~ Giugno 2013 129
ad esempio la porta USB, la porta Ether-net o altri sistemi di comunicazione e/ocontrollo. Una descrizione pi dettagliatadei componenti sar fatta in seguito, ma importante sottolineare che la disponibilitdi queste librerie consente di sviluppareapplicazioni anche molto complesse conlinterconnessione di pochi semplici blocchifunzionali.
Installazione e configurazione
di Flowcode V5Come primo argomento del corso illustria-mo come installare e congurare lIDE. Ilpacchetto di installazione di Flowcode scaricabile dal sito web della Matrix (www.matrixmultimedia.com) e, come gi detto pre-cedentemente, attualmente sono supportatidiversi target, a cui corrispondono diver-se versioni del software. Come versione
base del corso stata scelta la versioneper i microcontrollori PIC della MicrochipTechnology. Dopo esserci collegati al sitoweb della Matrix, accediamo alla sezionedownload e scarichiamo la versione perPICmicro.Al termine del download eseguiamo il leFlowcodeV5 - PICMicro.exe e avviamolinstallazione del programma. Compari-r il wizarddi installazione, la cui primaschermata riportata in Fig. 4. Premiamo ilpulsante Nextper accedere alla schermatasuccessiva, confermiamo di accettare lalicenza duso e proseguiamo.
Fig. 3
Sito Matrix
multimedia
per download
di FlowCode.
Fig. 5 - Accettazione della licenza duso.
Fig. 4 - Finestra iniziale di installazione di FlowCode.
7/24/2019 FlowCode_completo.pdf
4/87
cors
oFLOWCOD
E130 Giugno 2013 ~ ElettronicaIn
sviluppo correttamente installato epossiamo procedere alla realizzazionedelle nostre applicazioni. Come suppor-to hardware al corso verr utilizzato un
sistema modulare di schede di sviluppo,prodotte sempre dalla Matrix, che prendeil nome di E-block. Il sistema costituitoda una scheda madre alla quale possonoessere connessi diversi blocchi per espan-derne le funzionalit. Ogni blocco offrele risorse hardware necessarie per imple-mentare una specica interfaccia, come,ad esempio, porte USB o Ethernet, displaygraci, interfacce CAN, driver permotori passo-passo, etc. La scheda sceltacome scheda madre per lo sviluppodelle applicazioni che saranno presen-
tate lungo la durata del corso la EB006.La scheda EB006 corredata di un CD diinstallazione che serve per installare tutti idriver necessari per poter utilizzare corret-tamente il sistema di sviluppo. Inseriamoloallinterno del nostro lettore CD e posizio-niamoci allinterno della cartella drivers\EB-006. In base allarchitettura del nostroPC scegliamo dpinst_amd64 (64 bit AMDo Intel), dpins_ia64 (64 bit itanium) oppuredpins_x86 (32bit) ed avviamo leseguibile.Comparir la schermata di Fig. 8, che ci in-
forma che premendo sul pulsante Avan-ti verr avviata la procedura di installa-zione dei driver. Proseguiamo e, nel casoci venga noticato da Windows che non possibile vericare lautenticit dei driver,scegliamo di proseguire con linstallazio-ne. Al termine delloperazione apparir la
Inseriamo ora il nostro nome ed il nomenellorganizzazione (che in questo casoabbiamo indicato come ElettronicaIn),come illustrato inFig. 6, e premiamo anco-ra una volta il pulsante Next. Selezioniamola cartella di destinazione e procediamoalla schermata successiva.A questo punto ilwizardci chiede confermadi proseguire con linstallazione e dopoaverla ricevuta inizier il processo di copiadei le su disco. Al termine delloperazio-ne viene richiesto di attivare il prodottomediante una chiave di attivazione, o diattivare una licenza free, come possiamovedere in Fig. 7. La licenza free non halimitazioni in termini di tempo, ma atti-vato un set ridotto di componenti allinter-no dellambiente.
Installazione scheda di sviluppo EB006
A questo punto il nostro ambiente di
Fig. 6 - Inserimento dati di installazione.
Fig. 7 - Selezione codice attivazione prodotto.
Fig. 8
Schermata
iniziale
installazione
driver per
E-block
EB006.
7/24/2019 FlowCode_completo.pdf
5/87
cors
o
FLOW
CODE
ElettronicaIn~ Giugno 2013 131
schermata che ci indica che linstallazione
stata eseguita correttamente. Per conclu-dere linstallazione premiamo il pulsanteFine.Colleghiamo ora la scheda di sviluppoEB006 mediante il cavo USB (fornito indotazione) al computer. Il sistema operati-vo installer i driver aggiuntivi ed uno deidue led sulla scheda si accender, segna-landoci che il debugger attivo.
Interfaccia di Flowcode
A questo punto anche il nostro hardware
di sviluppo congurato e pronto peressere utilizzato, passiamo quindi alladescrizione dellinterfaccia di programma-zione dellIDE. Come gi detto nella parteintroduttiva di questa puntata, Flowcode un ambiente di sviluppo graco: questovuol dire che il programma non vienerappresentato, come avviene invece con ilinguaggi di programmazione tradizionale,da un codice testuale, ma verr compostofacendo uso solo di oggetti graci. Nelcaso di Flowcode la rappresentazionescelta quella dei diagrammi di usso (oowchart). Gli elementi base del diagram-ma di usso implementano le strutture dicontrollo fondamentali del programma,come i blocchi decisionali, i cicli, i ritardi, leselezioni multiple, le operazioni logiche ematematiche e altro ancora. Per la gestionedelle periferiche pi complesse sono inveceforniti una serie di componenti che nonsono altro che dei contenitori che offronodelle funzioni predenite, per semplicare
la gestione della periferica. Inne, tramite
un opportunowizarddi congurazione, possibile impostare la congurazione basedel microcontrollore, come la frequenzadel clock interno, eventuali protezioni, leimpostazioni sulla memoria, etc.Linterfaccia di FlowCode suddivisaprincipalmente in barre e pannelli, ognu-no dei quali ha uno specico compito cheora andremo ad analizzare. Qualora nontutte le barre siano visualizzate, possibileaggiungerle dal menu visualizza sempli-cemente aggiungendo una spunta vicino al
nome che le identica.In Fig. 9 rappresentata la schermata prin-cipale di Flowcode. Al centro dello scher-mo presente un tab (che nel nostro casosi chiama Main), che chiameremo areadi progetto nel quale verr implementatoil diagramma di usso. Nella parte sinistradello schermo invece presente la barradelle icone, dalla quale possibile sce-gliere quale blocco inserire allinterno delprogramma.
Fig. 9
Interfaccia
FlowCode.
Fig. 10
Barre degli
strumenti.
7/24/2019 FlowCode_completo.pdf
6/87
cors
oFLOWCOD
E132 Giugno 2013 ~ ElettronicaIn
In alto, sopra larea di progetto troviamo labarra degli strumenti (illustrata in Fig. 10),
che ci fornisce i comandi base per gestireil progetto, generare codice, debuggare,compilare e simulare il nostro progetto.Tra la barra degli strumenti e larea diprogetto troviamo invece la barra deicomponenti che ci consente di utilizzare,allinterno dei nostri progetti, componenticomplessi quali USB, Ethernet, controllodi motori brushless, e molto altro ancora,semplicemente inserendoli allinterno delpannello che visibile in basso al centrodella schermata del programma.
La barra delle icone, rappresentata inFig.11, contiene tutti i possibili blocchi chepossono essere aggiunti allinterno deldiagramma di usso. Per inserire un bloc-co sufciente trascinarlo allinterno deldiagramma: una freccia gialla ci indicheril punto esatto in cui lo stiamo inserendo elicona del mouse viene modicata pren-dendo la forma delloggetto che vogliamoinserire allinterno del nostro diagrammadi usso.Descriveremo nelle prossime puntate lealtre barre e pannelli che non abbiamoapprofondito in questa sezione.
Creare un progetto
Per creare un progetto apriamo Flowcodee premiamo sul pulsante Nuovo progettonella barra degli strumenti. Congureremoquesto progetto in modo da poterlo utiliz-zare negli esempi che vedremo in seguito.Selezioniamo il microcontrollore sce-gliendo la famiglia 18 e successivamente
18F4550, come indicato in Fig. 12. Orapassiamo al tab Descrizione progetto einseriamo una descrizione signicativa.Dal punto di vista della funzionalit delprogramma non cambia nulla se lasciamovuoti questi campi ma, per poter capiremeglio che cosa realizza il nostro progetto,sarebbe buona norma inserirne almenouna breve descrizione. Nel nostro casoabbiamo inserito il titolo e la descrizionedel progetto che realizzeremo al termine diquesta puntata: un semplice programma
che fa lampeggiare un LED.Allinterno del tab Operazioni Generali,visibile in Fig. 14, conguriamo il progettoin modo che rispecchi limplementazionehardware del sistema. La casella Velocitdi clock del PIC deve essere impostata a48MHz e la casella Congura componen-te deve essere selezionata. Passiamoora a congurare i settaggi specici delmicrocontrollore cliccando sul pulsante
Fig. 11
Barre
delle
icone. Fig. 12
Opzioni di progetto.
Fig. 13Inserimento
descrizione
progetto.
7/24/2019 FlowCode_completo.pdf
7/87
cors
o
FLOW
CODE
ElettronicaIn~ Giugno 2013 133
Congura componente, che ci far accede-re a una schermata di congurazione come
quella rappresentata inFig. 15. Per motividi tempo ci limiteremo a settare ogni cam-po come indicato in gura, senza soffer-marci sul perch di ogni scelta, che potrcomunque essere approfondita leggendoil datasheetspecico del microcontrolloreutilizzato. Dopo aver correttamente compi-lato ogni campo premiamo il pulsante OK,per tornare alla schermata di congurazio-ne di progetto e nuovamente premiamoOK per iniziare a realizzare il diagrammadi usso.
Per poter utilizzare questa congurazionenegli esempi successivi salviamo il proget-to, premendo sul pulsante Salva progettonella barra degli strumenti, con il nomeCongurazioneBase.fcf.
Aggiunta di blocchi
nel diagramma di flusso
Una volta completata la congurazionedellhardware, torniamo nellarea proget-to per inserire blocchi del diagramma diusso. Per inserire un blocco basta trasci-narlo dalla barra delle icone allinterno
dellarea di progetto. Una freccia gialla ciindicher il punto esatto in cui lo stiamoinserendo. Per rimuovere un blocco bastaselezionarlo e premere il tasto Canc.Cliccando sul blocco con il tasto destro possibile eseguire altre operazioni qualitagliarlo, copiarlo, esaminarne le propriete altro ancora che vedremo nelle puntatesuccessive.Proviamo ora a esaminare le propriet di
un blocco. Come prima operazione inse-riamo il blocco di gestione delle uscite delmicrocontrollore, trascinando allinternodellarea di progettolicona uscita, (pre-sente nella barra delle icone) tra i blocchidi INIZIO e FINE, gi presenti di defaultallinterno del diagramma. Cliccandocon il tasto destro sul blocco che abbiamoinserito appare la nestra a scomparsa diWindows. Scegliamo lopzione Proprieted esaminiamo la nestra che si aperta,
riportata per comodit nella Fig. 16.Possiamo ora impostare tutte le proprie-t disponibili per il blocco che abbiamoselezionato. Il blocco utilizzato percontrollare lo stato delle uscite del nostromicrocontrollore. Nella lista a scorrimen-to Port possiamo selezionare la portadella quale vogliamo modicare il valore
Fig. 14
Impostazioni generali
nuovo progetto.
Fig. 15Configurazione
specifica del
microcontrollo
Fig. 16
Propriet
blocco uscita.
7/24/2019 FlowCode_completo.pdf
8/87
cors
oFLOWCOD
E134 Giugno 2013 ~ ElettronicaIn
di uscita, mentre nella casella Variabileo Valore indichiamo il valore alla qualevogliamo impostare la porta selezionata.Solitamente non vogliamo impostare ilvalore dellintera porta di uscita, ma solodi uno o alcuni bit. Per far ci ci viene inaiuto il pannello Uscita a. Se selezionia-mo Singolo bit possiamo scegliere quale
bit impostare lasciando invariato il valoredegli altri pin della porta. SelezionandoIntero Port e selezionando la casella Usa
Maschera possibile selezionare quali bitdevono essere impostati. In questo modo possibile lasciare invariati i valori dei pindella porta il cui bit non contrassegnatonella maschera. La casella di testo Eti-chetta permette di modicare il testo cheverr indicato sopra il blocco allinternodel diagramma. molto importante indicareper ogni blocco unetichetta signifcativa per-ch, anche se per progetti molto semplici pusembrarci inutile, qualora volessimo realiz-zare diagrammi complessi, potrebbe esserci
molto di aiuto avere a disposizione etichetteche, con poche parole, ci indichino che cosaimplementa quel particolare blocco. Sonoin pratica lequivalente dei commenti scritti
durante la stesura di un codice realizzato inun qualsiasi linguaggio di programmazione.Inseriamo adesso un ritardo softwareallinterno del nostro schema a blocchi. Per
eseguire questa operazione selezioniamolicona del blocco di ritardo, presente sem-pre nella barra delle icone, e trasciniamolaallinterno del diagramma, posizionandolaproprio sotto il blocco precedentementeinserito. A questo punto accediamo allepropriet del blocco, cliccando con il tastodestro del mouse, come abbiamo fattoprecedentemente. Come possibile vedereinFig. 17, il blocco permette di inserireun ritardo nellesecuzione del usso delprogramma. Possiamo scegliere lentit delritardo da inserire indicandone il valore e
lunit di misura. Il valore che possiamoinserire deve essere di tipo intero, ciosenza virgola, ma possiamo comunqueinserire ritardi minori del secondo pas-sando allunit di misura con risoluzionemaggiore. Ad esempio per aggiungereun ritardo del valore di 0.5s baster cheinseriamo allinterno della casella valoreritardo, il numero 500, mentre come unitindichiamo millisecondi. Ricordiamociche 1 millisecondo equivale a 1000 micro-secondi e che 1 secondo equivale a 1000
millisecondi.Le strutture di controllo flusso
Passiamo ora ad analizzare alcune delle
Fig. 17
Propriet
blocco
ritardo.
Fig. 18
Struttura
decisionale
binaria e
panello di
onfigurazione
del confronto.
7/24/2019 FlowCode_completo.pdf
9/87
cors
o
FLOW
CODE
ElettronicaIn~ Giugno 2013 135
Il blocco implementa di default la strutturaFinch, ma per realizzare gli altri duecostrutti basta modicarne le proprietcome visto per gli altri blocchi nelle sezioniprecedenti. Analizziamo le tre opzioniofferte:
Ciclo FinchFintanto che lequazione di confrontorisulta vera vengono eseguite le istruzioniallinterno del ciclo. Il confronto effettua-to al primo ingresso nel blocco di ciclo edogni volta che vengono terminate tutte leistruzioni interne al ciclo. Quando il con-fronto risulta falso le istruzioni interne nonsono pi eseguite e il programma continuaattuando le istruzioni successive al ciclo.Nel caso in cui lequazione di confrontorisulti falsa al primo controllo, il codiceinterno al ciclo non viene eseguito neppureuna volta e il programma continua la suaesecuzione ignorando le istruzioni conte-nute allinterno dei due blocchi di ciclo. Unesempio di ciclo di questo tipo riportatoin Fig. 20.
Ciclo EseguiFinchImpostando la propriet del blocco Te-sta il ciclo a: al valore Termine, come in
altre icone presenti nella barra delle icone.In Flowcode possono essere utilizzate tuttele normali strutture di controllo presentinormalmente nei linguaggi di programma-
zione come, a titolo di esempio, il C.Decisione binariaMediante licona decisione possibileimplementare la funzionalit di decisio-ne binaria. Il blocco fa s che il usso diprogramma passi per il primo o il secon-do ramo, in base al valore del confrontoeffettuato allinterno del blocco. In pratica,se la condizione vericata, il programmacontinuer lesecuzione dei blocchi presen-ti nel ramo identicato dalletichetta si,altrimenti eseguir laltro ramo. Per coloro
che conoscono il linguaggio C il blocco lequivalente dellistruzione if.
Selezione multiplaUtilizzando licona selezione possibileimplementare la funzionalit di selezionemultipla. Il usso di programma deviatoattraverso il ramo per il quale lequazionedi confronto soddisfa il valore indicatoallinterno del caso specico. Qualoranessuno dei casi indicati soddis lequa-zione di selezione, il programma eseguir
le istruzioni presenti nel ramo di default.Possono essere realizzate selezioni conmassimo 10 differenti casi, ma questonumero pi che sufciente per realizzarela maggior parte dei possibili programmi.In pratica se uno dei rami indicati ha comeetichetta il valore che soddisfa lequazioneviene eseguito, altrimenti viene scartato.Solo uno dei rami pu essere eseguito edognuno deve avere un valore di selezionedifferente dallaltro. lequivalente del costrutto switchcase di un programma implementato inlinguaggio C. Un esempio duso dellastruttura di selezione multipla riportatoin Fig. 19.
Icona cicloLicona Ciclopermette di realizzare tre dif-ferenti controlli di usso:- Finch- Esegui...nch- Ripeti
Fig. 19
Struttura
di selezione
multipla.
Fig. 20
Ciclo
while
(Finch
vero).
7/24/2019 FlowCode_completo.pdf
10/87
cors
oFLOWCOD
E136 Giugno 2013 ~ ElettronicaIn
Fig. 21, lo rendiamo equivalente al bloccorealizzato in C con le istruzioni Do While.In questo caso listruzione di confronto eseguita al termine di ogni attuazione delleistruzioni contenute allinterno del ciclo.Il codice interno quindi eseguito almeno
una volta.
Ciclo RipetiSelezionando la propriet del blocco aNumero cicli:, come stato fatto in Fig.22, il ciclo viene impostato per funzionarecome un for. Congurato in questo modole istruzioni interne vengono eseguite unnumero di volte pari al numero indicato
nella cella a anco dellimpostazione Nu-mero cicli:. Il blocco fondamentale quan-do abbiamo bisogno che una porzione delnostro diagramma di usso venga eseguitaper un numero predenito di volte.
Esempio pratico:facciamo lampeggiare un LED
Ora che conosciamo i blocchi principali e lepossibili variazioni per il controllo di us-so, possiamo implementare un semplicediagramma per far lampeggiare un LED.Per realizzare questo esempio abbiamo
bisogno dei seguenti componenti:- EB006 USB PICmicro multiprogram-
Fig. 21 - Ciclo Esegui ...Finch. Il confronto effettuato al termine del blocco. Fig. 22 - Ciclo Ripeti.
Fig. 23
Scheda EB006
a sinistra e
scheda
E-Blocks
EB004 a
destra.
7/24/2019 FlowCode_completo.pdf
11/87
cors
o
FLOW
CODE
ElettronicaIn~ Giugno 2013 137
mer board- EB004 LED Board- PIC18F4550
- Quarzo 12MHz
La scheda EB006 contiene ilmicrocontrollore e lhardware necessariper interfacciarsi con le altre schede E-Blocks e il PC dal quale lo programmiamo;deve essere congurata per poter essereutilizzata nel nostro esempio. I jumper diselezione dellalimentazione devono essereposizionati sul lato di sinistra, in mododa far s che lalimentazione provengadallUSB. Il jumper di programmazione
deve anchesso essere settato su USB, inmodo da poterlo programmare diretta-mente da PC, senza lausilio del program-matore ICSP della Microchip. Sostituiamoora il microcontrollore che attualmentemontato sulla scheda con il PIC18F4550.Questa operazione molto delicata, quin-di dobbiamo prestare molta attenzione nelrimuovere il microcontrollore senza dan-neggiare la scheda di sviluppo. Per evitaredanni aiutiamoci con il tappo di una biroed eseguiamo loperazione come indicatonella sequenza di Fig. 24.Facendo attenzione alla direzione dellal-loggiamento a 40 pin, inseriamo il PI-C18F4550, assicurandoci che tutti i piedinientrino senza piegarsi, allinterno dellozoccolo. Per piegare correttamente i pie-dini del PDIP40, possiamo aiutarci con ilpiano della nostra scrivania, appoggiandoil PDIP di traverso e facendo leva sul case,nch i piedini risultano paralleli al bordo.A questo punto sostituiamo il quarzo
con uno a 12MHz e spostiamo iljumperdiselezione della sorgente di clock su OSCe linterruttore di selezione oscillazione suXTAL. Un riassunto graco dellimposta-
zione dei vari jumper riportato in Fig. 25.Colleghiamo ora la scheda EB006 con la E-Blocks EB004 utilizzando la PORT A, comeillustrato in Fig. 26.
Lhardware ora pronto e possiamo dedi-carci allimplementazione del programma.Apriamo Flowcode e carichiamo la con-gurazione di base che avevamo salvatodurante la congurazione del nostro primoprogetto. Premiamo sul pulsante Apriprogetto nella barra degli strumenti eselezioniamo il le CongurazioneBase.fcf.Per evitare di sporcare il le, dato cheFlowcode durante alcune operazioni salvaautomaticamente il progetto, salviamoimmediatamente il progetto con un nuovonome. Dal menu scegliamo File/Salva connome... e indichiamo come nuovo nomeLampeggioLed.fcf. Proviamo ora a pensare
Fig. 24
Metodo per la rimozione del
microcontrollore PIC.
Jumper selezione
alimentazione
Jumper selezione
Programmatore
Jumper selezione
funzione pin oscillatore
Selettore
oscillatore
Fig. 25
Configurazione
selettori e jump
scheda EB006.
7/24/2019 FlowCode_completo.pdf
12/87
cors
oFLOWCOD
E138 Giugno 2013 ~ ElettronicaIn
alle operazioni che devonoessere eseguite per fare inmodo che si veda lampeg-giare un LED sulla scheda.Innanzitutto dobbiamorealizzare un ciclo innitoche il programma dovreseguire per tutto il tem-
po di attivit e per questoscegliamo il blocco Finch.Impostiamo in modo che ilciclo venga sempre eseguitocome descritto nella sezio-ne precedente. Abbiamopoi bisogno di qualcosache ci permetta di modi-care il valore di un pindel microcontrollore ed il
blocco che fa al caso nostro licona uscita. Inseriamodue blocchi allinterno delciclo e impostiamoli inmodo che il primo setti il bit0 al valore 1 e il secondo il
bit 0 al valore 0. Se eseguis-simo il usso cos comattualmente implementato,
vedremmo a causa dei fe-nomeni sici interni al no-stro occhio il LED sempreacceso, ma con unintensitminore rispetto a quel-la massima. Per evitarequesto problema inseriamo
un blocco di ritardo dopoil set a uno della porta eun altro identico - dopoil blocco di set a zero dellaporta. Impostiamo il valoredel ritardo a 1 secondo perentrambi i blocchi inseriti.Se avete eseguito tuttocorrettamente dovresteottenere un diagrammadi usso simile a quelloriportato in Fig. 27.
Il nostro usso ora pron-to per essere caricato sullascheda. Salviamo il pro-getto premendo il pulsantesalva progetto nella barradegli strumenti perch loriutilizzeremo in seguitocome base di partenzaper altri esempi. Premia-mo il pulsante compila etrasferisci per caricare ilprogramma allinterno delmicrocontrollore presen-te sulla nostra scheda disviluppo. Attendiamo cheil programma esegua leoperazioni e al terminedel caricamento potremonotare che il nostro primoprogramma viene eseguitosulla scheda con il LED chesi accende e si spegne ognisecondo.
Fig. 26
Configurazione
completa per la
realizzazione
dellesempio.
Fig. 27
Diagramma di flusso per il
lampeggio del led collegato
alla porta A pin 0.g
7/24/2019 FlowCode_completo.pdf
13/87
ElettronicaIn~ Luglio / Agosto 2013 113
cors
o
FLOW
CODE
ella scorsa puntata del corso abbia-mo iniziato a prendere condenzacon lambiente di sviluppo graco
FlowCode, sviluppato da Matrix Multime-dia. stato presentato lambiente graco,descritta dettagliatamente linterfaccia,presentate le strutture di controllo ed stato illustrato un primo esempio di pro-grammazione. In questa puntata spieghe-remo luso delle variabili, delle costanti edescriveremo i blocchi ingresso e calcolo.Successivamente verranno descritte duefunzionalit molto potenti di owcode: lemacro e i componenti. Con le conoscenzeacquisite realizzeremo il secondo progettopratico: la gestione del modulo E-block
LED tramite il modulo KeyPad, usandone irispettivi componenti software.
Le variabili in Flowcode
Nella puntata precedente abbiamo utiliz-zato unicamente periferiche di uscita e nonabbiamo mai fatto uso di variabili, che sonoinvece una parte molto importante dellaprogrammazione in quanto ci permettonodi memorizzare dati ed effettuare calcoli.Attraverso il menu principale di FlowcodeVisualizza->Esplora progetto, apriamo ilpannello aggiuntivo nel quale possiamoesaminare tutte le costanti e le variabiliglobali disponibili allinterno del nostroprogetto, come illustrato in Fig. 1.
corso di programmazione in
FLOWCODEdi Francesco Ficili e Daniele Defilippi
N
Continuiamo il
nostro viaggio alla
scoperta di Flowcode,
linnovativo sistema
di sviluppo grafico
per microcontrollori
proposto da Matrix
Multimedia. Flowcode
permette di svilupparecon facilit il software
per applicazioni
embedded in quanto
il codice viene scritto
facendo uso di oggetti
grafici, in luogo dei
classici linguaggi di
programmazione come
il C e lAssembler.
Seconda puntata.
7/24/2019 FlowCode_completo.pdf
14/87
cors
oFLOWCOD
E114 Luglio / Agosto 2013 ~ ElettronicaIn
giungere una nuova costanteposizioniamo il mousesulletichetta costanti,clicchiamo con il tasto destroe scegliamo dal menu a ten-dina Aggiungi nuovo. Nellanestra di congurazione,mostrata in Fig. 4, inseriamoil nome della costante, il suovalore e una breve descrizio-ne. Le costanti non neces-sitano dellindicazione di
tipo perch vengono trattatecome delle #dene.
Rimozione divariabili/costantiQualora volessimo cancellareuna variabile o una costante sufciente selezionare con ilmouse lelemento desideratodal pannello esplora progetto,allinterno della sezione Glo-bali, e premere il pulsanteCanc. Al termine del pro-getto potrebbe risultare moltoutile rimuovere tutte quellevariabili/costanti che risul-tano incluse nella lista, manon sono utilizzate allinternodel nostro progetto. Per farci basta cliccare con il tastodestro su Variabili o Co-stanti allinterno del pannelloEsplora progetto e scegliere
Aggiungere variabiliPer aggiungere una nuovavariabile dobbiamo posizio-nare il mouse sulletichettavariabili e cliccare conil tasto destro in modo dapoter scegliere dal menu atendina la casella aggiunginuovo, come mostrato inFig. 2.Premendo sul pulsante Ag-giungi nuovo viene aperta
la nestra di creazione diuna nuova variabile, comeevidenziato in Fig. 3.I tipi di dati nora suppor-tati spaziano da logici anumerici, con o senza segno,numeri a virgola mobile estringhe. Per congurare lavariabile dobbiamo inserireil nome, il valore iniziale,una breve descrizione e iltipo. Premendo il pulsanteOK la variabile viene cre-ata e aggiunta alla lista nellanestra di esplorazione delprogetto.
Aggiungere costantiAlla creazione di un nuovoprogetto sono gi presentidue costanti pre-congurate:false e true, rispettiva-mente ai valori 0 e 1. Per ag-
Fig. 1
Progetto
Flowcode
on pannello
esplora
progetto
visibile sulla
destra della
schermata.
Fig. 2 - Aggiunta variabile.
Fig. 3 - Finestra di creazione/
configurazione variabile.
Fig. 4 - Finestra di creazione/
configurazione costante.
7/24/2019 FlowCode_completo.pdf
15/87
cors
o
FLOW
CODE
ElettronicaIn~ Luglio / Agosto 2013 115
dal menu a tendina lopzioneCancella inutilizzati.
Blocco ingresso e calcolo
La scorsa puntata avevamoesaminato il blocco di outpute quello di ritardo. Siamoquindi capaci di imporreil valore di una porta/pindi uscita e di attendere untempo pressato tra dueoperazioni. Impariamo ora a
utilizzare il blocco di ingressoe di calcolo.
Blocco ingressoIl blocco ingresso il bloccoduale del blocco uscita cheabbiamo utilizzato nellapuntata precedente percontrollare i pin di uscita delmicrocontrollore. Per inserireil blocco, trasciniamo dallaBarra delle icone licona corri-spondente nel diagramma di usso. Come
per gli altri blocchi, eseguendo un doppioclic sullicona, possibile aprire la nestradi congurazione, mostrata in Fig. 5.Selezionando dalla lista a scorrimentoPort:, impostiamo la porta dalla quale vo-gliamo effettuare la lettura e, nella caselladi testo Variabile:, inseriamo il nome dellavariabile nella quale vogliamo caricare ilvalore letto. Premendo sulla freccia a destradella casella di testo apriamo la nestra di
selezione che pu aiutarcia scegliere quale variabileutilizzare, come mostrato inFig. 6. Possiamo scegliere trale variabili locali o tra quelleglobali e, qualora non fosseroancora state create, possiamocrearle direttamente dallanestra come abbiamo fattoin precedenza dal pannelloesplora progetto. Facendodoppio clic su una variabile
presente nella lista, possiamoinserirla direttamente nellacasella di testo di congura-zione del pannello.Esattamente come per ilpannello di congurazionedelle uscite, sono disponibilile opzioni Singolo Bit e lamascheratura. Nellesempioin Fig. 7la variabile assume-r il valore di PORTA, maunicamente per il 2 e 4 bit
perch solo il pin 1 e 3 hanno la spunta.
Facciamo un esempio. Supponiamo chePORTA abbia un valore pari a 9, che in
binario equivale a 0b00001001. Nella va-riabile VariabileIngresso avremo il valore8 mascherato con 0b00001010 che ha comerisultato 0b00001001 AND 0b00001010 =0b00001000, cio 8.
Blocco calcoloAltro blocco di fondamentale importanza
Fig. 5
Blocco di
ingresso e
finestra di
configurazion
Fig. 6 - Finestra di selezione
variabile.
Fig. 7 - Esempio di
mascheratura porta di ingresso.
7/24/2019 FlowCode_completo.pdf
16/87
cors
oFLOWCOD
E116 Luglio / Agosto 2013 ~ ElettronicaIn
Nella casella di testo Calcoli possonoessere inserite le righe nelle quali speci-chiamo i calcoli da effettuare, mentre nellaparte di destra presente un pannello di
selezione dal quale possiamo attingere ivalori delle variabili, delle costanti e dellefunzioni che Flowcode ci mette a disposi-zione. Gli operatori logico/matematici chepossiamo utilizzare sono rappresentati inTabella 1.Le funzioni valide sono invece riportate inTabella 2.Per capirne meglio il funzionamento fac-ciamo un semplice esempio. Supponia-mo di avere la variabile LunghezzaInchche contiene il valore di una lunghezzarappresentato in pollici e di volerla
quello che ci permette di svolgere i calcoliallinterno del nostro diagramma di usso.Per inserirlo basta scegliere licona calcolodalla Barra delle icone e trascinarlo allin-terno dellarea di progetto. Facendo doppioclic sul blocco entriamo nella nestra dicongurazione, come mostrato in Fig. 8.
convertire in centimetri allinterno dellavariabile LunghezzaCm. Il frammento di
codice necessario per svolgere questa sem-plice operazione indicato in Fig. 9.
Le macro e i componenti software
Gli esempi che abbiamo visto no ad orautilizzavano un numero limitato di bloc-chi per implementare la funzionalit, manormalmente non possibile implementareun intero usso su un unico diagramma.Il blocco macro ci di ausilio in questocompito. In pratica ci permette di crearedelle sottoparti di diagramma su aree dilavoro differenti e di poterle richiamare
agevolmente.
Creare una macroPer creare una macro entriamo nel menuMacro e premiamo su Nuova... La ne-stra di congurazione ci permette di gestiree congurare tutte le caratteristiche salientidella macro. Allinterno della casella Nomedella nuova macro inseriamo il nome conil quale richiameremo la macro allinterno
Fig. 8
Finestra
propriet del
locco calcolo.
( , ) Parentesi
= , Uguale a, diverso da
+ , - , * , / , MODAddizione, sottrazione, moltiplicazione, divisione e
modulo
=Minore di, minore o uguale a, maggiore di, maggiore o
uguale a
>>,
7/24/2019 FlowCode_completo.pdf
17/87
cors
o
FLOW
CODE
ElettronicaIn~ Luglio / Agosto 2013 117
del nostro diagramma di usso e, anche senon obbligatorio, vivamente consigliatoinserire dei commenti allinterno della ca-sella descrizione nuova macro per facilitarein futuro la comprensione della funzionali-t che svilupperemo allinterno.Una macro pu comunicare con il dia-gramma che la istanzia facendo uso diparametri, di valori di ritorno e di variabiliglobali, esattamente come avviene peruna classica funzione in linguaggio C. Iparametri sono utilizzati quando neces-sario passare dei valori dal diagrammachiamante alla macro. Il valore di ritorno utilizzato quando si vuole restituire aldiagramma chiamante un valore mentre levariabili globali possono essere utilizzate
in tutti gli altri casi. Quando una macroutilizza delle variabili globali sarebbe buo-na norma indicare, nella descrizione dellamacro, tipo e nome delle variabili globaliin modo che, qualora si dovesse riutilizza-re la macro in altri diagrammi, si possanoricreare tutte le variabili in modo corret-to. Una volta creata, la macro pu essereistanziata nel diagramma di usso usandolicona macro e valorizzando opportu-namente gli eventuali parametri. Durantela spiegazione del progetto pratico di
questa puntata, vedremo un esempio checi aiuter a comprendere come conguraree utilizzare una macro allinterno di unprogetto Flowcode.
Esportare e importare una macroMediante il menu macro nella barra prin-cipale di Flowcode possibile esportareuna macro in modo da renderla disponibi-le per altri progetti. La macro scelta verrquindi salvata in formato *.fcm e potressere importata utilizzando lo stessomenu. Questa potenzialit di Flowcode ci
permette in pratica di creare una libreriadi macro che possiamo incrementare ogniqualvolta creiamo una funzione che pen-siamo possa essere utile e riutilizzabile inaltri progetti.
I componenti
La possibilit di creare delle macro moltoimportante, mentre fondamentale lapossibilit di utilizzare i componenti. I
componenti sono stati realizzati da MatrixMultimedia per esserci di aiuto nello svi-luppo di progetti complessi. La libreria deicomponenti suddivisa in base alla tipolo-
gia. Possiamo trovare i seguenti principaliraggruppamenti: Comuni, Ingressi, Uscite,Trasmissioni Dati, Wireless, Periferiche,Elettromeccanici, Moduli Miac e Varie.Per il momento i gruppi e i componentidisponibili sono quelli che vi mostreremodurante il corso, ma nelle versioni succes-sive questa libreria sar sicuramente piampia e ricca di nuove funzionalit.
La barra dei componentiLa libreria dei componenti di Flowcode accessibile mediante la barra dei componen-ti mostrata in Fig. 10. I blocchi disponibilisono organizzati per area tematica in mododa facilitarci nella ricerca. I componentipossono essere utilizzati per aiutarci nellarealizzazione di sistemi, anche molto com-plessi, permettendoci di trascurare limple-mentazione effettiva del driver del com-ponente, lasciandoci cos concentrare sulla
Fig. 10
Barra dei componenti.
Fig. 11
Principali
componenti
disponibili in
Flowcode.
7/24/2019 FlowCode_completo.pdf
18/87
cors
oFLOWCOD
E118 Luglio / Agosto 2013 ~ ElettronicaIn
funzionalit che vogliamo implementare.Per essere correttamente utilizzato, uncomponente - dopo essere stato inserito- deve essere congurato utilizzando lapropria interfaccia specica. Nelle sezionisuccessive ne vedremo alcuni esempi.
Aggiungere un componente softwarePer aggiungere un componente software
basta cliccare sulla barra di libreria (nel
nostro caso inseriamo un LED, come rap-presentato in Fig. 13) e vedremo apparire
nel pannello, in basso, il componente cheabbiamo scelto.Ora il componente attivo allinternodel nostro progetto ma, per funzionarecorrettamente, deve avere le connessionicongurate opportunamente. Clicchiamosul componente con il tasto destro delmouse, come in Fig. 13. A questo puntosi apre un menu a tendina: premiamo suConnessioni in modo che si apra la ne-
stra di settaggio come mostrato in Fig. 14.Conguriamo le connessioni per collegare
Fig. 12
Inserire il
componente
LED
utilizzando
la Barra dei
componenti.
Fig. 13
Menu
connessioni
relativo al
componente.
7/24/2019 FlowCode_completo.pdf
19/87
cors
o
FLOW
CODE
ElettronicaIn~ Luglio / Agosto 2013 119
il componente LED al pin 0 di PORTA.Ora il componente software conguratoed possibile inserirlo, dove necessario,allinterno del nostro usso di programma.Per far ci basta inserire licona macro com-ponente, selezionandola dalla Barra delleicone e trascinarla in posizione corretta
allinterno del nostro diagramma. Pi bloc-chi possono utilizzare lo stesso componen-te in modo da svolgere una o pi attivitallinterno del diagramma di usso.Per poter funzionare correttamente, il bloc-co deve essere congurato. Per far ci bastache con doppio clic entriamo nella nestraPropriet: Componente macro e selezionia-mo nella parte di sinistra il componenteal quale deve far riferimento il blocco, nelnostro caso LED(0). Vedremo cos apparirenella parte di destra le macro che possono
essere chiamate, come mostrato in Fig.15. In questo caso, avendo scelto il LED,abbiamo a disposizione due macro: quel-la per accendere il led LEDOn e quellaper spegnerlo LEDOff. Selezioniamo lafunzionalit voluta e premiamo il pulsanteOK per terminare la congurazione.Tutti i componenti hanno inoltre dellepropriet extra, accessibili mediante tastodestro sul componente, selezionando lavoce Propriet extra. Per ogni componen-te verr aperta una nestra specica condifferenti caratteristiche congurabili. Nelpannello relativo al componente LED possibile impostarne la forma, il colore e lapolarit, come mostrato in Fig. 17.
Progetto Pratico:
gestione di 3 LED tramite Keypad
Passiamo adesso alla realizzazione di unprogetto che ci consenta di mettere inpratica alcuni dei concetti esposti in questapuntata e che ci aiuti a prendere maggior
condenza con i primi componenti diFlowcode. Quello che ci proponiamo direalizzare un sistema di controllo chegestisca i dati in ingresso da un KeyPad a12 tasti (il classico KeyPad telefonico) e cheutilizzi le informazioni lette per gestire ungruppo di tre LED. Le speciche del nostro
sistema sono le seguenti: alla pressione del tasto 1 del KeyPad ac-
cendere il LED1 e spegnere gli altri LED; alla pressione del tasto 2 del KeyPad ac-
cendere il LED2 e spegnere gli altri LED; alla pressione del tasto 3 del KeyPad ac-
cendere il LED3 e spegnere gli altri LED; alla pressione del tasto cancelletto del
Keypad spegnere tutti i LED.
Abbiamo utilizzato i LED per sempli-cit didattica ma avremmo potuto, con
lo stesso sistema, pilotare dei rel, delleelettrovalvole o altri carichi esterni.
Fig. 14
Esempio
di connes-
sioneper il
componente
LED.
Fig. 15
Macro
disponibili
per il
componente
LED.
Fig. 16 - Propriet extra relative
al componente LED.
7/24/2019 FlowCode_completo.pdf
20/87
cors
oFLOWCOD
E120 Luglio / Agosto 2013 ~ ElettronicaIn
Per realizzare questo progetto abbiamobisogno dei seguenti componenti:
- EB006 USB PICmicromultiprogrammer-board(PIC18F4550 e Quarzo 12MHz)
- EB004 LED Board- EB014 Keypadboard
Colleghiamo ora le schede in modo daavere i LED su PORTA ed il tastierino sulla
PORTB, come mostrato in Fig. 17.Apriamo ora il progetto vuoto che aveva-mo creato con il nome CongurazioneBase.fcf e salviamolo con il nomeSwitchLed.fcf. In questo modo ilmicrocontrollore risulta gi conguratoper funzionare con lhardware a nostradisposizione: possiamo cos dedicarci allarealizzazione del diagramma di controllodel sistema.
In questo nuovo progetto faremo uso deiprimi componenti, quindi, dalla barra deicomponenti inseriamo nel nostro progettoun componente Keypad e tre componentiLED, che sono le periferiche che dovre-mo gestire. Come spiegato in precedenza,per inserire un componente bisogna sele-zionarlo dalla barra dei componenti. Dopoaverlo selezionato, il componente compa-
rir nel pannello sotto larea di progetto. Aquesto punto conguriamo le connessionidei componenti, cominciando dal KeyPad.Eseguiamo un clic con il tasto destro sulcomponente keypad comparso sul pannel-lo e selezioniamo lopzione connessioni.Comparir la schermata di Fig. 18.Come evidenziato in gura, colleghiamole tre colonne e le quattro righe alla portaB (le tre colonne ai pin 0, 1 e 2 e le quattro
Fig. 17 - Collegamento E-Blocks
per la realizzazione del progetto pratico.
Fig. 18
Finestra
nessioni delcomponente
keypad.
Fig. 19
Finestra
connessionidel com-
ponente
LED.
7/24/2019 FlowCode_completo.pdf
21/87
cors
o
FLOW
CODE
ElettronicaIn~ Luglio / Agosto 2013 121
dotandola di quattro casi. A questo puntoeseguiamo un doppio clic sul blocco MacroComponente, ed esaminiamo la nestra chesi apre, riportata per comodit in Fig. 21.Selezioniamo il componente Keypad e lamacro GetKeypadNumberche ci consentir
di rilevare il tasto premuto. A questo puntoci serve una variabile per immagazzinare ilvalore, che poi utilizzeremo nella successivastruttura di selezione.Creiamo una variabile sfruttando il pul-sante con il simbolo della freccia in bassopresente sulla nestra attiva, e chiamiamolaLetturaKeypad (come tipo scegliamo ununsigned byte). Se avete eseguito tutto corret-tamente dovreste avere un risultato simile a
righe ai pin 4, 5, 6 e 7). Una volta eseguitele connessioni confermiamo premendo suFatto. Allo stesso modo conguriamo
i tre LED, collegandoli rispettivamente aipin 0, 1 e 2 della porta A.In Fig. 19 possibile vedere la congu-razione del primo LED. A questo puntopossiamo iniziare la stesura del blockdia-gram, inserendo il classico ciclo princi-pale, allinterno del quale creeremo lanostra applicazione. Una volta realizzatoil ciclo, inseriamo anche un blocco MacroComponente ed una struttura Selezione,
Fig. 20
Finestra di propriet
del componente.
Fig. 21
Creazione della
variabile di
LetturaKeypad.
Fig. 22
Schema a blocchi parziale
del progetto.
7/24/2019 FlowCode_completo.pdf
22/87
cors
oFLOWCOD
E122 Luglio / Agosto 2013 ~ ElettronicaIn
quello riportato in Fig. 21.Passiamo ora alla gestione dellastruttura di selezione. Associa-mo alla selezione la variabileprecedentemente creata e valo-rizziamo i primi tre casi con i va-lori numerici 1, 2 e 3 ed il quarto
con il valore 11 (cancelletto). Aquesto punto il diagramma diusso dovrebbe apparire comequello riportato inFig. 22.Abbiamo quasi nito: non ciresta che gestire correttamenteil pilotaggio delle uscite nei varicasi. Per evitare di rendere il
blockdiagram troppo comples-so, utilizziamo delle macro speciche peril pilotaggio delle uscite. Cominciamo dalcaso corrispondente al tasto 1 che, secondo
le nostre speciche, dovrebbe accendere ilLED0 e spegnere gli altri. Creiamo una nuo-va macro, che chiameremo appunto LED0,come abbiamo visto in precedenza nelparagrafo dedicato alle macro ed inseriamo
la descrizione, come riportatoin Fig. 23.Nella macro inseriamo tre
blocchi Macro componente coni quali gestiremo i componentiLED precedentemente creati.Chiamiamo la funzione LEDOn
per il LED0 e la funzione LE-DOff per i LED 1 e 2. Se abbia-mo eseguito tutto correttamenteotterremo uno schema comequello riportato in Fig. 25.Creiamo altre due macro analo-ghe per laccensione dei LED 1e 2 ed una macro di spegnimen-to che chiameremo LEDOff.
Ora posizioniamo quattro blocchi ChiamataMacro nei quattro rami della struttura diselezione e chiamiamo opportunamente
le macro appena create. Il nostro progetto concluso; il blockdiagram complessivo riportato in Fig. 26, a questo punto non ciresta che collegare opportunamente gliE-block e testare quanto realizzato. g
Fig. 26
Schema a blocchi
complessivo.
Fig. 23
Macro LED0.
Fig. 24
Propriet
del
componente
LED.
Fig. 25
Schema a blocchi della
macro LED0.
7/24/2019 FlowCode_completo.pdf
23/87
ElettronicaIn~ Settembre 2013 129
cors
o
FLOW
CODE
elle precedenti puntate abbiamoanalizzato in dettaglio lambiente disviluppo, descrivendone la struttura
ed analizzando gli elementi di base comele strutture di controllo e le strutture dati.In questa puntata completeremo lanalisidelle strutture di controllo, descrivendo lagestione degli interrupt, e continueremolanalisi dei componenti (che sono uno deiprincipali valori aggiunti di Flowcode)descrivendo il componente ADC ed il com-ponente LCD. Successivamente passeremoalla descrizione della gestione delle memo-rie non volatili, analizzando il componenteEEPROM. Sfruttando le nuove conoscenzeacquisite realizzeremo un progetto prati-
co pi evoluto rispetto ai precedenti: untermometro con display LCD.Per i progetti di questa puntata cambieremomicrocontrollore, passando dal PIC18F4550al PIC18F4580. Vedremo cos quanto siasemplice, gestendo i progetti con Flowcode,cambiare target senza risentire di proble-matiche di congurazione e faremo qualcheesperimento con un PIC diverso.Per agevolare i lettori nella sperimentazio-ne abbiamo generato un le di congura-zione base anche per il PIC18F4580, coscome avevamo fatto in precedenza.
Gli interrupt
Come tutti gli ambienti di sviluppo per
corso di programmazione in
FLOWCODEdi Francesco Ficili e Daniele Defilippi
N
Continuiamo il
nostro viaggio alla
scoperta di Flowcode,
linnovativo sistema
di sviluppo graficoper microcontrollori
proposto da Matrix
Multimedia. In questa
puntata ci occupiamo
dellimplementazione
degli interrupt in
Flowcode e iniziamo ad
analizzare i componenti.
Terza puntata.
7/24/2019 FlowCode_completo.pdf
24/87
cors
oFLOWCOD
E130 Settembre 2013 ~ ElettronicaIn
diversi interrupt sui timer, sugli ingressidella porta B, sulla ricezione della portaUART e altro ancora. Una volta selezionatala sorgente dellinterrupt, bisogner indi-care anche la relativa ISR. Flowcode gesti-sce questo aspetto, fornendo la possibilitdi chiamare unopportuna macro creata inprecedenza. Tutto ci non molto diversoda quello che accade con altri sistemi disviluppo, basati su linguaggi classici come,ad esempio, il C: in quel caso la ISR ge-neralmente una comune funzione scritta inlinguaggio C, che ha per la particolaritdi essere chiamata quando viene generatoil relativo interrupt.Il concetto di interrupt abbastanzadelicato in ambito di sviluppo embedded,
in quanto gli interrupt sono largamenteutilizzati nella gestione dellhardware esono di fondamentale importanza manmano che i sistemi sviluppati si fanno picomplessi. Cerchiamo di ssare questoconcetto con un esempio, riproponendo ilprogetto pratico visto nella prima puntatacon una gestione ad interrupt.Nella prima puntata avevamo fatto lam-peggiare un LED alla frequenza di 1 Hz,sfruttando i ritardi software. Proviamoadesso a fare la stessa cosa, ma anzich
generare il ritardo con dei cicli softwarevuoti, proviamo a generare la temporiz-zazione con una risorsa hardware internaal microcontrollore. Per farlo ci serviamodel Timer 2, che pu generare un inter-rupt quando il suo valore corrisponde aquello di un registro di confronto. Proce-diamo quindi creando un nuovo progettoFlowcode, partendo dal template Congu-razioneBase2, fornito insieme al materialerelativo a questa puntata, e cambiamo ilnome del progetto in Interrupt.fcf. Perprima cosa creiamo la macro che useremocome ISR, nominandola LED. Eseguiamoi passi necessari come abbiamo visto nellapuntata precedente e generiamo anche unavariabile che chiameremo LedStatus (boo-leana, valore iniziale false) ed unaltra chechiameremo Counter (byte, valore iniziale0). A questo punto passiamo sullo schemaa blocchi principale, inseriamo un bloccointerrupt, e a seguire un blocco ciclo. Ilciclo ci serve solo per evitare che il pro-
microcontrollori, anche Flowcode prevedela gestione degli interrupt. In un sistemaembedded un interrupt (o interruzione) un segnale asincrono rispetto allesecuzio-ne del programma principale, provenienteda una specica periferica, che segnalauna situazione particolare che richiedeuna gestione differente rispetto al restodel programma. Un interrupt pu prove-nire da una porta di comunicazione, da
una risorsa interna, da un timer, eccetera.Normalmente, quando viene generatoun interrupt, la gestione del programmasi arresta, la posizione corrente del pro-gram counter ed il contesto di esecuzionevengono salvati nello stack e il program-ma salta a una locazione specica, che funzione dellinterrupt stesso e dellar-chitettura specica del microcontrollore.A questo punto, a seconda dei casi, vieneeseguita una funzione speciale (in ge-nere denominata ISR, Interrupt Service
Routine) che serve linterrupt e che,una volta terminata, ritorna il controllo alprogramma principale, che ricomincia dalpunto in cui era stato interrotto (recupe-rando tutte le informazioni necessariedallo stack, allinterno del quale era statasalvata la posizione corrente ed il conte-sto).In Flowcode esiste un blocco speciale,presente allinterno della barra delle iconee denominato appunto blocco interrupt,che serve ad implementare la gestionedegli interrupt allinterno di un program-ma Flowcode. Se inseriamo questo bloccoallinterno di uno schema Flowcode eclicchiamo due volte con il tasto sinistro,potremo accedere alla nestra proprietdel blocco, come riportato in Fig. 1.Da questa nestra possibile selezionarela sorgente dellinterrupt che ci interessa,accedendo al menu a tendina InterruptAttivi. Analizzando questo menu, vedre-mo che per il PIC18F4580, sono disponibili
Fig. 1
Propriet
del blocco
interrupt.
7/24/2019 FlowCode_completo.pdf
25/87
cors
o
FLOW
CODE
ElettronicaIn~ Settembre 2013 131
gramma termini e riparta dal principio,lo possiamo quindi considerare come lanostra applicazione principale, anche senon fa nulla. A questo punto conguria-
mo il blocco interrupt. Nel menu a tendina,alla voce interrupt attivi selezioniamo
TMR2 e clicchiamo su propriet. Otterre-mo la nestra di Fig. 2, che ci permette dicongurare linterrupt sul Timer 2.Funzionando a 12 MHz, anche intervenen-do sui vari pre e post-scaler non c mododi generare un interrupt a 1Hz. Conguria-mo quindi linterrupt con i valori riportatiin gura, per ottenere un interrupt a circa50 Hz. Partendo da questa base tempi ci
baster semplicemente utilizzare un conta-tore di servizio per generare la frequenzadi 1Hz che ci serve per pilotare oppor-
tunamente il nostro LED. Completiamola congurazione tornando sulla nestraprecedente e selezionando la macro LEDalla voce verr chiamata la macro. Que-sto fa s che ad ogni interruzione generatadal timer 2 venga chiamata la nostra macro.A questo punto non ci rimane altro da fareche completare la macro precedentementecreata. Per vedere come abbiamo fatto ciserviamo della Fig. 3. Come si pu vederedallo schema a blocchi, ad ogni chiamatadella macro viene incrementato il contatoreCounter. Se il valore inferiore al valoredella costante timeout (che abbiamo impo-stato pari a 50) non succede nulla, altrimen-ti si passa alla gestione effettiva del LED.In questo ramo del owchart si controlla ilvalore della variabile LedStatus, inverten-dolo, di volta in volta, rispetto al suo statoattuale e pilotando di conseguenza il LED.A questo punto provate a ashare ilmicrocontrollore con il owchart forni-to come esempio (notate che il micro
cambiato e che ora il pin controllato D0)e vedrete lo stesso effetto ottenuto nelcaso delloscillazione generata con i ritardisoftware. Notate che questo esempio non puramente didattico. Infatti, se voles-simo aggiungere funzionalit a questoprogramma, ci basterebbe inserire i relativi
blocchi sul ciclo principale che attualmente vuoto, dimenticandoci della gestionead interrupt, che non viene disturba-ta dallesecuzione del main (in quantoasincrona rispetto a questultimo), mentrela stessa cosa non si potrebbe dire per laversione fatta con i ritardi software.
Il componente ADC
Passiamo ora allanalisi di uno dei com-ponenti che utilizzeremo nel prossimoprogetto pratico: il componente ADC. Que-sto componente permette di conguraree gestire in maniera semplice un canaleanalogico di ingresso, sfruttando il conver-titore integrato nel microcontrollore.Il componente ADC pu essere inseritoselezionandolo dalla barra dei componenti,sotto la voce ingressi. Una volta inseri-to, nel pannello comparir una manopoladel tutto simile a quella che si trova neipannelli frontali della strumentazione dalaboratorio. Come abbiamo gi visto nella
Fig. 3
Flowchart della macro LED.
Fig. 2
Propriet
interrupt
timer 2.
7/24/2019 FlowCode_completo.pdf
26/87
cors
oFLOWCOD
E132 Settembre 2013 ~ ElettronicaIn
ne impostazioni base del componente,come la tensione di riferimento (Vref) , lavelocit di conversione e altro ancora. Perquanto riguarda invece le macro che il
componete ADC pu sfruttare, in Tabella1sono elencate le principali macro dispo-nibili. Il componente dispone anche dimacro pi speciche, ma al momento nonle prenderemo in considerazione in quantonon strettamente necessarie.
Il componente LCD
Passiamo ora allanalisi del componenteLCD, che ci permetter di aggiungereun output visuale ai nostri progetti. Ilcomponente LCD permette di gestire undisplay a cristalli liquidi con controller
Hitachi HD44780 (noto anche come Hita-chi compatibile); questa interfaccia costi-tuisce lo standard de facto per gli LCD al-fanumerici monocromatici con interfacciaparallela. In particolare, il componentesfrutta la congurazione parallela a 4-bit,in modo da poter impiegare una singolaporta per il controllo del dispositivo (oltreai 4 bit di dato vengono infatti utilizzati 2segnali di controllo).Il componente LCD pu essere inseritodalla barra dei componenti, selezionan-
do, sotto la voce uscite, il componenteLCD. Una volta eseguita questa ope-razione, allinterno del pannello verrposizionata limmagine di un displayalfanumerico 16x2. Come per gli altricomponenti visti in precedenza, ancheper il componente LCD sono disponibilile solite propriet connessioni e pro-priet extra. Se clicchiamo sulla voceconnessioni, comparir la nestra di Fig.6, che ci permette di congurare le con-nessioni del display. Da questa nestra
puntata precedente per il componenteLED, anche il componente ADC dotato diconnessioni e di propriet extra. pos-sibile accedere a questi due menu cliccandocon il tasto destro sullicona del componen-te presente sul pannello. Cliccando sulla
voce connessioni comparir la nestradi Fig. 4, che permette di impostare il pindel micrcocontrollore da utilizzare comeingresso analogico (nellesempio An0).Per accedere alle propriet extra, bastaselezionare la relativa voce nel menu checompare sempre cliccando con il tastodestro sullicona del pannello. La nestrapropriet extra del componente ADC riportata in Fig. 5.Com possibile vedere - impostazionidellicona a parte - sono disponibili alcu-
Nome Macro Descrizione
LeggiComeByte Il valore del canale selezionato acquisito e il risultato fornito con formato numerico e 8-bit di risoluzione.
LeggiComeInteroIl valore del canale selezionato acquisito e il risultato fornito con formato numerico e 10-bit o 12-bit di
risoluzione (a seconda del convertitore).
LeggiComeTensioneIl valore del canale selezionato acquisito e il risultato fornito con formato in tensione (il valore deve
essere immagazzinato in una variabile di tipo oat).
LeggiComeStringail valore del canale selezionato acquisito e il risultato fornito come stringa di caratteri (il valore deve
essere immagazzinato in un array di caratteri).
Tabella 1 -Principali macro disponibili per il componente ADC.
Fig. 4
Finestra
onnessioni del
componente
ADC.
Fig. 5
Propriet
extra del
componente
ADC.
7/24/2019 FlowCode_completo.pdf
27/87
cors
o
FLOW
CODE
ElettronicaIn~ Settembre 2013 133
possibile impostare le 6 linee necessarieallinterfacciamento del componente con ilmicrocontrollore.Se apriamo invece la nestra propriet
extra, rappresentata in Fig. 7, sar possi-bile congurare la dimensione del display(16x1, 16x2, 16x4, 20x4), pi altre caratte-ristiche che comunque sono utili pi ai nidella simulazione che altro.Diamo ora uno sguardo alle macro dispo-nibili per questo componente, per capirecome poterlo gestire efcacemente nei no-
stri progetti. In Tabella 2sono indicate lemacro disponibili per il componente LCDcorredate della relativa descrizione.
Le memorie non volatili
Come sappiamo, diversi PIC dispongonoal loro interno di un certo quantitativo dimemoria non volatile di tipo EEPROM(Electrical Erasable and ProgrammableRead Only Memory); questa pu essereutilizzata per limmagazzinamento di datiche non devono essere persi dopo unospegnimento del sistema. Una on-boardEEPROM pu essere un grande vantag-gio nel caso in cui si debba sviluppareun sistema embedded che ha esigenze dimemorizzazione permanente di alcuni
dati, perch in questo caso non neces-sario ricorrere alluso di una memoriaesterna I2C o SPI. Il PIC18F4580 dispone di256 byte di on-board EEPROM, garantitiper circa un milione di cicli di scrittura econ una ritenzione di pi di 40 anni.
Il componente EEPROM
Flowcode dispone di un componenteapposito per la gestione della EEPROM in-terna. Tale componente pu essere inseritodalla barra dei componenti, selezionando
sotto la voce varie il componente EE-PROM. Una volta inserito il componentevedrete comparire nel pannello un array
bidimensionale che mostra la locazione dimemoria e il suo contenuto. Per il com-ponente EEPROM non sono presenti leconnessioni, in quanto questo componentenon collegato esternamente in quanto il
bus per la gestione della memoria internoal chip. disponibile invece lopzione
Nome Macro Descrizione
Inizio Inizializza il display.
Trasparente Cancella tutte le righe del display.
VisualizzaASCI I Visualizza i l carattere ASCI I corrispondente al byte passato come argomento.
Comando Invia il comando passato come argomento.
Cursore Posiziona il cursore alla posizione indicata dai due argomenti x e y (coordinate del cursore).
VisualizzaNumero Visualizza il numero passato come argomento gi conver tito in ASCII.
VisualizzaStringa Visualizza la stringa passata come argomento
CancellaLinea Cancella la linea passata come argomento.
Scrivi_RAM Scrive nella RAM del controller i dati passati come argomento.
Tabella 2 -Principali macro disponibili per il componente LCD.
Fig. 6
Connessioni del
componente
LCD.
Fig. 7
Proprietextra del
componente
LCD.
7/24/2019 FlowCode_completo.pdf
28/87
cors
oFLOWCOD
E134 Settembre 2013 ~ ElettronicaIn
propriet extra, che pu essere sele-zionata sempre premendo il tasto destrosullicona del componente presente sulpannello. La nestra delle propriet
visibile in Fig. 8.Sono disponibili pi che altro proprietrelative alla simulazione ed possibile set-tare a mano la dimensione della EEPROM,altrimenti lambiente imposta quella mas-sima relativa al chip utilizzato.In Tabella 3sono riportate le macro di-sponibili per il componente che sono tuttemolto semplici.Lunica accortezza da utilizzare quelladi lasciare un intervallo di almeno 200microsecondi tra una scrittura e la succes-siva, per garantire il tempo necessario al
completamento delloperazione.Per testare la EEPROM stato realizzatoun owchart di prova che scrive in tuttele 256 locazioni di memoria un numerocrescente da 0 a 256. Il sorgente FlowcodeEepromTest.fcf reperibile allinterno delmateriale di supporto.
Progetto Pratico: Termometro LCD
Passiamo ora alla descrizione del pro-getto pratico relativo a questa puntata,nello sviluppo del quale metteremo in
pratica le nuove conoscenze acquisite.Ci che ci proponiamo di realizzare un termometro digitale che impiegaun LM335 ed un display LCD Hitachicompatibile. Le specifiche del nostroprogetto sono: Lettura del termometro digitale sul
canale analogico AN0,
Fig. 8
Propriet
extra del
componente
EEPROM.
Fig. 9
Collegamento E-Blocks
per la realizzazione del
progetto pratico.
Nome Macro Descrizione
Read
Legge la locazione di memoria specicata con il para-
metro address e ritorna il valore letto nella variabile
di ritorno.
WriteScrive la variabile specicata con il parametro data
allinterno della locazione specicata con il parametro
address.
Tabella 3
7/24/2019 FlowCode_completo.pdf
29/87
cors
o
FLOW
CODE
ElettronicaIn~ Settembre 2013 135
Conversione del dato di temperatura ingradi Celsius,
Visualizzazione continua della tempera-tura sul display.
Per la realizzazione del progetto utilizzere-mo i seguenti componenti:
- EB006 USB PICmicro multiprogram-mer board (PIC18F4580 e Quarzo12MHz),
- EB005 LCD board,- EB016 Prototype board.
Useremo la EB016 per la realizzazione delcircuito di acquisizione della temperaturatramite lLM335. Naturalmente Matrixdispone di alcune schede con sensori ditemperatura, pi o meno evolute, ma vo-levamo mostrare ai lettori come sia possi-
bile interfacciare qualsiasi tipo di sensoreusando la scheda di prototipazione.Colleghiamo le schede come segue: EB016 collegata alla porta A ed alla por-
ta B della EB006, EB005 collegata alla porta C della EB006.
I collegamenti sono illustrati in Fig. 9.Prima di andare avanti, bisogna realizzareil circuito di acquisizione della tempera-tura sulla scheda di prototipazione. Perfarlo abbiamo fatto riferimento al datashe-et dellLM335, che riporta alcuni esempidi circuiti. La nostra scelta caduta sulsensore con circuito di calibrazione, il cuischema riportato in Fig. 10.Questo circuito ci consente di avere unamisura pi precisa della temperatura, inquanto si utilizza un potenziometro percalibrare il sensore. Una volta completato ilprogetto, potremo eseguire la calibrazionesemplicemente agendo sul potenziometroed utilizzando un termometro calibrato per
ottenere la temperatura di riferimento. Aquesto punto procediamo alla realizzazio-ne del circuito sulla breadboard e colle-ghiamo luscita del sensore allingressoanalogico AN0 del microcontrollore, chetroviamo disponibile sulla strip montata
a ridosso del connettore J1 sulla EB016.Ora che i collegamenti di segnale sonoultimati, non ci resta che distribuire anchele alimentazioni ai vari E-Block. Per farlopreleviamo riferimento e tensione di ali-mentazione dalla scheda madre (presentisulla morsettiera J10) e li portiamo allemorsettiere a vite J1 della EB005 e J3 dellaEB016.Ora che lhardware pronto, possiamoprocedere allo sviluppo delle componentisoftware. Per prima cosa preoccupiamoci
di inserire e collegare opportunamentetutti i componenti che utilizzeremo nelprogetto. Viste le speciche, ci occorresicuramente un componente ADC ed uncomponete LCD. Non abbiamo da memo-rizzare informazioni permanenti, quindiin questo progetto non avremo bisognodel componente EEPROM. Procediamotrascinando i componenti sul pannello. Aquesto punto effettuiamo le connessioni. Ilcomponente ADC dovr leggere il canaleanalogico 0 (AN0), quindi effettuiamo laconnessione con quel canale, come illustra-to in Fig. 11.Completate le connessioni, occupiamo-ci delle propriet extra del convertitoreanalogico-digitale. Per questo progettoimpostiamo:
- Tempo di conversione: 50 cicli- Velocit di conversione: Fosc/16- Opzioni Vref: Vdd
Per quanto riguarda la voce Tensione
Fig. 10
Collegamento
LM335.
Fig. 11
Connessioni
del
componente
ADC.
7/24/2019 FlowCode_completo.pdf
30/87
cors
oFLOWCOD
E136 Settembre 2013 ~ ElettronicaIn
Vref possiamo impostare 4,5V se alimen-tiamo il sistema tramite la porta USB (la tensione tipica) o 5V se alimentiamodallesterno con un regolatore stabilizzato.In ogni caso potremo aggiustare in seguitola misura, usando il circuito di calibrazioneche ci siamo preparati in precedenza.A questo punto passiamo alle connessionidel display LCD, collegato sulla porta C,come illustrato in Fig. 12. Ricordiamo chelinterfaccia del display parallela a 4-bit eutilizza due ulteriori segnali: RS ed Enable.Assicuriamoci di avere la nestra delleconnessioni del display congurata comequella in Fig. 12e di avere il jumper dellaEB005 posizionato su default.Non ci sono propriet extra rilevanti peril display, quindi per quanto riguarda lacongurazione dei componenti e delleconnessioni abbiamo concluso.Prima di passare allanalisi del owcart ciserve ancora la denizione della struttu-ra dati sulla quale andremo a lavorare. Il
componente ADC di Flowcode ci offre lapossibilit di acquisire la lettura del canaleanalogico considerato direttamente intensione, ritornando un oat. Questa ca-
ratteristica risulta molto comoda perchcos sar pi facile effettuare la conver-sione in temperatura. In virt di questeconsiderazioni creiamo una variabiledi tipo virgola mobile e chiamiamolaTensione (come illustrato in Fig. 13)con la quale immagazzineremo il valoredi tensione letto sul canale AN0. Creia-mo anche una ulteriore variabile, chia-mandola Temperatura, sempre di tipovirgola mobile, allinterno della qualeimmagazzineremo il corrispondentevalore di temperatura.
Passiamo ora alla realizzazione delloschema a blocchi che sar composto da unowchart principale e da tre macro:
- Inizializzazione del sistema,- Lettura del sensore di temperatura,- Visualizzazione della lettura.
Fig. 12
Connessioni
display LCD.
Fig. 13
Creazione
della
variabile
Tensione.
Fig. 14
Macro
Inizializzazione.
7/24/2019 FlowCode_completo.pdf
31/87
cors
o
FLOW
CODE
ElettronicaIn~ Settembre 2013 137
meTensione del componente ADC, chepermette di acquisire un canale analogicoriportando direttamente il dato in tensione(in Volt), associabile ad una variabile ditipo oat (virgola mobile).Noi associamo il valore di ritorno alla va-riabile Tensione, che avevamo creato inprecedenza. In Fig. 16 riportata la nestra
di propriet del blocco Chiamata MacroComponente che realizza loperazione.A questo punto bisogna convertire il datoletto in un dato di temperatura. LLM335ha un segnale in uscita proporzionale allatemperatura con fattore di proporzionalitdi 10mV/Kelvin. Invertiamo la formula,scaliamo il valore di tensione da V a mV esottraiamo 273 per ottenere la temperaturain gradi Celsius. Per introdurre questa for-mula nel codice usiamo un blocco calcolo,come riportato in Fig. 17.
Il dato immagazzinato allinterno dellavariabile Temperatura gi corretta-mente convertito in gradi Celsius, quindi
baster convertirlo in codica ASCII perottenere la visualizzazione corretta. Oraanche la seconda macro completata.Passiamo allultima macro da realizzare, lamacro di visualizzazione, che chiameremoVisualizzaTemperatura, il cui owchart riportato in Fig. 18.In questo owchart usiamo solo chiamatea macro di componeti, in quanto il dato gi pronto e lunica cosa che dobbiamofare scriverlo correttamente sul display,sfruttando le funzioni a corredo del com-ponente LCD nonch le stringhe di con-torno. Per prima cosa si pulisce il display,in modo che non rimangano porzioni distringe scritte in precedenza. Fatto questosi visualizza la stringa Temperatura:,come stringa di intestazione. A questopunto si usa la funzione Cursore permuoversi sulla seconda riga, che verr usa-
Partiamo dalla macro di inizializzazione,che ha lo scopo di inizializzare il display ele variabili e di scrivere una prima riga ditesto per informare lutente. Il owchartdella macro di inizializzazione riportatoin Fig. 14.Come si vede, si utilizzando tre blocchiChiamata Macro Componente, un blocco
Calcolo e un blocco Ritardo.In sequenza le operazione eseguite sono leseguenti: si inizializza il display, lo si puli-sce, si visualizza la stringa Init System,si inizializzano le variabili e si genera un
ritardo di 1 secondo. Molto semplice.A questo punto passiamo alla macro dilettura del sensore di temperatura, cheabbiamo chiamato AcquisisciLM335, ilcui owchart riportato in Fig. 15.Questa macro il cuore del programma,eppure la potenza di Flowcode ci permettedi ridurla a due soli blocchi. Il compitoda eseguire quello di acquisire il dato intensione ed effettuare la conversione intemperatura, in modo che possa poi esserefacilmente visualizzata dal display. Perprima cosa si sfrutta la macro LeggiCo-
Fig. 15
Flowchart della macro
Acquisisci LM335.
Fig. 16
Finestra
propriet
del blocco
Chiamata
Macro
Componente.
Fig. 17
Conversione
del dato in
tensione nel
corrispondete
valore di
temperatura.
7/24/2019 FlowCode_completo.pdf
32/87
cors
oFLOWCOD
E138 Settembre 2013 ~ ElettronicaIn
ta per visualizzare il dato. Qui possiamousare la macro VisualizzaNumero pervisualizzare su display il valore imma-
gazzinato nella variabile Temperaturache, come abbiamo visto prima, contieneil valore della temperatura in gradi Cel-sius. Ora non ci rimane altro da fare chevisualizzare il carattere C per indicareche la temperatura in gradi Celsius e ri-portare il cursore alla posizione di parten-za: la nostra terza macro cos pronta.Ora abbiamo le tre macro pronte alluso,lultima operazione da fare metterleinsieme sul owchart principale e lanciarela compilazione. Il owchart principale riportato in Fig. 19.Come potete vedere stata chiamata primadi tutto la macro Inizializzazione. Poi,allinterno di un ciclo while innito, sonostate inserite le due chiamate alle macroAcquisisciLM335 e VisualizzaTempera-tura. La prima macro acquisisce il valoredi tensione proveniente dal sensore ditemperatura e passa i dati alla seconda, cheli visualizza sul display LCD. Per evitareun eccessivo effetto Refresh sul display
stato inserito un ritardo software di unsecondo.Possiamo ora procedere con la compila-
zione e lesecuzione del programma. Unavolta programmato il micro, se abbiamoeseguito tutto correttamente, vedremocomparire il valore della temperatura lettadal sensore sul display. Se la lettura nonfosse corretta, possiamo agire sul poten-ziometro del circuito di calibrazione perregolarla.In questa puntata abbiamo iniziato aprendere condenza con i componenti diFlowcode, realizzando un primo program-ma di un certo peso (un dispositivo cheha una reale funzione), e abbiamo comin-ciato a renderci conto di come, inserendoi componenti appositi e collegando pochi
blocchi, sia possibile implementare inbreve tempo anche funzioni di una certacomplessit. Nella prossima puntata con-tinueremo questo percorso, esaminandoin dettaglio le interfacce di comunicazioneche ci permettono di realizzare sistemi picomplessi, interfacciati a periferiche ester-ne pi intelligenti. g
Fig. 18
Flowchart della macro
VisualizzaTemperatura.
Fig. 19
Flowchart principale
dellesempio pratico
Termometro LCD.
7/24/2019 FlowCode_completo.pdf
33/87
ElettronicaIn~ Ottobre 2013 113
cors
o
FLOW
CODE
elle scorse puntate abbiamo spie-gato la gestione degli interrupt inFlowcode e insegnato a utilizzare i
componenti ADC, LCD e la memoria EE-PROM interna. In questa puntata parleremodelle principali interfacce di comunicazioneseriali a disposizione dei microcontrollori di
bassa gamma: lUART (o RS232), lIC, SPIe lOneWire. Termineremo con un progettopratico nel quale svilupperemo un controllodi una batteria di rel comandata tramiteporta seriale.
Le periferiche di comunicazione di base
I sistemi che abbiamo trattato nora eranoin grado di gestire solo sistemi chiusi, cio
non potevano interfacciarsi con piattaformeesterne. Parleremo ora di altri componentifondamentali di un microcontrollore, chesono le interfacce di comunicazione. I bus dicomunicazione sono in continua evoluzio-ne ed oggigiorno ve ne sono di moltissimetipologie. Facciamo un piccolo passo indie-tro ed analizziamo brevemente le interfaccedi comunicazione che sono state utilizzatein questi ultimi decenni. Con lavventodellera digitale, il sistema di comunicazio-ne maggiormente utilizzato stato quelloparallelo, dove i dati sono scambiati apacchetti, solitamente di 8 bit, ed uno opi segnali trasportano linformazione delclock. Il trasporto dei dati in parallelo non
corso di programmazione in
FLOWCODEdi Francesco Ficili e Daniele Defilippi
N
Continuiamo il nostro
viaggio alla scoperta
di Flowcode, il sistema
di sviluppo grafico
per microcontrolloriproposto da Matrix
Multimedia, in cui il
codice viene scritto
facendo uso di oggetti
grafici.
Quarta puntata.
7/24/2019 FlowCode_completo.pdf
34/87
cors
oFLOWCOD
E114 Ottobre 2013 ~ ElettronicaIn
SCK/SCLK (Serial Data Clock) su cuiviene trasmesso il segnale di clock.
I dati trasmessi e ricevuti passano su dueconnessioni differenti e, per questa ragione,la comunicazione detta di tipofull-duplex.Pi periferiche possono essere collegate allostesso bus di comunicazione, ma, in questocaso, solo una di esse di tipo master,mentre tutte le altre sono di tipo slave.Per poter utilizzare questo sistema di comu-nicazione non comunque necessaria unaconoscenza approfondita del livello sicoe di protocollo, perch Flowcode mette adisposizione una potentissima libreria dicomponenti che ci permette di utilizzarla egestirla in modo ancora pi semplice.
Allinterno della barra dei componenti nelmenu Trasmissione datitroviamo il compo-nente SPI; se lo inseriamo nel nostro pro-getto mediante un clic sulla relativa icona,notiamo che appare, nel pannello, comeuna nestra suddivisa in tre parti. Parten-do dallalto verso il basso possiamo cosesaminare i caratteri inviati, quelli ricevutie in basso i caratteri in coda, come mostratoin Fig. 1.Ora che il componente stato inserito nelprogetto, necessario congurarlo in modo
che possa comunicare correttamente conle periferiche. I campi della nestra dellepropriet, mostrata in Fig. 2, devono esserevalorizzati esaminando il data-sheet delcomponente che vogliamo collegare ester-namente, in modo che tutto possa funziona-re correttamente.Il box in cui si pu indicare se trasmettere
byte o caratteri non inuenza la modalit
consigliabile sulle grandi distanze, in quan-
to richiederebbe molti li e -per contrastareil degrado del segnale- lamplicazioneper ciascuno di essi; per questa ragioneche sono state inventate le comunicazio-ni seriali, nelle quali il valore digitale datrasmettere suddiviso in singoli bit, chesono trasmessi in ordine sequenziale sullostesso canale di trasmissione, impiegandoquindi due soli li. Possiamo suddividerei sistemi di comunicazione in due grandifamiglie, in base alla distanza che riesconoa coprire: quelli interni permettono la co-
municazione tra sistemi vicini o comunqueappartenenti allo stesso sistema, mentrequelli tra sistemi collegano apparati concompiti solitamente differenti su distanzeanche molto ampie. Inizieremo parlando diquelli interni ed in particolare di SPI, IC eOneWire. Successivamente passeremo alladescrizione della RS232, interfaccia con laquale realizzeremo un progetto pratico.
Serial peripheral interface (SPI)
Linterfaccia SPI (acronimo di Serial Peri-pheral Interface) semplice da utilizzare edafdabile e, per queste ragioni, divenutail sistema di comunicazione comunementeutilizzato da memorie, ADC e DAC esternial microcontrollore.La comunicazione mediante porta SPI ne-cessita di tre collegamenti: SDO/MOSI (Serial Data Output) dal
quale i dati vengono inviati; SDI/MISO (Serial Data Input) dal quale i
dati vengono ricevuti;
Fig. 1
Pannello
SPI.
Fig. 2
Pannello di
configura-
zione del
bus SPI.
7/24/2019 FlowCode_completo.pdf
35/87
cors
o
FLOW
CODE
ElettronicaIn~ Ottobre 2013 115
di trasmissione/ricezione dei dati sul busdi comunicazione, ma unicamente la lorovisualizzazione sul componente nel pannel-
lo di Flowcode.Al termine della congurazione possiamoinserire le macro gestite del componente dalmenu delle icone, come fatto per il compo-nente KeyPad e per lADC esaminati nellepuntate precedenti. In questo caso le princi-pali macro a nostra disposizione sono quelleelencate nella Tabella 2.Vi sono altre macro speciche, mostrate inTabella 3, che ci possono essere di aiuto nel
caso volessimo utilizzare la scheda EB013,che contiene al suo interno una memoriaFRAM (rimpiazzabile con una memoria
EEPROM) ed un convertitore digitale/ana-logico, entrambi su bus SPI.Per poter utilizzare questi componenti inoltre necessario congurare le connessioniesterne dei piedini di abilitazione. Utiliz-zando queste semplici macro quindi pos-sibile utilizzare una memoria EEPROM/FRAM od un DAC in modo davvero sem-plice ed intuitivo. Qualora il componentescelto non appartenesse a questa lista o non
Parametro Descrizione
SPI Clock
Rappresenta la velocit di trasmissione dei dati. Deve obbligatoriamente essere minore di quella supportatadal componente pi lento collegato al bus di comunicazione. Facciamo un semplice esempio supponendoche il componente slave supporti una velocit massima di comunicazione di 300 kHz ed il microcontrollore
abbia una frequenza di oscillazione pari a 4 MHz.
Dividendo la frequenza massima della comunicazione per la frequenza di oscillazione del microcontrollore,otteniamo il rapporto massimo che vi pu essere tra le due grandezze e scegliamo il valore pi grande, tra
quelli disponibili nel menu a tendina, che risulta minore del risultato della frazione.
SPI Clock polarity utilizzato per denire lo stato di inattivit (idle) del segnale di clock.
SPI Clock Edge Serve per scegliere se il dato scritto durante il fronte di salita o discesa del segnale di clock.
SPI Sample bitIndica quando il dato deve essere campionato per poter effettuare una corretta trasmissione/ricezione del
dato da tutti i dispositivi collegati. In pratica, modica il punto di campionamento del dato.
Tabella 1 -Parametri di configurazione del bus SPI.
Nome Macro Descrizione
SPI_Init utilizzata per inizializzare le periferica di comunicazione SPI. Solitamente posta
ad inizio programma e viene chiamata una volta sola.
SPI_Send_Char utilizzata per inviare un carattere.
SPI_Get_String utilizzata per ricevere una stringa di caratteri.
SPI_Send_String utilizzata per inviare una stringa di caratteri.
SPI_Get_Char utilizzata per ricevere un carattere.
SPI_Unint utilizzata per rimuovere le inizializzazioni della connessione SPI e poter quindi utilizzare i pin del
microcontrollore come normali bit della porta di I/O.
Tabella 2 -Macro disponibili per il controllo del bus SPI.
Nome Macro Descrizione
DAC_Send_CharInvia un carattere/byte al convertitore digitale/analogico che lo trasformer direttamente
in un valore analogico visibile sui morsetti esterni.
NVM_Send_Char Invia un dato alla memoria EEPROM che verr caricato allinterno della cella selezionata.
NVM_Get_Char Legge il valore memorizzato allinterno della cella di memoria indicata.
FramOutput Invia un valore alla memoria FRAM.
EnableFRAMAbilita la memoria FRAM/EEPROM. Prima di ogni comando verso la memoria, necessario
abilitarla altrimenti tutti i comandi verrebbero ignorati.
DisableFRAMDisabilita la memoria FRAM/EEPROM in modo da poter comunicare con altri dispositivi
collegati sullo stesso bus SPI.
Tabella 3 -Macro supplementari per componenti specifici su bus SPI.
7/24/2019 FlowCode_completo.pdf
36/87
cors
oFLOWCOD
E116 Ottobre 2013 ~ ElettronicaIn
una risposta. Successivamente vengono
inviati, in sequenza, i dati veri e propri,iniziando sempre dal bit pi signicativo.Allinterno della barra dei componentipossiamo selezionare il controller per il busIC ed inserirlo allinterno del pannello diFlowcode. Il pannello appare come in Fig. 3e ci permette di visualizzare le comunicazio-ni presenti sul bus e poter interagire aggiun-gendo byte nella comunicazione in modo darendere la simulazione interattiva.Per utilizzare il componente necessariocongurarlo come abbiamo fatto preceden-
temente con il bus SPI, ma i parametri dasettare sono differenti; nel caso del bus IC,essi sono quelli elencati nella Tabella 4.Invece le macro a disposizione sono rias-sunte in Tabella 5.Continuando nel nostro percorso di descri-zione di bus di comunicazione, passiamoal bus con il minor numero di connessionipossibili: una connessione unica per latrasmissione/ricezione di dati e segnale disincronizzazione: il bus OneWire.
fosse compatibile, baster semplicemente
utilizzare le macro generiche in modo darealizzare il protocollo corretto.
La porta IC
Passiamo ora a descrivere il bus di comuni-cazione IC, il cui protocollo richiede unica-mente due linee di comunicazione: SDA (Serial Data Line) per la trasmissio-
ne/ricezione dei dati ; SCL (Serial Clock Line) per la trasmissio-
ne del clock di sincronizzazione.
Sullo stesso bus possono essere collegatino a 112 dispositivi differenti. A differenzadellSPI, sia i dati in trasmissione che quelliin ricezione viaggiano sulla stessa connes-sione sica. Il bus SPI di tipo half-duplexperch solo un componente alla volta putrasmettere i dati; inoltre, la comunicazionepu essere iniziata solo dal master, median-te una stringa che contiene un bit di start,lindirizzo dello slave con il quale vuolecomunicare e un bit che indica se richiesta
Fig. 3
Pannello del
componente
I2C Master.
Parametro Descrizione
Enableslew rate control Attiva il controllo sullo slew-rate (velocit dei fronti) del segnale trasmesso sul bus.
Enable SMBus Inputs Abilita lutilizzo del SMBus sulla connessione IC (modalit di compatibilit).
Baud rate
Imposta la frequenza con la quale vengono trasmessi i dati sul bus di comunicazione. Deve obbligatoria-mente, come visto per il bus SPI, essere minore della velocit massima supportata dal componente pilento collegato al bus. Possono essere utilizzati i valori pre
Recommended