Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and,...

16
Ldmicro A volte abbiamo esigenza di costruire un piccolo circuito di automazione: applicazioni semplici, che non richiedono grossi impegni anche in ambito economico. Al giorno d'oggi i componenti programmabili ormai la fanno da padrone, anche se qualche nostalgico continua per vari motivi ad usare la logica cablata, con l'utilizzo di svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. Molte volte però si rinuncia alla versatilità che può dare una logica programmabile semplicemente perchè non si conosce un linguaggio di programmazione e non si ha tempo o voglia di imparare qualcosa di nuovo. Un caso particolare forse è rappresentato da LDmicro. Questo software permette anche a chi non ha conoscenze avanzate di programmazione di scrivere semplici listati per creare circuiti di automazione utilizzando dispositivi programmabili economici e comuni. Il file compilato in uscita può essere creato per l'utilizzo con numerosi micro PIC ed AVR ed anche in linguaggio ANSI C per essere poi usato come meglio si crede. Questo software ha molte caratteristiche positive: E' freeware. E'in italiano. E' semplice da utilizzare. La filosofia è quella di utilizzare il linguaggio a contatti Ladder, tipico del mondo dei plc. Per chi non lo sapesse, il plc è un dispositivo elettronico usato nel campo industriale che consiste in pratica in una cpu con molteplici in - out. Le uscite cambiano stato in base a quello assunto dagli ingressi e in relazione alle istruzioni software che la cpu esegue.Un esempio di plc è il Siemens S7. Negli ultimi tempi c'è stata anche una proliferazioni di micro plc costruiti da varie case, per esempio Omron e Siemens, come la serie Logo! ad esempio. Questi dispositivi hanno funzionalità limitate rispetto ai loro fratelli maggiori ma si programmano agevolmente e hanno costi ridotti. Quindi il linguaggio ladder in pratica non è che lo schema elettrico del circuito costruito utilizzando contatti che possono essere N.O. oppure N.C. , bobine relè, temporizzatori e così via. Anche usando pochi blocchi del genere si riescono a creare dispositivi molto interessanti. Per gli esempi di seguito, userò un pic 16F628A molto comune ed economico. Ilario Stella 2013 pag 1

Transcript of Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and,...

Page 1: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Ldmicro A volte abbiamo esigenza di costruire un piccolo circuito di automazione:

applicazioni semplici, che non richiedono grossi impegni anche in ambito economico.Al giorno d'oggi i componenti programmabili ormai la fanno da padrone, anche se qualche nostalgico continua per vari motivi ad usare la logica cablata, con l'utilizzo disvariati integrati logici che contengono porte and, or, flip flop, inverter e così via. Molte volte però si rinuncia alla versatilità che può dare una logica programmabile semplicemente perchè non si conosce un linguaggio di programmazione e non si ha tempo o voglia di imparare qualcosa di nuovo. Un caso particolare forse è rappresentato da LDmicro.Questo software permette anche a chi non ha conoscenze avanzate di programmazione di scrivere semplici listati per creare circuiti di automazione utilizzando dispositivi programmabili economici e comuni. Il file compilato in uscita può essere creato per l'utilizzo con numerosi micro PIC ed AVR ed anche in linguaggio ANSI C per essere poi usato come meglio si crede. Questo software ha molte caratteristiche positive:

E' freeware. E'in italiano. E' semplice da utilizzare.

La filosofia è quella di utilizzare il linguaggio a contatti Ladder, tipico del mondo dei plc. Per chi non lo sapesse, il plc è un dispositivo elettronico usato nel campo industriale che consiste in pratica in una cpu con molteplici in - out.Le uscite cambiano stato in base a quello assunto dagli ingressi e in relazione alle istruzioni software che la cpu esegue.Un esempio di plc è il Siemens S7.

Negli ultimi tempi c'è stata anche una proliferazioni di micro plc costruiti da varie case, per esempio Omron e Siemens, come la serie Logo! ad esempio.

Questi dispositivi hanno funzionalità limitate rispetto ai loro fratelli maggiori ma si programmano agevolmente e hanno costi ridotti.Quindi il linguaggio ladder in pratica non è che lo schema elettrico del circuito costruito utilizzando contatti che possono essere N.O. oppure N.C. , bobine relè, temporizzatori e così via.Anche usando pochi blocchi del genere si riescono a creare dispositivi molto interessanti.Per gli esempi di seguito, userò un pic 16F628A molto comune ed economico.

