FlowCode_completo.pdf

Embed Size (px)

Citation preview

  • 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