Ilario Stella 2013 pag 1

Page 2: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Esso è montato nella classica configurazione con quarzo e resistenza di pull up sul MCLR.Dunque, occorre scaricare LDMicro, che potete trovere qui :

http://cq.cx/ladder.plSul sito si può trovare la versione italiana, anche se l'help è in inglese.

Il programma è costituito da un unico file .exe e non ha bisogno di installazione.

Una volta aperto il programma ci si ritroverà con questa schermata:

la prima cosa da fare è impostare i parametri corretti. Si clicca su Settaggi e quindi su Microcontroller, si sceglie il micro, PIC16F628 in questo caso.

Poi sempre su Settaggi e parametri MCU per scegliere la frequenza del quarzo.Il tempo di ciclo conviene lasciarlo come è.

A questo punto salvare il tutto per dare un nome a piacimento al progetto.Si può ora vedere il nome nel titolo della finestra ed in fondo il tipo di mcu, il tipo di quarzo ecc.Ora è il momento di iniziare a scrivere il programma vero e proprio.

Ilario Stella 2013 pag 2

Page 3: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Facendo clic sui due trattini a destra del numero 1 compare un cursore verticale lampeggiante che indica dove verrà inserito il nuovo elemento. Si comincia con inserire un contatto N.O.Cliccare su Istruzione e scegliere "Inserire contatto". Comparirà un contatto N.O. chiamato Xnew ; naturalmente si dovranno editare le propriètà di questo contatto per dargli un nome adatto e impostarlo a nostra preferenza. Ecco come fare :

Occorre fare doppio clic sul contatto e si apre la finestrella proprietà:Qui si potrà scegliere se questo contatto è comandato da un pin di input, da un pin di output o da un relè interno.I relè interni sono degli azionamenti che non fanno capo a nessun pin di i/o ma rimangono gestibili all'interno del pic. In pratica sono variabili del tipo bit.

Poi si vedrà un loro uso. Per ora si sceglie input pin, lo si rinomina ingresso e non si spunta la casellina normalmente chiuso, lasciandolo di fatto n.o. In questo modo il primo ingresso è creato.

Ilario Stella 2013 pag 3

Page 4: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Ora a questo ingresso si può collegare un uscita. Per fare questo si fa clic sul filo a destra del contatto e vi si posiziona il cursore lampeggiante.Sempre selezionando "Istruzione" questa volta si sceglie " Inserire Bobina Relè ".La situazione sarà questa:

Stessa procedura utilizzata per l'ingresso: doppio clic ed editare le proprietà.

La si rinomina "uscita" e si può notare che ci sono altre opzioni:

esistono infatti due caselline nominate Setta e Resetta.Ilario Stella 2013 pag 4

Page 5: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Quindi:

Bobina tipo Aperto : quando viene eccitata porta il pin annesso a livello 1Bobina tipo Negato : normalmente il pin è a 1 ,quando viene eccitata il pin va a 0.Bobina tipo Setta : il pin è normalmente a 0 : quando viene eccitata va a 1 e vi resta fino a quando non arriva un istruzione di Resetta.Bobina tipo Resetta : serve a porre a 0 una bobina che in precedenza era stata posta a 1 con un Setta.

Per chiarire bene le idee è meglio fare qualche prova : e per questo si userà la comodasimulazione integrata.

Quindi, scegliere dal menù Simulazione e spuntare "modo simulazione".

Dopo cliccare anche su " Avviare la simulazione in tempo reale"La situazione sarà la seguente:

Come si nota il tutto diventa grigio. D'ora in poi tutti gli elementi attivi saranno rossi e quelli inattivi grigi.Facendo doppio clic sul contatto di ingresso , questo diventerà rosso.Si può notare che pure l'uscita sarà rossa.E' normale, visto che fra le due cè un collegamento diretto.Contatto chiuso, uscita attiva. Si deve immaginare come se la linea verticale a sinistra fosse la fase dell'impianto e quella a destra il neutro.Rifacendo doppio clic sull'ingresso, questo si spegnerà e di conseguenza l'uscita si spegnerà anch'essa.

Ilario Stella 2013 pag 5

Page 6: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Per fare una prova con il Setta Resetta provare a disegnare il seguente schema.

Per inserire i rami successivi al numero 1 bisogna fare clic e posizionare il cursore all'inizio del ramo e quindi dal menù Editazione scegliere Inserire Ramo Dietro, oppure premere da tastiera shift+V.In questo modo si possono inserire rami successivi al primo.

Per cancellare un elemento selezionarlo e premere Canc (o Del) mentre per eleiminare un intera riga premere Shift + Canc.Come si vede si sono inseriti due ingressi, uno Accendi e l'altro Spegni e una Uscita.Le due terminazioni dei contatti di ingresso sono due bobine relè interno, una impostata come Setta e l'altra come Resetta.Tutte e due comandano il contatto di ingresso chiamato Ruscita.La cosa importate e fondamentale da capire è :

QUALSIASI OGGETTO CON LO STESSO NOME IN QUALSIASI PUNTO DELLO SCHEMA VIENE AZIONATO SIMULTANEAMENTE IN QUANTO SI TRATTA DELLA STESSA ENTITA' DISEGNATA IN POSTI DIVERSI.

Quindi Ruscita è un relè interno che si chiama uscita, Yuscita è un pin del pic che si chiama uscita.Xaccendi e Xspegni saranno due pin del pic che hanno questo nome. Provare a fare una simulazione:doppio clic su Xaccendi e Yuscita si accende ; se si rifà doppio clic su Xaccendi l'ingresso sarà nuovamente a 0 ma l'uscita resterà a livello alto.Si spegnerà solo con un reset e quindi facendo doppio clic su Xspegni.Ilario Stella 2013 pag 6

Page 7: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Può sembrare macchinoso ma si fa prima a capire facendolo che a spiegarlo. Un paio di prove e tutto sarà molto più chiaro.Resta ora da vedere come fare a decidere quali pin del pic saranno ingressi ed uscite.Semplice: posizionandosi col mouse sulla riga in fondo alla pagina, quella sopra dovesta scritto Nome, Tipo, Stato, Pin del micro, Porta del processore possiamo allargare la finestra ed accedere alle impostazioni. Si può vedere qui:

facendo doppio clic sul nome di ogni ingresso - uscita comparirà una casella da cui si può selezionare il pin del micro da utilizzare.Scegliere quelli che più sono adatti e a questo punto si può salvare il tutto e compilareil file .hex da inserire nel micro. Per fare questo nel menù Compilazione selezionare Compila e si avrà subito generato il file da inserire nel pic. Volendo si può montare subreadboard il pic (col quarzo e la R su MCLR), 2 pulsanti ed 1 led e verificare che alla pressione di Accendi il led si accenda e si spenga solo premendo Spegni.

Questo esempio è molto banale ma si pensi che i contatti inseriti possono essere numerosissimi. Utilizzando un PIC tipo 16F877 che ha 40 pin c'è da sbizzarrirsi con ingressi e uscite.Ilario Stella 2013 pag 7

Page 8: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Naturalmente questo software non ha la pretesa di sostituire ne i plc professionali ne icompilatori vari che generano software sicuramente migliore. Il codice generato da LDmicro è poco ottimizzato e non velocissimo ma qui si parla di piccoli dispositivi diautomazione che non funzionano a velocità folli.

Inoltre è possibile inserire :

Comparatori

Contatori

Rilevazione fronti di salita e di discesa

Accensione ritardata

Spegnimento ritardato

Addizione Sottrazione Moltiplicazione Divisione a 16 bit

Tavole Indicizzate

PWM

Shift register

Comunicazione seriale UART

E' il caso di considerare che con un pic da 2 euro si potrà costruire quella bella automazione funzionale e complessa, senza impiegare 25 integrati TTL e senza dedicare più di tanto ad apprendere come si programma.

Basta una breadboard e quattro componenti per fare interessanti esperimenti e vedere che in poco tempo si riuscirà a costruire circuiti abbastanza complessi con poco sforzo.

Ilario Stella 2013 pag 8

Page 9: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Guida alle funzioni di LD microGuida con esempi delle principali funzioni del software LDmicro

Questi appunti sono il risultato della traduzione ragionata in italiano della guida ufficiale e soprattutto di esperimenti fatti con certe funzioni, un po' meno intuitive rispetto a quelle basilari ma di grande utilità. E stata tralasciata volutamente la parte relativa alla trasmissione e ricezione seriale in quanto non ho avuto occasione di provarla dal vivo, e quindi non potrei confermare ciò che scrivo.

Ecco un elenco di tutte le funzioni con relative spiegazioni (ove disponibile fra parentesi quadre la scorciatoia da tastiera).

PULSUP genera un impulso in uscita (a livello 1) quando l' ingresso passa da 0 a 1.

PULSDW genera un impulso in uscita (a livello 1) quando l' ingresso passa da 1 a 0.

TON Tempo Ritardo On [ O ] se l'ingresso è a 1 l'uscita va a 1 trascorso il tempo impostato. Se l'ingresso torna a 0 prima che sia trascorso il tempo il timer si azzera.

TOF Tempo Ritardo Off [ F ] se l'ingresso va ad 1 l'uscita va a 1.Quando l'ingresso torna a 0 l'uscita rimane a 1 ancora per il tempo impostato,quindi torna a 0.

RTO Timer Ritentivo On [ T ] se l'ingresso è a 1 l'uscita va a 1 trascorso il tempo impostato e vi resta anche se l'ingresso torna a 0. Per resettare il timer si deve inserireun istruzione RES [ E ]. Ponendo a 1 l'ingresso di questa istruzione si azzera il timer che ha lo stesso nome.

CTU Contatore UP [ U ] il contatore conteggia gli impulsi all'ingresso ( fronte di salita ); raggiunto il valore impostato l'uscita va a 1.

Per resettare il contatore si deve inserire un istruzione RES [ E ]. Ponendo a 1 lingresso di questa istruzione si azzera il contatore che ha lo stesso nome.

CTD Contatore Down [ I ] il contatore pone l'uscita a 1 se il valore in memoria è maggiore del valore impostato.

Ad ogni impulso (fronte di salita) conteggiato in ingresso la memoria viene decrementata di 1. Quando questo valore è minore di quello impostato l'uscita va a 0. Può essere resettato con l'istruzione RES [ E ] e può essere caricato con un valore

qualsiasi mediante l'istruzione MOV [ M ].Ilario Stella 2013 pag 9

Page 10: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Esempio: creo un contatore e lo chiamo "Spegne". Imposto il valore a 2 facendo doppio clic sul contatore stesso ed inserendo 2 nell'apposita casella.Così facendo, quando il contatore avrà un valore minore di 2 l'uscita andrà a 0.Ora uso un istruzione MOV per impostare da che numero iniziare a contare. Nella casella " Destinazione " scrivo "CSpegne" mentre nella casella "Sorgente" scriverò 10. Dando in ingresso un impulso alla funzione MOV nel contatore verrà caricato il valore 10 e l'uscita adrà a 1 in quanto 10>2. Mandando degli impulsi sull'ingresso delcontatore questo decrementerà e quando avrà raggiunto 1 l'uscita andrà a 0, in quanto 1<2. Anche in questo caso si può utilizzare RES per azzerare il contatore.

CTC Contatore Ciclico [ J ] il contatore conteggia gli impulsi all'ingresso in salita, come il CTU,partendo da 0.Raggiunto il valore impostato, ricomincia a contare da 0. Deve essere sempre l'ultimaistruzione di un ramo e il suo valore può essere usato assieme ad un istruzione Compare.Esempio: creo un contatore CTC e lo chiamo "Spegne",impostando il valore pari a 5. Ad ogni impulso in ingresso il contatore, partendo da 0 incrementa di 1. Raggiunto il numero 5, al sesto impulso riparte da 0. Di per se il contatore non associato ad altre funzioni non serve a nulla.Creo quindi una funzione EQU [ = ] compara per uguale inserendo un uscita (Yspegne ,per esempio) e la associo al contatore scrivendo nel campo valore 5 e nel campo nome "Cspegne".Ora, il contatore comincerà a contare gli impulsi partendo da 0,quando arriverà a 5 l'uscita Yspegne andrà a 1 e all'impulso successivo ritornerà a 0, in quanto Cspegne varrà 0.

Funzioni di comparazione:Le funzioni di comparazione restituiscono 1 in uscita quando la condizione è vera. Dispongono di 2 campi, uno è il nome della funzione da controllare ad esempio Cspegne,l'altro il valore numerico da controllare.

Ecco l'elenco delle funzioni di comparazione:

EQU [ = ] compara per uguale. L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) coincide con quello inserito nel campo =:

NEQ compara per diverso. L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) è diverso da quello inserito nel campo /=:

GRT [ > ] compara per maggiore. L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) è maggiore di quello inserito nel campo >:

LES [ < ] compara per minore. L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) è minore di quello inserito nel campo <:

Ilario Stella 2013 pag 10

Page 11: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

GEQ [ . ] compara per maggiore o uguale .L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) è maggiore o uguale a quello inserito nel campo >=:

LEQ [ , ] compara per minore o uguale .L'uscita va a 1 quando il valore della variabile controllata (campo "chiuso se" ) è minore o uguale a quello inserito nel campo <=:

RES [ E ]. Ponendo a 1 l'ingresso di questa istruzione si azzera il timer o il contatore che ha lo stesso nome.Ad esempioun RES Cluce azzera il contatore chiamato luce mentre un RES Tlavoro azzera un timer chiamato lavoro.

Master Control Relay : questa istruzione è un "interruttore generale" che si adopera per sezionare interi rami del circuito.Si usa in coppia e se ne inserisce una all'inizio ed una alla fine della parte di circuito che si vuole isolare.

Esempio:1|----]Xgen[---------------{MASTER RLY}--| ; questo è il primo ramo del circuito, Xgen è l'interruttore generale.

2|----]Xluce[--------------------------(Yluce)--| ; questo è un ramo che comanda una luceYluce tramite un contatto Xluce.

3|----]Xmot[---------------------------(Ymot)--| ; questo è un ramo che comanda un motore Ymot tramite un contatto Xmot.

4|---------------------------{MASTER RLY}--| ; questa è la fine del circuito sezionato dall'interruttore generale.

5|----]Xvent[--------------------------(Yvent)--| ; questo è un ramo che comanda una ventola Yvent tramite un contatto Xvent.

In questo caso tutta la parte compresa fra i due MASTER RLY funziona soltanto se il contatto Xgen è chiuso.

Quindi Yluce e Ymot possono essere accesi da Xluce e Xmot solo se Xgen è attivo. La ventola Yvent invece continua ad essere comandata solo da Xvent in quanto si trova nel ramo dopo il secondo MASTER RLY,che è sempre attivo, essendo collegatodirettamete al ramo iniziale (power rail) a sinistra.

Riassumendo,la parte costituente i rami 2 e 3 funziona solo se è attivo il ramo 1,quella dal 5 compreso in poi continua a funzionare indipendentemente in quanto il MASTER RLY del ramo 4 annulla l'effetto di quello posto nel ramo 1.

Ilario Stella 2013 pag 11

Page 12: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

SHIFT REGISTER (registro a scorrimento). Questa istruzione inserisce un registro a scorrimento avente un certo numero di celle impostabili.L'ingresso del registro a scorrimento è sempre la cella reg0. Per caricare un valore in questa cella bisogna usare un istruzione adatta,ad esempio MOV.

Esempio: Creare un registro a scorrimento a 7 celle (reg0 - reg6) nel quale ingresso (reg0) si possono caricare i valori 0 oppure 1 a seconda della posizione assunta da appositi contatti. Ad ogni impulso in ingresso il valore presente in quell' istante su reg0 viene spostato di una posizione a destra,fino a quando raggiungerà reg6. Al successivo impulso tale dato verrà cancellato.

Lo schema:

{SHIFT REG}1|--]Xshift[--------------------{ REG 0..6 }--|

{ reg0 :=}2|--]X0[-----------------------------{ 0 MOV }--|

{reg0:= }3|--]X1[------------------------------{1 MOV }--|

[reg3 ==]4|--[1]--------------------------------------(Yout)--|

Chiudendo X0, nella cella reg0 viene caricato il valore 0 e vi resta pure riaprendo X0.

Chiudendo X1, nella cella reg0 viene caricato il valore 1 e vi resta pure riaprendo X1.

Mandando gli impulsi all'ingresso tramite Xshift, il valore presente in quel momento nella cella reg0,dipendente dal fatto di avere premuto X0 oppure X1 e viene spostato di una posizione alla volta verso destra (reg1,reg2,reg3,ecc) fino a quando viene perso,uscendo,dopo avere superato reg6.

Tavola indicizzata (Look up table).

Una tavola indicizzata (look up table) è un insieme ordinato di n valori. Quando la condizione sul rung di ingresso è vera,la variabile intera 'dest' è posta uguale al dato nella lookup table che corrispone alla variabile intera 'i'.L'indice parte da 0 cosi' 'i' deve essere compresa fra 0 e (n-1). il comportamento di questa istruzione non è definito se l'indice è fuori dai parametri.Deve essere sempre l'ultima istruzione di un ramo.

Ilario Stella 2013 pag 12

Page 13: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

In breve è un sistema per passare dei valori interi predefiniti contenuti in una tabella precompilata ad una variabile, quando in ingresso si presenta una particolare condizione.Un esempio è molto piùcesplicativo: realizzo il seguente diagramma:

{ pippo : = }-----||-----------------------------------------------------{LUT[Cconta}--|

[pippo >] Yuscita|----[ 10 ]----------------------------------------------------------()--|

Xin _ Cconta|----] [-----------------[OSR_/ ]------------[CTU >=20]---

La lookup contiene nel campo destinazione il nome "pippo", l'indice è il contatore "conta" (Cconta) ed ha al suo interno10 valori,nelle posizioni da 0 a 9. Un esempio potrebbe essere questo:

Destinazione: pippoIndice: CcontaContatore : 10

0: 121: 32: 73: 114: 885: 476: 137: 428: 89: 6Realizzando lo schema di cui sopra il circuito funzionerà in questo modo:L'ingresso è il contatto Xin. Ogni volta che questo verrà chiuso,sarà generato un impulso che farà aumentare di 1 il contenuto del contatore Cconta.Tale contenuto verrà passato alla lookup che associerà alla destinazione "pippo" il valore corrispondente memorizzato nella tabella: quando Cconta vale 0, pippo vale 12, quando Cconta vale 1, pippo vale 3 e così via fino ad arrivare a Cconta = 9 e

pippo = 6.Con valori al di fuori di quelli programmati il comportamento è imprevedibile (solitamente rimane l'ultimo valore valido). L'uscita Yuscita è comandata da una funzione compara per maggiore.

Ilario Stella 2013 pag 13

Page 14: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

In questo caso l'uscita sarà attiva quando "pippo" sarà > 10 e quindi quando "Cconta" varrà 0,3,4,5,6,7.

Negli altri casi,visto che pippo sarà < 10 l'uscita sarà a livello 0. Notare che l'uscita del contatore Cconta non è collegata a nessuna uscita,in quanto a noi interessa solo il valore numerico che questo assume. Volendo,nel nostro esempio,se associassimo a Cconta un uscita Y, questa diverrebbe attiva raggiunto il conteggio di 20 impulsi.

Tabella di elementi lineari.

Questa funzione è un buon sistema per approssimare una funzione complicata o una curva evitando di fare troppi calcoli. Potrebbe ,per esempio , risultare utile se si sta cercando di applicare una curva di calibrazione per convertire una tensione di uscita proveniente da un sensore in valori più facili da elaborare . Esempio: realizzare il seguente diagramma:

Xin _ Cconta|----] [---------------[OSR_/ ]------------[CTU >=20]---

[pippo >] Yuscita|----[ 10 ]-----------------------------------------------------------()--|

{ pippo : = }--------||-----------------------------------------------------{ PWL[Cconta}---|

La tabella potrebbe essere questa:

Destinazione: pippoIndice : CcontaPunto : 3

X0 : 2Y0 : 10X1 : 4Y1 : 20X2 : 8Y2 : 40

Punto rappresenta il numero di coppie di valori X Y da memorizzare,in questo caso 3.

Ilario Stella 2013 pag 14

Page 15: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

Azionando il contatto Xin il contatore Cconta verrà incrementato partendo da 0. I valori passati alla variabile "pippo" saranno i seguenti:

Cconta pippo0 01 52 103 154 205 256 307 358 409 4010 40

si nota che in corrispondenza dei valori di X preimpostati ( 2,4,8) i valori di Y sono esattamente quelli programmati (10,20,40) mentre con valori di X intermedi il software calcola un punto medio da attribuire ad Y.

Ad esempio con X = 1 avremo Y = 5 ,che è esattamente a metà fra 0 e 10.Questa funzione richiede parecchia potenza di calcolo essendo aggiornata in tempo reale e quindi tabelle con molti valori rallenteranno l'esecuzione del programma. I punti devono essere specificati in ordine crescente per coordinate X.La distanza assoluta fra 2 valori deve essere al massimo un numero a 8 bit (255), quindi ad esempio:

(x0, y0) = ( 0, 0)(x1, y1) = (300, 300)

restituirà errore ,mentre scritto in questa forma sarà corretto:

(x0, y0) = ( 0,0)(x1, y1) = (150, 150)(x2, y2) = (300, 300)

ADC

LDmicro può generare il codice per utilizzare i convertitori A / D integrati in alcuni microcontrollori. Se la condizione di ingresso di questa istruzione è vera, allora un singolo campione dal convertitore A / D è acquisito e memorizzato nella variabile `Aname '. Questa variabile può essere successivamente manipolata con operazioni variabili generali (meno di, maggiore di,aritmetica, ecc.)

Ilario Stella 2013 pag 15

Page 16: Ldmicro - GRIX.IT - Elettronica Amatoriale · svariati integrati logici che contengono porte and, or, flip flop, inverter e così via. ... per esempio Omron e Siemens, come la serie

L'assegnazione di un PIN per la variabile `Aname ' avviene nello stesso modo in cui si potrebbe assegnare un PIN per un ingresso o uscita digitale, facendo doppio clic su di esso nell'elenco nella parte inferiore dello schermo.

Se la condizione di ingresso di questo ramo è falsa allora la variabile `Aname 'rimaneinvariata.

La lettura è a 10 bit, quindi se l'ingresso è a 0 la lettura sarà 0 mentre se è a Vdd la lettura sarà 1023.

PWM

LDmicro in grado di generare codice per utilizzare la periferica PWM hardware integrata in alcuni microcontrollori.

Se la condizione di ingresso di questa istruzione è vera, allora il duty cycle del PWM è impostato sul valore della variabile duty_cycle.Il ciclo di deve essere un numero compreso tra 0 e 100; 0 corrisponde a sempre basso,e 100 corrisponde sempre alto.È possibile specificare la frequenza del segnale modulato PWM, in Hz. La frequenza che specificate potrebbe non essere esattamente realizzabile, a seconda di come divide in frequenza di clock il microcontrollore. LDmicro scegliererà la più vicina frequenza ottenibile, se l'errore è grande allora avvertirà. Il runtime della logica ladder consuma un timer interno per misurare il ciclo di tempo. Ciò significa che la PWM è disponibile solo su microcontrollori con almeno due timer adatti. PWM utilizza pin CCP2 (non CCP1) su chip PIC16.

EEPROM

Quando il ramo di ingresso di questa istruzione è vero,il valore della variabile specificata sarà automaticamente salvato in EEPROM. E' importante sapere che quando la funzione è attiva, ogni volta che la variabile cambierà, il nuovo valore verrà automaticamente salvato in EEPROM senza bisogno di azioni aggiuntive.All'accensione del micro, nella variabile verrà caricato automaticamente il valore salvato in precedenza.Se una variabile cambia frequentemente valore,bisogna ricordarsi di attivare tale funzione solo quando necessario in quanto la EEPROM nel micro può usurarsi molto rapidamente,(usurarsi proprio in senso"fisico") perché ha un mumero massimo di cicli di scrittura (~ 100 000) dopo di che diventa inservibile.Quando nel ramo di ingresso la condizione è falsa, non succede nulla. Questa istruzione deve essere la istruzione più a destra nel suo ramo.

Ilario Stella 2013 pag 16