Home
RelaisMatrix-Relazione - Idee Geniali by Paolo Sancono
Contents
1. ifeel SlotN 1 1084 movlw MIM call trasmit movlw Te call trasmit ifend 1084 ifeel SlotN 2 1085 movlw NES call trasmit movlw NN call trasmit ifend 1085 ifeel SlotN 3 1086 movlw MAN call trasmit movlw mg call trasmit ifend 1086 ifeel SlotN 4 1090 movlw Won call trasmit movlw wan call trasmit ifend 1090 clrf Looper For Looper 1 to SlotN repeat 1091 Non si potuta usare la macro for perch conta incf Looper F ja scendere invece a noi interessava contare a salire letl FSR Relais 2 FSR Relais 2 Looper 1 bcf STATUS C rlf Looper W addwf FSR F call sendINDF Invia 8 0 o 1 in base ai bit di INDF incf FSR F call sendINDF until2 ifee Looper SlotN i091 Fine del ciclo For su Looper call newline letl State StStartOfLine goto nextChar ifend 1082 movlw 0x04 04 Undefined header call errore letl State StStartOfLine goto nextChar 1018 0x05 705 invalid Char errore State StSeekNewLin nextChar e si attende solo si permane in questo stato non sta processando nul eel INI il Non si processa pi nulla della riga attuale new line per iniziare il parsing della nuova riga Il led rimane acceso quando caratter e spento quando vi si esce in modo da avvisare l operatore che la macchina a stati la ma sta solo aspettando il carattere newlin LastChar 0x0A i003 letl Ledoff 1003 nextChar Stat
2. 122 LL RESA 123 Diagramma derli REE ALII 124 VAL di BUA ACG RR RE A EA 125 Operazioni demandate a DIASCUDO SA lens irrisoria loto 127 Approlondimenti Sul parser RARO RO O RR RO 139 Revisioni e numero di versionEe ssssssssssssssssssssssssscssosscsscscccsoscosssossseecsossssssesesseseessesssssssssseoo 139 BELLO ESS A OA E NA A E A 143 Toena iii 143 AET E O 1e PREE OE E ANEA AONE A SINA ONA ONA I E EE EOE E EA E A OEE E EE E EAA 144 Funzioni di basso livello per Matlab i 145 Fissi meno Melo per Mala 145 Un esempio di utilizzo UNA ILL RR GR A 146 E RO IAT 148 Basic Serial Write and Regad clll e lai 149 Matrix VE tile elio ATTI ETA TTT ATTI dbensiandhoebsoratieesadencecs 149 MIRI lle ii 151 MURTRI E 1i t RR ce etn ss css He ecg es ce TT O N TI N I n 152 oi inni 155 RUE he EE LUCI 1 I A E E 160 Appendice A Annotazioni pratiche per PUSO scsssccccssssssssccccccssssssscccceesees 162 Appendice B Listati dei programm ssccccsssccccssscssssscssssscccccccccssssssssssscees 167 Firmware in Assembler scccccccccccccocccccccocococococococococococococececesececesecececececesececesescscsecscscseccocccoe 167 S ARR RI 167 MA lai arenaria 172 GATE RI CE PRO RR RE RR ERICA 185 Funzioni di basso Velo laine iaia slanci dalia casier 185 Funzioni di medio ltvello ccccccscccsececsccecscceccccsceccecersececsccececcscersecessccncaccncesseceraee
3. omando inviato Babe Conclusione della stringa e invio allo strumento Al termine viene eliminata l ultima virgola dalla stringa aggiunta una parentesi chiusa e il carattere di new line e la stringa generata viene inviata allo strumento mediante il SubVi MatrixWrite Bt MatrixKnob ERUE Se vero che MatrixDemo VI funziona bene anche vero che non effettua nessun controllo di comando eseguito correttamente Inoltre ha il difetto che appena avviato impone lo stato degli interruttori al circuito anzich leggere lo stato attuale del circuito e partire da quello con le modifiche Inoltre se piacevole la corrispondenza 1 a 1 con gli interruttori presenti a schermo rispetto ai relais presenti sul circuito anche vero che tale rappresentazione fuorviante ha pi senso evidenziare le connessioni create tra ingressi e uscite righe e colonne tramite 1 relais che non lo stato di apertura e chiusura dei relais in quanto tali Front Panel di MatrixKnob subito prima e subito dopo la chiusura dell ultimo relais della diagonale principale 155 A queste esigenze fa fronte MatrixKnob VI Lo stato del circuito viene letto all accensione e riletto continuamente per darne un riscontro visivo in un pannello di Led e mantenere sempre il bus impegnato in comunicazioni e conferme continue a conferma che il sistema sia funzionante e pronto a rispondere Gli azionamenti avvengono trami
4. Rete RC con resistore esterno Oltre al vantaggio RATIOSC1 CLKIN del costo contenuto si puo lavorare a frequenza regolabile sostituendo il resistore con un RA6 OSC2 CLKOUT semplice potenziometro Oscillatore interno a frequenza fissa 1 due pin RAT OSC1 CLKIN del PIC possono essere utilizzati per altre S funzioni Utile quando necessario disporre di RAG OSC CLROUT ca di molti piedini di ingresso uscita Clock From ext system gt ee eee Sorgente di clock esterna Utilizzabile quando PIC16F62X OSCZIIRAG gi presente un clock sul circuito Alcune delle differenti sorgenti di clock disponibili per 11 PIC16F628 La sorgente di clock si imposta durante la programmazione attraverso la configuration word una particolare parola di memoria FLASH in cui si inseriscono dati di configurazione per 1 circuiti integrati che 10 chiamer nel seguito gadget hardware presenti nel microcontrollore Resistenze di pull up integrate In una sperimentazione successiva sono stati testati gli stadi di ingresso con semplici interruttori apprezzando la funzionalit dei pull up interni che consente di risparmiare una resistenza sulla basetta 30 Resistenze di pull up esterne a sinistra ed interne a destra Normalmente per generare 1 due stati logici OV e 5V per un circuito logico con un interruttore si utilizza il collegamento di sinistra con una resistenza di pull up verso l alimentazione positiva e l
5. a ricevere per esempio in protocolli half duplex in cui si trasmette a turno si puo rinunciare in toto al controllo di flusso L errore di overr run non dovrebbe verificarsi mai in questo contesto ma bene prevedere comunque la possibilit di segnalarlo all altro dispositivo La scelta per il nostro circuito Per il nostro circuito si era pensato inizialmente di utilizzare il controllo di flusso hardware RTS CTS e il circuito anche nella versione finale consente questa possibilit con una programmazione adeguata del microcontrollore Una volta analizzato meglio il problema e sviluppato il protocollo ci si resi conto che con una progettazione attenta del protocollo non era necessario alcun controllo di flusso Il protocollo finale ricalcando il pi possibile fedelmente lo standard industriale SCPI nella versione implementata nello strumento Agilent 34970A prevede semplici stringhe di testo per 1 comandi terminate dal carattere new line ASCII LF 0x0A Sono accettate anche righe terminate dalla combinazione ASCII CR LF 0x0C 0x0A mentre non sono accettate righe terminate da CR da solo La macchina normalmente in stato di attesa di una istruzione da eseguire dal PC Un comando riconosciuto correttamente viene eseguito non appena la riga corrente terminata correttamente da un new line I comandi vengono tutti eseguiti in breve tempo subito dopo il new line e non esiste alcun comando che richiede un tempo di elaborazion
6. E lo stato di inizio al quale si torna ad ogni nuova riga Il set di comandi da riconoscere accetta come carattere di inizio solo un asterisco o il primo carattere alfabetico di un identificatore Nel primo caso si setta il subsystem di default a quello dei common commands nel secondo caso si inserisce il primo carattere dell identificatore in parsing in accumulo nella stringa ident Ogni altro carattere deve dar luogo all errore di sintassi 05 Invalid Char In caso di errore lo stato successivo SeekNewLine al quale ogni causa di errore porta in caso di non errore lo stato successivo Parseld osservare 1l diagramma degli stati per seguire questi ragionamenti Se si riceve un new line proprio a inizio riga segno che si ricevuta una riga vuota e si permane in questo stato non eseguendo alcuna operazione Si deciso di non rispondere con 01 Completed al comando consistente in una riga vuota ma di non svolgere semplicemente alcuna operazione Quanto descritto fin ora sufficiente al riconoscimento della sintassi dei comandi Si deciso poi di estendere appena le funzionalit di StartOfLine accettando il carattere di due punti ad inizio riga condizione nella quale si permane in StartOfLine poich questo il comportamento di molte macchine programmabili da laboratorio anche se non documentato Cos come scritto il parser accetta anche pi caratteri di due punti consecutivi Volendo 127 segna
7. ET Risposta ricevuta 2 ROUTE CLOSE Fe i i H WRITE Query sullo stato attuale MatrixWrite viene invocato con la richiesta delle query ROUTE CLOSE La risposta viene scorporata dei caratteri iniziali e ne viene conservata solo la sequenza di 16 caratteri pari a 1 o O a seconda se 1 relais siano chiusi o aperti La risposta viene anche inviata cos come verso l alto verso la sezione del block diagram che accendera 1 led aperto o chiuso 157 Analisi della stringa formata da 0 e 1 La stringa formata da 0 e I viene elaborata tramite la struttura in figura che accende o spegne 1 led corrispondenti del pannello a led 4x4 E gt gt Chiuso 2a gt ris hiuso Tal dana e o Aperto Accensione led Chiuso o Aperto La posizione delle manopole di selezione riga e colonna viene inviata verso la struttura di gestione eventi sovrastante fili blu che escono dalla sinistra Il valore di tale manopole viene opportunamente trattato matematicamente a selezionare il carattere di posto corretto nella stringa di risposta alla query filo fucsia che entra da sinistra Il confronto con 0 o 1 del carattere selezionato nella risposta accender opportunamente uno dei due led Chiuso o Aperto 2 Chiudi Value Change Mewval Risposta ricevuta 1 F s WRITE bra Gestore dell evento Bottone Chiudi In risp
8. gt lf Lj Row 3 Column 2 i sc Fri i 34904A modulo di espansione con matrice di switch 4x8 per 11 34970A Il prodotto Agilent costituito da una unit principale da collegare al PC o utilizzare dal pannello frontale dotata di 3 slot in cui inserire altrettanti moduli secondo una topologia di collegamento a stella I moduli contengono le matrici o 1 multiplexer di switch o altre funzionalit non di interesse per questo progetto Il circuito utilissimo in un laboratorio di misure automatiche poich consente di collegare automaticamente gli strumenti di misura a differenti circuiti in prova di realizzare 12 automaticamente misure che richiedono normalmente un intervento manuale di creare automaticamente da programma veri e propri circuiti connettendo al volo tra loro componenti dh TH ae E e o interi stadi gi pronti Il circuito una alternativa molto economica ai prodotti commerciali ideale per un uso didattico con l ulteriore vantaggio non da poco conto in tale contesto di poter conoscere tutto dell architettura interna per attivit di studio di miglioramento o di riparazione Descrizione sommaria Dalla idea generale si passati ad una descrizione sommaria del progetto con l intento di determinare quali potenze di calcolo ed elettriche fossero in gioco su quali e quanti circuiti integrati orientarsi e su quale tecnologia utilizzare per realizzare il circuito L i
9. incf Ident 2 W forw Looper 1098 Def STATUS rlf Temp F next Looper 1098 ber STATUS C rrf Temp F Temp B 0001 B 0010 B 0100 B 1000 in base a Ident 2 ifbs Ident 1 0 i099 swapf Temp F Temp SwapNibbles Temp se Ident 1 riga 2 o riga 4 ifend 1099 movt Temp W Setta il bit in Lista corrispondente allo Slot Channel number lorwf INDF F riconosciuto nelle righe precedenti ifend 1064 goto nextChar ifend 1061 ifeel LastChar 1058 Le liste di canali possono contenere per intervalli di canali movlw 0x03 03 Unimplemented call errore letl State StSeekNewLine goto nextChar ifend 1058 ifeel hast Char tt 206 La virgola separa un Slot Channel number dal successivo clrf IdentLength Si azzera Ident in modo da utilizzarla nel riconoscimento successivo goto nextChar ifend 1060 ifeel LastChar i062 Parentesi chiusa se segue un newline si esegue il comando letl State StNewLineAfterParClose goto nextChar ifend 1062 movlw 0x05 05 Invalid Char call errore letl State StSeekNewLine goto nextChar In questo stato s1 pu apprezzare un po di programmazione in Assembler vera e propria quando 1 caratteri numerici che costituiscono 1 numeri di canale vengono convertiti in numeri 135 binari senza segno Su questi si effettuano operazioni di moltiplicazione e addizione per settare o resettare 1 bit di posto corretto all interno della Lista di canali Vengono anche effe
10. pensare ad un protocollo proprietario basato su TCP IP in modo da utilizzare il sistema con una connessione Ethernet o di realizzare un WebServer embedded o su PC di appoggio che consenta di accedere all intero laboratorio in remoto da qualunque PC connesso a Internet Molti degli apparecchi presenti in laboratorio infatti sono gi dotati di un WebServer integrato con tanto di pannello di controllo virtuale remoto 161 Appendice A Annotazioni pratiche per l uso In questa appendice vengono dati consigli pratici per mettere il sistema conservato in una teca del laboratorio assieme ad una stampa di questa relazione e ad un CD con il software di utilizzo in grado di funzionare in pochi minuti anche se sono trascorsi anni dall ultimo utilizzo evitando quei comportamenti che potrebbero danneggiarlo Cablaggio Fare riferimento all introduzione per quel che riguarda il piano di cablaggio del sistema e le specifiche elettriche e di ingombro Automatic Test Equipment di varia natura Oscilloscopio Circuiti H L rag ri Moduli da 1 a 4 m e my Linea telefonica Controller Piano di cablaggio Il cuore del sistema la basetta del controller la pi piccola di dimensioni Il controller si collega ad una porta seriale disponibile su un PC mediante un cavo seriale null modem che contenga al minimo la connessione tra 1 pin 5 di massa e tra 1 pin 2 e 3 invertiti delle due por
11. 34 Dato che i segnali pi importanti Trasmit e Receive sono localizzati sui pin 2 e 3 qualcuno sostiene che il numero d ordine presente nel nome dello standard RS232 serva proprio come mnemonico dei pin utilizzati per la trasmissione e ricezione 3 I segnali DSR e CD sono collegati assieme sui cavi null modem per far credere a ciascuno dei due dispositivi di essere ondine quando ci si collega ad un DCE un modem il segnale CD indica infatti l avvenuta connessione collegando tra loro due DTE due PC bene che entrambi gli strumenti credano che l altro sia sempre online 41 Sul data sheet della macchina Agilent di riferimento consigliano un altro tipo di connessione leggermente differente a RS 232 Cable N Schema di collegamento suggerito dall Agilent Nella nostra applicazione non utilizzeremo tutti 1 segnali ed entrambi i tipi di cavo funzioneranno bene con il nostro apparecchio Ci si potrebbe anche limitare ad un cavo schermato a 4 poli secondo il seguente schema ridotto D Sub9 A D Sub9B O Data Terminal Ready Data Terminal Ready Data Set Ready 4 6 1 L B 4 6 1 L B Data Set Ready Carrier Detect Carrier Detect System Ground System Ground Request to Send 7 8 Clear to Send Clear to Send ggo Covo ridotto 4 poli schermo I pin 1 4 e 6 vanno collegati tra loro in loopback su ciascun lato del cavo ma non portati da un apparecchio all altro Volendo usare un cavo schermato con
12. 707 dt No Module in Slot 708 dt Interrupted chain 709 0A 0F dt Empty state PLO dt Different modules sol dt RS232 Framing ele dt RS232 Overrun a3 dt PaoloSancono RelaisMatrix 1 0 1 0 14 dt Too many modules p IF HIGH HIGH tavMsgText ERROR La tavola di salto tavMsgText ha superato i confini di pagina ENDIF IF HIGH B 00 ERROR La tavola di salto tavMsgText ha bisogno di ridefinire PCLATH ENDIF 174 Sezione init eseguita una sola volta Sezione receiv seguita in ciclo ad eternum init movlw 0x20 Cancella i file register da 0x20 a 0x7f movwf FSR jin modo da assicurare che tutte le variabili initL CITE INDE del programma siano a zero inizialmente incf FSR F bt fss FSR 7 gt goto initL movlw TrisPortA Imposta i TRIS register per le due porte tris PORTA movlw TrisPortB 5 tris PORTB movlw B 00000111 Configura PORTA come Digital I O anzich comparatori analogici movwf CMCON XXXXX111 Comparator disable RBA0 3 as Digital 1 0 CE PORTA Clear port latches elrf PORTB H bsf STATUS RPO Bank 1 movlw
13. C un numero diverso di moduli negli slot rispetto a quando si memorizzato lo stato nella posizione di memoria Il comando RCL viene rifiutato Questi messaggi di errore pur codificati nella routine di segnalazione errori non vengono mai visualizzati con la revisione corrente del firmware perch le funzionalit di salvataggio e recupero stati di memoria non sono state ancora implementate Errori nella comunicazione seriale 12 RS232 framing Errore di trama nella comunicazione Rs232 Si attende il successivo new line prima di continuare a processare l input Il led rosso rimane acceso fino all arrivo del new line Se il carattere che ha subito un errore di trama proprio il new line l intera riga successiva verr ignorata 98 13 RS232 overrun Errore di overrun nella comunicazione Rs232 La UART del PIC memorizza due caratteri in un buffer FIFO e il terzo carattere nel registro dell ultimo carattere arrivato Se arriva un quarto carattere senza che il firmware utente svuoti il buffer FIFO si genera l errore di overrun Si attende il successivo new line prima di continuare a processare l input Il led rosso rimane acceso mentre il PIC non processa l input in attesa di un carattere newline Stringhe memorizzate internamente come messaggi di errore 14 PaoloSancono RelaisMatrix 1 0 1 0 Questo messaggio viene visualizzato senza il 14 e senza lo spazio in testa in risposta al comando IDN Internamente
14. Si noti che il parser in caso di sintassi errata fornisce sempre e solo uno dei due errori 04 Unknown Header o 05 Invalid char Si potrebbero includere messaggi di errore pi mirati che faciliterebbero 1l debug di comandi errati inviati al controller a costo di una occupazione della memoria FLASH del PIC maggiore per memorizzare le differenti stringhe di errore Non occorre riscrivere il parser che internamente gi distingue tra numerosi tipi di errori ma costretto a segnalare all esterno sempre e solo uno dei due codici a lui riservati disponibili nella routine di segnalazione errori Specificazione canale non valido o non presente 06 Slot out of range E stato messo un numero di slot pari a 500 600 700 800 o 900 Il controller supporta al massimo 4 slot numerati 100 200 300 400 07 Chan out of range E stato messo un numero di canale non corretto Riga e colonna devono essere compresi tra 1 e 4 pertanto 1 canali disponibili sono 16 numerati 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 E stato seguito lo stesso sistema di numerazione della macchina Agilent di riferimento 08 No module in slot Non c nessun modulo montato nello slot richiesto Es stato chiesto di chiudere il relais 312 prima riga seconda colonna sul modulo montato nello slot 3 ma sono stati collegati solo due moduli al controller ai quali sono stati assegnati 1 numeri di slot 100 e 200 Errori hardware nella cat
15. call autotest E bsf Flag FlVerboseAutotest Verbose On per tutti gli usi successivi TST ifgtel SlotN 1 i1001 Se sono stati trovati tra 1 e 4 moduli ie el SlotN 5 i001 movlw 0x02 02 Hallo call sendMsg ifend 1001 Altrimenti all accensione o dopo RST la stringa di errore stampata da autotest call aggiornaModuli Tutti i relais aperti nextChar eel goto nextChar Le prime istruzioni eseguite sono quelle di inizializzazione le variabili del programma vengono inizializzate con valori opportuni 1 gadget hardware del PIC vengono configurati per l uso desiderato e si eseguono quindi procedure iniziali che vanno eseguite una sola volta prima di passare il controllo al ciclo principale che rester in esecuzione fino allo spegnimento del circuito Per avere a disposizione PORTA come ingressi e uscite digitali vengono disattivati 1 comparatori analogici multiplexati sugli stessi pin e attivi per default Vengono impostati 1 registri di direzione delle porta TRISA e TRISB in funzione dei collegamenti hardware del PIC Infine viene configurata la USART per una trasmissione seriale asincrona a 57600 baud 8 bit 1 bit di start 1 bit di stop senza l uso di interrupt e con trasmissione e ricezione continue anzich attivate su richiesta Per come sono collegati 11 led e 11 buzzer questi sono attivi con una uscita bassa occorre quindi spegnerli portando l uscita a valore alto 118 Infine viene eseguita la routine di
16. condensatore e una resistenza sugli ingressi Master Clear e Output Enable Appena acceso il circuito il gradino di tensione TAL 505 sull alimentazione si trasferir dall altro lato 100k del condensatore sul piedino di ingresso dello R1 shift register poi la resistenza scaricher o carichera il condensatore a massa o o alimentazione mantenendo il valore finale per Reti RC sui piedini di reset e abilitazione uscite tutto il resto del tempo in cui il circuito rimane acceso Si ottiene cos un o uno 0 all accensione a seconda di quale delle due reti mostrate in figura utilizzata e lo stato opposto per tutto il resto del tempo Resistenza e condensatore possono essere dimensionati per ottenere 1 tempi di reazione desiderati Questo non un problema per il nostro circuito perch il microcontrollore prende il controllo del bus molto rapidamente e per prima cosa invia una sequenza di zeri agli shift register I relais che essendo componenti elettromeccanici sono tre ordini di grandezza pi lenti degli shift register e del microcontrollore non hanno il tempo di scattare quindi si deciso di semplificare il circuito collegando permanentemente ad alimentazione e massa gli ingressi Master Clear e Output Enable fidandosi del fatto che il microcontrollore prende rapidamente il controllo del bus ottenendo il vantaggio di una semplificazione del circuito Nell ultimo schema relativo allo stesso co
17. e va quindi collegato ai 12V Le uscite open drain dell ULN2803 sono collegate ciascuna ad una coppia relais led Ciascun led ha la sua resistenza limitatrice di corrente in serie Gli interruttori dei relais anzich essere stati disegnati accanto ai relativi relais sono stati raggruppati tutti insieme per evidenziare il collegamento a matrice che si desiderava realizzare Le righe e le colonne della matrice sono state rese disponibili all utilizzatore mediante morsetti a vite Sbroglio Disegnato un circuito elettrico si procede all operazione di sbroglio ovvero a sistemare 1 componenti su una basetta e collegarli con piste di rame che rispettino la stessa topologia dei collegamenti dello schema elettrico Con 1 metodi di preparazione delle basette artigianali preferibile uno sbroglio monofaccia vale a dire componenti da un lato piste di rame dall altro lato della basetta La topologia insegna che cos procedendo necessario aggiungere dei ponticelli in grado di scavalcare alcune piste sul lato componenti oppure anche direttamente sul lato piste rendendo 1 ponticelli un po bruttini dal lato piste ma invisibili dal lato componenti L operazione di sbroglio non banale Occorre tenere presente che le piste di alimentazione devono avere larghezza sufficiente in base alla corrente che ci deve scorrere dentro per evitare pericolose cadute Inoltre bene diramarsi a stella anzich in cascata dallo stadio di alimentazi
18. goto stNewLineAfterQm goto stChiocciolaOnly goto stRiempiLista goto stNewLineAfterParClose goto nextChar Should Never come here IF HIGH HIGH StateCase ERROR La tavola di salto StateCase ha superato i confini di pagina ENDIF IF HIGH B 01 ERROR La tavola di salto StateCase ha bisogno di ridefinire PCLATH ENDIF In caso di errore di OverRun possibile solo se il PC invia due comandi di seguito senza leggere prima la risposta del microcontrollore poich l unico processo bloccante sul PIC l invio di caratteri oltre a comunicare l errore che generer una cascata di errori di overrun uno ogni 100 ms fino a che il trasmittente non fa una pausa occorre fermare e far ripartire la logica di ricezione della USART come specificato sul datasheet del PIC In caso di errore di trama conviene scartare 11 byte letto poich contiene dati non validi Il carattere letto dalla seriale viene memorizzato nella variabile globale LastChar Il condizionamento del carattere consiste nel convertire le lettere minuscole in maiuscole poich SCPI un protocollo case insensitive La combinazione CTRL C prevista dallo standard SCPI deve interrompere elaborazioni lunghe nella macchina riportandola in uno stato in cui presta attenzione al PC Siccome non esistono elaborazioni lunghe in questo progetto il carattere CTRL C viene semplicemente accettato e scartato per mantenere la compatibilit con lo standard E pi
19. i ou T un a J du mic ie ae oy pat cr D qu co qu T rr ra i oe a ET E Bytes at Porth s iE E mn a IZ m i alo FILA e D T 4 File Edit Operate Tools Browse Window Help a Sju 13pt Application Font ea Ii a Porta seriale Piin Stringa letta Byte letti i Font Panel di Matrix Write VI Come si osserva in figura 1 programmi in LabView vengono disegnati sullo schermo con il mouse anzich essere immessi da tastiera Questo VI non viene utilizzato cos come ma come SubVi da utilizzare altrove Il suo front panel quindi non verr mai visualizzato a schermo n tanto meno utilizzato se non per operazioni di debug MatrixWrite elimina il line feed in coda alla risposta ricevuta ma non aggiunge automaticamente il line feed nella stringa da inviare allo strumento 150 P a MatrixInteractive MTER Il passo successivo stato scrivere un VI che consentisse di immettere comandi generici e leggere le risposte fornite dallo strumento gt batrizinteractivews Lo Matrixinteractive vi Block Diagram Hob File Edit Operate Tools Browse Window Help File Edit Operate Tools Browse Window Help Ofn P hal os IT coHE _y 0 Invia comando value Change vb Porta seriale alla quale collegato il circuito Termina programma com4 STOP Porta seriale alla quale collegato il circuito ea Risposta ricevuta Comando da inviare newlin
20. i097 Se attivo l echo dei caratteri ricevuti movf LastChar W viene reinviato al PC ogni carattere ricevuto call trasmit ifend 1097 Parser Accendere e spegnere dei relais collegati a shift register tutto sommato piuttosto facile con un microcontrollore mentre realizzare 11 parser ovvero quello strumento software in grado di riconoscere comandi impartiti tramite stringhe di testo e che restituisce gli errori di sintassi non valida tutt altro che banale specie in assembler Non la prima volta che realizzo un parser per riconoscere un linguaggio con pochi costrutti per la prima volta che implemento queste funzionalit in un linguaggio a basso livello Ho realizzato infatti un parser in Java a scopo didattico in grado di riconoscere 1 costrutti XML Si veda il mio tema d anno del corso di Sistemi Informativi dal titolo Generazione dell albero corrispondente ad un documento XML mediante un parser scritto in Java al quale rimando per chi vuole approfondire la conoscenza degli algoritmi di parsing e del mio personalissimo stile nell implementarli 123 Il parser implementato come macchina a stati Un attenta progettazione ha consentito di mantenere basso il numero di stati presenti nella macchina che ammontano a 7 in tutto Una descrizione testuale degli stati presenti stata gi illustrata mostrando il ciclo principale del programma La descrizione degli stati era presente come comm
21. r i131 132 133 134 141 142 143 144 e 111 112 113 114 311 112 113 o Vi14 131 133 e 121 177 173 122 O O 7 Fr 4 a es Ps es Be VII VII VII VII N 4 4 VITI VITI VITI x 4 os i se ee isiin 34 141 142 ci O O VII 1 e 7141 142 143 144 131 132 O o 7 T 7 T l IlIi DAD ress 7 T 4 F 7 7 f r i VE List E ep Listy E j list 189 Appendice C GNU Free Documentation License GNU Free Documentation License Version 1 2 November 2002 Copyright C 2000 2001 2002 Free Software Foundation Inc 51 Franklin St Fifth Floor Boston MA 02110 1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed 0 PREAMBLE The purpose of this License is to make a manual textbook or other functional and useful document free in the sense of freedom to assure everyone the effective freedom to copy and redistribute it with or without modifying it either commercially or noncommercially Secondarily this License preserves for the author and publisher a way to get credit for their work while not being considered responsible for modifications made by others This License is a kind of copyleft which means that derivative works of the document must themselves be free
22. semplice eliminarlo semplicemente dal flusso di dati piuttosto che passarlo al parser per l analisi Lo stato principale della macchina a stati del parser memorizzato nella variabile globale State che assume valori pari alle costanti Stxxxx dichiarate all inizio del programma cblock 0x00 Valori possibili per State stato corrente della macchina a stati di parsing StStartOfLine Programma appena avviato oppure riga precedente terminata e inizio riga successiva Cerca o l inizio di un i1dentificatore A Z StSeekNewLine La linea precedente ha generato un errore oppure non interessa leggerne la fine si attende la conclusione della riga attuale senza processare nulla Il led rimane acceso in questo stato Si riempie Ident con l identificatore man mano che ne arrivano 1 caratteri costituenti L identificatore verr riconosciuto non appena si ricevono caratteri consecutivi adeguati Una volta riconosciuto l identificatore si setta il SubSystem di default e il SubSystem di cui si appena fatto il parsing Un comando correttamente riconosciuto non verr eseguito subito ma a fine riga Si trattano in questo stato anche i duepunti spazi parentesi aperta punto interrogativo e il carattere newline che termina il comando corrente che verr eseguito se riconosciuto E stata riconosciuta una query dopo il si attende newline StParseld No No No No No No No No No No No No No No No N
23. subwf btfss goto endm macro movlw ifeew endm macro sublw btfss goto endm macro mov f subwf btisc goto endm macro subwf btfse goto endm macro movlw ifnew endm macro sublw btfsc goto endm macro mov f subwf btisc goto endm macro movf ifgtew endm datal data2 label Il salto verra effettuato per la condizione opposta filel file2 alabel if egual File File filel W file2 W STATUS Z alabel file alabel if egual File W file W STATUS Z alabel file literal alabel if egual File Literal literal file alabel literal alabel if egual Literal W literal STATUS Z alabel filel file2 alabel if not egual File File filel W file2 W STATUS Z alabel file alabel if not egual File W file W STATUS Z alabel file literal alabel if not egual File Literal literal file alabel literal alabel if not egual Literal W literal STATUS Z alabel filel file2 alabel if greather than File File filel W file W STATUS C alabel filel file2 alabel if greather than or egual File File file2 W filel alabel 168 ne ifgtew macro subwf btfss goto endm ifgtel macro movlw ifgtew endm iflt macro movf subwf beso goto endm ifltw macro subwf btrsc goto endm nls wel ole macro movlw ifltw endm LEF macro movet ifrw endm ifrw macro addlw addlw ifbs endm LEDS macro btfss goto endm LEDG macro bDUErse goto end
24. 1022 Se trova 1 su Feedback che ha un resistore di pull up su scheda call autotestFallito movlw 0x09 09 Interrupted chain call errore return ifend i022 forl autotestLooper 4 1021 Per 4 volte movlw OxFF Invia 16 1 sugli shift register call shiftout call shiftout incf SlotN F ifbc ShRegPort FeedbackBit autotestok Se trova 1 abbiamo determinato il numero di moduli connessi next autotestLooper 1021 Altrimenti ci sono pi moduli call autotestFallito I moduli connessi sono pi di 4 movlw 0x15 15 Too many modules call errore return autotestok ifbs Flag FlVerboseAutotest i067 movlw TEN call trasmit movlw TIN call trasmit call newline 119 autotestFallito ifend return ifbs ifend return 1067 Flag FlVerboseAutotest i066 movlw i ie call trasmit movlw ON call trasmit call newline 1066 La routine accetta un parametro booleano in ingresso Flag FlVerboseAutotest Se settato sar cura della stessa routine inviare un 1 o 0 sulla seriale in caso di successo o insuccesso del test utile nel caso di risposta al comando TST Se Flag FIVerboseAutotest non e se programma ttato l autotest sara silenzioso e questo utile durante l inizializzazione del Ciclo principale Il ciclo principale del programma sostanzialmente costituito da Eventuale comunicazione di messaggi di errore accodati Gestione degli errori della porta seriale Lettura del
25. Flag F1lVerboseAut clrf bef forl next bet bsf ifbs ifend forl next call movlw call return ifbs rollore dal uanti moduli sono connessi moduli connessi senza mai mandare store li sono collegati in anello piedino di t ClockBit Ident un buffer di byte consecutivi in memoria che implementa in Assembler una stringa a lunghezza variabile la cui lunghezza attuale viene conservata in IdentAddChar aggiunge il carattere passato in W in coda a Ident ttere successivo viene semplicemente ignorato della variabile a 8 byte Relais agli shift register montati sui moduli che aggiornerebbe anche i Latch di uscita con terminatore sull ultimo i bit dopo aver percorso l anello Feedback conservando inviando direttamente Ll l informazione in SlotN oppure segnala gli errori di catena invia 1 o 0 sulla serial otest settato SlotN ShRegPort DataBit autotestLooper OxFF i020 DEE ShRegPort bsf ShRegPort autotestLooper i020 ShRegPort ClockBit ShRegPort ClockBit t ClockBit ShRegPort FeedbackBit i022 l autotestFallito ca movlw cal return 1022 0x09 errore autotestLooper 4 1021 ct ct rrore sulla seriale settando SlotN a 0 o 5 a seconda se l autotest ha successo o no Invia 0 agli shift register 257 v
26. IU TM 028 let SSParsed SSRoute let SSDefault SSRoute ifend 1028 LETdent4 em Mp rom So 029 ifeel SSDefault SSRoute i029 letl SSParsed SSClose ifend 1029 1fident4 TON TPT EN N 1030 ifeel SSDefault SSRoute i030 letl SSParsed SSOpen ifend 1030 LAT denti TET XT TOTEL 1078 ifeel SSDefault SSRoute 1078 ifeel SSParsed SSClose i079 bsf Flag FlExclusive goto nextChar ifend 1079 ifeel SSParsed SSOpen 1080 bsf Flag FlExclusive goto nextChar ifend 1080 176 LastChar in ignorato riga vuota Motta aggiunge caratteri a si settano equivalente a ON parser comincia da qui tere in LastChar O si inizia a riempire Incontrato un carattere diverso per compatibilit con lo standard SCPI cos da poter riconoscere CR LF come GOTO del Basic ultimo letto dalla seriale si cancellano i SubSystem riconosciuti a parte il SubSystem di default che rimane valido Ident ignorato errore Ident le variabili SSI Se si riconosce si processa l header seguent Default non aggiornata ifend 1078 ifident4 Wer Lae We wes 1033 et SSParsed SSSystem let SSDefault SSSystem goto nextChar ifend 1033 JfIdent4 MM OM DM UN 076 ifeel SSDefault SSSystem i076 letl SSParsed SSModule goto nextChar ifend 1076 ifident4 Won Sep Io NT a OSG ifeel SSDefault SSSystem i036 letl SSParsed SSCpon goto nextChar ifend
27. Programmable Instruments IEEE 488 2 nella versione dello strumento da laboratorio Agilent 34970A Data Acquisition Switch Unit prodotto commerciale preso a modello generale durante 11 lavoro Esistono kit che consentono di trasformare uno strumento che operi su seriale in uno operante in GPIB quindi la scelta fatta non limitante qualora si intendesse usare l altro tipo di bus di connessione La porta seriale resta la scelta pi economica ed l unica porta di comunicazione realmente onnipresente se non di serie almeno come opzione su qualunque sistema elettronico in grado di scambiare dati ATE Automated Test Equipment Strumentazione di acquisizione dati automatica Laboratorio di Misure Elettroniche al Dipartimento di Elettrotecnica ed Elettronica DEE del Politecnico di Bari gt Nella versione finale 11 circuito modulare ed scalabile fino a 64 relais 11 i Cose eC oe nes AT w mrsa me cma mt 3 ZE SAR AZ ff ne am atone E ee i Mam Da Uy Ag i t oy es ee VILLA Pannello frontale e posteriore dell Agilent 34970A Computer Plug in System and Software Interface Cable 34970A Modules Cabling Col 1 Col 2 Col amp E bS d yi BERE o H AH Row 1 LULL eis di H e roa 000 gl EERE DB q uN a Row 3 Baan TA TEDS BURN He 3 _ a Row4 T00 E i LI UU ee PA iz MARA z A aN a f ft Channel 32 D n
28. SSDelete Delete Livello 3 sotto Memory State SSValid Valid Livello 3 sotto Memory State SSIdn Idn Livello 2 sotto Common SSTst Tst Livello 2 sotto Common SSRst Rst Livello 2 sotto Common SSSav Sav Livello 2 sotto Common SSRcl Rcl Livello 2 sotto Common SSCls Cls Livello 2 sotto Common endc n kee eS Connessioni Hardware del PIC Si dichiarano costanti che rispecchiano le connessioni in modo da poter accedere agilmente con mnemonici Quarzo a 20MHz Fosc 20Mhz Fosc4 SMhz Mnem PIN DIR Funzione RAO 17 O Shift Register Clock RA1 18 I Shift Register Feedback RA2 1 O Shift Register Store oo RAS o2 O Shift Register Data RA4 3 N A N C RAS 4 N A ICSP VPP RBO 6 I RS232 CTS RB1 7 I RS232 Rx RB2 8 O RS232 Tx RB3 9 O RS232 RTS RB4 10 O Piezo buzzer RB5 11 O Led indicator RB6 12 N A ICSP PGC RB7 13 N A ICSP PGD TrisPortA equ B 11110010 TrisPortB equ B 11000011 ShRegPort equ PORTA ClockBit equ 0 FeedbackBit equ 1 StoreBit equ 2 DataBit equ 3 CtsPort equ PORTB CtsBit equ 0 RtsPort equ PORTB RtsBit equ 3 BuzzPort equ PORTB BuzzBit equ 4 LedPort equ PORTB LedBit equ 5 persa Macro definitions qnop macro hardware al effettua 4 NOP mediante call return pin del PIC Tempo di e
29. SSParsed SSTst goto nextChar Lrend i015 ifid nt3 R S T 1023 ifeel SSDefault SSCommon i023 letl SSParsed SSRst goto nextChar ifend i023 irrd nto TCN MET aor ya eo ifeel SSDefault SSCommon i031 letl SSParsed SSCls goto nextChar ifend 1031 lfeel SSDefault SSSystem 1042 ifeel SSParsed SSCpon i042 Riconosciuti gli header si setta opportunamente SSParsed Un comando riconosciuto non viene eseguito subito ma si rimanda 1 esecuzione a fine riga cos in caso di errori di sintassi successivi si pu disfare l intera riga ricevuta senza eseguire nulla SYSTEM CPON l eccezione a questa regola e viene in parte eseguito direttamente per evitare di complicare la macchina con altri stati e altre variabili temporanee SYSTEM CPON viene gestito integralmente da StParseId anche se concettualmente avrebbe bisogno di uno stato a parte essendo un comando con parametro ifidents RA LOS cri Relais clrf Relais 1 clrf Relais 2 CLEF Relais 3 clrf Relais 4 clrf Relais 5 130 GLET CLEF goto ifend i037 ifeel ifeel ifeel ifend movlw call letl goto ifend 1106 ifend 1042 goto nextChar ifend notalfanum ifeel LastChar 0x0A 1016 Incontrato un newline Relais 6 Relais 7 nextChar IdentLength 3 1106 Ident 1 0 i044 Ident 2 0 1044 ifeel CIPE GIPT goto ifend 1046 ifeel ifltl ifend Car clrf goto 1047 Ident 0 aE eA ifend ifeel ifend oak ane clrf goto 10
30. affidata interamente al programmatore Nei miei programmi dedico uno spazio di memoria ad ogni sottoroutine che usa le sue variabili cos certo che non si verifichino sovrapposizioni Si spreca cos un po di memoria RAM poich una locazione non pi utilizzata da una routine poteva essere utilizzata da un altra ma si evitano sovrapposizioni Per quanto riguarda il passaggio di parametri in ingresso nessun problema si pone se occorre passare un unico valore a 8 bit disponibile l accumulatore o se le sotto procedure sono minuscole in tal caso le si scrive come macro e queste si possono accettare diversi parametri di ingresso Delle altre funzioni dei linguaggi di alto livello mere traduzioni di quanto l hardware del PIC mette a disposizione attraverso 1 registri di controllo francamente non se ne sente la mancanza poich basta nominare 1 registri con nomi opportuni o scrivere piccole routine dai nomi evocativi per ottenere la stessa facilit d uso dei linguaggi d alto livello in assembler Riferimenti per l assembler dei PIC Ci vuole del tempo per imparare l assembler dei PIC che utilizza mnemonici differenti da quelli dei processori x86 o da altri processori storici 6502 o Z 0 e non questa relazione la sede adatta per descrivere tale linguaggio Si rimanda al data sheet del PIC16F628 della D Uno spaghetti program un codice in cui l esecuzione salta continuamente da un punto ad un altro tramite sal
31. al posto corretto le risposte inframmezzate con le richieste per far fronte a dispositivi half duplex e non impiastricciare 1 caratteri sullo schermo caratteristica essenziale per un programma di emulazione terminale Matlab Se il terminale di Windows lo strumento ideale per il debug del firmware fornendo un accesso quanto pi diretto possibile alla porta seriale non per la scelta migliore se si desiderano funzioni di scripting avanzato 144 In tal caso molto utile avere delle librerie di funzioni di accesso a Relais Matrix all interno di un ambiente di calcolo scientifico come il Matlab che in grado di interfacciarsi con altri strumenti ATE Funzioni di basso livello per Matlab Sono stati scritti due ordini di funzioni memorizzate in m files il tipo di file standard per script e funzioni Matlab il primo di pi basso livello che consente di inviare e ricevere comandi in forma testuale alla macchina tramite la porta seriale MatrixInit Crea una variabile globale MatrixSp che contiene l handle per un oggetto di accesso alla porta seriale utilizzato poi da tutte le altre funzioni disponibili MatrixInit va richiamato in interattiva all inizio della sessione di lavoro MatrixDone Rilascia le risorse di memoria occupate dall oggetto MatrixSp MatrixDone va richiamato in interattiva alla fine della sessione di lavoro MatrixWrite Accetta come unico parametro una stringa che verr inviata al
32. attraverso fori in cui viene depositato del metallo Questa tecnica disponibile solo con procedimenti industriali ed fuori dalla portata del nostro laboratorio Per lo sbroglio monofaccia di solito preferibile uno sbroglio manuale almeno per le piste di alimentazione che devono rispondere a regole ben precise difficili da insegnare ad un PC L autorouter pu essere ancora utilizzato per mostrare la fattibilit dello sbroglio se l autorouter riesce a collegare il 90 delle piste senza ponticelli presumibilmente uno sbroglio manuale 38 Trad letterale Fili volanti 53 collegher l 80 delle piste ma molto meglio vale a dire evitando tortuosi cammini per piste che rischiano di rompersi o di andare in corto con altre vicine Se l autorouter non arriva al 90 bene chiedersi se non il caso di riposizionare 1 componenti prima di procedere allo sbroglio ICSP_ 1 XTALI a NE CE ee es ma ia li i i j w D ar uF ey CE ID t Tar E m ea den US OL EEE to cane gt a 1 ati 400 T D I P pio Ola Fi i un N o A TELE f i gh Tao Sbroglio basetta controller In figura lo sbroglio della basetta del controller Il disegno visto dall alto dal lato componenti Gli ingombri dei componenti sono indicati in bianco come pure le sigle e 1 valori In verde 1 PAD ovvero le piazzole di rame sulle quali verranno saldati 1 reofori dei componenti In blu le piste di rame Sic
33. basette controller e modulo di espansione Sono stati disegnati separatamente gli schemi elettrici dei due circuiti a Through Hole brevemente TH letteralmente attraverso il foro indica 1 componenti per il quali necessario forare la basetta inserire 1l reoforo nel foro ed effettuare la saldatura dall altro lato tagliando poi la lunghezza del reoforo in eccesso Sourface Monted Devices SMD letteralmente Dispositivi montati sulla superficie sono invece quei componenti che richiedono saldature direttamente dal lato dove sono montati sulla basetta I SMD si vanno imponendo per 1 costi e dimensioni ridotte la facilit e velocit del montaggio automatizzato e la riduzione del costo complessivo delle basette 46 FIC IGFE2SP T i GND GND Schema elettrico scheda controller Stadio di alimentazione Il circuito doveva avere due alimentazioni 12V per i relais e 5V per la logica di controllo La terza alimentazione duale 10V 10V viene generata direttamente dallo stesso chip che si occupa della trasmissione seriale e non occorrevano accorgimenti particolari per essa Lo stadio di alimentazione collocato sul controller e alimenta anche tutti 1 moduli ad esso connessi In alto visibile lo stadio di stabilizzazione di tensione Per alimentazione destinata al relais l idea originale era di utilizzare un trasformatore da 9V seguito da un raddrizzatore a doppia semionda con 4 diodi e un condensatore el
34. carico induttivo della bobina dei relais led collegati ai piedini di uscita Le sperimentazioni realizzate su solderless board hanno esplorato le differenti sorgenti di clock disponibili per il microcontrollore oscillatore interno quarzo rete RC con resistore esterno condensatore interno sorgente di clock esterna e le due diverse modalit di utilizzo di una uscita del microcontrollore per generare o assorbire corrente oltre a far prendere dimestichezza con 1l set di istruzioni del microcontrollore Per non appesantire la trattazione evito di riportare 11 codice assembler e lo schema elettrico di questi primi esperimenti Assembly del 6502 utilizzato sul Commodore 128 in tenera et per velocizzare l esecuzione di propri programmi e videogiochi e Assembly del 80286 utilizzato come codice in line in programmi Pascal per l accesso diretto alle funzioni di basso livello di BIOS e DOS Il titolo di questo paragrafo la parafrasi del pi celebre pila resistenza led ovvero il primo circuito che l hobbista di elettronica applicata realizza nella sua carriera e che lo porta per la prima volta dal mondo dell elettrotecnica pila interruttore lampadina nel mondo dei semiconduttori 1l led Basette sperimentali con fori distanziati 1 10 di pollice il passo dei piedini dei circuiti integrati in package PDIP In ciascun foro presente una pinzetta argentata che afferra 1 reofori dei componenti Le pinzette sono
35. cavo che li inverta tutti con la probabile successiva rottura del circuito IMPORTANTE Non collegare moduli a controller acceso Per aggiungere o rimuovere moduli dalla catena procedere in questo modo togliere l alimentazione al controller realizzare la nuova catena di moduli e alimentare nuovamente 1l controller Non collegare moduli a caldo poich 1 relais potrebbero scattare in uno stato casuale e il controller non rendersi conto dell avvenuta variazione del numero di moduli connessi con risultati imprevedibili 163 IMPORTANTE Ponticello non documentato Una caratteristica non documentata a dovere ma solo citata nella documentazione header con ponticello presente accanto al quarzo sulla basetta del controller tale ponticello deve essere inserito per l uso normale del circuito e va disinserito solo per le fasi di riprogrammazione del firmware tramite l header ICSP Assicurarsi dunque che sia presente il ponticello in tale header In caso di assenza alimentando 1l circuito il buzzer emetter una nota continua Spegnere il circuito inserire il ponticello riaccendere 1l circuito IMPORTANTE Header ISCP L header ISCP a 5 poli si utilizza durante la riprogrammazione in circuit del microcontrollore Non inserire ponticelli in questo header poich produrrebbero corti distruttivi Collegando un programmatore differente dal Fiser s programmer a tale header controllare tutti 1 segnali sullo schema elettri
36. con lo strumento da laboratorio Relais Matrix InitMatrix va richiamato in interattiva all inizio della sessione di lavoro Sintassi MatrixInit Port Parametri di ingresso opzionali Port E un numero intero da 1 a 8 Indica la porta COM da usare per la comunicazione con la porta seriale Default 4 oO oP AP WP oP oP oA AP AP WP AAP do do global MatrixSp if exist Port Port 4 end if round Port Port disp Port deve essere un numero intero return end if Port lt 1 Port gt 8 disp Port deve essere un intero compreso tra le 8 TELturi end ComPort strcat COM int2str Port MatrixSp serial ComPort BaudRate 57600 DataBits 8 FlowControl None DACABLCS o ScOpeics 1 Parity None Termznacor LF Timeout 1 fopen MatrixSp lt In caso di errore questi vengono indicati direttamente da fopen 6non c bisogno di intercettarli e riportarli all utente assignin base MatrixSp MatrixSp matrixdone m function MatrixDone MatrixDone Funzione Matlab che distrugge variabile globale MatrixSp che contiene l handle di un oggetto porta seriale da utilizzare per comunicare con lo strumento da laboratorio Relais Matrix CloseMatrix va richiamato in interattiva alla fine della sessione di lavoro Sintassi MatrixDone Nota MatrixSp deve essere presente nel workspace prima di richiamare questa funzione oa oP oA oA AP AP AP OP do do do global MatrixS
37. eseguire in automatico una serie di misure poich ancora necessario l intervento manuale per modificare la topologia del circuito Le conseguenze sono ancora peggiori nei casi in cui interessa la ripetibilit delle misure in condizioni particolari Cablando nuovamente 1l circuito 10 possono variare le resistenze di contatto delle interconnessioni e le misure possono svolgersi in condizioni operative differenti Il sistema descritto in questo tema d anno una matrice di switching modulare conforme al protocollo SCPI Standard industriale IEEE 488 2 viene proprio incontro a questa esigenza Nei successivi paragrafi dell introduzione vedremo come nata in cosa consiste e come Si sviluppata l idea fino alla formulazione di specifiche generali che hanno consentito le successive fasi di progetto realizzazione collaudo e utilizzo della macchina Specifiche iniziali Idea Per esercizio didattico e per potenziare le funzionalit del nostro laboratorio si realizzato un circuito comprendente 16 relais SPST organizzati in una matrice 4x4 in grado di collegare uno qualsiasi di 4 ingressi ad una qualsiasi di 4 uscite E possibile eccitare anche pi relais contemporaneamente in modo da realizzare collegamenti multipli Il circuito possiede anche la logica di controllo necessaria per interfacciarsi con la porta seriale RS232 di un PC Il protocollo di comunicazione da usare lo standard SCPI Standard Commands for
38. gi collegate internamente a strisce di 5 cos che sia possibile montare un intero circuito senza effettuare saldature 28 Uno dei circuiti pi semplici realizzabili sequenza di accensione delle luci di un semaforo per plastico ferroviario con potenziometro per regolare la velocit di scansione della sequenza 5W ZUR XY da 270R I due tipi di collegamento di un led ad uno stadio di uscita CMOS push pull In caso di uscita a drain aperto possibile utilizzare solo il collegamento di sinistra Un clock per il PIC Ogni microcontrollore ha bisogno di una sorgente di clock per scandire il ritmo di esecuzione delle istruzioni I PIC offrono grande versatilit consentendo di selezionare in fase di programmazione tra numerose sorgenti di clock disponibili e includono gi la circuteria di oscillazione Qualunque sia la sorgente di clock il tempo di esecuzione di una istruzione 4 colpi di clock per tutte le istruzioni tranne quelle di salto goto return call retfie che impiegano 8 colpi di clock per essere eseguite Questa uniformit di tempo di esecuzione che rende facile calcolare il tempo di esecuzione delle routine contando le istruzioni presenti possibile grazie all architettura Harvard e al set di istruzioni RISC 29 Quarzo esterno E indispensabile quando la frequenza di esecuzione delle istruzioni deve essere precisa come nel nostro caso poich si intende usare la comunicazione seriale
39. if any given in the Document for public access to a Transparent copy of the Document and likewise the network locations given in the Document for previous versions it was based on These may be placed in the History section You may omit a network location for a work that was published at least four years before the Document itself or if the original publisher of the version it refers to gives permission 191 K For any section Entitled Acknowledgements or Dedications Preserve the Title of the section and preserve in the section all the substance and tone of each of the contributor acknowledgements and or dedications given therein L Preserve all the Invariant Sections of the Document unaltered in their text and in their titles Section numbers or the equivalent are not considered part of the section titles M Delete any section Entitled Endorsements Such a section may not be included in the Modified Version N Do not retitle any existing section to be Entitled Endorsements or to conflict in title with any Invariant Section O Preserve any Warranty Disclaimers If the Modified Version includes new front matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document you may at your option designate some or all of these sections as invariant To do this add their titles to the list of Invariant Sections in the Modified Version s license notice These titl
40. in cui c un unica coppia di bus dati bus indirizzi dal quale vengono lette tanto le istruzioni che 1 dati L architettura Harvard tipica dei microcontrollori in cui la memoria programma a sola lettura e presenta l ulteriore vantaggio di poter avere larghezze di bus differenti per la memoria dati e la memoria programma consentendo di avere gli opcode coi loro operandi tutti a singola word anzich su pi byte consecutivi velocizzando le sincrone linee data clock che asincrone un unica linea liberando le risorse della CPU per 21 operazioni di fetch e garantendo tempi di esecuzione delle istruzioni sempre uguali Nei PIC tutte le istruzioni vengono eseguite in 4 cicli di clock esterno a parte le istruzioni di salto che vengono eseguite in 8 cicli Programmatore La memoria FLASH di programma del microcontrollore viene cancellata e riscritta dai piedini del chip mediante una interfaccia da collegare al PC che prende il nome di programmatore Esistono prodotti commerciali in grado di realizzare questa funzione ma sono costosi a volte hanno problemi di funzionamento specie quelli economici e spesso richiedono la rimozione del chip dal circuito per la riprogrammazione e il successivo reinserimento per testare se il firmware scritto funziona a dovere I PIC consentono invece la possibilit dell in circuit serial programming ICSP nel seguito ovvero di programmare il microcontrollore direttamente nel circuito finale e
41. in the same sense It complements the GNU General Public License which is a copyleft license designed for free software We have designed this License in order to use it for manuals for free software because free software needs free documentation a free program should come with manuals providing the same freedoms that the software does But this License is not limited to software manuals it can be used for any textual work regardless of subject matter or whether it is published as a printed book We recommend this License principally for works whose purpose is instruction or reference 1 APPLICABILITY AND DEFINITIONS This License applies to any manual or other work in any medium that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License Such a notice grants a world wide royalty free license unlimited in duration to use that work under the conditions stated herein The Document below refers to any such manual or work Any member of the public is a licensee and is addressed as you You accept the license if you copy modify or distribute the work in a way requiring permission under copyright law A Modified Version of the Document means any work containing the Document or a portion of it either copied verbatim or with modifications and or translated into another language A Secondary Section is a named appendix or a front matter section of the Document that deals excl
42. indice del messaggio da trasmettere un beep dal buzzer Infatti i codici 01 trasmit bt fss PIR1 TXIF goto trasmit movwf TXREG return newline ifbs Flag F1CrLf i103 movlw O0x0D call trasmit ifend 1103 movlw Ox0A call trasmit return sendMsg movwf sendMsgBcd swapf sendMsgBcd W andlw Ox0F addlw Mon call trasmit movf sendMsgBcd W andlw Ox0F addlw Mon call trasmit movlw WAN call trasmit movf sendMsgBcd W call sendString call newline ifgtel sendMsgBcd 0x03 1043 call BuzzBeep il ifend 1043 return sendString movwf sendMsgBcd OLTE sendMsgTemp for sendMsgLooper sendMsgBcd 1040 183 informativi non di errore movf sendMsgLooper W call tavMsgSizes addwf sendMsgTemp F next sendMsgLooper i040 incf sendMsgBcd W call tavMsgSizes forw sendMsgLooper i041 movt sendMsgTemp W call tavMsgText call trasmit incf sendMsgTemp F next sendMsgLooper i041 return i A rror i Accoda il messaggio di errore passato in W in Errore variabile globale Appena cessa la ricezione di caratteri dalla seriale verr trasmesso l errore generato Se gi presente un errore viene conservato il primo e scartati gli ultimi errore btfss Flag FlErrorPresent movwf Errore bsf Flag FlErrorPresent return i Sesta Buzz Beep Effettua un beep accendendo il Buzzer attendendo 30 centesimi di secondo e spegnendolo BuzzBeep BuzzOn movlw ELO call De
43. its license notice and that you preserve all their Warranty Disclaimers The combined work need only contain one copy of this License and multiple identical Invariant Sections may be replaced with a single copy If there are multiple Invariant Sections with the same name but different contents make the title of each such section unique by adding at the end of it in parentheses the name of the original author or publisher of that section if known or else a unique number Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work In the combination you must combine any sections Entitled History in the various original documents forming one section Entitled History likewise combine any sections Entitled Acknowledgements and any sections Entitled Dedications You must delete all sections Entitled Endorsements 6 COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License and replace the individual copies of this License in the various documents with a single copy that is included in the collection provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects You may extract a single document from such a collection and distribute it individually under this License provided you insert a copy of this License into the extracted document and foll
44. l uso abituale e rimuovere durante la riprogrammazione Non la soluzione ideale ma comunque molto pi comodo inserire e 70 disinserire un ponticello su un header apposito che non un intero chip dal suo zoccolino rischiando di romperne 1 pin ogni volta Il ponticello inserito visibile nelle foto del controller tra il led giallo e il quarzo La correzione non stata riportata sullo schema elettrico poich tale modifica non dovrebbe essere necessaria se s1 utilizza un programmatore che eroghi pi corrente sull uscita a SV RA4 open collector La seconda brutta notizia stata l aver dimenticato che la porta RA4 del microcontrollore l unico stadio di uscita open drain tutti gli altri sono push pull del microcontrollore utilizzato La porta era destinata a pilotare 11 segnale di clock degli shift register Occorreva montare una resistenza di pull up si preferito invece cambiare piedino di uscita come gi discusso descrivendo lo schema elettrico Durante il debug hardware di questo errore che non si mostrato subito e dava malfunzionamenti sporadici 1 pi difficili da scovare sono state collegate sonde di oscilloscopio ai vari segnali presenti sulla scheda per capire perch gli shift register operavano correttamente una volta si e due no Il debug di un firmware molto differente dal debug di un software sul PC perch s1 riescono a ricavare poche informazioni sullo stato della macchina e le
45. letl State StSeekNewLin goto nextChar ifelse 1054 1055 letl State StChiocciolaOnly goto nextChar ifend 1055 1050 LastChar 3 10 09 I due punti separano un header dal successivo clrf IdentLength occorre pulire Ident e SSParsed per il nuovo header ifnel SSParsed SSClose nextChar Se SSParsed SSClose non cancella SSParsed poich si pu attendere ancora EXCLUSIVE La condizione if not equal literal va qui letta goto if equal literal ifend ifeel ifend movlw call letl goto clrf SSParsed goto nextChar 1009 LastChar 1038 Dopo un si attende solo NewLine prima di eseguire la letl State StNewLineAfterQm goto nextChar 1038 0x05 Nessuno dei caratteri precedenti errore errore 05 Invalid Char State StSeekNewLin nextChar 178 stChiocciolaOnly ifeel ifelse ifend goto stRiempiLista In questo stato si Numerosi control Per questo non e si rimanda all ifgtel ifltl ifend ifeel ifend LastChar 1057 clrf Lista clrf Listatl GELET Listat2 clrt Listat3 clrf Listat4 ELLE Lista 5 CITE Lista 6 ELET Listat7 CEE Ident Length letl 1057 1070 movlw 0x05 call errore letl State Sts 1070 nextChar riempie In questo stato si attende solo i parentesi aperta e si azzerano le strutture di memoria che ospiteranno la lista di canali State StRiempiLista Se non si riceve una chi
46. macro per le strutture for next descritte in precedenza e dell istruzione rrf Rotate Right File che sposta verso destra 1 bit presenti in un file register rendendo disponibile nel bit meno significativo via via gli 8 bit iniziali store bcf ShRegPort StoreBit bsf ShRegPort StoreBit return La routine store invia un fronte di salita al segnale di store trasferendo lo stato degli shift register ai latch annessi Finch non si richiama store gli shift register vengono aggiornati ma 1 latch conservano la configurazione precedente per 1 relais Lo configurazione dei Relais per 4 moduli viene memorizzata compattamente in 8 byte di Ram nella variabile Relais Per accedere ad una variabile larga pi byte si fa ricorso all unica modalit di indirizzamento indiretto del PIC ovvero all uso dei registri mappati in ram FSR e INDF File Select Register e Indirect File nel primo si seleziona la locazione a cui accedere in modo indiretto nel secondo si scrive o legge il valore della locazione La routine aggiornaModuli trasferisce 11 contenuto della variabile Relais agli shift register sfruttando shiftout e store descritte precedentemente Aggiorna i relais sulle schede con i contenuti attuali della variabile a 8 byte Relais inviando i bit di Relais nell ordine opportuno agli shift register montati sui moduli aggiornaModuli movlw Relais addlw so movwf FSR forl aggiornaModuliLooper 8 1034 La durata nell ambito de
47. occupazione spropositata di memoria programma con le librerie del linguaggio e la perdita della possibilit di valutare il tempo di esecuzione delle istruzioni spesso prerogativa fondamentale nei contesti real time in cui vengono utilizzati 1 microcontrollori Inoltre tutti 1 compilatori C compreso quello della Microchip e l unico compilatore Basic disponibile non sono gratuiti e non era disponibile 11 budget per l acquisto di una licenza per questo progetto Assembler Io ho scelto di utilizzare l assembler poich consente un controllo piu diretto della macchina e obbliga ad una conoscenza pi dettagliata dell hardware che consente poi di sfruttarlo al meglio Il paradigma di programmazione in assembler completamente differente da quello dei linguaggi di alto livello Lo stesso problema viene risolto con costrutti e sequenze spesso completamente differenti e sempre e comunque pi efficienti sia per velocit di esecuzione sia per occupazione di memoria una risorsa molto preziosa sui microcontrollori in assembler Non detto che 11 paradigma del linguaggio macchina sia pi complesso di quello dei linguaggi di alto livello semplicemente differente chi abituato a programmare in un modo avr difficolt a programmare nell altro ma vale la pena di imparare entrambe le possibilit I Fa eccezione qualche compilatore C completamente freeware ma si tratta di prodotti ancora in stato di beta testing e pieni
48. pin ed difficile ottenere uno sbroglio ordinato 33 sbroglio monofaccia sono dotati di latch ovvero ritengono una configurazione sugli stadi di uscita mentre lo shift register ne sta leggendo un altra serialmente Le linee di ingresso pi Importanti sono Ds Data serial su cui inviare serialmente un bit per volta 1 dati da memorizzare e SHcp Shift Clock Pulse segnale di clock per gli shift register in corrispondenza del fronte di salita di questo clock 1 dati verranno trasferiti da ogni bit al successivo e dall ingresso Data al primo bit Un fronte di salita sul Cab DI segnale STcp Store Clock Pulse memorizzer invece ow i cia O il ry LA a O lt ry hal LA n d 10 13 Ra Lai ALATT ii Reset Active Low azzera asincronamente gli shift register Anche questo componente stato oggetto di sperimentazione su solderless board prima dell uso nel progetto finale Pi che il componente si sono testate le routine del microcontrollore adatte a pilotarlo correttamente Data la velocit pi elevata dello shift register LOOMHz 10ns rispetto alla velocit di esecuzione di una istruzione del microcontrollore 5 MHz 200ns non stato necessario introdurre alcun ciclo di ritardo nel firmware del PIC Il tempo necessario per aggiornare serialmente l intera sequenza degli stati di 64 relais inferiore al tipico tempo di risposta di un relais dell or
49. possibile specificare intervalli Le memorie in cui salvare richiamare la combinazione attuale di relais chiusi aperti vengono chiamate memorie mentre vengono chiamati stati sul datasheet Agilent Le memorie non verranno chiamate n slot n stati per non confondersi con gli slot in cui inserire moduli Con Gli stati definiti dal protocollo LEEE 4388 2 che non ho implementato con lo stato della macchina a stati del parser e con gli stati accessori del parser che chiamer variabili di stato Header indica i connettori hardware rapidi con pi pin affiancati spaziati 1 10 di pollice Il data sheet Agilent usa il termine Header ad indicare gli identificatori dei comandi validi Cercher di usare il pi possibile identificatore per descrivere questi Ultimi Ma ta volte saro Costretto a usare header come Al data sheet Agilent Come si vede c era rischio di confusione tra termini per esempio slot stato memoria potevano riferirsi tutti allo stesso concetto ovvero le posizioni di memoria su cui salvare e richiamare lo stato attuale dei relais con 1 comandi SAV e RCL Nella frase precedente ho volutamente usato 1l termine stato per indicare se un relais acceso o spento questo procura confusione meglio sarebbe stato usare condizione acceso spento dei relais Questo per mostrare quanto facilmente si possa cadere in omonimie o sinonimi e quanto possa essere utile un glossario dei termini da definire il pi pr
50. presentano qualche inconveniente per incisione artigianale Master esportato da Eagle e master esportato dallo script di mia ideazione Si osservi l immagine di sinistra Lo spazio interno delle piazzole esattamente uguale al diametro del foro da realizzare Questo significa che bisogna andare col trapano al posto giusto e non si incontrer rame nel percorso Pu essere difficile se non impossibile la centratura senza alcuna guida su materiale tenero e se si sbaglia all inizio si perduti perch pressoch impossibile correggere un foro iniziato nel posto sbagliato Inoltre 1l procedimento di incisione casalingo pu mangiare un po il diametro interno e lo spazio senza rame diventer addirittura pi grande del foro da fare Diversi componenti di libreria standard hanno piazzole con fori da 0 6 mm per esempio 1 resistori Un hobbysta di solito preferisce fori appena pi grossi 0 8 millimetri ottenendo di usare una punta meno delicata e di infilare pi facilmente 1 reofori in un foro appena pi largo Chiaramente forando con la punta da 0 8 millimetri una piazzola pensata per un foro da 0 6 millimetri di questa non rester traccia perch voler via non appena si avvicina il trapano Eagle non consente di modificare facilmente il diametro dei fori dei pad dei componenti l unica strada quella di modificare 1 componenti nella libreria ma pu essere faticoso noioso e lungo 57 I fori non legati a pa
51. progettista stesso ed esterna per il cliente utilizzatore indispensabili in ogni fase di progettazione e documentazione finale Nello stesso capitolo viene descritto succintamente il protocollo SCPI standard industriale IEEE 488 2 l analisi di questo protocollo effettuata le scelte operate per 1 comandi da implementare e il sistema di segnalazione di errori hardware il circuito in grado di effettuare un auto test e software progettato ad hoc che si distanzia dallo standard al quale si invece rimasti fedeli per quel che riguarda la sintassi dei comandi Corredano il capitolo le tabelle di riferimento rapido per l utilizzatore della macchina con la sintassi dei comandi e 1 messaggi di errore generati Il capitolo 4 dedicato a tutto ci che concerne il firmware a cominciare dalle differenze tra un software su un PC e un firmware su un microcontrollore e come queste differenze portino a procedure di messa a punto debug completamente differenti per continuare con l estensione dell assembler realizzata con la raccolta di macro psifthen di mia ideazione in grado di fornire il supporto per strutture di controllo di flusso avanzate costrutti if then else cicli for while repeat eccetera in un linguaggio che ne privo Viene descritto 11 BIOS implementato sul microcontrollore ovvero il sottosistema di accesso all hardware le routine assembler per la gestione di stringhe a lunghezza variabile la routine di auto test d
52. riconosciuta anche la combinazione 0x0D 0x10 anche se non viene controllato che 1 caratteri siano consecutivi Le stringhe non verranno prima bufferate fino a 0x10 e poi interpretate ma direttamente interpretate man mano che arrivano poich alcuni comandi possono essere molto lunghi e non c abbastanza memoria nel PIC per conservarli L operazione interpretata riconosciuta e memorizzata nelle variabili di stato ausiliarie non verr per esegulta prima del raggiungimento del fine riga per lasciare comungue la possibilit di disfare un comando che sembrava con Sintassi valida ma contiene un errore proprio sul finale Ed ecco una decisione che ha ridotto l occupazione in memoria del firmware e facilitato enormemente la scrittura del parser I comandi possono essere abbreviati alla prima abbreviazione che li distingue uno dall altro e dopo di che possono continuare come capita verranno sempre riconosciuti come validi Quindi ROUT ROUTE ROUTContinuoComeMiPare verranno riconosciuti sempre come lo stesso comando valido Cos facendo necessario memorizzare solo la parte obbligatoria degli identificatori nel programma anzich l identificatore per intero risparmiando memoria e facilitando il codice E infine una decisione 1 cui risvolti sono chiariti nei prossimi paragrafi Dopo ogni comando ricevuto verr annunciato che stato eseguito oppure che c stato un errore Non si gestisce nessuna queue di errori o b
53. righe 1 ponticelli sono necessari per scavalcare l alimentazione gi mandata dallo stesso lato Il collegamento tra gli shift register e gli ULN2803 diretto grazie all intreccio presente invece nello schema elettrico Resta una marea di ponticelli e di spazio occupato sul lato inferiore della basetta per collegare tra loro 1 piedini omologhi dei due shift register e dei due header per il bus di sistema Infine stato possibile collegare solo la riga inferiore di relais alle uscite degli ULN2803 Gli altri 12 collegamenti sono stati realizzati con fili dal lato piste della basetta 55 L alternativa era occupare ancora pi spazio in basetta la basetta ha gi dimensioni di 25 x a i 39 sca i i 11 5 cm pi che considerevoli e aumentare moltissimo il numero di ponticelli LO TE ta rm E Sbroglio basetta modulo relais Incisione basette pshouse drill aid uno script per Eagle rilasciato con GPL 9 Nelle basette molto grandi insorge la difficolt di garantire una incisione uniforme su tutta la superficie con 1 pericoli di piste assottigliate o interrotte in una zona e piste ingrossate 0 in corto in un altra zona 56 Eagle puo stampare direttamente 1 master per 1 PCB oppure esportare percorsi utensile per frese CNC files per plotter Gerber o immagini da stampare con altri software di grafica Le immagini prodotte da Eagle sono perfette per procedimenti di incisione industriale ma
54. senso in quanto collega tutti gli ingressi a tutte le uscite contemporaneamente e non ha utilit pratica alcuna Tipicamente si lavorer con 4 8 relais inseriti per ciascun modulo quindi anche con l alimentatore attuale 1l circuito pu utilizzare 4 moduli in condizioni operative tipiche Anche la scelta del 7812 pu sembrare non felice poich la corrente massima erogabile per la quale garantita la regolazione della tensione 1A ma le prove pratiche dimostrano che per 1 relais che non hanno bisogno di tensione stabilizzata 11 7812 funziona egregiamente anche a quasi 2A Altrimenti basta sostituirlo con un regolatore da 3A con stessa piedinatura e stesso ingombro Il dimensionamento del dissipatore pure stato sommario Sapendo che gli integrati della serie 78XX sono protetti dal surriscaldamento si pu partire con un dissipatore e procedere per tentativi se scalda troppo se ne monta uno pi grosso E possibile ed anche semplice effettuare calcoli teorici sulla potenza da dissipare e valutare la resistenza termica del 48 dissipatore necessario a garantire una temperatura del case e una temperatura alla giunzione dei semiconduttori ma questi conti lasciano il tempo che trovano poich il coefficiente di convezione naturale per il dissipatore non mai noto con precisione e occorre comunque una prova pratica tanto vale farla direttamente Concludendo l interesse primario stato dato a questioni pi interessanti
55. soli 2 poli si possono collegare in loopback anche 1 pin 7 e 8 si rinuncia al controllo di flusso hardware ma se si studia un protocollo adeguato come in effetti stato poi fatto e si certi che non si verifichino perdite di dati questo non un problema e la soluzione riduce la complessit e il costo del cavo specie se va autocostruito 42 _ ______ D Sub9A D Sub9B _ Transmit Data Transmit Data 3 2 Receive ata i Terminal Ready Data Terminal Ready Data Set Ready 4 6 1 L B 4 6 1 L B Data Set Ready Carrier Detect Carrier Detect System Ground System Ground Request to Send l l Request to Send Clear to Send ai e Clear to Send Cavo minimo 2 poli schermo I tipi di controllo di flusso standardizzati della porta seriale Per controllo di flusso si intendono quelle tecniche atte a rallentare la trasmissione di dati di un dispositivo quando il buffer di ricezione a destinazione sull altro dispositivo pieno o quasi pieno in modo da prevenire la perdita di dati dovuta ad errori di buffer overflow che nel caso specifico vengono di solito chiamati overrun I controlli di flusso standardizzati per le porte seriali sono 1 seguenti XON XOFF E un controllo di flusso software due caratteri speciali sono inseriti nel flusso di dati per indicare la disponibilit a ricevere dati o la richiesta di fermare le trasmissioni in atto Questi caratteri sono 0x13 XOFF che richiede di interrompere 1l fl
56. successivo viene semplicemente ignorato IdentAddChar movwft Ident Temp incf IdentLength F ifgtel IdentLength 9 1006 letl IdentLength 8 return ifend 1006 movf IdentLength W addlw Ident l movwt FSR let INDF Ident Temp return Il codice di gestione stringhe prevede un buffer dichiarato come variabile globale che memorizza la stringa un altra variabile che conserva la lunghezza attuale dinamica una routine che aggiunge un carattere in coda alla stringa l uso del comando clrf IdentLength per svuotare la stringa settandone la lunghezza a zero e due macro che confrontano 1 primi 3 o 1 primi 4 caratteri presenti nella stringa con tre caratteri passati come valore immediato Queste macro verranno utilizzate dal parser per riconoscere identificatori validi Il codice scritto con le macro non efficiente per quanto riguarda l occupazione in memoria ma molto comodo da usare e rende il programma pi leggibile Se la memoria a disposizione dovesse terminare si pu riscrivere la macro in maniera pi efficiente come routine risparmiando in un colpo solo una grande quantit di memoria con un unica operazione di ottimizzazione l ottimizzazione una delle operazioni pi laboriose quando si programma in assembler 115 Flag da un bit Le variabili booleane un solo bit vengono memorizzate compattamente in un unica varibile di un Byte dichiarata all inizio del programma in questo modo Flag Variabili
57. 1036 Jfidents VW EM R7035 ifeel SSDefault SSSystem i035 letl SSParsed SSVer goto nextChar ifend 1035 fr Gent TIV TD TN 2013 ifeel SSDefault SSCommon i013 letl SSParsed SSIdn goto nextChar ifend 1013 LELEENES WEN US pM 0455 ifeel SSDefault SSCommon i015 letl SSParsed SSTst goto nextChar ifend 1015 LELAIERE SUR US SET 2023 ifeel SSDefault SSCommon i023 letl SSParsed SSRst goto nextChar ifend 1023 ifident3 Eh Wi SS 2032 ifeel SSDefault SSCommon 1031 letl SSParsed SSC1s goto nextChar ifend 1031 ifeel SSDefault SSSystem i042 ifeel SSParsed SSCpon 1042 Riconosciuti gli header si setta opportunamente SSParsed ma si rimanda l esecuzione del comando a fine riga cos in caso di errori di sintassi nell istruzione non si esegue nulla Riconosciuto SYSTem CPON per oltre a settare SSParsed opportunamente si azzerano direttamente 1 bit opportuni in Relais rimandando l aggiornamento hardware degli shift register alla fine dell istruzione Si evitato cos di memorizzare in ulteriori variabili di stato quali Relais andavano aperti ma si pu incorrere in errore se dopo SYSTem CPON XXX si ricevono ulteriori caratteri non validi i fident 3 SAT DT ML E GLPE Relais CITE Relaistl CF Relais 2 GLET Relais 3 CLEE Relais 4 GITE
58. 4 C un po alta ma comunque consentita Il regolatore dotato di protezione termica non andato in protezione Lasciando il componente senza aletta di raffreddamento si potuto notare che la protezione limitazione della corrente erogata entrava in funzione per una temperatura esterna di 110 C e una temperatura della giunzione presumibile di 130 circa Con relais accesi e dissipatore montato la temperatura a regime stata di 62 C con 4 relais accesi 37 C Senza relais accesi 28 C Per l uso tipico tra 4 e 8 relais accesi per volta si attende quindi una temperatura del dissipatore di 40 60 C perfettamente idonea Nessun problema di reset spuri Nessun problema si notato per la sezione logica facendo commutare anche molti relais tutti assieme il microcontrollore su una basetta separata ha una alimentazione separata anche se con la massa in comune sono state bypassate le alimentazioni vicino a ciascun integrato ma soprattutto ci sono 1 diodi di ricircolo vicino ai relais e le piste di massa sono state dimensionate correttamente Se il circuito viene progettato male e l alimentazione di logica e relais la stessa pu succedere che all atto della chiusura di un relais la caduta di tensione sulla linea di alimentazione faccia spegnere e riaccendere 11 microcontrollore che perde cos tutte le configurazioni e si resetta rleseguendo il programma dall inizio X La prassi pi che comune p
59. 48 Ident 0 ifltl ifend ifeel ifend clrf ede oni goto 1049 Ident 0 movlw call letl goto i102 Ident 0 movlw call letl goto IOS Lrend ifgtel ifend it ifend 1044 0x04 errore Ident 0 Ident 0 TET AG Relais Relais 1 nextChar 2 1047 SlotN 2 i071 movlw 0x08 708 No module in slot call errore letl State StSeekNewLine goto nextChar EOS Relais 2 Relals 3 nextChar 3 1048 SlotN 3 i073 movlw 0x08 708 No module in slot Cakl errore letl State StSeekNewLine goto nextChar i1073 Relais 4 Relais 5 nextChar TAM 1049 SLOEN 245 20 75 movlw 0x08 708 No module in slot call errore letl State StSeekNewLine goto nextChar i1075 Relais 6 Relais 7 nextChar Nah Oe 0x06 06 Slot out of range errore State StSeekNewLine nextChar TEM TEOS 0x05 04 Unknown Header errore State StSeekNewLine nextChar 04 Unknown Header State StSeekNewLine nextChar occorre eseguire il comando riconosciuto RST resetta il PIC rieseguendo l inizializzazione ifeel SSDefault SSCommon i024 ifeel SSParsed SSRst 1024 goto 0 ifend 1024 131 ifend ifeel ifend ifeel ifend ifeel ifend ifeel ifend movlw call letl goto ifeel SSDefault SSCommon i032 ifeel SsParsed 55Cls 1032 do nothing CLS viene riconosciuto ma non sortisce alcun effetto ifend 1032 ifeel SSDefault SSSystem i053 ifeel SSParsed SSCpon i053 call ag
60. 77 movf SlotN W addlw sO call trasmit call newline letl State StStartOfLine goto nextChar ifend 1077 SYSTEM MODULE bcf Flag FlLogic ROUTE CLOSE ROUTE OPEN FlLogic SSParsed SSOpen SSParsed SSClose ifeel SSParsed SSClose 1107 bsf Flag FlLogic DEE Flag FlInvert ifenqd i107 ifeel SSParsed SSOpen 1108 bsf Flag FlLogic bsf Flag FlInvert Gli 1 e 0 inviati da sendINDF verranno complementati ifend 1108 ifeel SSDefault SSRoute i082 ifbs Flag FlLogic i082 ROUTE CLOSE oppure ROUTE OPEN ifeel SlotN 0 i1083 movlw TOM call trasmit movlw ON call trasmit call newline letl State StStartOfLine goto nextChar ifend 1083 Anzich implementare una routine di moltiplicazione di SlotN per 16 e successiva conversione da binario a decimale si preferito un mero elenco di if then per ogni possibile valore di SlotN poich questo l unico caso di utilizzo della conversione binario decimale Se ci fossero pi casi si risparmierebbe pi memoria con una routine dedicata Essendo pochi i casi si risparmia memoria con l approccio ad elenco di if then ifeel SLOUN by 2064 movlw i a call trasmit movlw OM call trasmit ifend 1084 ifeel SlotN 2 i1085 movlw AS Bi call trasmit movlw Si call trasmit ifend 1085 ifeel SLOoEN7 637 L086 movlw Man call trasmit movlw MS call trasmit ifend 1086 ifeel SlotN 4 1i1090 movlw o call trasmit movlw Wan call tras
61. A 20 M lane 25 Microc ntrollore resistenza led innata 28 Pilotare relais con un microcontrollore eseeeeeeeeessssssssssssseseeerrreeesssssssssssssseeeerrereeessssssss 31 VOR AR A 33 Cee alate aS 36 Procetio PEA ZAZIONE CEC ss0ssssccriciniiiiiinadinaiiianalininazinizia ninna ivalnanibainisa nica iaaii 45 Ed RR IAT 46 RUGGIERI 46 i ERRO scene lt eeeanseee es DZ li 0 ee 56 lirici A 66 SALIRE NUM EG WEG E E EES 70 Ee ess RR RR ETA 74 Cei Lana E ATE 74 Capitolo 3 Studio del protocollo e progettazione logica cccscscsssssseees 76 PILL ERA id I CSC PAPPA RECARE ARIE RAR ERA ESSER EA 76 Aide T11 PIAA EEKAN 78 Decisioni da prendere decisioni DIOR 79 o EA 83 Re ol 1a a sees ORRORE A OR A A E E 85 Messaggi di errore ed IONI 94 U O E E A AT liana 100 SEC LT OE i E 100 Controllo di flusso tramite macro psifthen 1 2 sscsscsssssssssssssssssssssssssssssssssssssssssssssssssssss 101 MEG OA E E E ee 101 O o e vo nn a E E A 102 UU ZI RR 102 UCI FARE CR A 105 LL O REI 106 EEE RR AE ARRE ERI 106 UL PIO RR TA 106 RE Ro DEI 107 Led Buzzer hnca CTS della serial scintillii 108 SLE CR E E RI 109 at a a a A T E E E E E 111 UA RT 114 Og AE osesdoee oan E E Seema poet E stems osetdoucoaadeteoueraeesees 116 Mede Ei iaia aaa 116 nie 117 COLLO RR SE AIAR 119 RS I IBN NA E E S A E 120 Caratteristiche utili per debug e soluzioni poco eleganti ma efficaci
62. Agilent veniva infatti descritta sintassi ed effetti dei comandi non certo 1 dettagli implementativi per la loro realizzazione In seguito si esaminato ogni comando decidendo quali implementare e quali no e a quali dare la priorit tra quelli da implementare poich il tempo a disposizione per completare il progetto non era moltissimo Di qualche comando si cambiata o semplificata la sintassi per rendere l implementazione pi semplice Qualche comando particolarmente gravoso da implementare ma giudicato molto utile stato comunque implementato con un supplemento di sforzi e Impegno Fase finale Questo paragrafo costituisce a tutti gli effetti la guida di riferimento rapida per il programmatore dell apparecchio costruito infarcito di qualche considerazione di progetto Di ciascun comando viene descritto lo scopo il modo di funzionare e la sintassi corretta nell implementazione realizzata Come termine di paragone racchiuse in un riquadro vengono mostrate le pagine del datasheet dell Agilent con la descrizione del comando originale preso a modello per dare una idea di quanto si sia riusciti a mantenersi aderenti allo standard Common commands RST Resetta lo strumento cosi come se fosse stato spento e riacceso Viene effettuata nuovamente la routine di autotest iniziale e la verifica del numero di moduli collegati Se l autotest ha successo viene mostrato il messaggio di benvenuto 02 Hallo altrimenti uno dei
63. B 00100110 Configura USART movwf TXSTA Trasmit Status and Control 8 bit receive Trasmit enable Asincronous mode Baud Rate Generator High Speed Vs Low Speed movlw 20 Configura USART movwf SPBRG Baud Rate Generator Register 10 113636 115200 20 59524 57600 20MHz FOsc bef STATUS RPO Bank 0 movlw B 10010000 Configura USART movwf RCSTA Receive Status and Control Serial Port Enable 8 bit receive Continuous receiv nable Disable Address Detect BuzzOff Spegne cicalino LedOff Spegne Led bcf Flag FlVerboseAutotest Determina numero di moduli collegati con verbose OFF non stampa 1 o 0 call autotest bsf Flag Fl1VerboseAutotest Verbose On per tutti gli usi successivi TST ifgtel SlotN 1 1001 Se sono stati trovati tra 1 e 4 moduli ifltl SlotN 5 i001 movlw 0x02 702 Hallo call sendMsg i ifend i001 Altrimenti all accensione e dopo RST la stringa di errore stampata da autotest call aggiornaModuli Tutti i relais aperti nextChar ifeel State StSeekNewLine i010 Il led viene acceso quando si nello stato StSeekNewLine LedOn Viene spento dallo stato StSeekNewLine non appena si riceve newlin ifend 1010 iflbc PIR1 RCIF 1026 Se non ci sono altri caratteri da ricevere ifbs Flag FlErrorPresent i027 Se c un messaggio di errore o informativo in coda ifeel State StStartOfLine i027 E siamo nello stato StartOfLine la riga precedente stata processata fino in fondo mov f Errore W Lo invia call sendMsg b
64. I utilizzato Relais Matrix risponde cosi come lo strumento Agilent con la stringa 1994 0 anche se non supporta pienamente lo standard ofSTem VERSion Query the instrument to determine the present SCP version Returns a as an Yr represents the vear of the YY So where Y string in the form version and V represents a version number for that year te g 19940 SYSTem MODUle Questa query stata inventata apposta per Relais Matrix e rappresenta quindi una estensione proprietaria dello standard Viene restituito 11 numero di moduli trovato collegato nel corso dell ultima accensione reset RST o autotest TST del dispositivo La risposta un singolo carattere seguito dal terminatore di riga che pu essere 1 2 3 4 in base al numero di moduli collegati oppure 0 ad indicare che la catena degli shift register stata trovata interrotta oppure 5 ad indicare che sono stati trovati pi di 4 moduli collegati NOTA con il comando SYSTEM MODULE non viene ricontrollata la funzionalit della catena di shift register ma solo letto il valore memorizzato in un registro interno Per ricontrollare la catena e aggiornare tale valore utilizzare TST Subsystem MEMORY I comandi di questo subsystem consentono di memorizzare configurazioni di relais in 5 memorie non volatili che ritengono l informazione anche in assenza di alimentazione al circuito e in una temporanea volat
65. L INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program and you want it to be of the greatest possible use to the public the best way to achieve this is to make it free software which everyone can redistribute and change under these terms To do so attach the following notices to the program It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty and each file should have at least the copyright line and a pointer to where the full notice is found lt one line to give the program s name and a brief idea of what it does gt Copyright C lt year gt lt name of author gt This program is free software you can redistribute it and or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 2 of the License or at your option any later version This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
66. MMON FREE WHEELING DIODES La piedinatura dell ULN2803 e lo schema elettrico di ciascuno degli 8 driver Shift register con latch Per aumentare il numero di uscite digitali presenti su un microcontrollore la scelta pi ovvia utilizzare degli shift register Io ho optato per i popolari 74HC595 shift register ad 8 bit in tecnologia CMOS High Speed Questi sono in grado di lavorare a frequenze di clock dell ordine dei 100 MHz hanno gli stati di uscita tri state un piedino con la replica dell ultima uscita non bufferata dai latch per consentire il collegamento di pi shift register in cascata 1 bit di uscita disponibili su pin tutti dallo stesso lato del componente e in ordine su N 28 Sas o yoa pin adiacenti non una caratteristica di secondaria importanza se si intende fare uno 2 La topologia Darlington connette due transistor in modo da fornire guadagni di corrente elevatissimi 10 10 Nel nostro caso verra assorbita pochissima corrente dallo stadio di uscita del circuito logico Si usa il termine clamping per indicare un diodo collegato con funzioni di protezione verso le alimentazioni Con questa topologia il diodo di clamping si comporta anche da diodo di ricircolo 71 Ovvero possono essere posti in modalita ad alta impedenza Questa caratteristica non onorata in tutti i circuiti integrati Ad esempio nel 4017 contatore decimale di Johnson le 10 uscite sono sparpagliate tra 1
67. NewLin goto nextChar ifend 1069 ifgtel Ident 1 4 1087 movlw 0x07 707 Chan out of range call errore let State StSeekNewLin goto nextChar ifend 1087 ifgtel Ident 2 4 1089 movlw 0x07 707 Chan out of range call errore letl State StSeekNewLin goto nextChar ifend 1089 letl FSR Lista bef STATUS C Raddoppia Ident 0 in W W vale 0 2 4 6 in base a slot number rif Ident 0 W addwf FSR F FSR Lista 0 2 4 6 btfsc Ident 1 1 Se riga 3 o 4 2 o 3 binario 0 based IDEf FSR F FSR FSR 1 CLEF Temp incf Temp F Temp B 0001 incf Ident 2 W forw Looper 1098 bcf STATUS C rlf Temp F next Looper 1098 bcf STATUS C rrf Temp F Temp B 0001 B 0010 B 0100 B 1000 ifbs Ident 1 0 1099 swapf Temp F Temp SwapNibbles Temp se Ident 1 ifend 1099 mov f Temp W Setta il bit lorwf INDF F Number riconosciuto nelle righe precedenti 1064 nextChar Mato 1058 Le liste di canali possono contenere 0x03 03 Unimplemented errore State StSeekNewLin nextChar 179 ifeel LastChar 1060 La virgola separa un Slot Channel number dal successivo clrf IdentLength Si azzera Ident in modo da utilizzarla nel riconoscimento successivo goto nextChar ifend 1060 ifeel LastChar 1062 Parentesi chiusa se segue un newline si esegue il comando letl State StNewLineAfterParClose goto nextChar ifend 1062 movlw 0x05 05 Invalid Char call errore letl State StSeekNewLin goto n
68. OT andwf INDF F Relais Looper Relais Looper AND NOT Lista Looper ifend 1095 next Looper 1065 call aggiornaModuli movlw 0x01 01 Completed call errore letl State StStartOfLine goto nextChar ifend 1059 1045 0x05 05 invalid Char errore State StSeekNewLin nextChar In questo stato ci si aspetta un newline dopo si esegue la query Se SSParsed rimasto al valore mon un iniziale SSUndefined LastChar 0x0A i018 ifeel ifeel ifend ifeel ifeel ifend ifeel ifeel SSDefault SSCommon 1025 SSParsed SSIdn 1025 In SSDefault e SSParsed dispon qualunque altro carattere errato ibile il comando da eseguire segno che non stato riconosciuto alcun header valido movlw 0x14 IDN String IDN call sendString call newline letl State StStartOfLine goto nextChar 1025 SSDefault SSCommon i019 SSParsed SSTst i019 ee ST 2 call autotest letl State StStartOfLine goto nextChar 1019 SSDefault SSSystem i039 SSParsed SSVer i039 movlw La call trasmit movlw mon call trasmit movlw WOM cal trasmit movlw wa cal trasmit movlw ULI cal trasmit movlw TOT cal trasmit call newline 180 7 SYSTEM VERSI ON PE mo ca le go stSeekNewLine i i i i LE end vlw 11 TO Si arriva in questo stato se c stato un e
69. POLITECNICO DI BARI me Ee DIPARTIMENTO DI es E ELETTROTECNICA E E ED ELETTRONICA TEMA D ANNO ESAME DI MISURE ELETTRONICHE CORSO DI LAUREA IN ING ELETTRONICA V O Progetto realizzazione collaudo e utilizzo di una matrice di switching automatica implementata con microcontrollore conforme allo standard industriale SCPI IEEE 488 2 DOCENTI Prof Ing Nicola GIAQUINTO Dott Ing Francesco ADAMO STUDENTE Paolo SANCONO Matr 511697 B ANNO ACCADEMICO 2005 Progetto realizzazione collaudo e utilizzo di una matrice di switching automatica implementata con microcontrollore conforme allo standard industriale SCPI IEEE 488 2 V 1 1 Copyright c 2005 Paolo Sancono Website http www ideegenial1 it Contact the author for a transparent version of this document Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 2 or any later version published by the Free Software Foundation with no Invariant Section no Front Cover Texts and no Back Cover Texts A copy of the license 1s included in the section entitled Appendice C GNU Free Documentation License L autore non si assume nessuna responsabilit per danni diretti o indiretti derivanti dall uso delle informazioni riportate in questo documento Chi decide di realizzare il circuito illustrato o utilizzare in altro modo le altre informazioni presenti nel documento si ass
70. PON xxx e occorre cancellare Ident per memorizzarvi dentro il parametro Il comando SYSTEM CPON viene gestito integralmente da questo stato Se si riceve Parentesi aperta il carattere accettato solo come inizio di lista di canali dopo un ROUTE CLOSE o ROUTE OPEN altrimenti si genera un errore 05 Invalid Char Il controllo per lo stato successivo viene passato a StChiocciolaOnly il primo della catena di 3 stati che decodifica le liste di canali Se si riceve un Punto interrogativo il flusso per lo stato successivo passa a StNewLineAfterOM lo stato che esegue una query dopo aver ricevuto Newline Come sempre in caso di errori dopo aver invocato il gestore di errori lo stato successivo viene Impostato a StSeekNewLine Per evitare di appesantire la trattazione non ho citato tutte le fonti possibili di errore osservare direttamente 1 commenti nel codice per capire come sono state trattate stParseld ifgtel LastChar A 1007 if LastChar in A Z U 0 9 LELE LastChar zZ 1 i007 goto alfanum ifend 1007 ifgtel LhastChars 0 1017 0 9 processati per SYSTEM CPON x00 TELL LastChar 9 1 i017 goto alfanum ifend 1017 ifelse alfanum notalfanum Lo stato ParselId in caso di caratteri alfanumerici aggiunge caratteri a Ident fino a riconoscere un identificatore Quando un header riconosciuto si settano le variabili SSDefault SSParsed Flag FlExclusive opportunamente in base a quanto si r
71. PURPOSE See the GNU General Public License for more details You should have received a copy of the GNU General Public License along with this program if not write to the Free Software Foundation Inc 51 Franklin St Fifth Floor Boston MA 02110 1301 USA Also add information on how to contact you by electronic and paper mail If the program is interactive make it output a short notice like this when it starts in an interactive mode Gnomovision version 69 Copyright C year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY for details type show w This is free software and you are welcome to redistribute it under certain conditions type show c for details The hypothetical commands show w and show c should show the appropriate parts of the General Public License Of course the commands you use may be called something other than show w and show c they could even be mouse clicks or menu items whatever suits your program You should also get your employer if you work as a programmer or your school if any to sign a copyright disclaimer for the program if necessary Here is a sample alter the names Yoyodyne Inc hereby disclaims all copyright interest in the program Gnomovision which makes passes at compilers written by James Hacker lt signature of Ty Coon gt 1 April 1989 Ty Coon President of Vice This General Public License does not permit incorporating your program into proprietar
72. Pizzica si consiglia il CD Demo gratuito dei MoTaCuntu gruppo di musica popolare con il quale ho suonato tamburelli a cornice duff tammorre e flauto per diversi anni Un Computer IBM PDP 2 costava ancora troppo persino per il MIT che l acquist l anno dopo e ci si accontentava di commutatori rotativi e circuiti a relais forniti gratuitamente all universit dalla compagnia telefonica locale Parola onomatopeica inventata direttamente dai realizzatori dell impianto 147 destinazione senza farli scontrare tra loro e cercando 1 percorsi migliori dopo aver impostato la destinazione con il disco combinatore di un telefono collegato all impianto Il trolley terminal in scala e una open house al TMRC Qualunque ne sia la fonte far funzionare un circuito in maniera automatica suscita in ogni caso forti emozioni tanto nell autore che nel pubblico presente ad una dimostrazione come se anche la messa in opera di un circuito funzionante sia una forma d arte possibile LabView Mentre il Matlab l ambiente ideale per utilizzare proficuamente 1l circuito in un contesto di complesse misure automatiche si pu avere a volte la semplice necessit di dover comandare interattivamente il circuito con un pannello di comandi virtuale visto che il circuito stesso non dotato di un pannello reale composto da interruttori manopole e quant altro Il LabView ambiente di sviluppo di programmi grafico pro
73. Relaist5 CLEE Relais 6 clrf Relais 7 goto nextChar ifend 1037 ifeel IdentLength 3 1106 ifeel Ident 1 0 1044 ifeel Ident 2 0 1044 ifeel Ident 0 1 1046 Cleo Relais CLE Relaistl goto nextChar ifend 1046 ifeel Ident 0 2 1047 iflt1 SlotN 2 i071 movlw 0x08 708 No module in slot call errore letl State StSeekNewLin goto nextChar ifend 1071 Clrf Relais 2 Clerk Relais 3 goto nextChar ifend 1047 ifeel Ident 0 3 1048 dt SLOEN 371073 movlw 0x08 08 No module in slot call errore letl State StSeekNewLin goto nextChar ifend 1073 clrf Relais 4 CGIE Relaist5 goto nextChar ifend 1048 ifeel Ident 0 4 1049 ifltl SlotN 4 1075 movlw 0x08 08 No module in slot call errore letl State StSeekNewLin 177 query ifend ifeel ifend ifeel ifend ifeel ifend ifeel goto nextChar ifend 1075 ciri Relais 6 eclrf Relais 7 goto nextChar ifend 1049 ifgtel Ident 0 5 1102 movlw 0x06 06 Slot out of range call errore letl State StSeekNewLin goto nextChar ifend 1102 ifltl Ident 0 1 i105 movlw 0x05 04 Unknown Header call errore let State StSeekNewLin goto nextChar ifend 1105 ifend 1044 movlw 0x04 04 Unknown Header call errore letl State StSeekNewLin goto nextChar ifend 1106 ifend 1042 goto nextChar notalfanum La
74. Status Byte Register Teeolmal Elt Humber Value D od ueg 1 Reims ST 1 Aam Condon z Dre o more bls are set in fhe Aam Regier iki mu be anabe Noi Lissa Reims ST Eie a i a e Pe fer ata i fa fa La fr ii STAT ALAR DMI e mt STATA MAI of iti n Cupu Butar j Questornanie Costa i One or more biis are set in the Questionable 5 Dats Register bis must bs anabisi a 4 Message Availabe Dats ls avalable in the instrument s oufput butter F Sandan Event One or more bits are set in the Standard Event Risiziar cits must be erabled Misser Burma One or more Gls are set lin the Status Byte Risgiziar cits must be erabled Siandard Dosration ra One or more bis are set in fine Standard Operation Register bh must be enabled Giaendard Event Register STATOR ESOT STA TOPGR Schr STAT OPDE CMALGe cha ETAT OPDE EMAS Il complesso sistema di bit di stato dello standard IEEE 408 2 Lo standard IEEE 488 2 prevede una miriade di registri di stato tra cui quelli che indicano che il comando completato che non si sono verificati errori oppure che ci sono errori in 94 coda da prelevare successivamente Nessuno di questi registri di stato stato implementato nella macchina Lo standard prevede pure una complessa struttura di accodamento degli errori e numerosi flag di segnalazione di stati interni La presenza di un errore viene segnalata da un flag ed cura del programmatore recuperare succe
75. a condizione if not equal literal va qui letta goto if eqgual literal GLEE SSParsed goto nextChar 1009 last Char 2 1039 Dopo un si attende solo NewLine prima di eseguire la query letl State StNewLineAfterOm goto nextChar 1038 0x05 Nessuno dei caratteri precedenti errore errore 05 Invalid Char State StSeekNewLine nextChar 132 Notare 1 frequenti comandi goto nextChar quando un elaborazione finita si restituisce il controllo al ciclo del programma principale Notare anche che SYSTEM CPON viene integralmente gestito da questo stato con qualche trucco di programmazione Siccome l unico comando con parametro dopo uno spazio presente la cosa pu anche andare bene poich semplifica la macchina a stati Se si desidera implementare in revisioni successive del firmware ulteriori comandi con parametro una buona idea dedicare uno stato separato al parsing del parametro e aumentare il numero di variabili ausiliarie in modo da differenziare tra le varie situazioni con un codice pi chiaro SeekNewLine E lo stato in cui si arriva in condizione di errore Il led permane acceso in questo stato ad avvisare che la macchina non sta pi processando l input poich si verificato un errore ma attende semplicemente il carattere new line per segnalare l errore ricevuto e passare all elaborazione della riga successiva Il Led viene gestito parte dal ciclo principale che l accende e parte da
76. a mantenibilit del codice se occorre effettuare altre operazioni oltre ad accendere il led se ne pu inserire il relativo codice una volta sola nextChar lfeel State StSeekNewLine i010 Il led viene acceso quando si nello stato StSeekNewLine Ledon Viene spento direttamente dallo stato StSeekNewLine non appena si riceve newline ifend 1010 ifeel LastChar 0x0D 1101 CTRL M Carriage Return goto nextChar Semplicemente ignorato cos da poter riconoscere CR LF come terminatore di riga valido ifend i101 Il carattere CTRL M OxOD Carriage Return viene semplicemente ignorato cos come veniva ignorato CTRL C cos da considerare egualmente valido come terminatore di riga la coppia CR LF anzich LF da solo Lo standard SCPI indica solo LF come terminatore di riga valido si voluto aggiungere il supporto per CR LF in modo da facilitare l interazione con la macchina tramite il terminale di Windows che per impostazione predefinita invia la coppia CR LF quando si preme INVIO Nessun controllo viene eseguito sulla posizione di CTRL M che pu anche non essere adiacente al LF senza che la macchina riporti errori Non stato ritenuto necessario identificare questa situazione come errore trattandosi di una caratteristica aggiuntiva non prevista dallo standard e implementata solo perch utile al debug Sul 122 prodotto finale questa caratteristica si pu benissimo eliminare pur restando compatibili con lo
77. ader non riconosciuto terminato da un viene riconosciuto in questo stato dal fatto che SSParsed rimasto al valore iniziale SSUndefined Il codice consiste quindi nell elenco delle istruzioni che implementano l esecuzione delle differenti query previste per la macchina Osservare direttamente 1 commenti nel codice per esaminare le soluzioni pensate per ciascun comando stNewLineAfterQm In questo stato ci si aspetta un newline dopo un qualunque altro carattere errato Ricevuto il newline si esegue la query In SSDefault e SSParsed disponibile il comando da eseguire Se SSParsed rimasto al valore iniziale SSUndefined segno che non stato riconosciuto alcun header valido lfeel LastChar 0x0A i018 ifeel SSDefault SSCommon 1025 ifeel SSParsed SSIdn 1025 7 7 7 7 movlw 0x14 IDN String IDN call sendString call newline tetr State StStartOfLine goto nextChar ifend 1025 ifeel SSDefault SSCommon 1019 ifeel SSParsed SSTst 1019 ELST 2 call autotest letl State st tartorbine goto nextChar ifend 1019 ifeel SSDefault SSSystem 1039 ifeel SSParsed SSVer 1039 SYSTEM VERSION movlw wn call trasmit movlw mgu call trasmit movlw 100 call trasmit movlw TAN call trasmit movlw di call trasmit movlw ToT call trasmit call newline letl State StStartOfLine goto nextChar ifend 1039 137 ifeel SSDefault SSSystem i077 ifeel SSParsed SSModule i0
78. aggiungendo un punto interrogativo in coda al comando che lo trasforma in una query Device clear un messaggio di basso livello sul bus di comunicazione che riporta lo strumento in uno stato in cui risponde all utente abortendo operazioni in corso di durata elevata Per gli strumenti con RS232 la ricezione di un CTRL C sortisce lo stesso effetto La cosa non necessaria sul mio strumento poich non ci sono operazioni particolari che richiedono un tempo di elaborazione lungo e la scheda si mantiene sempre pronta a rispondere Per compatibilit con lo standard 1 CTRL C verranno semplicemente ignorati L apparecchio costruito se non si pu dire che rispetti lo standard in tutto e per tutto utilizza comunque la stessa sintassi per quanto riguarda 1 comandi da riconoscere e le risposte alle query mentre si differenzia nella gestione dei messaggi di errore che vengono inviati subito anzich essere accodati per una richiesta successiva 80 per impedire il prolificare di codici di codifica incompatibili tra differenti dispositivi per la gestione automatizzata dell informazione 84 Comandi implementati Fase decisionale Sono stati esaminati tutti 1 comandi presenti sul datasheet dell Agilent 34970A per vedere quali potevano avere un senso per la matrice di relais costruita e di questi si riportata una breve ma il pi possibile precisa descrizione del funzionamento che avrebbero dovuto avere sulla macchina Sul data sheet
79. alato subito dopo aver inviato la propria stringa Dopo un overrun il controller attende 11 successivo new line prima di continuare a processare l input Anche in caso di altri errori per esempio 05 Invalid Char il controller attende 11 successivo carattere new line prima di processare l input La condizione di attesa del new line viene indicata dall accensione fissa del led che si spegne non appena si riceve il new line Per 1 messaggi informativi sono stati utilizzati 1 primi codici numerici 0 e 02 perch non dovendo produrre il beep era pi facile implementare un codice efficiente tenendoli raggruppati all inizio E stata comunque prevista la chiamata a due routine una che mostra il messaggio ed effettua 11 beep e l altra che invia semplicemente la stringa senza neppure precederla dal codice numerico Questa possibilit stata usata per inviare la stringa di risposta a IDN che seguendo lo standard non deve essere preceduta da un codice numerico a due cifre FEDE PIR1 RCIF i026 Se non ci sono altri caratteri da ricevere ifbs Flag FlErrorPresent 1027 Se c un messaggio di errore o informativo in coda ifeel State StStartOfLine i027 E siamo nello stato StartOfLine 116 la riga precedente stata processata movf Errore W Lo invia sulla seriale con la routine sendMsg call sendMsg bef Flag FlErrorPresent Resetta il flag di errore presente ifend i1027 goto nextChar Attende il carattere
80. alid state is stored in this location Prospetto riassuntivo Pu fare un effetto curioso ma il prospetto riassuntivo dei comandi che sottintende le scelte fatte su quali e quanti comandi implementare assieme alle indicazioni sulle strategie migliori per implementarli rappresenta pi di met dell intero lavoro di progettazione condensato in una tabella di una ventina di righe 93 Common Commands SubSystem Route Implementati ROUTe CLOSe ch_list RST ROUTe CLOSe EXCLusive ch_list IDN ROUTE OPEN CH LIST TST ROUTe CLOSe ROUTe OPEN Implementazione futura SAV 01112131415 RCL 01112131415 Place holders CLS SubSystem System SYSTem VERSsion SYSTem CPON 100120013001400IALL SYSTem MODUle Non implementati PSC 011 PSC Subsystem Memory ESE lt value gt ESE SRE lt value gt SRE OPC WAI TRG STB ESR Implementazione futura MEMory STATe DELete 01112131415 MEMory STATe VALid 01112131415 Tabella riassuntiva dei comandi disponibili Messaggi di errore ed informativi I messaggi di errore sono stati appuntati in un apposito file di testo man mano che durante la progettazione ne sorgeva la necessit Sono stati utili come documentazione interna per lo sviluppo del firmware e costituiscono anche la documentazione per l utente finale che dovr usare 1l circuito Agilent 34970A Status System Questonsbie Dota Register EH Bit Definitions
81. alimentazione a 12V e di triplicare il ritorno di massa I connettori e 1 cavi usati infatti sono adatti per correnti di 1A per filo mentre l alimentazione a 12V pu superare tale valore rendendo necessario dedicargli un altro filo in parallelo Sulla necessit di dedicare piste e cavi quanto pi grossi possibile al ritorno di massa e di bypassare le alimentazioni con condensatori non appena la lunghezza delle piste supera la decina di centimetri o anche meno non spender molte parole considerandolo un fatto acquisito Dir qui solo che il rame che costituisce le piste ha la sua resistivit e quando le piste diventano pi lunghe e ci scorre molta corrente il potenziale elettrico non pi lo stesso da una parte all altra Avere un riferimento di massa non certo sulla basetta pu spostare le soglie degli stadi di ingresso dei circuiti digitali che possono 18 leggere in modo errato 1 segnali digitali in ingresso quindi importante che sulle piste di massa possa scorrere liberamente quanta pi corrente possibile per garantire un potenziale uniforme Lo standard de facto RS 232 prevede due tipi di macchine DTE e DCE che presentano collegamenti invertiti l una rispetto all altra per quanto riguarda le linee di trasmissione e ricezione dati La strumentazione da laboratorio di solito cablata come DTE e si deciso di seguire la stessa regola montando un connettore SUB9 maschio sulla basetta cablato come DTE E necessa
82. alta professionalit grazie alla potenza dell ambiente di sviluppo della National Instruments che ha come suo punto di forza assieme all interazione con la strumentazione da laboratorio e una nutrita serie di funzioni gi pronte per il trattamento di dati acquisiti anche a fini di controllo proprio le accattivanti GUI dei VI generati 6 f La a 4a f vani In inglese diremmo con una dizione pi diretta e immediata che in italiano risulterebbe per lievemente offensiva a prova di idiota 153 CEE gt MatrixDemo vi Block Diagram File Edit Operate Tools Browse Window Help Bie Smilies seme eS ROUTE CLOSE EXCLUSIVE Porta seriale alla quale collegato il circuito sposta ricevuta ig Jabba Ri J Eam pannnfWRITE m O CTER v A Block Diagram di MatrixDemo VI Il Block Diagram costituito dalla generazione della stringa di comando opportuna realizzata a partire dallo stato degli interruttori e dall invio di questa allo strumento tramite il SubVi Matrix Write ROUTE CLOSE EXCLUSIVE im 111 ce lie riore ili ee ee Dettaglio della generazione della stringa Lo stato di ogni interruttore produce l accodamento del numero di canale corrispondente seguito da virgola alla stringa in formazione oppure una stringa vuota non accoda niente 154 Porta seriale alla quale collegato il circuito Risposta ricevuta Bodio
83. and the operations Read Write or both to be performed If both are p Select the serial resource and the operations Read Write or both to be performed If both are F selected the VI will write the data first read data and then close the YISA session that is opened to selected the VI will write the data first read data and then close the VISA session that is opened to the port This YI will wait until the specified number of bytes is received at the port Only the number the port This YI will wait until the specified number of bytes is received at the port Only the number of bytes specified will be read of bytes specified will be read For additional information select File gt gt VI Properties gt gt Documentation For additional information select File gt gt VI Properties gt gt Documentation VISA resource name string to write VISA resource name IDN 4cOM4 i adna COM4 baud rate baud rate j i 157600 t 57600 data bits data bits J 8 J 8 parity parity Pi PA J None J None read string l read read string string to write ROUTE CLOSE s 111 122 133 144 n stop bits stop bits z PaoloSancono RelaisMatrix 1 0 1 0 A oi Completed o 1 0 o 1 0 flow control flow control J None J None delay before read ms bytes read delay before read ms bytes read J 500 134 J 500 h3 A v VI dimostrativo gia fornito con Labview sull uso della porta seria
84. antit maggiori da distributori nazionali che vendono tramite Internet Quantit Descrizione O Se So z unitario x quantita 16 Relais 12V 100mA 1S1P 10 00 74HC595 Shift register 8 bit ULN2803 Array di 8 transistor Darlington NPN con diodi di clamping PIC16F628 Microcontrollore Microchip MA X232 Adattatore di livello TTL Rs232 7812 Regolatore di tensione 7805 Regolatore di tensione Ponte a diodi Led Smm 17 rossi 1 verde 1 giallo Buzzer piezoelettrico con oscillatore integrato Quarzo 20 MHz Condensatori elettrolitici multistrato ceramici resistori 1 4 W Connettore di alimentazione spina volante Connettore di alimentazione presa 90 c s Connettore DSUB 9 90 C S Maschio Cavo di collegamento seriale null modem Morsetti a vite C S 4 posti Header 10 pin C S per cavo piatto Cavo piatto 10 poli Connettori a grimpare cavo piatto 10 poli Dissipatore per TO220 verticale Trasformatore AC AC adapter Basette ramate Materiali di consumo stagno cloruro ferrico in grani trielina Fotocopia con macchina a colori uso pressa a caldo in copisteria l6 2 2 1 1 1 1 1 19 1 1 Vari 1 1 1 1 2 3 lm 3 1 1 2 Vari 1 51 30 Il preventivo era sostanzialmente identico ma raggiungeva la cifra di 90 euro circa poich considerava 1 relais al costo di 2 50 euro l uno per un totale di 40 euro per 16 relais anzich 1 relais in offerta acquistati in fiera per 10
85. are interrupt quando sono in stato di overflow rendendo del tutto indipendente dal flusso del programma principale l accensione e lo spegnimento del Led Seguendo il consiglio di isolare il codice per ciascuna funzionalit anche semplice di cui si ha bisogno stato isolato il codice per realizzare un beep col buzzer nella routine dal nome evocativo BuzzBeep anche se questa routine viene chiamata da un unico altro punto del codice la routine di gestione errori comunque pi leggibile il comando call BuzzBeep che non l inserimento delle quattro istruzioni necessarie a realizzare il beep in sequenza all interno della routine di gestione errore 7 7 7 7 Effettua un beep accendendo il Buzzer attendendo 10 centesimi di secondo e spegnendolo BuzzBeep Buzzon movlw 10 call DelayCs BuZzaorr return La routine a sua volta utilizza DelayCs che non descriver rimandando alla documentazione interna del codice che realizza una pausa di W il valore passato con l accumulatore centesimi di secondo Utilizzando nomi opportuni per le routine possibile scrivere codice leggibile anche in assembler BuzzBeep stata scritta come routine anzich come macro poich era pi lunga di una istruzione e scriverla come macro avrebbe aumentato in generale l occupazione in memoria del programma Nel nostro caso siccome viene richiamata un unica volta in realt cos procedendo si sprecata una word di memoria per l istr
86. are con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite WP o oA AP AP AAP AP OP OP do do do OP WP NP do global MatrixSp fprintf MatrixSp cmd matrixflush m function MatrixFlush MatrixFlush Svuota il buffer di lettura dell oggetto seriale MatrixSp utilizzato per comunicare con il circuito Relais Matrix Sintassi MatrixFlush NOTA MatrixSp deve essere gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite WP NP oA oA AP AP AAP AP OP do do global MatrixSp while get MatrixSp BytesAvailable gt 0 junk fread MatrixSp 1 end Funzioni di medio livello matrixclose m function MatrixClose Ch MatrixClose oP oP o Invia il comando ROUTE CLOSE tramite MatrixWrite 186 o Il comando CLOSE chiude i relais selezionati mascherando quelli gi chiusi che resteranno chiusi MatrixClose agisce esclusivamente sui relais del Modulo collegato allo slot 1 tipicamente al circuito collegato un solo modulo al quale verr assegnato lo slot 1 AP AP oP do oe Sintassi MatrixClose Ch o o Parametri di ingresso opzionali o o Ch Vettore contenente numeri di canale di relais da chiudere sul modulo alloggiato nello slot 1 sul cir
87. asetta l ultimo bit di ciascuno shift register passa all ingresso data del successivo cos per tutti gli shift register su una basetta e analogamente dall ultimo di una basetta al primo della basetta successiva finch sull ultimo modulo inserendo un ponticello di terminazione 1 dati vengono riportati ad un ingresso di feedback del controller che pu cos inviando un pattern di bit e contando dopo quanti cicli di clock torna indietro determinare quante schede sono state collegate o rilevare l assenza del terminatore catena aperta Allo stesso modo possibile rilevare guasti sulla quasi totalit dei componenti presenti per cui si pensato di realizzare un circuito in grado di effettuare autotest L idea di base che ogni modulo sia identico agli altri ma il sistema si presta con piccole o nessuna modifica alla possibilit di collegare moduli con funzioni differenti purch abbiano a bordo uno shift register di 16 bit Si pu quindi pensare a stadi di relais con collegamento a multiplexer anzich a matrice oppure che rendano disponibili semplicemente 1 terminali dei loro interruttori per un uso qualsiasi Per l interconnessione tra controller e moduli si deciso di usare 1 connettori pi economici che garantissero una affidabilit e resistenza meccanica minima facilit di inserimento disinserimento e densit tale da consentire una agevole saldatura Ci si orientati verso 1 cavi piatti a 10 fili con co
88. assi MatrixCloseExclusive Ch 0 o Parametri di ingresso opzionali o o Ch Vettore contenente numeri di canale di relais da chiudere sul modulo alloggiato nello slot 1 sul circuito Relais Matrix I relais hanno numeri di canale 11 12 13 14 21 22 23 24 31 32 33 34 41 42 cos come prevede lo standard industriale Default Vettore vuoto apre tutti i relais senza chiuderne alcuno HP oA 00 AP OP o NOTA MatrixSp deve essere gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite NOTA Non viene controllato se il comando genera errori Utilizzare MatrixRead oO oP ol o global MatrixSp cmd ROUTE CLOSE EXCLUSIVE while length Ch gt 0 if isempty find Ch 1 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 disp I numeri di canale devono essere scelti tra i seguenti disp 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 teuurii end Gmd strcat cmd 1 int2str GhiLl Chita 17 end cmd strcat cmd 187 MatrixWrite cmd matrixopen m function MatrixOpen Ch MatrixOpen Invia il comando ROUTE OPEN tramite MatrixWrite Il comando OPEN apre i relais selezionati MatrixOpen agisce esclusivamente sui relais del Modulo collegato allo slot 1 tipicamente al circuito collegato
89. autotest e determinato il numero di moduli collegati al controller segnalando il buon esito dell operazione con il messaggio 02 Hallo oppure il fallimento con uno dei due messaggi di errore 09 Interrupted chain oppure 15 Too many modules Autotest L autotest invia un pattern di bit sugli shift register e verifica dopo quanti colpi di clock lo stesso pattern si ripresenta sul piedino di feedback Il piedino di feedback dotato in hardware di una resistenza di pull up cos da fornire sempre 1 se non stato collegato alcun modulo l l Invia pattern di bit sugli shift register senza mai mandare store che aggiornerebbe anche i Latch di uscita Siccome i diversi moduli sono collegati in anello con terminatore sull ultimo i bit dopo aver percorso l anello tornano al microcontrollore dal piedino di Feedback autotest verifica quanti moduli sono connessi conservando l informazione in SlotN oppure segnala gli errori di catena interrotta o troppi moduli connessi inviando direttamente l errore sulla seriale e settando SlotN a 0 o 5 Se Flag FlVerboseAutotest settato invia 1 o 0 sulla seriale a seconda se l autotest ha successo o no autotest ar SlotN bcf ShRegPort DataBit Invia O0 forl autotestLooper 0xFF i020 agli shift register bef ShRegPort ClockBit x bsf ShRegPort ClockBit 7 next autotestLooper 1020 DEL ShRegPort ClockBit 257 volte bsf ShRegPort ClockBit i 1fbs ShRegPort FeedbackBit
90. bcf ShRegPort DataBit return store bef ShRegPort StoreBit bsf ShRegPort StoreBit return Sa trasmit newline sendString sendMsg Routine di trasmissione caratteri sulla seriale trasmit Passare in W un byte da trasmettere verr trasmesso sulla RS232 ai darlington ai relais e led E bene che stia sempre a zero in caso di shift involontari eventualmente subito dopo aver atteso che terminasse la trasmissione precedente se ancora in corso in questo caso la procedura bloccante ad interrupt poich non necessario per il nostro progetto newline Invia semplicemente sendString il carattere Ox0A oppure la coppia 0x0 senza neppure il caratter Non stato previsto infatti un buffer di uscita e una gestione D 0x0A se Flag F1CrLf settato new line dietro ice BCD del messaggio desiderato messaggi definiti nelle tavole in pagina 0 uno spazio un messaggio testuale e un carattere new line sulla seriale Se l indice del messaggio gt 3 verr emesso e 02 sono informativi i codici superiori messaggi di errore Se il messaggio ha numero 03 o maggiore si emette anche il Beep messaggi 01 e 02 sono Invia solo una stringa sulla seriale Passare in W il cod i sendMsg Invia un codice numerico a due cifre Passare in W in BCD l
91. c gt INCLUDE lt psifthen inc gt Autor Paolo Sancono Website http www ideegeniali it Email Changes often see website Version vc EE Licenza GPL V2 0 Compiler MPASM 03 00 IDE MPLAB IDE for Windows 16 V 5 50 00 Disclaimer L autore non responsabile di nessun danno diretto o indiretto provocato dall uso delle macro per le quali non si garantisce nessuna rispondenza agli scopi previsti i Chi usa queste macro lo fa a suo rischio e pericolo Licenza Puoi usare le macro Puoi anche copiarle modificarle e ridistribuirle gratuitamente a patto di conservare l informazione sull autore originale sul suo sito internet tutto questo paragrafo e distribuirle con la stessa licenza Non puoi far soldi dalla vendita o uso delle macro Vedere la General Public License per maggiori info 7 E eae eee eee eee PSS disable those useless warnings 1 errorlevel 305 Using default destination of 1 file errorlevel 224 Use of this instruction is not recommended TRIS errorlevel 302 Register in operand not in bank 0 Ensure that bank bits are correct lore icon ali o ie IF THEN ELSE Vengono confrontati due file locazioni RAM tra loro oppure un file con un literal o con il contenuto dell accumulatore Il controllo di maggioranza del tipo maggiore uguale il controllo di minoranza del tipo minore stretto Scambiare di posto i due file da confrontare oppure in
92. ccupata di altro La presenza di una UART hardware un grosso vantaggio per il programmatore che deve preoccuparsi unicamente della configurazione e della gestione ad alto livello della comunicazione per esempio il controllo di flusso senza preoccuparsi delle questioni inerenti il mezzo fisico campionamenti multipli per interpretazione a maggioranza di dati disturbati sincronizzazione con l inizio del messaggio e simili Per una descrizione del pattern NRTZ Non Return To Zero tipico della trasmissione seriale della sincronizzazione byte per byte grazie ai bit di start e di stop dei campionamenti multipli su ciascun bit per decisioni a maggioranza in caso di campionamento di valori diversi sullo stesso time slice dedicato ad un bit dell architettura della porta UART del PIC s1 veda 11 data sheet del PIC16F628 e la numerosa letteratura sull argomento presente su Internet poich non questa relazione la sede adatta ad approfondire queste questioni Livelli di tensione della porta seriale Lo standard de facto RS 232 prevede tensioni positive e negative rispetto a massa per indicare 1 due stati logici Lo standard indica che una tensione inferiore a 3V debba essere prodotta per indicare un 1 e una superiore a 3V debba essere prodotta per indicare uno 0 In ricezione le soglie sono ridotte a 0 3V e 0 3V poich il segnale pu attenuarsi durante il tragitto Poich lo standard prevede una tensione minima le porte seriali di sol
93. cessario quindi inserire un transistor con la base opportunamente polarizzata da una resistenza per prelevare poca corrente dal microcontrollore nel circuito E anche una buona idea inserire un diodo di ricircolo che fornisca un percorso alternativo alla corrente di apertura della bobina cos che questa non rompa il transistor ma fluisca nel diodo Il diodo deve essere veloce cio commutare dall interdizione alla conduzione pi rapidamente del transistor e quindi deve essere stato costruito con una tecnologia differente rispetto al transistor Carlco induttivo es Relais Diodo di ricircolo Metodo corretto per collegare un relais allo stadio di uscita push pull di un chip CMOS La resistenza si dimensiona decidendo quanta corrente far erogare al PIC affinch il transistor lavori in zona di saturazione con la corrente di collettore necessaria a tenere acceso il relais Per un relais da solo va bene utilizzare componenti discreti Se 11 numero di relais aumenta 32 una buona idea utilizzare il chip ULN2803 che contiene all interno 8 transistor Darlington le relative resistenze di polarizzazione per l uso con circuiti logici CMOS alimentati a 5V e 1 diodi di clamping per ogni uscita PIN CONNECTION top view IN 1 QUT 1 For ULN2803A each driver for 5 V TTL CMOS IN 2 OUT 2 I T3 N 3 gu pI Ccom IN amp OUT 4 IN 5 OUT 5 IN 6 OUT 6 IN 7 OUT 7 EACH DRIVER cem 1989 IN OUT 8 GND CO
94. ch must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange or b Accompany it with a written offer valid for at least three years to give any third party for a charge no more than your cost of physically performing source distribution a complete machine readable copy of the corresponding source code to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange or c Accompany it with the information you received as to the offer to distribute corresponding source code This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer in accord with Subsection b above The source code for a work means the preferred form of the work for making modifications to it For an executable work complete source code means all the source code for all modules it contains plus any associated interface definition files plus the scripts used to control compilation and installation of the executable However as a special exception the source code distributed need not include anything that is normally distributed in either source or binary form with the major components compiler kernel and so on of the operating system on which the executable runs unless that component itself accompanies the executable If distribution of executable or object code
95. che In una valigetta possono trovare posto un PC portatile il sistema Relais Matrix e un oscilloscopio ATE palmare cos possibile portare sul campo un intero laboratorio ATE in miniatura comprese le matrici di switching Il sistema finale punto di arrivo del tema d anno ulteriormente migliorabile Viene immediato pensare di costruire ulteriori moduli di espansione identici a quello realizzato o con topologia di connessione dei relais differente ad esempio multiplexer anzich matrici 160 per potenziare senza sforzo il numero di connessioni automatiche gestibile e verificare che non ci siano bug nel firmware che stato testato con un solo modulo connesso anche se ne pu gestire fino a 4 nella versione attuale e anche di pi con una riprogrammazione opportuna Il lavoro di sviluppo del firmware pu continuare con l implementazione delle routine di salvataggio richiamo memorie progettate diffusamente ma non codificate per mancanza di tempo e con l introduzione di ulteriori comandi se ne appare la necessit Il circuito verr certamente utilizzato in laboratorio per effettuare in automatico tutte le misure che richiedono una riconfigurazione del cablaggio del circuito effettuate fino ad oggi in manuale per l assenza di matrici di switching Una volta verificata l adeguatezza del circuito se ne possono estendere le potenzialit utilizzando altri bus di comunicazione al posto della porta seriale Si pu
96. ck ne ne StChiocciolaOnly nN tRiempiLis StNewLineAf ta StNewLineAfterQm equ 5 equ 6 Ox per State Programma appena avviato F F A 00 Cer La si Si Wwe ca linea Settato se riconosciuto il tag EXCLusive dopo ROUTe OPEN o ROUTe CLOSe Siccome l unico anzich una apposit Parametro di o l inizio di un tag di ta variabile di S ingresso routine sendi Settato complementa relais prima di 3 livello implementato si 379 ubSystem di NDF inviare gli A attend riempi precedent oppure non int n LIZA stato corrente della macchina a stati di parsing oppure riga precedent identificatore ha generato un errore e la conclusione della riga attuale senza processare nulla o che ne arrivano i caratteri costituenti e Ident con l identificatore man man L identificatore verr riconosciuto non appen volta riconosciuto di cui si appena fatto il parsing tano in questo stato anche i duepunti e il caratter Una Si trat l identificatore punto interrogativo ch verr E Ric E Stato evuto Stata nn Il coman newlin 1 e 0 sulla seriale preferito un Flag di un bit livello riconosciuto terminata e inizio riga successiva teressa leggerne la fine a si ricevono cara
97. co e schema di sbroglio della basetta poich differenti programmatori utilizzano differenti piedinature per l header ICSP Anche utilizzano il Fiser s programmer attenzione a non inserire il connettore che non ha uno smusso di riferimento capovolto LabView Caricare su un PC su cui sia installato LabView MatrixDemo VI presente sul CD allegato al circuito MatrixDemo VI rappresenta la maniera pi facile in assoluto di controllare il circuito Selezionare la porta di comunicazione utilizzata ma non lanciare ancora 11 VI Alimentare il circuito verificare che 1 led verde e giallo di alimentazione presente siano accesi quello rosso di segnalazione errori spento e che il circuito non emetta alcun beep una volta alimentato a segnalare una condizione di errore hardware per il fallimento della routine di autotest Lanciare il VI sul PC premendo il tasto Run in Labview Operando sugli interruttori del pannello virtuale dovrebbero accendersi e spegnersi 1 relativi relais sul modulo del primo slot In caso di problemi Se cos non fosse chiudere LabView e passare all utilizzo in interattiva con 11 Terminale di Windows per capire le cause del malfunzionamento La porta seriale di comunicazione va configurata per bit di dati nessuna parit 1 bit di start 1 bit di stop velocit 57600 baud nessun controllo di flusso Configurare il Terminale per inviare CR LF a fine riga E una buona idea a Terminale lanciato e
98. come la basetta vista dall alto dal lato dei componenti tanto le piste che le piazzole vanno immaginate come se si vedessero in trasparenza attraverso la basetta Una volta riportate sul rame queste saranno allo specchio se osservate dal lato piste In rosso Eagle indica le piste presenti sul lato componenti di una basetta doppia faccia Il nostro circuito verr realizzato su basetta monofaccia sono stati utilizzati quindi le piste rosse di Eagle per indicare 1 ponticelli da realizzare sulla basetta Si notino anche 1 fori di fissaggio per 1 distanziatori Non sono agli angoli perch con la scelta fatta si potuta usare una basetta pi piccola LED3 e BUZZERI sono stati ruotati di un N angolo arbitrario per agevolare lo sbroglio Si cercato di mantenere 1 ponticelli corti e rettilinei ma in un caso non VI si riusciti La totalit dei componenti utilizzati era gi presente nelle librerie di Eagle Fa eccezione il connettore di alimentazione POWERPLUG che stato disegnato utilizzando un calibro per prendere le quote sul componente reale 54 Finito lo sbroglio una buona idea lanciare il tool DRC Desgin rules check che controlla le distanze reciproche tra gli elementi per verificare che siano superiori ai minimi impostati per la propria tecnologia costruttiva I parametri del DRC di Eagle sono stati calibrati per il metodo di incisione utilizzato in modo da trarre proficui suggerimenti da questo tool La basetta dei m
99. compito con forellini di centratura per ogni piazzola che guidano la punta in posizione Osservando di tanto in tanto la basetta sullo schermo del PC si fanno 1 fori del diametro corretto 0 8 mm la maggioranza 1 0 mm per 1 componenti con reofori pi grossi header dei connettori regolatori di tensione ponte a diodi 3 0 mm per 1 fori di fissaggio In caso di dubbio sulle dimensioni di un foro si pu usare 11 calibro sul reoforo del componente Per qualche rara fessura di forma non circolare lamelle del connettore di alimentazione si pu usare una mola Saldatura componenti Prima di saldare 1 componenti bene testare la continuit delle piste con un multimetro dotato della funzione sonora di ricerca continuit meglio farlo adesso che dopo aver saldato 1 componenti perch ora la basetta pu essere appoggiata pi agevolmente sul piano di lavoro Segnare con un pennarello le piste interrotte occorrer fare dei ponticelli per porvi rimedio Verificare pure che non ci siano piste in corto collegate tra loro per una incisione non efficace occorre separarle con una mola e tanta attenzione 66 Verifica continuit e corti piste Saldare prima 1 componenti a profilo pi basso Per la saldatura conviene procedere in ordine prima 1 componenti a profilo pi basso poi man mano quelli pi grossi Il motivo ovvio procedendo in ordine inverso si obbligati ad usare delle pinzette per accedere al fondo della basetta mentre
100. con l ordine consigliato sono sufficienti le dita di una mano Il connettore seriale il componente soggetto a sforzi meccanici sulla basetta E opportuno che durante l uso della scheda per le operazioni di inserimento e disinserimento del connettore si tenga fermo direttamente il connettore e non la basetta per evitare sollecitazioni sulle piste sottostanti che potrebbero rompere le saldature Fa Una terza mano aiuta a reggere la basetta Circuito alimentato senza gli integrati inseriti Una terza mano cio un supporto con una base pesante e due pinze orientabili facilita le operazioni Dopo la saldatura occorre ricontrollare continuit e corti con un multimetro poich una goccia di stagno pu aver messo in corto due piste vicine e l inserimento di un reoforo pu aver fatto saltare una pista 67 Verifica delle tensioni nei vari punti del circuito 5V 12V 10V 10V La voglia di completare il circuito e dargli alimentazione tanta ma per evitare di trasformare il circuito in una nuvola di fumo bianco e componenti bruciati ancor prima di utilizzarlo per la prima volta bene essere il pi prudenti possibile Dopo aver verificato continuit e corti si pu dare alimentazione al circuito senza per inserire gli integrati Conviene verificare con un multimetro che agli integrati arrivino tensioni di alimentazione corrette sui piedini giusti e con la polarit corretta Si possono anche testar
101. connesso alla porta spegnere e riaccendere il circuito per 164 osservare il messaggio di benvenuto 02 Hallo o un messaggio di errore hardware A questo punto utilizzare le combinazioni di debug CTRL E e CTRL F in modo da poter inserire 1 successivi comandi osservando l echo dei caratteri digitati a conferma che la UART del PIC stia funzionando e premendo semplicemente INVIO a fine riga anzich CTRL H per inviare il new line Utilizzo produttivo Utilizzare il proprio ambiente di sviluppo preferito per comunicare con la porta seriale ad esempio il Matlab con gli script di interazione forniti a corredo oppure un altro linguaggio di programmazione con le proprie librerie Utilizzare gli specchietti riassuntivi dei comandi disponibili e degli errori generabili presenti nel capitolo 3 come riferimento rapido durante la programmazione Utilizzare il capitolo 5 come riferimento per gli script Matlab e 1 programmi Labview e come spunto per realizzare le routine di controllo in altri linguaggi di programmazione Una volta che 1 relais scattano come desiderato collegare strumentazione ATE e dispositivi in test tramite 1 morsetti a vite presenti sul lato superiore dei moduli Specie nel caso di utilizzo di alimentatori programmabili prestare estrema cura a non mettere le relative uscite in corto tramite la matrice di relais Approfondimento per utilizzo avanzato Pause nell invio di comandi sulla seriale E buona norma durante l utili
102. conteggio dal valore in W 1 1 1 forw counter myfor lt istruzioni gt lt istruzioni gt next counter myfor Esempio di utilizzo iniziando il conteggio da un literal Esempio di utilizzo iniziando il conteggio da un file forl counter 10 myfor lt istruzioni gt lt istruzioni gt next counter myfor inizio for counter inizio nyfor lt istruzioni gt s lt istruzioni gt next counter myfor forw macro counter alabel movwf counter alabel endm next macro counter alabel decfsz counter F goto alabel endm for macro counter start alabel movf start W forw counter alabel endm Fori macro counter literal alabel movlw literal forw counter alabel endm resse consider se REPEAT UNTIL Implementabile facilmente utilizzando gli if che vanno letti esegui goto se la condizione falsa Dove ci va scegliere untill o until2 a seconda se il tipo di if scelto ammette uno o due parametri Esempio repeat myrepeat lt istruzioni gt lt istruzioni gt until2 ifee filel file2 myrepeat repeat macro alabel alabel endm untill macro command parameter alabel command parameter alabel endm until2 macro command parameterl parameter2 alabel command parameterl parameter2 alabel endm Setar See a A jo WHILE DO Implementabile facilmente utilizzando gli if che vanno letti esegui goto se la condizione falsa Dopo wile metti un if con le condizio
103. crementare o decrementare opportunamente di 1 se si ha necessit dell altro comportamento Occhio ai roll over oltre gli 8 bit Questi script considereranno i numeri binari a 8 bit senza segno Se si vuole considerarli con segno aggiungere o togliere 128 a entrambi prima di confrontarli Occorre specificare una etichetta per ogni ramo consigliato usare identificatori numerici del tipo iXXX e la lista di simboli per verificare quali sono ancora liberi Esempio di utilizzo if then iffne Datal Data2 myif i lt istruzioni gt i lt tstruzioni gt ifend myif 7 lt resto del programma gt Esempio di utilizzo if then else 167 Esempio Esempio Esempio ifee ifeew ifeel ifeelw ifne ifnew ifnel ifnelw EGE ifgte ifee ifelse ifend Datal Data2 myifl lt istruzioni ramo then gt lt istruzioni ramo then gt myifl myif2 lt istruzioni ramo else gt lt istruzioni ramo else gt myif2 di utilizzo if condizione and condizione then ifee ifee ifend datal data2 myif data3 data4 myif lt istruzioni gt lt istruzioni gt myif di utilizzo if condizione or condizione then ifee ifend ifee ifend ifelse ifend datal data2 x1x goto xxxORxxx xix data3 data4 x2x goto xxxORxxx REX XXXORXXX YYY lt istruzioni gt lt istruzioni gt YYY di utilizzo di if condizione goto ifee macro mov f subwf btfss goto endm macro
104. cuito Relais Matrix I relais hanno numeri di canale 11 12 13 14 21 22 23 24 31 32 33 34 41 42 cos come prevede lo standard industriale Default Vettore vuoto invia il comando con una lista vuota e questo non sortir alcun effetto AP 00 00 AAP AP OP o NOTA MatrixSp deve essere gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite NOTA Non viene controllato se il comando genera errori Utilizzare MatrixRead o oP o o global MatrixSp cmd ROUTE CLOSE while length Ch gt 0 if isempty find Ch 1 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 disp I numeri di canale devono essere scelti tra i seguenti disp 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 recur end Gmd strcat cmd 1 int2str Ch 1 Ch 1 end cmd strcat cmd MatrixWrite cmd matrixcloseexclusive m function MatrixCloseExclusive Ch MatrixCloseExclusive o o o Invia il comando ROUTE CLOSE EXCLUSIVE Q tramite MatrixWrite Il comando CLOSE EXCLUSIVE chiude i relais selezionati aprendo tutti gli altri MatrixCloseExclusive agisce esclusivamente sui relais del Modulo collegato allo slot 1 tipicamente al circuito collegato un solo modulo al quale verr assegnato lo slot 1 HP 00 00 AAP o oe Sint
105. d una possibilit fondamentale durante la fase di messa a punto del firmware Per risparmiare denaro per poter contare su una assistenza clienti direttamente dal progettista e per avere un prodotto funzionante meglio di tanti commerciali si deciso di autocostruire il programmatore seguendo un progetto disponibile in rete all indirizzo http www jot1 1t fiser o cercando Fiser s programmer su http www google it Il progetto ben fatto e ben documentato viene alimentato direttamente con la tensione di rete e vanta a conoscenza dell autore pi di 400 esemplari costruiti nel mondo E fornito anche il disegno delle piste pronto da incidere su una basetta monofaccia La basetta stata realizzata col metodo stira e ammira descritto pi avanti dopo aver ingrossato un po le piste del disegno originale di Fiser per adattarle alle tolleranze del mio metodo di incisione e dopo aver spostato appena 1 fori per il trasformatore che aveva un rapporto di forma differente rispetto a quello utilizzato da Fiser L autore stato ben lieto di fornire assistenza gratuita e spendere qualche tempo in chiacchiere sulle scelte progettuali per email un netto vantaggio rispetto agli apparecchi commerciali altri scopi mentre la trasmissione in atto 1 La dizione in voga su news it hobby elettronica newsgroup italiano di riferimento per chi si diletta di elettronica applicata e pare sia stata ideata da Celsius un assi
106. d o via per esempio quelli di montaggio della basetta normalmente non vengono riportati affatto sul rame poich sono nel layer a parte holes e non nei layer pad via top bottom che sono 1 soli riportati su rame Per risolvere questi problemi ho sfruttato il linguaggio di scripting interno di Eagle e approntato uno script chiamato pshouse drill aid che distribuisco con GPL Visitare il mio sito http www ideegeniali it sezione progetti per maggiori informazioni riguardo al modo di operare dello script o per scaricare l ultima versione rilasciata Il risultato visibile nella figura di destra 1 vantaggi sono notevoli I diametri interni di tutti 1 pad e via di qualunque forma fossero sono stati ridotti in modo da facilitare la centratura del trapano che avverr su metallo non sul tenero La punta verr naturalmente guidata verso il centro del foro e se proprio si sbaglia il rame pi resistente della basetta rimasta scoperta e se ci s1 accorge subito di aver sbagliato si fa in tempo a deviare la punta verso il centro della piazzola dove il minuscolo cerchietto lasciato senza rame la catturer nella posizione corretta Lo script ha un comportamento differente a seconda della forma dei pad I pad per 1 resistori che comprendono fori da 0 6 millimetri nella libreria standard e che verrebbero mangiati via completamente da un foro da 0 8 millimetri ora sono stati allargati e possono essere tranquillamente forati a 0 8 mill
107. da 1 bit packed in un byte sotto i singoli bit EEEH bits packed in byte Flag FlVerboseAutotest equ 0 Parametro di ingresso per routine autotest settato se deve inviare 1 0 sulla seriale FlErrorPresent equ 1 Settato se c un errore da inviare dopo la ricezione della riga corrente FlLogic equ 2 Usato per i test logici composti and or tra pi condizioni nel prog principale FlEcho equ 3 Settato se richiesto l echo di ogni carattere ricevuto sulla seriale Bb egu 4 Settato se richiesto CR LF anzich LE in uscita FlExclusive equ 5 Settato se riconosciuto il tag EXCLusive dopo ROUTe OPEN o ROUTe CLOSe siccome l unico tag di 3 livello implementato si preferito un Flag di un bit anzich una apposita variabile di SubSystem di 3 livello riconosciuto da un byte FlInvert equ 6 Parametro di ingresso routine sendINDF Settato complementa relais prima di inviare gli 1 e 0 sulla seriale Messaggi di errore I messaggi di errore sono conservati in due look up tables come descritto in precedenza Per memorizzare le stringhe in maniera efficiente si sono utilizzati con continuit 1 codici numerici corrispondenti ai primi numeri interi Di solito invece la strumentazione divide 1 codici di errore per gruppi assegnando codici vicini ad errori dello stesso gruppo Mentre invia un messaggio di errore il PIC non presta attenzione ai caratteri ricevuti e potrebbe verificarsi un rs232 overrun che verr segn
108. dea proposta prevedeva di poter realizzare il circuito come blocco unico anche su piastra millefori e senza led di segnalazione Sviluppando il progetto si Invece pensata una architettura scalabile in cui 11 controller basetta comprendente stadio di alimentazione un microcontrollore un adattatore di livello e la presa seriale comunicava attraverso un bus di sistema cavo piatto a 10 fili con uno o pi moduli basette comprendenti shift register con latch darlington di potenza e relais Il numero massimo di moduli gestibile 4 per un totale di 64 relais La topologia del collegamento tra moduli in cascata con terminatore sull ultimo I diversi moduli possono essere sistemati uno accanto all altro sul piano di lavoro oppure impilati uno sopra l altro con distanziatori opportuni se necessario risparmiare superficie di appoggio Il sistema consente di collegare dinamicamente tra loro strumenti da laboratorio ad esempio oscilloscopi generatori di funzione multimetri da banco alimentatori programmabili componenti in prova sensori integrati di temperatura luminosit o quant altro interi circuiti in prova o di condizionamento del segnale E anche possibile montare dinamicamente da programma interi circuiti connettendo tra loro componenti diversi montati una volta per tutte sul sistema I vantaggi come si vede sono notevoli I costi di acquisto e di riparazione sono di un ordine di grandezza inferiori Ogni mod
109. dei principali software utilizzati e una bibliografia e webliografia ragionate Capitolo 1 Introduzione Il corso di Misure Elettroniche del Politecnico di Bari tenuto dai docenti prof ing N Giaquinto e dott ing F Adamo ha tra gli argomenti centrali l utilizzo di strumentazione ATE per l effettuazione di alcune serie di misure in automatico sotto la supervisione di un programma di controllo scritto sul PC an oe ee n ti a ne I _ s N e W pr E ERE ae ER labate rm SEA EY F A ES EE DC aT ena L LO o w i merci I A en SEI 11 a x gt Un laboratorio ATE Nella totalita dei casi occorre realizzare fisicamente il collegamento tra 1 dispositivi o 1 circuiti in test e la strumentazione di misura automatica posto che il collegamento tra quest ultima e il PC sia gia stato effettuato In molti casi di interesse pratico la topologia del circuito va modificata per concludere la serie di misure di interesse Un semplice esempio per determinare sperimentalmente la caratteristica di un dispositivo elettronico con l utilizzo di un alimentatore e un multimetro da banco programmabili necessario invertire l alimentazione del dispositivo poich gli alimentatori difficilmente riescono a fornire tensioni positive e negative dalla stessa coppia di morsetti Con questo tipo di inconveniente si perdono molti dei vantaggi derivanti dalla possibilit di
110. del dimensionamento dell alimentazione e per onorare il risparmio lo stadio di alimentazione leggermente sottodimensionato ma perfettamente funzionante in condizioni tipiche In caso di sviluppi futuri del progetto si pu decidere di preferire il dimensionamento di caso peggiore e ridisegnare la basetta Il led LED2 segnala che l alimentazione presente e d un rapido riscontro visivo con l affievolimento se il 7812 entra in protezione riducendo la corrente erogata Il 7812 stato protetto con il diodo poich 1 relais producono extra correnti di apertura considerevoli che potrebbero distruggere l integrato se riescono a farsi strada dai moduli fino alla scheda del controller senza riuscire a scaricarsi nei diodi di ricircolo dell ULN2803 Non sono stati inseriti condensatori poich non interessa realizzare una buona stabilizzazione per 1 relais Lo stadio di alimentazione per 1 5V costruito attorno ad un 7805 Questo circondato da condensatori seguendo 1 consigli del data sheet del componente per assicurare un ottima regolazione di linea e di carico per la logica L evento di spegnimento del microcontrollore per alimentazione insufficiente infatti catastrofico alla riaccensione rieseguirebbe il firmware dal principio perdendo tutte le configurazioni e occorre estrema cura per evitare questo fenomeno Il condensatore C12 collegato molto prossimo ai piedini di alimentazione del microcontrollore fa fronte ai ti
111. del file sorgente nominate con le caratteristiche via via aggiunte e qualche file hex compilato dal funzionamento certo Conviene conservare tutte le versioni del file sorgente ed opportuno numerarle fin dall inizio con semplici cardinali anzich utilizzare nomi poco rappresentativi come nuova nuovissima funzionante definitiva super definitiva super tantissimo definitiva finale E opportuno anche conservare qualche versione di file compilati per una riprogrammazione rapida del dispositivo senza dover riaprire l ambiente di sviluppo e rieseguire la compilazione In caso di malfunzionamento della macchina se si ha il dubbio se sia l hardware o il software il problema si riprogramma al volo il chip senza il dubbio che si sia ricompilato il codice con una configurazione differente del compilatore l Quelle piccole variazioni al flusso normale di codice volte a testare direttamente il punto che crea problemi possibile a volte dimenticare di rimettere a posto le cose e pu essere difficile cercare la piccola modifica in tutto il corpo del programma se ci si dimenticati di averla fatta In questi casi pu essere pi produttivo riprendere una versione vecchia e funzionante e ricostruire l ultima implementazione da zero ora che ci si chiarito meglio 140 Revisioni del codice Un buon sistema di numerazione delle versioni anche utile in caso di revisioni del codice Il processo di re
112. di bug che ne rendono impossibile l uso 18 Qualche purista potrebbe obiettare che assembler 11 nome da dare al compilatore chiamarlo compilatore secondo 1 puristi sarebbe troppo poich effettua solo traduzione 1 a 1 da mnemonici a codice binario assembly 11 nome del linguaggio Oggigiorno nessuno pi presta attenzione a questa distinzione e 10 user il termine assembler per il linguaggio e il termine compilatore per il compilatore assemblatore 26 Domare l assembler La mancanza di strutture per il controllo di flusso if then else while do repeat until case switch stata risolta con la stesura di alcune macro che realizzano tali funzioni rendendo cos il codice assembler che per sua natura tende a diventare spaghetti programming un po piu leggibile e mantenibile Alla mancanza della gestione di stringhe si ovvia con tavole di salto per le costanti e routine ad hoc per le stringhe vere e proprie da modificare in run time Per la gestione degli array occorre far ricorso all indirizzamento indiretto disponibile sul PIC Non c una soluzione immediata per l aritmetica complessa ma esistono librerie pronte in rete per 1 problemi pi comuni Ci di cui si sente davvero la mancanza in assembler sono 1 passaggi di parametri di ingresso e uscita a sottoprocedure poich la cura dell impegno di ciascuna locazione di memoria per ogni istante di esecuzione ovvero l attenzione alla durata delle variabili in assembler
113. dine dei millisecondi quindi questo tipo di problemi cicli di ritardo per componenti lenti aggiornamento eventualmente troppo lento degli shift register rispetto al tempo di commutazione del relais s1 risolto da solo prima ancora di porsi avendo a disposizione ampi margini di lavoro su tutti 1 fronti Problema dello stato iniziale Poich il PIC appena alimentato ha tutti 1 suoi piedini configurati come ingressi successivamente il firmware ne configura alcuni come uscite e quindi si trovano in alta impedenza e poich anche gli ingressi del 74HC595 sono ad alta impedenza le relative linee all accensione del circuito sono flottanti e pu capitare che vengano letti stati logici 0 e I alternativamente e che lo shift register si riempia di dati casuali Se gli shift register sono collegati a carichi questi potrebbero inserirsi non volutamente durante la fase di accensione del circuito 34 configurazione attuale nei latch dai quali verr proposta sui pin di uscita attraverso stadi push pull CMOS 3 state OE Output Enable Active Low posto alto rende tutti 1 pin di uscita ad alta Impedenza mentre va tenuto basso nel funzionamento normale MR Master Volendo garantire che all accensione del circuito gli shift register siano tutti a zero e gli output non siano attivati prima che il resto dell elettronica non sia alimentata correttamente e prenda il controllo della situazione si pu prevedere un circuito con un
114. diverse parti devono lavorare assieme pi produttivo progettare simulare e prototipizzare le parti separatamente acquisire esperienza con ciascuna prima di disegnare il circuito finale Anche cos saranno necessari piccoli aggiustamenti sul circuito con tecniche cut amp wire Queste tecniche vanno ovviamente bene per 1 prototipi non per la produzione e per piccole correzioni se il progetto completamente sbagliato occorrer disegnare e realizzare una nuova basetta per questo si cerca di limitare al minimo la necessit di ricorrere a queste tecniche con una progettazione attenta e accumulando esperienza su sotto sezioni del circuito prima di montarlo tutto assieme Fiser s programmer Il microcontrollore scelto Il microcontrollore scelto per il progetto stato 11 PIC16F628 Queste sono le caratteristiche salienti di questo microcontrollore tecnologia CMOS alimentazione 5V driver di uscita in grado di erogare assorbire 20 mA per ogni pin diodi di camping verso alimentazione sugli ingressi CPU risc a 8 bit 35 istruzioni 20 MHz di clock esterno massimo 5 MIPs 2k word di memoria FLASH programma 224 byte di memoria RAM 128 byte di memoria EEPROM dati programmabile da firmware stack hardware a 8 livelli comparatori analogici con 16 step di tensione di riferimento con partitore tensione di alimentazione 2 contatori a 8 bit 1 contatore a 16 bit un modulo comparatore generatore di PWM pull up interni programmabili su
115. dotto dalla National Instrument lo stato dell arte per la realizzazione di pannelli di controllo virtuali Un programma in LabView viene infatti chiamato Virtual Instrument proprio per il grande impatto visivo e funzionalit avanzate della sua interfaccia utente che rispecchia fedelmente quella di un comune strumento da laboratorio Per maggiori informazioni sul Tech Model Railroad Club e la nascita della programmazione come la conosciamo oggi si veda il libro di Steven Levy Hackers Gli eroi della rivoluzione informatica Shake ed Underground 148 Basic Basic Serial Write and Read ie La versione di LabView utilizzata stata la 7 0 Student Edition Per prendere confidenza con l uso della porta seriale stato utilizzato un VI di esempio gi pronto Basic Serial Write and Read che sembrava fatto apposta per l uso con questo circuito Il VI in grado di inviare una stringa sulla porta seriale attendere un certo lasso di tempo e rileggere una stringa dalla seriale tipicamente la risposta di uno strumento da laboratorio LabView in grado di estrarre righe successive separate dal carattere new line nella risposta i Basic Serial Write and Read vi Front Panel DOM i Basic Serial Write and Read vi Front Panel COR File Edit Operate Tools Browse Window Help File Edit Operate Tools Browse Window Help Basic a m ce epico foi tor p AT RAI ee ee III A Select the serial resource
116. due messaggi di errore 09 Interrupted chain o 15 Too many modules RSI Reset the instrument to the Factory configuration See Factory Reset State on page 160 in chapter 4 for a complete listing of the instrument s Factory Reset state 85 IDN E la richiesta della stringa di identificazione dello strumento Lo standard prevede una risposta costituita da Ditta produttrice Modello Numero di revisione dell hardware Numero di revisione del Firmware La revisione del firmware pu essere espressa con trattini per indicare pi numeri di revisione Il 34970A della Agilent distingue tre numeri di revisione per il firmware il mio circuito indica come versione 1 0 tanto l hardware che i firmware rispondendo alla query con la stringa PacloSancono R elaisMatrix 1 0 1 0 IDN Read the instruments Identification string The instrument returns three numbers for the system firmware The first number is the firmware revision number for the measurement processor the second is for the input output processor and the third is for the front panel processor An example string Is shown below SLE TT PACK SRO 3487048 A ARAM AAR i P TE qlc lie DI P Pec al s Ery g L H gt poi La dii i jd fn k o e Af SUP LO CIFNeris ioni 8 Stige Paras Wii dl ASL sl CIlAFrACISIS ISTE Effettua una routine di autotest ovvero di autodiagnostica delle funzionalit hardware software Nel nostro caso viene inviato u
117. duo frequentatore del newsgroup l Fiser un nickname ovvero lo pseudonimo con cui l autore conosciuto in Internet 22 Il mio esemplare autocostruito del Fiser s programmer Il progetto presenta diversi accorgimenti davvero geniali non riscontrati nei prodotti commerciali di prezzo medio sono previsti 5 fori sulla basetta per fissarla con distanziatori esagonali ad un altra che ha l unico scopo di proteggere e isolare dalla superficie di appoggio il lato piste della prima l alimentazione direttamente a tensione di rete e sulla basetta sono previsti fori per fissare saldamente il cordone di alimentazione per evitare che venga strattonato tutti 1 prodotti commerciali richiedono invece un alimentatore DC apposito non utilizza il costoso zoccolo textool che si rompe dopo circa 200 azionamenti poich s1 consumano per sfregamento 1 listelli metallici di contatto proponendo invece dei comunissimi zoccolini economici dai quali si sia avuta cura di rimuovere 1 pin non utilizzati durante la programmazione 1 chip possono essere infilati e sfilati a mano grazie a questo accorgimento senza timore di romperne 1 piedini per torsione il circuito integralmente documentato e se si rompe un componente facile trovare quello guasto e sostituirlo sono previsti 3 led di segnalazione che monitorano la presenza dell alimentazione la presenza della tensione di 13 8V sul piedino di programmazione e una delle due l
118. e use or not licensed at all The precise terms and conditions for copying distribution and modification follow GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING DISTRIBUTION AND MODIFICATION O This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License The Program below refers to any such program or work and a work based on the Program means either the Program or any derivative work under copyright law that is to say a work containing the Program or a portion of it either verbatim or with modifications and or translated into another language Hereinafter translation is included without limitation in the term modification Each licensee is addressed as you Activities other than copying distribution and modification are not covered by this License they are outside its scope The act of running the Program is not restricted and the output from the Program is covered only if its contents constitute a work based on the Program independent of having been made by running the Program Whether that is true depends on what the Program does 1 You may copy and distribute verbatim copies of the Program s source code as you receive it in any medium provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty keep intact all the
119. e StStartOfLine 181 r Invia sulla seriale una sequenza di 8 TOT O 1 in base ai bit prima di bit del file register puntato da FSR inviarlo sulla seriale Se si setta Flag FlInvert verr invertito ogni sendINDF let sendINDFTemp INDF btfsc Flag FlInvert comf sendINDFTemp F forl sendINDFLooper 8 1104 movlw wom btfsc sendINDFTemp 0 moviw Mle call trasmit EEF sendINDFTemp F next sendINDFLooper il04 return i ar IdentAddChar La routine IdentLengi th Se Ident gia alla dimensione massima il carat IdentAddChar movwt IdentTemp incf IdentLength F ifgtel IdentLength 9 i006 letl IdentLength 8 return ifend 1006 movf IdentLength W addlw Ident movwf FSR let NDF IdentTemp return i ae aggiornaModuli 1 Aggiorna i relais sulle schede con i contenuti attuali inviando i bit di Relais nell ordine opportuno aggiornaModuli movlw Relais addlw pa movwf FSR forl aggiornaModuliLooper 8 1034 mov f INDF W call shiftout decf FSR F next aggiornaModuliLooper i034 call store return i possss autoetest i Invia pattern di bit sugli shift register siccome i diversi modul tornano al microcont t verifica q autotes interro autotest connessi autotestOk tta o troppi Se
120. e and all the license notices in the Document and any Warranty Disclaimers provided that you also include the original English version of this License and the original versions of those notices and disclaimers In case of a disagreement between the translation and the original version of this License or a notice or disclaimer the original version will prevail 192 If a section in the Document is Entitled Acknowledgements Dedications or History the requirement section 4 to Preserve its Title section 1 will typically require changing the actual title 9 TERMINATION You may not copy modify sublicense or distribute the Document except as expressly provided for under this License Any other attempt to copy modify sublicense or distribute the Document is void and will automatically terminate your rights under this License However parties who have received copies or rights from you under this License will not have their licenses terminated so long as such parties remain in full compliance 10 FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new revised versions of the GNU Free Documentation License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns See http www gnu org copyleft Each version of the License is given a distinguishing version number If the Document specifies that a particula
121. e aggiunto automaticamente IDN rl Risposta ricevuta PaoloSancono RelaisMatrix 1 0 1 0 Front Panel e Block Diagram di MatrixInteractive VI Il programma di uso immediato si seleziona la porta di comunicazione desiderata e si lancia il programma Una volta scritto 11 comando da eseguire clickare semplicemente su Send ed osservare gli effetti prodotti e la risposta data dal circuito Clickare su termina programma per uscire ermina programma Ciclo while principale e condizione di uscita Il programma costituito da un ciclo While in esecuzione continua che termina clickando sull apposito bottone In figura il particolare del codice che implementa questa soluzione la pi tipica dei programmi LabView Si osservi poi un altro costrutto LabView la cornice con il gestore degli eventi Il codice all interno di tale cornice viene eseguito quando si genera l evento indicato in testa alla cornice cio la pressione del pulsante Invia comando che ha etichetta Send sul Front Panel 151 le gt Matrixinteractive vi File Edit Operate Tools Browse Window Help n Porta seriale alla quale collegato il circuito Termina programma COM4 Comando da inviare newline aggiunto automaticamente SYSTEM VERSION SYSTEM MODULE ROUTE OPEN 112 113 ROUTE CLOSE EXCLUSIVE 111 122 133 144 SYSTEM CPON ALL SYSTEM CPON 100 ROUTE CLOSE La drop down box con
122. e gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite aO o o o o MatrixWrite RST MatrixWrite ROUTE CLOSE EXCLUSIVE while 1 ix ilarkio iiirsiess st j Cc O Diheoeeore roo eer oer eer Vt O T A P T e r T E C 111 112 rrrrrrrrr i e O LISS PERSE EERE ESE EE ES ki T T O LL Pervert reer ee re hi c 121 122 123 124 rr1r1rr 188 LAO PR ERRE 11 Leleysigb vs Ce Tiss b54 4 TEL LLLyga tira ll gbi cel izi lzz4z 3 11 lo prrerrri fg Set se Pare ee ce 1s31 dad 11 se ee Le Sepe ve ee eS eee ee Idorada Ai eS peed ES 11 144 rttth Lede Lya 1A2 153245x4 oe 14l 14245 11 E VITTO end iumetion S List j MatrixWrite strcat CLOS pause 0 03 MatrixRead function ce list MatrixWrite strcat CLOS EXCL pause 0 03 MatrixRead f nction o list MatrixWrite strcat OPEN pause 0 03 MatrixRead 7 141 142 143 144 holy ioe r r 131 122 123 124111112 f VII r 4 i r VII r i f r F 1 7 7 7 7 r r r i 4
123. e le funzionalit dell hardware collegato agli integrati ponticellando qua e l come farebbe 11 microcontrollore Questo circuito aveva molte alimentazioni da verificare SV 12V 10V 10V Durante le verifiche si prestata molta attenzione a non mettere in corto inavvertitamente coi puntali del multimetro due piste diverse La basetta con il modulo di espansione per relais stata realizzata seguendo gli stessi principi si evita quindi una descrizione dettagliata 68 Fili rigidi con curve ad angolo retto e trecce di fili sottili fissate con colla termica Un elemento di novit degno di considerazione sono 1 12 fili volanti da montare sul lato piste I fili creano disordine dannoso non solo dal punto di vista estetico ma anche dal punto di vista funzionale poich rende difficile controllare che sulla basetta sia tutto a posto Sono state seguite due filosofie diverse per realizzare cablaggi ordinati quelli rossi e viola in figura sono stati realizzati con filo di rame rigido e con curve ad angolo retto L idea che curve ad angolo retto sono gradevoli agli occhi e pi facili da seguire con lo sguardo rispetto a linee oblique Per 1 fili occupano tanto spazio sulla basetta I restanti cablaggi sono stati effettuati intrecciando tra loro fili non rigidi in modo da occupare meno spazio Le trecce sono state fissate con una goccia di colla termica Entrambi gli approcci sono validi e hanno consentito di lasciare libere l
124. e piazzole su cui andavano montati 1 relais che inizialmente non sono stati montati per motivi che illustrero in seguito Relais in offerta speciale Dimensioni appena differenti tra i relais acquistati in offerta e quelli tipici I relais acquistati al dettaglio costano 2 00 o 2 50 euro Si preferito attendere la successiva fiera dell elettronica per cercare di acquistarne una certa quantit in offerta Si stati fortunati 69 poich alla fiera organizzata dall Associazione Radioamatori Italiani di Castellana Grotte che si tenuta a Monopoli BA nel mese di maggio si sono potuti acquistare 20 relais per 10 euro I relais erano nuovi cio mai utilizzati anche se invecchiati dagli anni e sembravano delle dimensioni corrette per la basetta realizzata Solo arrivati a casa ci si resi conto che 1 piedini di alimentazione erano un decimo di pollice pi distanti dagli altri rispetto ai relais pi diffusi I relais erano anche un po pi alti Fortunatamente si riusciti a montarli lo stesso piegando appena verso l interno 1 piedini ottenendo un risparmio di 30 euro e 4 relais in pi di scorta identici a quelli montati Debug hardware Debug di solito un termine riferito al software e indica le noiose operazioni di aggiustamento di errori nei programmi che si aveva l ambizione di aver progettato e scritto correttamente Ho usato il termine debug hardware per indicare 1 piccoli aggiustamenti da
125. e pu assumere questa variabile SSDefault Ultimo subsystem utilizzato che resta come default SSParsed SubSystem il cui identificatore in parsing Inizialmente vale SSUndefined per permettere di riconoscere header non validi I valori che SSDefault e SSParsed possono assumere sono descritti nelle costanti pi sotto i Variabili temporanee Looper Programma principale Temp Programma principale sendINDFLooper Routine sendINDF sendINDFTemp Routine sendINDF Ident Temp Routine IdentAddChar ShiftMe Routine shiftout shiftoutLooper Routine shiftout sendMsgBcd Routine sendMsg sendMsgLooper Routine sendMsg sendMsgTemp Routine sendMsg autotest Looper Routine autotest aggiornaModuliLooper Routine aggiornaModuli DelayLooper Routine Delay DelayCsLooper l Routine DelayCs DelayCsLooper2 Routine DelayCs endc i bits packed in byte Flag FIVerboseAutotest egu 0 Parametro di ingresso per autotest settato se deve inviare 1 0 sulla seriale FlErrorPresent equ 1 Settato se c un errore da inviare dopo la ricezione della riga corrente FlLogic egu 2 Usato per i test logici composti and or tra pi condizioni nel prog principale FlEcho egu 3 Settato se richiesto l echo di ogni carattere ricevuto sulla seriale FICrLf equ 4 Settato se richiesto CR LF anzich LF in uscita 172 FlExclusive Fl Invert z gt Valori possibili Cp tStartOfLi StSeekNewLi StParseld cblo
126. e qualche volta esotermiche Il cloruro ferrico macchia molto tenacemente e corrode 1 metalli teneri come ad esempio 1 tubi di rame degli impianti fognari bene quindi che non sgoccioli in giro Non si pu buttare il cloruro ferrico nelle fogne perch corrode 1 tubi inquinante acido Per il corretto smaltimento si procede per grandi linee cos occorre prima neutralizzare l acido aggiungendo lentamente una base in soluzione quindi far evaporare le parti volatili 63 Sospensione a filo della superficie e appena sotto Le basette che avevo a disposizione sfridi di produzione avuti per pochi centesimi erano doppia faccia Occorreva pertanto rimuovere completamente il rame di una delle due facce che altrimenti provocherebbe un corto circuito generale tra tutti 1 componenti Si puo procedere per via meccanica asportandolo con frese o platorelli di carta vetrata ma cos si ottiene tanta polvere tollerabile in una officina un po meno in una casa privata o in un laboratorio universitario e una basetta dalla superficie rugosa che non consente di prendere appunti con una penna indelebile vicino ai componenti poich l inchiostro si spande nelle microfessure Si preferito allora rimuovere per via chimica 1l lato di rame che non interessa Il metodo classico che consente di velocizzare 1 tempi di incisione prevede di agitare continuamente la basetta o ancora meglio di insufflare aria tramite una pompa e rimesco
127. e se non strettamente necessarie si pu semplicemente ignorare ogni problema di controllo di flusso e ritardo e inviare semplicemente 1 comandi uno di seguito all altro rapidamente quanto si desidera poich spesso la UART del PC in configurazione di default rallenta le trasmissioni quando riceve qualcosa proprio per venire incontro a dispositivi half duplex Sar la UART stessa 1l suo driver o 1 layer software dell ambiente di sviluppo a farsi carico di bufferizzare e inviare lentamente 1 comandi inviati di seguito dal programmatore disattento Questo approccio funziona nel 90 dei casi specie quando possibile dichiarare esplicitamente 1l carattere di fine riga al proprio ambiente di sviluppo Procedendo in questo modo se non si verificano errori non ci sono problemi Se si verifica un errore il circuito emetter un beep e probabilmente si generer una cascata di due tre errori di buffer overrun uno ogni 100ms fino a che cessa la trasmissione di caratteri dal PC Si viene quindi comunque avvisati della perdita di caratteri successivi avvenuta in seguito al primo errore se non dalla rilettura da programma del messaggio di errore generato dal circuito almeno dall emissione dei beep di avvertimento direttamente dal buzzer presente sulla basetta Si ricorda che oltre al buzzer sul circuito presente un led di segnalazione La condizione di led rosso fisso acceso indica che il parser non sta processando l input fino alla
128. e tale da far perdere caratteri al buffer di ricezione PIC Subito dopo l esecuzione del comando viene inviata dal PIC una stringa contenente la segnalazione di comando completato oppure un messaggio di errore E proprio l invio di caratteri sulla porta seriale l unica elaborazione bloccante sul PIC Mentre il PIC invia messaggi di errore o informativi il suo buffer di ricezione pu riempirsi completamente e il firmware perdere caratteri Non essendo previsto il controllo di flusso dunque demandata al programmatore del PC l accortezza di non inviare mai due righe di testo di seguito alla macchina senza prima aver letto la risposta o aver aspettato il tempo necessario alla macchina per inviare la risposta se non interessa leggerla Nel caso peggiore ovvero per l invio di messaggi particolarmente lungi sono sufficienti 12 ms ai quali vanno aggiunti in caso di errore ulteriori 100ms duranti 1 quali 11 PIC effettua un beep col buzzer piezoelettrico C da dire che diversi programmi di comunicazione gi pronti e diverse API di programmazione arrestano automaticamente l invio di caratteri quando si riceve qualcosa proprio per venire incontro a periferiche half duplex Ad esempio il terminale di Windows 44 era sa 36 ae pan i 2 wa con tutta probabilit utilizza questo approccio poich anche inviando diversi comandi di seguito con un copia incolla non si verificano se non sporadicamente problemi di buffer overr
129. edica alla gestione del buzzer Gli errori hardware venivano comunicati all accensione dopo il messaggio 02 Hallo Ora lo sostituiscono in modo da mantener fede all impegno di inviare sempre e solo un unica stringa ar i 62 di risposta ai comandi Ogni regola ha le sue eccezioni C un unico caso in cui l utente del PC deve leggere una stringa ulteriore dopo una risposta se l autotest fallisce e TST restituisce 0 in un messaggio successivo si comunica l errore hardware occorso in modo da poter distinguere tra le varie cause Quindi il programma del PC deve effettuare una nuova lettura se riceve 0 in risposta a IST Se la cosa non gradita si pu modificare facilmente il firmware eliminando la comunicazione dell errore occorso e lasciando solo la generica risposta 0 autotest fallito 142 Capitolo 5 Utilizzo Terminale di Windows Il terminale di Windows presente in ogni versione del sistema operativo Microsoft consente di comunicare facilmente con una porta seriale del PC E sufficiente configurare 1 parametri di comunicazione per ottenere la visualizzazione a schermo dei caratteri ricevuti e l invio sulla porta di comunicazione dei caratteri digitati su tastiera in emulazione terminale Esistono per tre problemi che rendono difficoltosa l interazione I caratteri digitati su tastiera vengono inviati alla porta ma non vengono stampati a schermo Ricevendo Il caratt
130. ef Flag FlErrorPresent Resetta il flag di errore present ifend 1027 goto nextChar Attende il carattere successivo ifend 1026 ifbs RCSTA OERR 1072 Test for overrun error possibile solo se il PC invia un comando fa una breve pausa invia un ulteriore comando mentre il PIC inviava il suo messaggio di errore movlw 0x13 713 RS232 Overrun call errore letl State StSeekNewLin bcf RCSTA CREN Riinizializza la logica di ricezione disattivandola bsf RCSTA CREN e riattivandola subito dopo si perso almeno un byte ifend 1072 ifbs RCSTA FERR 1074 Test for framing error movlw 0x12 712 RS232 Framing call errore mov f RCREG W Scarta il byte perch contiene dati non validi errore di trama letl State StSeekNewLin Stato cerca inizio nuova linea ifend 1074 movf RCREG W Legge il carattere successivo movwf LastChar ifltl LastChar z 1 1005 Converte in maiuscol lettere minuscole a MM ifgtel LastChar a i005 movlw Aa a addwf LastChar F ifend 1005 ifeel LastChar 0x05 1096 Ricevuto CTRL E combinazione fuori standard negbit Flag FlEcho Attiva o disattiva l echo dei caratteri ricevuti goto nextChar Utile per il debug al terminale di Windows ifend 1096 Rimuovere questa funzione nel firmware definitivo se desiderato ifeel LastChar 0x06 1100 Ricevuto CTRL F combinazione fuori standard negbit Flag FICrLf Attiva o disattiva il CR accanto al LF in trasmissione goto nextChar Utile per il debug al terminale di Windows ife
131. egeniali it This program is free software you can redistribute it and or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 2 of the License or at your option any later version This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License for more details You should have received a copy of the GNU General Public License along with this program if not write to the Free Software Foundation Inc 675 Mass Ave Cambridge MA 02139 USA Autor Paolo Sancono Website http www ideegeniali it Email Changes often see website Version sale Licenza GPL V2 0 Compiler MPASM 03 00 IDE MPLAB IDE for Windows 16 V 5 50 00 Programmer Fiser r Programmer 1 1 MCU PIC16F628 20 P Disclaimer L autore non responsabile di nessun danno diretto o indiretto provocato dall uso del firmware per il quale non si garantisce nessuna rispondenza agli scopi previsti Chi usa questo firmware lo fa a suo rischio e pericolo Licenza Puoi usare il firmware Puoi anche copiarlo modificarlo e ridistribuirlo gratuitamente a patto di conservare l informazione sull autore originale sul suo sito internet tutto questo paragrafo e distribuirlo con la stessa licenza Non puoi far soldi dalla vendita o uso del f
132. ekNewLine goto nextChar Parseld E lo stato dal codice piu complesso in quanto demandato a questo stato il riconoscimento degli identificatori e di tantissimi costrutti sintattici o almeno del loro inizio poi sono stati successivi che continuano l opera di riconoscimento di sintassi specifiche Nel funzionamento di base Parseld aggiunge 1 caratteri alfabetici ricevuti a Ident fino a riconoscere un identificatore valido che viene memorizzato in SSParsed Se il SubSystem riconosciuto uno di quelli che devono permanere come SubSystem di default si memorizza tale SubSystem anche in SSDefault E cos piuttosto semplice aggiungere il supporto per nuovi comandi semplicemente inserendo 1 caratteri costitutivi dell identificatore da riconoscere e memorizzando in SSParsed il comando riconosciuto senza cambiare minimamente la struttura della macchina a stati 128 Se si riceve new line possibile che si sia ricevuto un intero comando valido che va eseguito per esempio RST in questo stato sono presenti infatti le routine di esecuzione dei comandi con sintassi pi semplice Se si ricevono 1 due punti si cancella Ident per far posto al riconoscimento dell identificatore successivo Osservare il codice per la gestione dell identificatore EXCLUSIVE l unico caso di identificatore di terzo livello presente Se si riceve uno spazio ci si trova di fronte ad un comando con parametro per esempio SYSTEM C
133. ell hardware il sotto sistema di gestione degli errori e della comunicazione seriale per finire con la descrizione del ciclo principale del programma e del parser lo strumento software in grado di riconoscere 1 costrutti del protocollo SCPI di segnalare errori di sintassi e di eseguire 1 comandi validi riconosciuti Nel capitolo 5 vengono mostrati esempi d uso della macchina con la scrittura diretta dei comandi tramite il Terminale di Windows con uno strumento di calcolo scientifico in grado di acquisire dati da strumentazione automatica come il Matlab e con un ambiente di sviluppo grafico specifico per l analisi dei dati e l utilizzo in remoto di strumentazione dotato di GUI accattivanti come il Labview Di ciascun esempio vengono forniti tutti 1 dettagli e vengono dati suggerimenti per chi intenda utilizzare la macchina con altri linguaggi di programmazione Completano il tema d anno il capitolo 6 Conclusioni dove si inserisce il progetto in un contesto di pi ampio respiro e si ipotizzano prospettive future di sviluppo fino alla realizzazione di un intero laboratorio utilizzabile in remoto tramite Web le 4 Appendici con annotazioni pratiche importanti per l utilizzo del circuito 1 listati integrali del firmware e degli script Matlab il testo delle licenze GNU FDL e GNU GPL con le quali sono stati distribuiti l intero lavoro e i codici sorgente dei programmi realizzati e infine le fonti delle figure l elenco
134. ena di shift register 09 Interrupted chain La catena degli shift register fisicamente interrotta o non terminata bene col ponticello di feedback o qualcosa nell hardware non funziona bene 97 15 Too many modules Sono stati collegati 5 o pi moduli in cascata oppure qualcosa nell hardware non funziona bene Si ricorda che il controller accetta al massimo 4 moduli di relais che vanno collegati in cascata sull ultimo occorre inserire il terminatore che collega il dataout dell ultimo shift register al piedino feedback del microcontrollore La catena viene controllata esclusivamente all accensione dopo un RST o dopo un autotest TST Questo errore pu essere visualizzato solo in uno di questi 3 casi Se si aggiungono o rimuovono moduli a circuito acceso 1 risultati sono imprevedibili 1 relais possono anche accendersi e spegnersi apparentemente a caso poich il controller crede che sia collegato un certo numero di moduli mentre in realt ne collegato un numero diverso e pu aggiornare gli shift register in maniera errata E in generale fortemente sconsigliato collegare moduli a caldo Si suggerisce di procedere sempre in questo modo spegnere il circuito collegare 1 moduli inserire 11 terminatore sull ultimo alimentare 1l circuito Errori nella richiesta di salvataggio recupero stato di memoria 10 Empty state La posizione di memoria vuota e non pu essere richiamata con un RCL 11 Different modules
135. entare scrivendo il codice nel posto lasciato libero place holder nel codice SI Un vincolo di sintassi e la necessita di segnalare errori ha indicato che era necessario poter ritardare l esecuzione del comando fino al raggiungimento della fine della riga corrente ed era quindi necessaria una struttura di memoria ausiliaria che memorizzasse la lista di canali da aggiornare anzich aggiornare ogni relais man mano che si riconosce un numero di canale valido La lunghezza della lista pu essere anche molto lunga e non c nel PIC la memoria ram a disposizione per memorizzare un intera riga cercare errori di sintassi e processarla nuovamente eseguendola man mano se non sono stati trovati errori E stato quindi necessario cercare soluzioni alternative come la lista di canali memorizzata internamente in maniera molto compatta Questo un esempio di come una specifica la sintassi delle liste di canali pu interessare profondamente differenti aspetti anche importanti del problema che non si ritenevano inizialmente collegati tra loro la gestione del flusso e l assenza di un buffer di ricezione in tali casi una benedizione aver fatto la scelta di dettagliare il pi possibile contemporaneamente le diverse questioni a caccia delle interrelazioni possibili Ecco alcune decisioni spicciole su cui c era massima libert di scelta ma che andavano comunque prese La porta RS232 verr utilizzata con nessun controllo di fl
136. ente per quanto riguarda ifeel Ident charl alabel l occupazione in memoria Se la memoria a disposizione finisce ifeel Ident 1 char2 alabel occorre riscrivere questi controlli utilizzando look up tables ifeel Ident 2 char3 alabel ifeel Ident 3 char4 alabel endm i Reset Vector i s 1 PIC inizia l esecuzione delle istruzioni da qui ORG 0x0000 Reset Vector goto init Si saltano le definizioni di tavole che comodo tenere in pagina zero i oe Tavole Look up tables 1 tavMsgSizes bcf PCLATH 0 bcf PCLATH 1 addwf PCL F dt Dy 50 Uno zero in pi perch comodo nella routine che usa la tavola Un altro zero perch il codice 00 non viene utilizzato dt 59 Di 1353 s IA sl 27 Lilia dt 505 407 lt 0 6 Oy 3 05 20 Le posizioni 0x0A 0x0F non vengono utilizzate i messaggi sono memorizzati internamente con indici esadecimali ma poich non sono utilizzati tutti l approccio BCD All operatore esterno gli indici dei messaggi vengono descritti come decimali dt ep el 413 413 433 16 IF HIGH HIGH tavMsgSizes ERROR La tavola di salto tavMsgSizes ha superato i confini di pagina ENDIF IF HIGH B 00 ERROR La tavola di salto tavMsgSizes ha bisogno di ridefinire PCLATH ENDIF tavMsgText bcf PCLATH 0 bcf PCLATH 1 addwf PCL F dt Completed 01 dt Hallo 02 dt Unimplemented 703 dt Unknown Header 704 dt Invalid Char 705 dt Slot out of range 706 dt Chan out of range
137. enti del codice Ora diamo una rappresentazione grafica della macchina a stati Diagramma degli stati del parser lk Diagramma degli stati del parser Nel diagramma in arancione sono mostrati gli stati principali in bordo ingrossato lo stato di inizio nel quale si torna per ogni nuova riga in nero 1 percorsi di cambio di stato in verde 1 percorsi che portano al riconoscimento di un comando valido e alla sua esecuzione in rosso 1 percorsi che portano alla generazione di messaggi di errore in giallo gli accessi alle sottoroutine del Bios e da questi all hardware In azzurro la variabile di tipo stringa che conserva 1 successivi caratteri di un identificatore in riconoscimento al momento e in fucsia altre variabili di stato accessorie che conservano la storia del recente passato della macchina a Procedendo alla cieca nello scrivere la macchina a Stati ci si ritroverebbe invece con un centinaio di stati differenti con un percorso tra essi per ciascun comando da riconoscere e scarse o nessuna possibilit di mantenimento del codice e aggiunta di nuove funzionalit senza rivedere pesantemente la struttura degli stati 124 stati e memorizzano in una struttura di memoria compatta 1 costrutti della sintassi gi riconosciuti I compiti demandati a ciascuno stato sono Processare un singolo carattere del comando in arrivo che il ciclo principale del programma ha memorizzato nella variabile globale LastChar Rich
138. ere new line il cursore finisce alla riga inferiore ma senza tornare a capo poich in Windows l andata a capo rappresentata dalla coppia di caratteri CR LF Premendo INVIO viene inviata la coppia CR LF anzich solo LF e inizialmente il circuito accettava come terminatore di riga solo LF e avrebbe riportato CR come carattere non valido 2 matrix HyperTerminal File Modifica visualizza Chiama Trasferimento ROUTE CLOSE 111 112 113 114 121 122 123 124 141 142 143 144 131 132 133 134 noe PaoloSancono RelaisMatrix 1 0 1 0 1 Y aaa 61 Completed Connesso a 0 01 43 Riley aut 57600 8 N 1 Una sessione di lavoro con Relais Matrix al terminale di Windows Per ovviare a questi inconvenienti si aggiunta al ciclo principale del firmware la possibilit di scartare 1 CR ricevuti in modo da accettare come terminatore di riga anche la coppia CR LF e la gestione di due combinazioni di tasti fuori standard CTRL E Attiva Disattiva l echo dei caratteri ricevuti 143 CTRL F Attiva Disattiva l emissione di CR LF anzich LF da solo Queste due combinazioni di tasti sono state introdotte per facilitare il debug del firmware lavorando al terminale di Windows per questo non se ne curata l implementazione elegante per esempio con altri comandi riservati a favore di una implementazione fault proof ovvero certamente funzionante poich lo scopo principale era favorire il debug non es
139. es must be distinct from any other section titles You may add a section Entitled Endorsements provided it contains nothing but endorsements of your Modified Version by various parties for example statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard You may add a passage of up to five words as a Front Cover Text and a passage of up to 25 words as a Back Cover Text to the end of the list of Cover Texts in the Modified Version Only one passage of Front Cover Text and one of Back Cover Text may be added by or through arrangements made by any one entity If the Document already includes a cover text for the same cover previously added by you or by arrangement made by the same entity you are acting on behalf of you may not add another but you may replace the old one on explicit permission from the previous publisher that added the old one The author s and publisher s of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version 5 COMBINING DOCUMENTS You may combine the Document with other documents released under this License under the terms defined in section 4 above for modified versions provided that you include in the combination all of the Invariant Sections of all of the original documents unmodified and list them all as Invariant Sections of your combined work in
140. esempi di comandi disponibili L utilizzo del VI facilitato dalla presenza di una drop down box con esempi di comandi validi Un effetto collaterale molto gradito di questa drop down box il completamento automatico del comando in immissione Per una prova interattiva provare ad eseguire in sequenza ROUTE CLOSE 111 112 113 114 Verranno chiusi 1 relais della prima riga sul primo modulo ROUTE OPEN 112 113 Verranno aperti il secondo e terzo relais della prima riga e resteranno chiusi il primo e l ultimo ROUTE CLOSE EXCLUSIVE 111 122 133 144 Verranno chiusi 1 relais della diagonale principale aprendo tutti gli altri SYSTEM CPON ALL Tutto si riportera alle condizioni iniziali vale a dire tutti 1 relais aperti MatrixDemo de MatrixInteractive VI comodo e semplice da usare ma richiede ancora l immissione di comandi da tastiera Si pu rendere l interazione con la macchina ancora pi semplice con un VI come MatrixDemo VI 152 MatrixDemo vi File Edit Operate Tools Browse Window Help Front Panel di MatrixDemo VI Il pannello frontale realmente intuitivo e facile da usare presenta 16 interruttori virtuali azionando 1 quali si modifica lo stato dei relativi relais sul circuito Il VI mostra pure per scopi didattici 1 comandi generati e le risposte fornite dalla macchina Il programma realizzato senza troppi sforzi in LabView d realmente una impressione di
141. esto possibile nel proprio lavoro Nel file di testo nomenclatura unica si evitato di cadere in queste trappole della lingua naturale cercando al contrario di essere sintetici e chiari a scapito dell eleganza formale I termini chiave sono riportati in corsivo grassetto nel paragrafo in cui vengono definiti Le definizioni sono date utilizzando il termine nel contesto poich la maniera pi rapida e chiara per definire termini ambigui senza impelagarsi in definizioni che utilizzino altri termini altrettanto ambigui Preferisco questa soluzione al glossario dei termini classico con un termine sotto l altro con la definizione accanto che obbliga a scorrere avanti e indietro nel dizionario per cercare di orientarsi tra 1 continui richiami Appunti per la relazione Durante il procedere del lavoro si notavano aspetti particolari e soluzioni pi o meno brillanti dei piccoli problemi incontrati che era un peccato non mettere nella relazione finale Era stata richiesta inoltre dal professore una documentazione dettagliata sull intero progetto ed facile che risolto un problema ci si dimentichi della strada percorsa attraverso soluzioni parziali poi scartate per arrivare alla soluzione finale ricordando alla fine non gi l intero percorso ma solo 1 punti di partenza e di arrivo vale a dire il problema iniziale e la soluzione finale Ho allora appuntato in un file di testo alla rinfusa 1 concetti da inserire nella relazione
142. ettrolitico di livellamento che avrebbero portato la tensione di 9V alternata a circa 11 5V continua sia pur dotata di un ripple considerevole Essendo il budget a disposizione ristretto si stati costretti ad utilizzare un trasformatore di recupero montato nel suo contenitore con spina che forniva 12V alternata 1 58A 47 AC AC Adapter di recupero Al trasformatore stato cambiato il connettore originale utilizzandone un altro di pi ampia diffusione idoneo ad essere innestato in quello montato poi sulla basetta Era necessario abbassare la tensione raddrizzata e livellata prelevata dal trasformatore abbandonata l idea di poter dimensionare correttamente tutto lo stadio di alimentazione in base alle condizioni di utilizzo si deciso di utilizzare un regolatore integrato a 3 piedini il 7812 cos da consentire di alimentare il circuito con qualsiasi tensione continua da 15V a 18V o alternata da 10V a 15V Se vero che 1 relais assorbono 100mA ciascuno e 1 led accanto ai relais 15mA ciascuno 16 relais accesi con 1 relativi led assorbono 1 8A Il nostro trasformatore da 1 58A quindi appena insufficiente Infatti accendendo 15 o 16 relais a volte la tensione di alimentazione cade cos tanto da far spegnere e riaccendere la parte logica del circuito Basta utilizzare un alimentatore adeguato al carico per non osservare pi 11 malfunzionamento C da dire che la condizione d uso con tutti 1 relais accesi non ha molto
143. euro e uno stadio di alimentazione correttamente dimensionato con trasformatore raddrizzatore condensatori elettrolitici di livellamento cordone di alimentazione isolamento di sicurezza da realizzare su una basetta pi grande e con procedimenti di fotoincisione pi costosi anzich il trasformatore di recupero gi disponibile in laboratorio L attenzione al contenimento dei costi stata fondamentale rendendo il progetto realizzabile poich il budget a disposizione non raggiungeva 1 90 euro 75 Capitolo 3 Studio del protocollo e progettazione logica Il circuito stato realizzato ancora prima di una analisi dettagliata del protocollo di comunicazione Questo stato possibile perch erano gi chiari tutti gli aspetti dell hardware della macchina Era necessario per definire per bene il protocollo di comunicazione prima di stendere il firmware per non rischiare di dover fare il lavoro due volte Pi precisi si fosse stati nella descrizione dei comandi da riconoscere e nelle risposte da fornire all utente pi chiare si fossero avute le idee sulle possibilit di implementare in un certo modo o in un altro delle richieste pi facile sarebbe stato dopo stendere il firmware Durante la fase di progettazione oltre alla mera stesura di elenchi di funzionalit da implementare stato necessario prendere delle decisioni riguardo a cosa implementare e cosa no quanto rimanere fedeli allo standard dello strumento Agilent p
144. ew free programs and that you know you can do these things To protect your rights we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the software or if you modify it For example if you distribute copies of such a program whether gratis or for a fee you must give the recipients all the rights that you have You must make sure that they too receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two steps 1 copyright the software and 2 offer you this license which gives you legal permission to copy distribute and or modify the software Also for each author s protection and ours we want to make certain that everyone understands that there is no warranty for this free software If the software is modified by someone else and passed on we want its recipients to know that what they have is not the original so that any problems introduced by others will not reflect on the original authors reputations Finally any free program is threatened constantly by software patents We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses in effect making the program proprietary To prevent this we have made it clear that any patent must be licensed for everyone s fre
145. ewLine 133 ifend 1070 goto nextChar RiempiLista In questo stato si processano 1 caratteri numerici costituenti 1 numeri di canale delle liste e 1l carattere virgola che separa un numero di canale dal successivo Viene inoltre riconosciuto il carattere parentesi chiusa che termina la lista di canali In questo caso il controllo passa al terzo e ultimo stato della catena di tre stati che riconosce le liste di canali StNewLineAfterParClose Numerosi controlli per errori di sintassi e anche per canali o slot fuori range massimo o non fisicamente presenti con il numero di moduli collegati vengono trattati in questo stato Per ciascuno di essi si procede al solito modo si setta l errore tramite la chiamata al sottosistema di gestione degli errori si impone come stato successivo StSeekNewLine si passa il controllo al ciclo principale del programma con goto nextChar Le liste di canali dichiarate per intervalli con il simbolo di due punti non vengono implementate ma comunque riconosciute in modo da lasciare un place holder nel codice per sviluppi futuri volendo scrivere il codice per implementare le liste di canali basta arricchire 1l place holder gi sistemato nel posto giusto nel codice stRiempiLista In questo stato si riempie la variabile Lista man mano che vengono ricevuti numeri di Slot e Canale validi Numerosi controlli per errori vengono rilevati che faranno abortire l intero comando Per quest
146. extChar stNewLineAfterParClose In questo stato ci si aspetta un newline dopo un ROUTE CLOSE o ROUTE OPEN st i i i per ifeel ifend movl call letl goto W NewLineAfterOm Ricevuto il newline ifeel seguir di comando carattere che non sia newline se finalmente il comando utilizzando SSParsed il CLOSE di tipo EXCLUSIVE e la un carattere non valido LastChar 0x0A4 1045 lista dei canali da Chiudere Aprire Flag FlExclusive e Lista per sapere che tipo Se si riceve un altro e si genera l errore di sintassi ber Flag FlLogic FlLogic SSParsed SSOpen SSParsed SSClose ifeel SSParsed SSClose 1092 bsf Flag FlLogic ifend 1092 ifeel SSParsed SSOpen 1093 bsf Flag FlLogic ifend 1093 ifeel SSDefault SSRoute 1059 ifbs Flag FlLogic i059 forl Looper 8 1065 for Looper 0 to 7 letl FSR Lista l movf Looper W addwf FSR F let Temp INDF letl FSR Relais 1 movt Looper W addwf FSR F ifeel SSParsed SSClose 1094 ifbs Flag FlExclusive i081 Se Exclusive prima azzera tutti i Relais CLET INDF ifend 1081 movf Temp W Alza i bit mascherando i vecchi valori con OR iorwf INDF F Relais Looper Relais Looper OR Lista Looper ifend 1094 ifeel SSParsed SSOpen 1095 comf Temp W Abbassa i bit mascherando i vecchi valori con AND N
147. fica Trad letterale Per il puro divertimento nel farlo 146 Parentesi mistica Il nome dato allo script pizzica quello di una danza popolare del Salento la regione a Sud delle Puglie mia terra natale Lo script tenta di imitare il ritmo ossessivo di tale danza suonata tradizionalmente con tamburelli a cornice e aa ro sy as F gt ee er be dl p jaw pe ceo Peo k Lin par a far eee ee gt ae Nea Tamburelli a cornice tradizionalmente impiegati nel Salento per accompagnare la Pizzica una danza popolare arcaica di queste terre ancora in voga tra i giovani L orecchio attento di un suonatore di tamburello riconosce gli errori di jitter introdotti dal sistema operativo e dal Matlab come fossero errori di un suonatore alle prime armi che va continuamente fuori tempo Per un amante della storia dell informatica quale 10 sono sentire il Klic Klac dei relais azionati automaticamente da una macchina che memorizza non pi di 2k di parole di codice riporta alla memoria 11 Tech Model Railroad Club al palazzo 26 del Massachussetts Institute of Technologies nell inverno del 1958 1959 quando sotto l immenso plastico ferroviario un grosso ammasso di commutatori rotativi e relais della compagnia telefonica locale col suo Chunka chunka commutava automaticamente gli scambi portando 1 modellini di treni a Per ascoltare un suonatore di tamburello mentre esegue la
148. fidabili per le periferiche di output poich consentiranno di comunicare con il mondo esterno e di testare il resto del codice Inizializzazione Prima ancora di scrivere una riga di codice occorre configurare il microcontrollore per l utilizzo della sorgente di clock corretta e per l attivazione o disattivazione di alcune funzionalit avanzate programmando correttamente la configuration word se non si configura la configuration word correttamente per l utilizzo di un cristallo come sorgente di clock nel nostro circuito non partiranno neppure le oscillazioni del quarzo poich il relativo circuito di eccitazione sar spento In queste condizioni impossibile eseguire istruzioni LEST p 16 628 INCLUDE lt p16 628 inc gt INCLUDE lt psifthen inc gt _ CONFIG _BODEN ON amp _CP_OFF amp DATA CP_OFF amp _PWRTE OFF amp _LVP_OFF amp _MCLRE OFF amp FS OSC All accensione tutti 1 piedini del PIC sono in stato di alta impedenza Occorre configurare correttamente 1 piedini da utilizzare come uscite e gli altri gadget hardware presenti all interno del PIC selezionando le funzioni desiderate per 1 piedini che hanno un multiplexer tra funzioni differenti Questo viene svolto dalla routine init nel nostro progetto la quale a sua volta fa uso di costanti dichiarate all inizio del programma che riflettono come stato cablato il circuito e cosa collegato a ciascun piedino in
149. foto sono state scattate dall autore con una fotocamera digitale Kodak CX6230 197 Tutti gli altri diagrammi sono stati realizzati dall autore tramite print screen o funzioni di esportazione immagini mentre sul PC giravano 1 programmi Figo Lorenzo Lutti s FidoCad 0 96b Piccoli schemi di circuiti elettrici schizzati in nero su bianco Cercare su news it hobby elettronica una URL aggiornata per il programma Cadsoft EagleCad 4 14 Schema elettrico e PCB dei circuiti realizzati http www cadsoft de SmartDraw Professional 6 03 Diagramma con il sistema Relais Matrix completo Diagramma degli stati del Parser http www smartdraw com Il computer utilizzato per la realizzazione del sistema e la relativa documentazione un Notebook ECS con processore Transmeta Efficeon Altri programmi utilizzati MathWorks Matlab 6 2 http www mathworks com National Instruments LabView 7 0 Student http www ni com O AD O AD Paolo Sancono s Drill aid 1 5 http www ideegenial1 it Microsoft Blocco Note 5 1 http www microsoft com 198 MicroEngineering Labs EpicWin 2 45 http www melabs com Microchip Mpasm assembler 3 00 http www microchip com Microchip Mplab IDE 5 50 00 http www microchip com HilGraeve Microsoft Terminale di Windows 5 1 http www microsoft com 199 Bibliografia e Webliografia Informatica Storia dell informatica Informazi
150. g FlLogic FlLogic SSParsed SSOpen SSParsed SSClose ifeel SSParsed SSClose 1092 bsf Flag FlLogic ifend i092 ifeel SSParsed SSOpen i093 bsf Flag FlLogic ifend 1093 ifeel SSDefault SSRoute 1i059 ifbs Flag FlLogic i059 forl Looper 8 1065 for Looper 0 to 7 letl FSR Lista 1 movf Looper W addwf FSR F let Temp INDF letl FSR Relais 1l movt Looper W addwf FSR F ifeel SSParsed SSClose 1094 ifbs Flag FlExclusive i081 Se Exclusive prima azzera tutti i Relais dit INDE ifend i1081 movf Temp W Alza i bit mascherando i vecchi valori con OR iorwf INDF F Relais Looper Relais Looper OR Lista Looper ifend 1094 ifeel SSParsed SSOpen 1095 comf Temp W Abbassa i bit mascherando i vecchi valori con AND NOT andwf INDF F Relais Looper Relais Looper AND NOT Lista Looper ifend i1095 136 next Looper i065 call aggiornaModuli movlw 0x01 01 Completed call errore letl State StStartOfLine goto nextChar ifend 1059 ifend 1045 movlw 0x05 05 invalid Char call errore letl State StSeekNewLine goto nextChar Anche questo codice un buon esempio di programmazione in assembler propriamente detta NewLineA fterQM Similmente alla parentesi chiusa anche dopo il Punto interrogativo di termine query bisogna aspettare new line per eseguire 11 comando e segnalare l errore di carattere non valido se si riceve altro Anche l errore di he
151. general network using public has access to download using public standard network protocols a complete Transparent copy of the Document free of added material If you use the latter option you must take reasonably prudent steps when you begin distribution of Opaque copies in quantity to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy directly or through your agents or retailers of that edition to the public It is requested but not required that you contact the authors of the Document well before redistributing any large number of copies to give them a chance to provide you with an updated version of the Document 4 MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above provided that you release the Modified Version under precisely this License with the Modified Version filling the role of the Document thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it In addition you must do these things in the Modified Version A Use in the Title Page and on the covers if any a title distinct from that of the Document and from those of previous versions which should if there were any be listed in the History section of the Document You may use the same title as a previous version if the original publisher of
152. giornaModuli SYSTEM CPON richiede di aggiornare gli shift register i nuovi valori sono gi stati memorizzati in Relais ifend 1053 lfeel SSParsed SSUndefined 1088 Se SSParsed ancora SSUndefined messaggio di errore movlw 0x04 04 Undefined Header call errore letl State StStartOfLine goto nextChar ifend 1088 movlw 0x01 01 Completed Parte comune all esecuzione dei comandi call errore si visualizza 01 Completed letl State StStartOfLine Stato successivo StStartOfLine goto nextChar 1016 LasiChar 1 008 Dopo uno spazio si attende l inizio di un nuovo identificatore SLEE IdentLength goto nextChar 1008 LastChar 1i050 Parentesi aperta carattere valido se in precedenza si avuto ber Flag FlLogic ROUTE CLOSE o ROUTE OPEN e si aspetta la ifeel SSDefault SSRoute i051 ifeel SSParsed SSClose 1052 bsf Flag FlLogic ifend i1052 ifeel SSParsed SSOpen 1056 bsf Flag FlLogic ifend i1056 ifend i1051 Tar Oe Flag FlLogic 1054 Altrimenti messaggio di errore movlw 0x05 05 Invalid Char call errore letl State StSeekNewLine goto nextChar ifelse 1054 1055 letl State StChiocciolaOnly goto nextChar ifend 1055 1050 lhastChar 2 1009 I due punti separano un header dal successivo clrf IdentLength occorre pulire Ident e SSParsed per il nuovo header ifnel SSParsed SSClose nextChar Se SSParsed SSClose non cancella SSParsed poich si pu attendere ancora EXCLUSIVE L
153. gli ingressi modalit risparmio energetico con arresto clock 8 sorgenti di interrupt USART programmabile 0 Cut amp wire indica le operazioni di modifica della topologia su un circuito gia riportato in basetta per piccoli errori di progetto o modifiche di cui ci rende conto solo in fase di prototipizzazione Cut indica il taglio di una pista tracciata non pi necessaria wire l inserimento di un filo a ponticello per realizzare un nuovo collegamento non previsto inizialmente l Forse si pi familiari con il termine UART Universal Asyncronous Receiver Transmitter La S sta per Syncronous poich la USART del PIC in grado di realizzare trasmissioni sia 20 FIGURE 2 1 BLOCK DIAGRAM STATUS reg ay Note 1 Higheroarder bits are from he STATUS mater Architettura interna del PIC16F628 La potenza di elaborazione e la capacit di memoria del microcontrollore scelto sono le minime possibili per la complessit del problema ad esso demandato questa scelta stata fatta per raccogliere la sfida di produrre codice efficiente Architettura Harvard La CPU del PIC legge le istruzioni da eseguire da una memoria FLASH alla quale collegata mediante un bus indirizzi e un bus dati mentre l accesso alla RAM che nel gergo della Microchip viene detta file registers avviene su una coppia bus dati bus indirizzi separata Questa architettura viene detta di Harvard a differenza della tradizionale architettura di Von Neumann
154. i alimentazione prima di cercare problemi altrove La tensione duale 10V 10V viene invece generata direttamente dallo stesso chip Maxim MAX232 che si occupa di adattare 1 livelli TTL 0 5V in livelli RS232 10V 10V e non stato inserito il led di segnalazione per non caricare gli stadi duplicatore ed invertitore dell integrato Il circuito doveva per forza prevedere un microcontrollore e ci si orientati verso 1 PIC della Microchip poich sono disponibili numerose risorse gratuite e una fervente comunit di appassionati su Internet a cui rivolgersi in caso di difficolt Inoltre la serie di prodotti a catalogo nutrita la maggioranza di questi sono pin 2 pin compatibili uno con l altro per consentire di migrare in caso di necessit verso uno pi potente senza dover ridisegnare il circuito quasi tutti 1 modelli sono disponibili in package through hole PDIP alla portata del saldatore manuale e la rete di distribuzione ben sviluppata consentendo l acquisto anche in un singolo esemplare a prezzi contenuti dalla quasi totalit dei rivenditori di componenti elettronici italiani Esistono altre famiglie di microcontrollori pi potenti e versatili o pi facili da programmare ma pi difficile trovare documentazione e disponibilit altrettanto esauriente e capillare 15 Descrizione piu dettagliata Dalla descrizione sommaria si dovuti passare ad una descrizione pi dettagliata che consentisse di stilare un preventi
155. i caratteri alfabetici senza generare errori per 1 motivi discussi altrove in questa relazione Le liste di canali vengono indicate con ch_list simbolo che va sostituito con la lista attuale di canali quando si invia il comando allo strumento I canali sono indicati con numeri a tre cifre la prima indica lo slot al quale collegato il modulo di espansione Numeri di slot validi sono 100 200 300 400 con gli slot numerati in base all ordine nel quale 1 moduli sono presenti nella catena di collegamento in cascata Le altre due cifre indicano la riga e la colonna che possono valere da 1 a 4 Una lista di canali inizia con 1 due caratteri parentesi tonda aperta e chiocciola prosegue con numeri di canale a tre cifre separati dal carattere una virgola e termina con una parentesi chiusa E possibile indicare una lista vuota con la sequenza di tre caratteri 66 99 Le liste dichiarate per intervallo tramite l uso del carattere due punti non sono supportate dalla revisione attuale del firmware ma il carattere di due punti viene correttamente processato dal parser e provoca l emissione dell errore 03 Unimplemented anzich il generico 05 Invalid Char Questo perch nel codice del firmware c un place holder per supportare in revisioni future le liste di canali dichiarate per intervalli che non si avuto il tempo di implementare ROUTe CLOSe ch_list Chiude 1 relais specificati Viene effet
156. i in RAM da utilizzare per il passaggio dei parametri gt Scherzosamente detta plug and pray letteralmente collega e prega poich quando le cose non vanno bene senza questa tecnologia era possibile tentare di riconfigurare 1 jumper hardware con questa tecnologia in cui 1 jumper sono stati eliminati non resta altro che pregare 101 Con l esperienza si capisce quando opportuno usare una macro e quando un sottoprogramma Il controllo di flusso Una grave pecca dell assembler rispetto a linguaggi di alto livello la mancanza di strutture avanzate per il controllo del flusso del programma Vale a dire l assenza delle strutture if then else for repeat while presenti nella quasi totalit dei linguaggi di programmazione In assembler strutture di questo tipo si implementano con una schiera di salti incondizionati e condizionati difficile da seguire per lo sviluppatore e possibile fonte di errore Per ovviare a questo inconveniente ho scritto una serie di macro raccolte nel file psifthen inc da includere nel proprio file asm mediante la direttiva al compilatore INCLUDE lt psifthen inc gt Le macro disponibili consentono di verificare diverse condizioni orientate a byte oppure bit e vengono espanse in un codice molto compatto 2 o 3 opcode per istruzione Uno degli inconvenienti di queste macro che costringono il programmatore a dichiarare un identificatore di etichetta utilizzata per 1
157. i moduli trovati del tipo X module s found Se questo era piacevole da osservare sul Terminale di Windows era fastidioso per l utente che aspirava ad utilizzare la macchina in un contesto automatico poich lo costringeva a leggere una ulteriore stringa dopo il messaggio Hallo per di pi di sintassi differente dalle altre Si preferito invece per facilitare 1l lavoro all utente programmatore che la macchina rispondesse sempre con un unica stringa ad ogni comando ricevuto L informazione sul numero di moduli presenti era comunque utile e si deciso di estendere il set di comandi con un comando proprietario SYSTEem MODule che restituisce appunto il numero di moduli connessi Il comando stato inserito su un SubSystem gi presente Il beep del messaggio di errore durava inizialmente 300 ms per essere udibile con facilit e il messaggio di errore veniva inviato DOPO il beep Dopo l uso della macchina in LabView in cui era pi facile utilizzare il tempo di attesa massimo ogni volta anzich il minimo con come procedere piuttosto che cercare di rimettere a posto un codice che stato modificato in pi punti fino a perdere l orientamento 141 qualche complicazione al codice illustrata nell appendice Manuale dell utente si deciso di accorciare il beep a 100ms soltanto e 11 messaggio di errore lo si invia PRIMA del beep cosi da consentire al PC di fare altro anzich restare in attesa mentre 11 MCU si d
158. iamare eventualmente il sottosistema di generazione e accodamento messaggio di errore l errore verr memorizzato nella coda e comunicato dal ciclo principale al termine della riga corrente Eseguire eventualmente un comando valido ricevuto dopo la ricezione di new line che termina correttamente 11 comando Settare la variabile State sullo stato seguente opportuno eventualmente anche s stesso se il successivo carattere atteso va processato dallo stesso stato Restituire il controllo al ciclo del programma principale con l istruzione goto nextChar I valori attuali assunti delle variabili accessorie rappresentate in fucsia e azzurro sul diagramma sono in grado di modificare il comportamento della macchina che esibir un comportamento differente in base a Ultimo carattere letto Stato principale corrente Quanto stato memorizzato nel recente passato nelle variabili di stato accessorie Quindi il numero degli stati ammonta a 7 soltanto ma ciascuno di questi esibisce un comportamento complesso differente in base alla storia del recente passato memorizzata nelle variabili accessorie ed quindi come se il parser fosse costituito da molti pi stati differenti L esecuzione del comando o la segnalazione di un messaggio di errore viene ritardata fino al termine della riga senza che questo comporti la necessit di bufferizzare tutta la riga di testo come sequenza di caratteri di quanto gi ricevuto e riconosciu
159. ices Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system it is up to the author donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License 195 8 If the distribution and or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries so that distribution is permitted only in or among countries not thus excluded In such case this License incorporates the limitation as if written in the body of this License 9 The Free Software Foundation may publish revised and or new versions of the General Public License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns Each version is given a distinguishing version number If the Program specifies a version number of this License which applies to it and any later version you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation TE the Prog
160. icie per incidere la faccia di non interesse e appena sotto la superficie per incidere la faccia di interesse cos possibile controllare in trasparenza il procedere dell operazione e l eventuale presenza di dannose bolle d aria sotto la superficie evitando di dover continuamente togliere e rimettere la basetta in posizione per un raffronto visivo diretto Acqua per arrestare subito la reazione meglio vaschetta che lavandino Trielina per rimuovere il toner e l acrilico Finita l incisione si getta la basetta dopo averla fatta sgocciolare in una vaschetta contenente acqua per arrestare immediatamente la reazione Si finisce quindi di sciacquare la basetta in un lavandino quando la concentrazione di cloruro diventata davvero minima E necessario infine rimuovere toner e acrilico Si pu usare la trielina in grado di rimuovere entrambi contemporaneamente o altri solventi adatti Il rame appare ben lucido e pulito dispiace sapere che si ossidera molto rapidamente Conviene dunque procedere il pi presto possibile con le operazioni seguenti in modo da saldare su rame non ossidato cos da usare meno flussante e ottenere saldature migliori gli ossidi sono isolanti elettrici 65 Foratura e taglio a misura Ogni piazzola va forata con un trapano a colonna una macchina a controllo numerico o in mancanza di queste con un po di attenzione e un comune trapanino manuale Lo script drill aid facilita questo
161. iconosciuto Se si riconosce un identificatore non appartenente al SubSystem corrente si ignora semplicemente il riconoscimento l errore verr segnalato alla fine della riga corrente poich SSParsed non aggiornata rimasta al suo valore iniziale SSUndefined movf LastChar W call IdentAddChar No No No No No ifident4 TR TO U ce TO letl SSParsed SSRoute letl SSDefault SSRoute ifend i028 TELGENCA MCa RO a 70 ifeel SSDefault SSRoute i029 letl SSParsed SSClose ifend i029 de DOSE TOY TP TTET TN 30 ifeel SSDefault SSRoute i030 letl SSParsed SSOpen ifend 1030 129 ifident4 BERN DX BO BIO 1078 ifeel SSDefault SSRoute i078 ifeel SSParsed SSClose 1079 bsf Flag FlExclusive goto nextChar ifend 1079 ifeel SSParsed SSOpen i080 bsf Flag FlExclusive goto nextChar ifend 1080 ifend 1078 i1fident4 OR a on ye ETI L033 letl SSParsed SSSystem letl SSDefault SSSystem goto nextChar ifend 1033 tfiden ntA M TOT TD MIRTO ifeel SSDefault SSSystem i076 letl SSParsed SSModule goto nextChar ifend 1076 ifident4 Ca PNE TOR TNE 36 ifeel SSDefault SSSystem 1036 letl SSParsed SsCpon goto nextChar ifend 1036 CEE TVT EN 0035 ifeel SSDefault SSSystem i035 letl SSParsed SSVer goto nextChar ifenqd i1035 eros So TIM JAD TNT LOLS ifeel SSDefault SSCommon i013 letl SSParsed SSIdn goto nextChar ifend i013 ifibdent3s TTT TST UT POLI ifeel SSDefault SSCommon 1015 letl
162. ies TE you distribute a large enough number of copies you must also follow the conditions in section 3 You may also lend copies under the same conditions stated above and you may publicly display copies 3 COPYING IN QUANTITY If you publish printed copies or copies in media that commonly have printed covers of the Document numbering more than 100 and the Document s license notice requires Cover Texts you must enclose the copies in covers that carry clearly and legibly all these Cover Texts Front Cover Texts on the front cover and Back Cover Texts on the back cover Both covers must also clearly and legibly identify you as the publisher of these copies The front cover must present the full title with all words of the title equally prominent and visible You may add other material on the covers in addition Copying with changes limited to the covers as long as they preserve the title of the Document and satisfy these conditions can be treated as verbatim copying in other respects If the required texts for either cover are too voluminous to fit legibly you should put the first ones listed as many as fit reasonably on the actual cover and continue the rest onto adjacent pages If you publish or distribute Opaque copies of the Document numbering more than 100 you must either include a machine readable Transparent copy along with each Opaque copy or state in or with each Opaque copy a computer network location from which the
163. ile utilizzabile finch il circuito resta alimentato 91 Al momento in cui si scrive 1 comandi di questo subsystem non sono stati ancora implementati per mancanza di tempo nel firmware ma ne stato specificato chiaramente il comportamento in modo da renderne facile l implementazione Saranno implementati in una revisione successiva del firmware State Storage Commands The instrument has six storage locations in non volatile memory to store Instrument states The locations are numbered 0 through 5 The instrument uses location 0 to automatically hold the state of the Instrument at power down You can also assign a name to each of the locations il through 5 for use from the front panel SAV 0 1 2 3 4 5 Store isave the current Instrument state in the specifled storage locatton Ant state previously stored In the same location Is overwritten ino error is generated You can store the instrument state in any of the six locations However vou can only recall a state from a location that contains a previously stored state You can use location 0 to store a sixth instrument state However keep in mind that location 0 is automatically overwritten when power is cycled The instrument stores the state of all modules including all channel configurations scanning setups alarm values and scaling values A Factory Reset RST command does not affect the conflgurations stored In memory Once a state Is stored
164. ili Nel file psifthen inc trovano posto anche altre macro utili dnop Attende il tempo di due nop ma occupa una sola word in memoria qnop Attende il tempo di quattro nop ma occupa una sola word in memoria let Assegna il contenuto di un file register ad un altro letl Assegna un valore immediato ad un file register for Realizza cicli for a decrescere a partire dal valore di un file register forl Variante per iniziare il conteggio da un valore immediato forw Variante per iniziare 11 conteggio dal valore attuale dell accumulatore next Conclude il ciclo for repeat Assieme alle macro if realizza strutture repeat until until Chiude la struttura repeat until wile Realizza la struttura while do While parola riservata di MPASM wilend Chiude la struttura while do negbit Inverte lo stato di un bit indicato esplicitamente con un valore immediato eeread Legge un byte dalla EEPROM dati del PIC eewrt Scrive un byte dalla EEPROM dati del PIC eewait Attende che un ciclo di scrittura su EEPROM si concluda La differenza tra la struttura repeat until e while do come in Pascal che nel primo caso si itera almeno una volta anche in caso di condizione falsa fin dall inizio Le macro sono state citate tutte perch vengono utilizzate nel firmware e non conoscendole Impossibile seguire il codice Non possibile parlare in maniera pi approfondita dell assembler e di tali macro in questa relazione per ma
165. imetri senza paura di farli volare via I pad di forma allungata quelli dei circuiti integrati non sono stati allargati per evitare corto circuiti con le frequenti piste che passano tra un pin e l altro dei circuiti integrati Questi pad sono infatti pi che adeguati cos come sono Anche per 1 pad allungati stato per ristretto il foro centrale per facilitare la centratura Sono stati generati inoltre cerchietti per 1 fori di fissaggio in modo da riportare sul rame dove vanno effettuati Stampa di prova Prima di incidere una basetta una buona idea realizzare una stampa di prova su un comune foglio di carta in modo da verificare gli ingombri dei componenti si verifica che possano essere sistemati agilmente uno accanto all altro e il passo tra 1 piedini che deve essere esattamente uguale a quello dei componenti 4 GPL GNU General Public License E una licenza che consente l utilizzo gratuito del programma consente la ridistribuzione consente la realizzazione di lavori derivati imponendo le condizioni che la ridistribuzione sia libera e gratuita e che 1 lavori derivati conservino l informazione sull autore originale e vengano distribuiti con la stessa licenza 58 Stampa di prova e verifica dimensioni corrette dei footprint Successivamente si procede al taglio delle basette nelle dimensioni desiderate Ad una fiera di elettronica sono state comprate a buon prezzo delle strisce di basette doppia faccia sf
166. inee di scambio dati I PIC funzionano normalmente in logica TTL 0 5V Su un piedino consentita la tensione di 13 8V che li porta in modalit programmazione inibendo il funzionamento abituale 23 disponibile l header per ICSP che oltre ai 5 canonici segnali presenta altri 5 pin con il segnale di massa Utilizzando un connettore per cavo piatto a 10 fili si ottiene che ogni segnale racchiuso tra due cavi posti a potenziale di massa da un lato e dall altro cos che 1 segnali non si disturbino tra loro per l effetto schermante ottenuto lo stesso accorgimento usato nel cavi IDE a 80 fili Per la descrizione dettagliata di questo circuito il cui progetto non mio rimando al sito dell autore peraltro ben fatto per dedicare pi spazio ad altro in questa relazione Il programmatore stato costruito e testato con file HEX di esempio disponibili in rete e con il sofware EpicWin della microEngineering Labs La versione beta del software scaricabile dal sito http www melabs com e utilizzabile liberamente per uso non commerciale La licenza ha comunque un costo contenuto e viene spesso fornita in bundle con programmatori commerciali In effetti 10 posseggo la licenza del programma proprio perch avevo acquistato il programmatore commerciale della Futura Elettronica http www futuranet it Tale programmatore oltre a non possedere nessuna delle caratteristiche elencate sopra aveva un errore sul circuito che n
167. iniziare lo sbroglio Alcuni componenti come le resistenze possono essere montati egualmente bene in verticale con 1 due fori molto vicini fra loro per risparmiare spazio oppure in orizzontale con 1 due fori pi distanti per agevolare lo sbroglio facendo passare altre piste tra un foro e l altro Eagle consente di sostituire al volo il package di un componente con un altro in fase di sbroglio senza modificare minimamente lo schema elettrico E spesso necessario lasciare dello spazio attorno ai componenti da cui si dipartono pi piste per consentire a queste di distanziarsi tra loro e dirigersi verso 1 punti di destinazione Solo l esperienza insegna quanto spazio lasciare accanto ad ogni componente cercando equilibrio tra non sprecare spazio e consentire comunque uno sbroglio agevole Occorre inoltre prevedere lo spazio per 1 fori di fissaggio e per le teste dei distanziatori che verranno utilizzati per montare la basetta se 1 distanziatori sono metallici occorre lasciare dello spazio attorno ai fori libero da piste per evitare pericolosi corto circuiti realizzati se poi 1 distanziatori ciascuno in contatto con una pista diversa vengono poi fissati ad un unica carcassa metallica Utilizzando distanziatori plastici si evita questo problema Eagle dispone di un autorouter vale a dire un algoritmo che genera da solo le piste ma per lo pi adatto a basette doppia faccia in cui le piste possono passare da un lato all altro
168. inoranza di maggioranza potendo controntare tra loro valori immediati file register e l accumulatore nelle varie combinazioni possibili E disponibile anche il costrutto if then else ma occorre in tal caso indicare due etichette COS LELE Datal Data2 1f1 l1struzioni per condizione vera PES Lee us EA istruzioni per condizione falsa ifend PLZ Un costrutto del tipo AND tra due condizioni si realizza semplicemente inserendo due costrutti if uno sotto l altro ed possibile riutilizzare la stessa etichetta cos ifgtel data min mylf Tei data meXt1 my LE St ru von 7 lt 1LSEruz Lon ifend MYLE Dove il file register data viene confrontato con 1 due valori immediati min e max per verificare che sia compreso nell intervallo Le macro implementano gli if mediante il salto condizionato all etichetta rappresentata da ifend Il salto viene effettuato quando la condizione falsa se la condizione vera il salto non viene effettuato e le istruzioni comprese tra l 1f e ifend vengono eseguite E quindi possibile scrivere un salto condizionato utilizzando le macro if con la condizione negata rispetto a quella originaria Un codice di salto condizionato all uguaglianza anzich essere espresso in questo modo ifee pippo paperino 1 001 goto salta ifend 1 001 pu essere espresso in forma pi compatta in quest altro modo con la condizione opposta ifne pippo paperino salta Per le etichette si utili
169. input buffer overflow Communications output buffer overflow Not able to achieve requested resolution The instrument cannot achleve the requested measurement resolution You may have specified an Invalid resolution In the CONF igure or MEASure command Alcuni dei messaggi di errore restituiti dallo strumento Agilent 34970A Un certo numero di questi sono sostanzialmente identici a quelli restituiti da Relais Matrix Messaggi informativi 01 Completed Il comando stato riconosciuto ed eseguito con successo Alcuni comandi sono senza effetto per esempio CLS oppure senza effetto immediato ad esempio un comando che cambia 95 SubSystem di default soltanto come SYSTEM o ROUTE Anche in questi casi si otterr il messaggio 0 Completed come verifica che il comando stato correttamente riconosciuto 02 Hallo Messaggio stampato all accensione oppure a seguito del comando RST All accensione e in seguito ad un comando RST viene eseguita una routine di autotest analoga a quella eseguita in risposta alla query TST durante la quale vengono inviati dei pattern di bit agli shift register presenti sui moduli al fine di determinare quanti ne siano collegati o l eventuale interruzione della catena Il messaggio 02 Hallo viene inviato solamente se la routine di autotest ha successo altrimenti viene inviato uno dei due messaggi di errore 09 Interrupted chain oppure 5 Too many modules Se si riceve un messaggio 02 Hallo i
170. interruttore che collega l ingresso a massa Alcuni ingressi del PIC hanno per pull up interni inseribili da programma cos sufficiente collegare un interruttore al piedino di ingresso e a potenziale OV per poterne leggere lo stato come nel circuito di destra La soddisfazione ottenuta con 1 circuiti semplici sprona ad affrontare con pi serenit e con pi cognizione di causa progetti pi impegnativi Procedendo per gradi si accumulano soddisfazioni su soddisfazioni Affrontando direttamente progetti complessi invece s1 rischia di dover rifare 11 lavoro due volte e si accumulano fallimenti e delusioni Pilotare relais con un microcontrollore La corrente erogata da uno stadio di uscita di un PIC non in grado di eccitare la bobina di un relais circa 80 100 mA per 1 relais pi comuni Anche se esistono relais miniatura con correnti di 15mA comunque sconsigliabile collegarli direttamente alle uscite del PIC poich le extra tensioni di apertura possono superare diverse migliaia di Volt distruggendo gli stadi di uscita del chip 24 Una bobina in cui scorre corrente genera un campo magnetico Togliendo l alimentazione il campo magnetico induce una corrente che se non si chiude su nessun carico porta ad un incremento della differenza di potenziale ai capi della bobina 31 Alcuni dei fori della breadboard sciolti dalla fusione di un transistor che eccitava un relais senza protezioni E ne
171. ioni sul significato di ciascun bit settato nei registri di controllo Led Buzzer linea CTS della seriale Per l accensione e lo spegnimento del Led del Buzzer e della linea CTS della porta seriale sono state scritte alcune macro da una sola istruzione infatti sufficiente cambiare lo stato di un bit della porta corretta per utilizzare questo semplice hardware a patto che tutto sia stato configurato a dovere TrisPortA equ B 11110010 TrisPortB equ B 11000011 ShRegPort equ PORTA ClockBit equ 0 FeedbackBit equ di StoreBit equ 2 DataBit equ 3 CtsPort equ PORTB CtsBit equ 0 RtsPort equ PORTB RtsBit equ 3 BuzzPort equ PORTB BuzzBit equ 4 LedPort equ PORTB LedBit equ 5 Ledon macro bcf LedPort LedBit endm LedOff macro bsf LedPort LedBit endm LedToggle macro negbit LedPort LedBit endm BuzzOn macro bcf BuzzPort BuzzBit endm Buzzoff macro bsf BuzzPort BuzzBit endm RtsGo macro bsf RtsPort RtsBit endm RtsHalt macro ber RtsPort RtsBit endm 108 Sono state dichiarate costanti che rispecchiano 1 collegamenti hardware e sono stati scelti nomi evocativi per le macro in modo che il codice che le usa sia molto chiaro Volendo funzioni di segnalazione pi avanzate per esempio led lampeggiante oltre che fisso acceso e fisso spento conviene isolarne il codice in apposite routine dal nome appropriato e utilizzare 1 gadget hardware disponibili sul PIC ad esempio 1 contatori in grado di gener
172. irmware Vedere la General Public License per maggiori info ASSE Tipo Processore e Configuration word embedded in asm file LIST p 16 628 INCLUDE lt p16 628 inc gt INCLUDE lt psifthen inc gt Macro utili per cicli for while e strutture if then els CONFIG _BODEN_ON amp _CP_OFF amp _DATA_CP_OFF amp _PWRTE_OFF amp _WDT_OFF amp _LVP_OFF amp _MCLRE_OFF amp _HS_OSC chlock 0x20 zans Variabili globali SlotN Numero di slot presenti 012 3 4 Relais 8 8 byte che memorizzano la configurazione corrente dei 256 relais Relais 0 contiene i relais 111 112 113 114 121 122 123 124 gt nei bit 0 di 2 3 4 5 6 7 A seguire gli altri Lista 8 Lista di canali da utilizzare nel comando route open o route close Le posizioni rappresentate da ciascun bit sono analoghe a quelle di Relais Ident 8 Buffer che contiene la stringa dell identificatore in parsing che si sta riconoscendo Ident Length Lunghezza della stringa memorizzata in Ident LastChar Ultimo carattere letto dalla seriale Flag Variabili da 1 bit packed in un byte sotto i singoli bit Errore Errore generato da non inviare subito ma non appena cessa la ricezione serial State Stato della macchina a stati di parsing sotto le costanti ch
173. is made by offering access to copy from a designated place then offering equivalent access to copy the source code from the same place counts as distribution of the source code even though third parties are not compelled to copy the source along with the object code 4 You may not copy modify sublicense or distribute the Program except as expressly provided under this License Any attempt otherwise to copy modify sublicense or distribute the Program is void and will automatically terminate your rights under this License However parties who have received copies or rights from you under this License will not have their licenses terminated so long as such parties remain in full compliance 5 You are not required to accept this License since you have not signed it However nothing else grants you permission to modify or distribute the Program or its derivative works These actions are prohibited by law if you do not accept this License Therefore by modifying or distributing the Program or any work based on the Program you indicate your acceptance of this License to do so and all its terms and conditions for copying distributing or modifying the Program or works based on it 6 Bach time you redistribute the Program or any work based on the Program the recipient automatically receives a license from the original licensor to copy distribute or modify the Program subject to these terms and conditions You may not impose any fur
174. it 1relais dopo aver fatto klic klac tante volte fanno kloc e si rompono vale a dire che hanno un certo numero di azionamenti nella loro vita utile e tendono a scaldarsi e rompersi rapidamente se li si fa commutare ripetutamente e rapidamente nelle prime revisioni del firmware non erano da escludere commutazioni spurie e rapide a causa di errori nel software o nell hardware tipico il caso di segnali lasciati flottanti letti come sequenze casuali di 0 e 1 da circuiti digitali All inizio la basetta del modulo di espansione stata quindi testata con 1 soli led montati Controllo di flusso tramite macro psifthen 1 2 Macro e sottoprogrammi Il compilatore assembler usato consentiva l uso di macro vale a dire la possibilit di arricchire la sintassi con ulteriori comandi ai quali possibile passare parametri che vengono espansi nelle righe che li costituiscono dopo aver sostituito 1 parametri con 1 valori immediati Una macro si differenzia da un sotto programma poich se presente N volte nel codice ed costituita da M istruzioni verr espansa in NxM istruzioni mentre un sottoprogramma occuper la memoria una volta sola Ai sottoprogrammi assembler possibile passare per un unico parametro e con forti limitazioni attraverso l accumulatore a 8 bit della CPU se si desidera passare pi parametri occorre gestire senza aluto particolare da parte del compilatore alcune variabil
175. it di stato dello strumento La compatibilit con lo standard IEEE488 2 sar a livello di sintassi non di architettura interna n di codici di errore I messaggi avranno tutti la stessa struttura codice numerico e stringa descrittiva Il codice numerico sar espresso in decimale partendo da dati a 8 bit perch il microcontrollore usato a 8 bit e 1 messaggi di errore non sono tanti di numero SCPI IEEE 488 2 Questo 11 nome dello standard industriale rispettato da moltissima strumentazione di misura da laboratorio o industriale Si aveva inizialmente l ambizioso desiderio di realizzare una macchina perfettamente compatibile con lo standard Si sono pertanto studiati 11 manuale del programmatore e il manuale utente dell unita di acquisizione dati 34970A e della matrice di relais 4x8 34904A entrambe della Agilent Si sono presi appunti su come funziona lo standard e si stilata una lista dei comandi da implementare e di quelli da non implementare nella propria macchina Segue una traduzione leggibile di questi appunti SCPI sta per Standard Commands for Programmable Instruments ed un linguaggio basato su ASCII sviluppato appositamente per strumenti di misura e di test I comandi disponibili 8 Traduzione letterale Comandi standardizzati per strumentazione programmabile ASCII sta per American Standard Code for Information Interchange Traduzione letterale Codice standardizzato Americano per l interscambio di infor
176. it movlw 0x20 Cancella i file register da 0x20 a 0x7f movwf FSR jin modo da assicurare che tutte le variabili initL clrf INDF del programma siano a zero inizialmente incf FSR F 5 btfss FSR 7 goto initL movlw TrisPortA Imposta i TRIS register per le due porte Crs PORTA movlw TrisPortB tris PORTB movlw B 00000111 Configura PORTA come Digital 1 0 movwf CMCON XXXXX111 Comparator disable RBA0 3 as Digital 1 0 clrf PORTA Clear port latches Cher PORTS bsf STATUS RPO Bank 1 movlw B 00100110 Configura USART movwft TXSTA Trasmit Status and Control 8 bit receive Trasmit enable Asincronous mode Baud Rate Generator HS movlw 20 Configura USART movwf SPBRG Baud Rate Generator Register 10 113636 115200 20 71 59524 57600 20 MHz FOsc pE STATUS RPO Bank 0 movlw B 10010000 Configura USART movwf RCSTA Receive Status and Control Serial Port Enable 8 bit receive Continuous receive enable gt Un registro della memoria FLASH del PIC che configura alcune funzionalit interne 107 Il codice cancella 1 file register utilizzati dal programma assicurando 1l valore iniziale 0 Imposta la direzione di ogni piedino disattiva 1 comparatori analogici rendendone disponibili piedini in multiplex con PORTA porta digitale di I O d uso generico ad 8 bit Viene infine configurata la USART del PIC con le velocit desiderate e senza l uso di interrupt Consultare il data sheet del PICI6F62 per informaz
177. it remains until it is overwritten or specifically deleted RCL 10 1 2 3 4 5 Recall the Instrument state stored In the specified storage location You cannot recall the instrument state from a storage location that is empty or was deleted When shipped from the factory storage locations I through 5 are empty location O has the power on state You can use location 0 to store a sixth instrument state However keep in mind that location 0 Is automatically overwritten when power Is cycled Pefore recalling a stored state the instrument verifies that the same module types are installed in each slot If a different module type ts installed the instrument will perform the equivalent of a Card Reset iS ETem C PON command on that slot RCL 01112131415 SAYV 01112131415 Salva la configurazione on off attuale dei relais in una EEPROM non volatile assieme al numero di moduli che erano collegati alla macchina all atto del salvataggio e un flag per indicare che la memoria di posto indicato ha un salvataggio valido Nessun errore viene prodotto per la sovrascrittura di una posizione gi occupata La memoria 0 viene settata all accensione con il default di power on dello strumento nel nostro caso tutti relais aperti Pu essere modificata e riletta successivamente come le altre 5 memorie in mancanza di ma non conserva 1 dati alimentazione Sulla macchina Agilent le condizioni di power o
178. ito utilizzano tensioni maggiori di 3V per garantire una maggiore immunit ai disturbi e consentire la trasmissione dati a distanze superiori Tipicamente le tensioni in uso sono comprese tra 8V e 12V sui PC da tavolo 5V sui portatili per risparmiare sulle batterie esistono diversi standard per il disegno degli schemi elettrici ed bene didatticamente prendere confidenza con tutti 36 Il PIC lavora in logica TTL a 5V ovvero usa OV per indicare lo zero logico e 5V per indicare P1 logico Esistono tecniche per collegare direttamente il PIC alla porta seriale senza adattatori di livello che fanno affidamento sul fatto che le porte seriali dei PC di solito leggono correttamente come tensione negativa un 1 logico anche tensioni di OV o debolmente positive Queste tecniche sono di tipo bit banging ovvero non sl appoggiano sulla UART hardware del PIC poich devono invertire la logica di funzionamento ma generano e interpretano 1 bit leggendoli direttamente dalle uscite e ingressi logici per uso generico con del codice scritto appositamente Queste tecniche sono interessanti poich consentono di risparmiare componenti ma non raggiungono l immunit al rumore e la precisione delle temporizzazioni di una UART hardware Inoltre sono fuori standard poich non tutte le porte seriali interpretano come negativa una tensione di OV e quindi non funzionano in tutti 1 contesti operativi Il traslatore di livello Max232 Per il nostr
179. izzato dt Dpr ig ati oy pipi dt Opee Oy Oe Oya Ore Le posizioni 0x0A 0x0F non vengono utilizzate i messaggi sono memorizzati internamente con indici esadecimali ma non utilizzandoli tutti l approccio equivalentemente BCD All operatore esterno gli indici dei messaggivengono descritti come decimali Con questo approccio non sono necessarie conversioni decimale binario dt gM gets l hya lIe py eos pie 6 No No No No No IF HIGH HIGH tavMsgSizes ERROR La tavola di salto tavMsgSizes ha superato i confini di pagina ENDIF IF HIGH B 00 ERROR La tavola di salto tavMsgSizes ha bisogno di ridefinire PCLATH ENDIF tavMsgText bcf PCLATH 0 bcf PCLATH 1 addwf PCL F dt Completed O1 dt Hallo 02 113 dt Unimplemented 03 dt Unknown Header 04 dt Invalid Char 105 dt Slot out of range OG at Chan out of range Od dt No Module in Slot 708 dt Interrupted chain 7 09 0A 0F dt Empty state FLO dt Different modules ELL dt RS232 Framing 12 dt RS232 Overrun reel lis dt PaolLoSancono RelaisMatrix 120 120 14 dt Too many modules FAS IF HIGH HIGH tavMsgText ERROR La tavola di salto tavMsgText ha superato i confini di pagina ENDIF IF HIGH B 00 ERROR La tavola di salto tavMsgText ha bisogno di ridefinire PCLATH ENDIF Notare in coda alla tavola il controllo di pagina di memoria poich PCL conserva solo gli 8 bit bassi del program co
180. l dataout pu essere circuitato con feedback con un apposito ponticello Questo 11 ponticello di terminazione da inserire solo sull ultimo modulo della catena che consente al controller di controllare la funzionalit degli shift register e di determinare quanti moduli sono collegati contando dopo quanti colpi di clock un pattern di bit inviato agli shift register percorre l intera catena e torna sul piedino di feedback Il condensatore C1 effettua il bypass dell alimentazione a SV e andr collocato in fase di sbroglio quanto pi vicino possibile agli shift register E buona norma prevedere questi condensatori vicino ad ogni circuito integrato logico CMOS che assorbe corrente rilevante dalle alimentazioni solo quando qualche stadio interno commuta quindi in maniera impulsiva SI I segnali di output enable e reset sono collegati fissi alle alimentazioni come descritto prima nel paragrafo relativo al funzionamento degli shift register Le uscite degli shift register pilotano gli ingressi degli ULN2803 specificatamente pensati per collegare carichi induttivi a integrati logici Le connessioni appaiono aggrovigliate poich la piedinatura dei due integrati consente uno sbroglio immediato con questo tipo di collegamento cio che appare aggrovigliato sullo schema elettrico in realt un collegamento dritto sulla basetta osservare 1 numeri dei piedini per rendersene conto Il pin 10 degli ULN2803 fa capo ai diodi di clamping
181. l programma 110 movf INDF W call shiftout decf FSR F next aggiornaModuliLooper 1034 call store return Vengono inviati per primi 1 bit relativi ai moduli pi lontani nella catena poi man mano quelli per 1 pi vicini per la maniera nella quale funzionano gli shift register Il programma aggiorna ogni volta 4 moduli e 256 relais confidando nel fatto che il numero di moduli presenti di cui ha fatto il test all inizio sia quello giusto e non verranno interessate dall operazione schede assenti sulle quali viene buttata spazzatura E necessario pertanto che 1 moduli non vanno inseriti o rimossi a caldo e comunque non vanno utilizzati se non prima di una riaccensione un RST o un TST per evitare condizioni di funzionamento imprevedibili Porta seriale La prima prova effettuata con la USART del PIC stata implementare 11 classico Hallo world di Windows ovvero inviare la stringa Hallo sulla porta seriale leggendola tramite il Terminale e matrix HyperTerminal f m x File Modifica Visualizza Chiama Trasferimento D tar ES el A ES lt m Connesso a 0 01 16 ANSI 57600 6 M 1 Il programma Hallo world per l uso della seriale con il PIC Grazie alla presenza di una porta UART tra 1 gadget hardware del PIC le istruzioni per inviare o ricevere un carattere sono banali un po meno semplice la gestione degli errori di
182. la macchina E la funzione stessa che si incarica di aggiungere il carattere di Newline in coda alla stringa MatrixRead Legge le stringhe ricevute dalla macchina seguendo una politica FIFO La funzione stessa si incarica di estrarre 1 terminatori di riga e fornire una stringa per volta MatrixFlush Svuota l intero buffer di lettura FIFO in modo da ripartire con un buffer certamente vuoto e poter leggere le risposte in ordine Funzioni di medio livello per Matlab Funzioni di medio livello facilitano l utilizzo del circuito per gli scopi pi tipici apertura e chiusura di relais MatrixClose Accetta come unico argomento un vettore di numeri interi Chiude 1 relais corrispondenti sul primo modulo della macchina I numeri sono a due cifre la prima rappresenta la riga la seconda la colonna MatrixOpen Apre 1 relais selezionati MatrixCloseExclusive Chiude 1 relais selezionati dopo averli aperti tutti Le funzioni in m files di basso livello sono state piuttosto semplici da implementare facendo ricorso agli oggetti di gestione della porta seriale gi disponibili in Matlab Anche le funzioni Il Matlab stato scelto poich stato l ambiente di calcolo utilizzato durante il corso di Misure Elettroniche 145 di medio livello sono di implementazione facile poich si limitano a creare una stringa di comando opportuna da inviare poi con le funzioni di basso livello Osservando il codice sorgente delle f
183. la basetta L errore viene poi riportato sullo schema elettrico e sul disegno del PCB in modo che le successive basette non lo contengano pi Le altre linee del connettore per il bus di sistema sono di alimentazione tre per il riferimento di massa due per l alimentazione a 12V una per l alimentazione a 5V Infine 4 pin del PIC sono collegati al MAX232 un adattatore di livello da TTL 0 5V a RS 232 10V 10V Il MAX232 incorpora un duplicatore e un invertitore di tensione in grado di generare le tensioni di 10V e 10V direttamente dall alimentazione a 5V richiedendo solo 5 condensatori elettrolitici esterni Il connettore seriale collegato con il pinout tipico di dispositivi DTE 50 Schema elettrico modulo con relais A fronte di uno sbroglio e un montaggio che richiedono qualche attenzione lo schema elettrico della basetta per 1 moduli a relais invero piuttosto semplice Sono presenti due header a 10 pin per il bus di sistema uno di ingresso e uno di uscita etichettati BUSin e BUSout Tutti 1 segnali sono collegati in parallelo tra 1 due connettori tranne il segnale Data che viene prelevato da BUSin e inviato al primo shift register L uscita QH del primo shift register viene inviata all ingresso data del secondo shift register L uscita QH di quest ultimo viene inviata al segnale Data di BUSout Si realizza cos il collegamento in cascata degli shift register ospitati sui vari moduli collegati al sistema I
184. la relazione sul lavoro svolto L uso di omonimi pericoloso perch rende poco chiari e ambigui 1 concetti espressi L uso di sinonimi pericoloso perch pu indicare che due concetti che sembrano lo stesso possono in realt avere sfumature diverse ed dover essere implementati con due approcci differenti Avevo chiamato Nomenclatura unica il file di testo e lo riporto integralmente senza modifiche per dare un idea di cosa si tratti Non tutto quanto descritto sar immediatamente chiaro ma molti concetti verranno chiariti in seguito Nomenclatura unica txt La scheda con stabilizzatore da tensione Microcontrollore adattatore di Lavelle Si Chiama Matrix Cont roller O solo Controller Le schede di espansione che ospitano 1 relais e i morsetti a vite facenti capo a righe e colonne si chiamano moduli L intero apparecchio progetto si chiama Relais Matrix o solo Matrix I moduli possono essere alloggiate in 4 slot chiamati slot 100 200 300 400 Non esistono 4 connettori per altrettanti slot come sull Agilent 34970A ma 1 moduli vanno collegati in cascata inserendo il terminatore sull ultimo e verranno numerati in ordine 100 200 300 400 in base all ordine con il quale sono collegati nella catena Ciascun relais ha un numero di canale associato I numeri di canale sono numeri a due cifre in cui la prima cifra la riga la seconda T1 la colonna L intero numero viene pero interpretato come un numero decimale ed
185. lare continuamente la soluzione La difficolt rendere questo processo uniforme su tutta la superficie agitando la basetta manualmente infatti quello che si ottiene una incisione pi rapida ai bordi rispetto al centro della scheda poich il rame che passa in soluzione riduce localmente la velocit della reazione ai bordi a causa del rimescolio pi pronunciato avendo pi cloruro ferrico fresco senza rame in soluzione la reazione pi rapida AI continuo agitare uniforme preferisco personalmente la soluzione opposta calma piatta La basetta stata sospesa con due fili di cotone fissati da un lato con colla a caldo sul piano di appoggio dall altro ancorati a due pesi in figura due portapenne cos da consentire di regolare le altezze Il cotone si lascia attraversare dal cloruro ferrico ed necessario spostare solo una o due volte la posizione dei fili per non trovarsi con delle sottili linee non attaccate Il rame passa in soluzione staccandosi dalla basetta e raggiunge 11 fondo del recipiente La aumentando la concentrazione infine impastare con polveri cementanti e conservare il mattone cos ottenuto in appositi centri Pi indicato rivolgersi a ditte specializzate 64 sostituzione con cloruro fresco lenta ma costante e uniforme su tutta la superficie A costo di aspettare 5 minuti in pi si ottiene per un risultato certo e migliore Si noti in figura che la basetta sospesa a filo di superf
186. lare un errore in queste condizioni occorreva aggiungere un contatore del numero dei due punti ad inizio riga come variabile di stato accessoria ma si deciso di non effettuare questo controllo di errore ulteriore che avrebbe appesantito inutilmente il codice poich un tale comportamento della macchina non fonte di errori critici Vale invece la pena di spendere del tempo in controlli di sintassi ulteriori quando una sintassi male interpretata pu produrre comportamenti non desiderati della macchina stStartOfLine clrf SSParsed All inizio di una nuova riga si cancellano i SubSystem bef Flag FlExclusive riconosciuti precedentemente a parte il SubSystem di clrf IdentLength default che rimane valido ifeel LastChar i1002 Incontrato Subsystem dei common commands si processa l header seguente letl SSDefault SSCommon letl State StParseld goto nextChar ifend i002 ifgtel LastChar A i004 Incontrato un carattere alfabetico si inizia a riempire Ident con l header in riconoscimento TELEL LastChar zZ 1 1i004 movf LastChar W call IdentAddChar letl State StParseld goto nextChar ifend 1004 ifeel LastChar i1011 Incontrato ter ad inizio riga ignorato goto nextChar ifend i1011 ifeel LastChar 0x0A i014 Incontrato newline ad inizio riga riga vuota semplicemente ignorato goto nextChar ifend 1014 movlw 0x05 Incontrato un carattere diverso 05 Invalid Char call errore letl State StSe
187. layCs BuzzOff return Fans Delay QNOP Routine di basso livello che implementano pause bloccanti pi o meno lunghe eseguendo il giusto numero di nop nel fare i conti per il ritardo si considera anche il tempo di esecuzione di tutte le altre istruzioni comprese call e return per richiamare e ritornare dalla sotto routine d i QNOP esegue 4 nop con call e return QNOP viene richiamata per semplicit con la macro qnop anzich con il comando call QNOP Delay segue W 3 4 4 2 2 call amp return op s Delay100us esegue 500 nop s 100us con FOsc 20 MHz DelayCs aspetta W centesimi di secondo appena abbondanti DelaySec aspetta un secondo appena abbondante Delay100us movlw 165 Delay movwt DelayLooper DelayL decfsz DelayLooper F goto DelayL QNOP return DelaySec movlw 100 DelayCs movwf DelayCsLooperl DelayCsLl decfsz DelayCsLooperl F goto DelayCsCl return DelayCsCl movlw 100 movwt DelayCsLooper2 DelayCsL2 decfsz DelayCsLooper2 F goto DelayCsC2 goto DelayCsLl DelayCsC2 call Delay100us goto DelayCsL2 SS SSS END Directive END 184 Funzioni Matlab Funzioni di basso livello matrixinit m function MatrixI init Port MatrixInit Funzione Matlab che crea la variabile globale MatrixSp che contiene l handle di un oggetto porta seriale da utilizzare per comunicare
188. lbero corrispondente ad un documento XML mediante un parser scritto in Java che utilizza tecniche simili e contiene descrizioni molto pi approfondite delle tematiche riguardanti 1 parser Revisioni e numero di versione Ogni volta che si realizza un programma una buona idea salvare separatamente ogni versione funzionante prima di apportare modifiche che potrebbero far perdere di funzionalit 1 programma Ci particolarmente vero per modifiche e ristrutturazioni pi radicali e molto importante in casi in cui il debug molto difficoltoso come per un microcontrollore Salvare ogni versione funzionante per inutile e rende la cartella di lavoro ingestibile L esperienza insegna a non eccedere con troppi o troppo pochi cambi di numero di versione Una buona regola pratica osservare il tempo dedicato alla stesura del codice che un indice della complessit reale con la propria esperienza di implementazione pi che la complessit teorica o presunta L obiettivo non perdere e non dover rifare il proprio lavoro e avere sempre a portata di mano un file compilato per il quale si certi del funzionamento che non 139 3961 contenga variazioni per debug e che possa far funzionare immediatamente il circuito per una dimostrazione o per controllare che l hardware non abbia problemi e che se le cose non stanno funzionando come sperato colpa del firmware amp Assembly SOR ar File Modifica visuali
189. le con strumentazione Il VI di esempio ha funzionato senza modifiche con il mio strumento come evidenziato nelle esecuzioni di prova qui sopra nell esempio a sinistra stata richiesta la stringa identificativa nell esempio a destra sono stati chiusi 1 relais della diagonale principale sul primo modulo a conferma che il circuito rispetta gli standard di comunicazione industriali at MatrixWrite RUE Con lievi modifiche il VI di esempio si prestava a diventare il SubVi di comunicazione con la macchina da utilizzare in VI pi avanzati Ho chiamato 11 SubVi di comunicazione MatrixWrite e ho disegnato una icona rappresentativa raffigurante un relais e un Led In LabView infatti 1 sottoprogrammi vengono rappresentati con icone nei programmi di livello superiore che li utilizzano ed cura del programmatore disegnare tali icone MatrixWrite gestisce autonomamente gli errori della porta seriale mostrando una finestra di dialogo e quindi non fornisce nessun error out in uscita e non richiede la gestione degli errori 149 nei livelli superiori Matrix Write richiede in ingresso la stringa da inviare allo strumento e la porta di comunicazione alla quale 11 circuito collegato In uscita restituisce la stringa di risposta letta dallo strumento MatrixWrite vi Block Diagram File Edit Operate Tools Browse Window Help bale 02 Enable Termination Char iT 10sec w J olz 7a OJ J nu un
190. li it sezione progetti 11 progetto documentato di un traforo a filo caldo per polistirolo utilizzato per tagliare 1 sostegni 60 d ul fl SAM t Ma iter j PE seug LISI Il metodo stira e ammira in azione Riporto della stampa laser a colori sulla basetta tramite pressa a caldo Il cuore del metodo stira e ammira il riporto delle piste senza ricorrere al bromografo n tanto meno a fotoresist soda caustica o basette presensibilizzate E sufficiente effettuare la stampa delle piste a specchio su un comune foglio di carta purch non molto poroso con una stampante laser a colori che utilizza un toner dall aspetto ceroso facile da fondere nuovamente Appena stampato il foglio di carta va immediatamente rovesciato sulle basette in rame cercando di centrarlo il pi possibile Se disponibile usare una pressa a caldo per uso tipografico per trasferire il toner altrimenti un comune ferro da stiro regolato in posizione fibre sintetiche avendo cura di preriscaldare la basetta e di non dimenticare nessuna zona del circuito Il toner un inchiostro in polvere fissato a caldo Riscaldandolo nuovamente una parte si staccher dal foglio e si trasferir sulla basetta Il toner non solubile in acqua quindi non viene attaccato dal cloruro ferrico o da altri composti per incisione solubili in acqua al pari del fotoresist 61 Correzione imperfezioni con pennarello acrilico Siccome purtr
191. lizzazione del sistema completo Viene descritta sommariamente l architettura del PIC16F628 il microcontrollore scelto degli altri chip utilizzati nel progetto e del programmatore autocostruito il cui progetto di Fiser che lo ha reso disponibile sul suo sito Web Nello stesso capitolo presente una breve panoramica sulla comunicazione seriale Una volta chiarito il funzionamento dei sotto sistemi si presenta schema elettrico e sbroglio su basetta del circuito definitivo con ampio spazio destinato alla descrizione del funzionamento elettrico alle scelte di sbroglio e ai procedimenti chimici e meccanici utilizzati per incidere e assemblare le basette Viene presentato il software EagleCad e lo script pshouse drill aid realizzato per il tema d anno utilizzati per il disegno delle basette Nello stesso capitolo si parla anche del collaudo del circuito delle misure di assorbimento test di riscaldamento test di comunicazione su cavi lunghi burn in test self test dimensioni fisiche analisi del costi iniziale e consuntivo finale Questo progetto era Impossibile da portare a termine senza una adeguata progettazione Nel capitolo 3 Progettazione e analisi del protocollo vengono descritti gli strumenti di ausilio all organizzazione delle idee e alla progettazione vera e propria del circuito e del firmware Viene sottolineata l importanza di un glossario dei termini e di diversi documenti testuali di documentazione interna per il
192. locale su console 45 Cad specifico per elettronica anzich un software di disegno generico 0 peggio carta e penna Eaglecad Si scelto il software gratuito per uso personale o didattico con alcune limitazioni sulle dimensioni della basetta Eagle Easily Applicable Graphical Layout Editor della CadSoft una software house tedesca raggiungibile al sito http www cadsoft de Il cad specifico per il disegno di schemi elettrici finalizzato al successivo sbroglio su basetta Ha vaste librerie di componenti through hole e surface mounted ed molto facile estendere le librerie con 1 propri componenti ammesso che si abbia a disposizione un calibro per prendere le quote sul componente reale o il data sheet con le quote millimetriche del package E previsto lo sbroglio dei segnali automatico o manuale E in grado di esportare 1 percorsi utensile per plotter gerber 0 con un minimo di programmazione nel linguaggio di scripting incorporato fresatrici CNC Il potente linguaggio di scripting interno consente di estendere o velocizzare le operazioni possibili Schema elettrico Si deciso di disegnare lo schema elettrico ancor prima di una analisi dettagliata del protocollo di comunicazione poich era stato gi definito tutto quanto c era da definire Lavorare alla progettazione del firmware senza sapere come fatto il circuito sarebbe stato un lavoro inutilmente astratto e difficile Il circuito diviso su due
193. m ifelse macro goto alabell endm ifend alabel file alabel filke W STATUS alabel file literal alabel if greather than or egual literal file alabel filel file2 alabel file2 W filel W STATUS C alabel file alabel file W STATUS C alabel file literal alabel if less than literal file alabel file min max alabel if file in range file W min max alabel min max alabel 255 max amp OxFF max min 1 STATUS C alabel file bit alabel file bit alabel file bit alabel file bit alabel alabell alabel2 alabel2 alabel if less than amp OXFF if greather than or egual File W File Literal File File if less than File W File Literal min max Estremi compresi Wraps around 255 i e 240 15 means 240 255 04 15 utile per numeri negativi Estremi compresi o no DA TESTARE if W in range min max DA TESTARE sift bit Sert if bit clear Esegue due nop con un salto incondizionato alla riga successiva dnop macro local label goto endm ae ee eres pressi LET Assegna il contenuto di un file ad un altro label label 1 Nella variante letl assegna un literal ad un file let macro firtel file movf file2 W movwf filel endm letl macro file literal movlw literal movwf file endm PAIA FOR DOWNTO NEXT Si conta dal valore iniziale a scendere verso 1 169 Esempio di utilizzo iniziando il
194. mazione ed nato negli anni 83 sono organizzati in una struttura gerarchica ad albero in cui 1 diversi rami principali e secondari vengono chiamati subsystems Anche i nomi dei subsystem sono stati standardizzati e strumenti con funzionalit simili di produttori diversi che rispettano lo stesso standard implementano gli stessi subsystem dello standard anche se possono differenziare la sintassi dei singoli comandi IEEE 488 2 il nome dello standard internazionale che descrive SCPI Lo standard IEEE 488 2 definisce un insieme di common commands per funzioni come il reset delle impostazioni di fabbrica self test e indicazioni di stato I common commands iniziano sempre con il carattere asterisco e proseguono con un identificatore di 3 o 4 caratteri E consentito usare il per indicare pi comandi sulla stessa riga se 1 differenti comandi appartengono allo stesso subsystem Il simbolo due punti separa l identificatore del comando di un livello dall identificatore del comando di livello inferiore L ultimo subsystem utilizzato diventa il subsystem di default e comandi successivi dello stesso subsystem possono omettere l indicazione iniziale del subsystem Lo standard non prevede 1 due punti all inizio della riga ma la maggioranza degli strumenti da laboratorio lo accetta senza obiettare Ogni riga terminata dal carattere 0x10 new line Si pu richiedere il valore attuale della maggior parte delle impostazioni
195. mit ifend 1090 clrf Looper For Looper 1 to SlotN repeat i091 Non si potuta usare la macro for jinvece a noi interessava contare a salire perch conta a scendere FSR Relais 2 Looper 1 inet Looper F letl FSR Relais 2 bef STATUS C rlf Looper W addwf FSR F call sendINDF Invia 8 0 o 1 in base ai bit di INDF incf FSR F call sendINDF until2 ifee Looper SlotN i091 138 Fine del ciclo For su Looper call newline let1 State StStartOfLine goto nextChar trend 1082 movlw 0x04 7504 Undefined header call errore letl State StStartOfLine goto nextChar ifend 1018 movlw 0x05 05 invalid Char call errore letl State StSeekNewLine goto nextChar Notare che la stringa di risposta a SYSTem VERsion memorizzata carattere per carattere direttamente nel codice di esecuzione essendo una stringa corta non si sarebbe risparmiata memoria memorizzandola nella look up table La risposta ad IDN invece essendo lunga pi efficientemente memorizzata nella look up table Approfondimenti sul parser La descrizione del parser data sufficientemente dettagliata per poterne comprendere ogni intimo dettaglio implementativo ma presuppone che il lettore gi conosca le modalit di implementazione di un tipico parser ad una sola passata per sintassi con pochi costrutti Per approfondimenti su questo tipo di parser si rimanda al mio lavoro gi citato in una nota a pi di pagina Generazione dell a
196. most prominent appearance of the work s title preceding the beginning of the body of the text A section Entitled XYZ means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language Here XYZ stands for a specific section name mentioned below such as Acknowledgements Dedications Endorsements or 190 History To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ according to this definition The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document These Warranty Disclaimers are considered to be included by reference in this License but only as regards disclaiming warranties any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License 2 VERBATIM COPYING You may copy and distribute the Document in any medium either commercially or noncommercially provided that this License the copyright notices and the license notice saying this License applies to the Document are reproduced in all copies and that you add no other conditions whatsoever to those of this License You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute However you may accept compensation in exchange for cop
197. mponente la nomenclatura degli ingressi differente SER Serial al posto di Ds Data serial SCK Serial Clock al posto di SHcp Shift Clock Pulse RCK Retain Clock al posto di STcp Store Clock Pulse SCL System Clear al posto di MR Master Reset Active Low G Gate al posto di OE Output Enable Active Low Le uscite sono indicate con A BC DE F G H anzich con 0 1 23 4 5 6 7 Inoltre sono evidenziati 1 clock con il triangolino e le uscite a logica invertita con il pallino anzich con la sbarra o la sovralineatura Questo non deve stupire poich in elettronica 35 Comunicazione seriale La seriale RS 232 una porta legacy termine inglese con il quale si indicano gli standard veri e propri o standard de facto cos consolidati negli anni da essere presenti sulla quasi totalit dei sistemi elettronici e per 1 quali ci si aspetta un supporto pieno senza particolari complicazioni o intoppi poich esistendo da molti anni sono ben sperimentati e sono poco esigenti per l hardware pi recente che pu implementarli senza costi aggiuntivi particolarmente gravosi Quasi tutti 1 PIC della microchip integrano una UART il che significa che la CPU deve solo configurare la UART e passarle 1 dati da trasmettere poi pu occuparsi di altro mentre la trasmissione in corso Similmente in ricezione la UART accetter 1 dati di arrivo e li manterr in un buffer fino alla richiesta di lettura della CPU che nel frattempo pu essersi o
198. n circostanze differenti segno che il circuito si spento e riacceso oppure il solo PIC resettato per problemi di alimentazione e tutte le configurazioni stato dei relais Subsystem corrente sono andate perdute In questo caso 02 Hallo rappresenta un messaggio di errore indice di un problema hardware Questo messaggio stato previsto infatti proprio per segnalare la mancanza di alimentazione o problemi di reset spuri del microcontrollore dovuti a malfunzionamenti hardware anche se pu essere utilizzato per rilevare automaticamente l accensione dell apparecchio Errori del parser 03 Unimplemented Il commando indicato non implementato in questa macchina ma viene comunque processato dal parser in modo da dare all utente una indicazione che il comando stato scritto correttamente anzich mostrare il generico messaggio di errore 04 Unknown Header Cos procedendo pi facile inserire in revisioni successive del firmware il codice che esegue 1 comandi previsti ma non ancora implementati dei quali stato per codificato un place holder Una delle caratteristiche non implementate segnalate l uso del carattere due punti nelle liste di canali 04 Unknown Header L identificatore inviato non fa parte del set di istruzioni del controller 96 05 Invalid char E stato incontrato un carattere non valido non facente parte della sintassi oppure uno valido stato incontrato al posto sbagliato
199. n pagina zero Nel nostro codice l istruzione presente all indirizzo zero semplicemente una istruzione di salto incondizionato alla sezione init La sezione init spostata oltre la pagina zero poich in pagina zero opportuno memorizzare le look up tables Sezione init eseguita una sola volta Sezione nextchar eseguita in ciclo ad eternum 117 init movlw 0x20 Cancella i file register da 0x20 a 0x7f movwf FSR jin modo da assicurare che tutte le variabili initL CLEE INDF del programma siano a zero inizialmente incf FSR F btfss FSR 7 goto initL movlw TrisPortA Imposta i TRIS register per le due porte CELS PORTA movlw TrisPortB tris PORTB movlw B 00000111 Configura PORTA come Digital I O movwf CMCON XXxXxXx111 Comparator disable RBA0 3 as Digital 1 0 CLET PORTA Clear port latches GEE PORTI bsf STATUS RPO Bank 1 movlw B Q0100110 Configura USART movwft TXSTA Trasmit Status and Control 8 bit receive Trasmit enable Asincronous mode Baud Rate Generator High Speed movlw ZU Configura USART movwf SPBRG Baud Rate Generator Register 20 59524 57600 20 MHz bef STATUS RPO Bank 0 movlw B 10010000 Configura USART movwft RCSTA Receive Status and Control Serial Port Enable 8 bit receive Continuous receive enable BuzzOoff Spegne cicalino Ledoff Spegne Led ber Flag FlVerboseAutotest Determina numero di moduli collegati con verbose OFF non stampa 1 o 0
200. n pattern di bit sugli shift register verificando che ritorni ritardato lo stesso pattern La risposta la stringa di due caratteri 1 66 se l autotest ha successo la stringa di due caratteri 0 se l autotest fallisce In caso di fallimento il controller invia un ulteriore messaggio di errore con il tipo di errore hardware rilevato 09 Interrupted chain o 15 Too many modules Dopo un autotest viene valutato nuovamente il numero di moduli di espansione effettivamente collegate al controller numero conservato in un registro interno interrogabile con SYSTEM MODULE TST Perform a complete self test of the Instrument Returns 07 If the self test is successful or 1 ifthe test falls SAV 01112131415 RCL 01112131415 Questi comandi sono descritti in seguito nell ambito del subsystem MEMORY 86 CLS Questo comando non ha senso per Relais Matrix poich non sono stati implementati 1 registri interni che dovrebbero essere cancellati da questo comando flag di evento occorso code di errori e allarmi ricevuti tutte funzioni non implementate Il comando viene comunque riconosciuto e processato e viene fornita la risposta 0 Completed anzich l errore 03 Unimplemented o 04 Unknown Header Il codice necessario per implementare CLS stato codificato come place holder per sviluppi futuri se il comando deve eseguire una routine basta inserirla nel corretto punto del codice che stato gi scri
201. n possono essere diverse da tutti relais aperti Ripristina la configurazione on off dei relais leggendola dalla memoria specificata Viene prodotto un errore per il tentativo di rileggere una posizione che non conteneva dati oppure dati relativi ad una situazione differente di moduli montati negli slot La memoria zero sar sempre valida perch all accensione viene scritto il numero di moduli effettivamente collegati dopo aver fatto l autotest MEMory STATe DELete 01112131415 Cancella la locazione di memorizzazione Nessun errore segnalato in caso di cancellazione di uno slot che non conteneva dati 92 HEMory STATe DELete 0 1 2 3 4 5 Delete the contents of the specified storage location If you have named a storage location IMEM STAT NAME command this command does no remove the name that you assigned Note that you cannot recall the instrument state from a storage location that was deleted An error is generated if vou attempt to recall a deleted state MEMory STATe VALid 01112131415 Indica se la memoria specificata piena o vuota Risponde con 1 o con 0 HEMory STATe VALid 0 1 2 3 4 S Muery the specified storage location to determine if a vald state is currently stored In this location You can use this command before sending the RCL command to determine if a state has been previously stored in this location Returns 0 if no state has been stored or if it has been deleted Returns CI ifa v
202. na linea di dati rimasta flottante senza controllo 71 tranne 1 due stadi di uscita rotti puo essere utilizzato in un altro progetto in cui quei due pin vengano usati come ingressi o non usati affatto Tanto stato il tempo necessario per scoprire questo errore poich tutto si pensava tranne che una delle uscite del PIC fosse open drain altri PIC con la stessa piedinatura hanno tutti 1 driver di uscita del tipo push pull che ho preso un piccolo accorgimento che evitasse l errore in futuro Ho modificato 1l componente nella libreria di Eagle aggiungendo un asterisco nel simbolo dello schema elettrico sul pin con stadio di uscita differente Dissipatore Durante il disegno della basetta non stato lasciato molto spazio per il dissipatore del 7812 si quindi dovuto spostare il foro di fissaggio ad un dissipatore piccolino a montaggio verticale per poterlo utilizzare Il foro stato filettato in modo da poter fissare 11 dissipatore semplicemente con una vite anzich con bullone e dado garantendo al contempo la possibilit di stringerlo pi saldamente non dovendo tener fermo 11 dado dall altro lato con una pinzetta Foratura e filettatura del dissipatore Dissipatore montato e test di riscaldamento con tutti 1 relais accesi Ho gi discusso della potenza di alimentazione indicando 1 motivi che hanno portato ad uno stadio sottodimensionato per il caso peggiore ovvero tutti 1 relais accesi condizione d uso sen
203. ncanza di spazio X A titolo di paragone in altre CPU il registro di stato interno ed esistono istruzioni specifiche per il salto condizionato al valore del flag di Zero e del flag di Carry che indicano 105 Bios Differenze tra firmware e software Realizzare il firmware per un microcontrollore puo essere profondamente differente e ben piu difficile rispetto a realizzare un programma al PC Finch il firmware non pronto non si pu verificare la funzionalit dell hardware viceversa se l hardware non funziona anche un software scritto bene non produrr gli effetti sperati Se il circuito ha poi pochi o nessun dispositivo di segnalazione veramente difficile valutare il buon funzionamento del programma poich si costretti ad analizzare 1 segnali elettrici ai morsetti esterni dell integrato Debug hardware una buona dizione per indicare 1 primi passi con il firmware e hardware quando non funzionano entrambi contemporaneamente ed molto difficile trovare 1 problemi poich le variabili in gioco sono tante se un led non si accende pu darsi che sia bruciato il led che ci sia una pista interrotta che sia un collegamento ad una pista errata che la sorgente di clock per il microcontrollore non stia oscillando che il microcontrollore abbia tensione di alimentazione insufficiente che il piedino di master reset sia attivo oppure che le routine di inizializzione non abbiano configurato il piedino cor
204. nd 1100 Rimuovere questa funzione nel firmware definitivo se desiderato ifbs Flag FlEcho 1097 Se attivo l echo dei caratteri ricevuti modalit debug movf LastChar W viene reinviato al PC ogni carattere ricevuto call trasmit ifend 1097 175 ifeel ifend ifeel ifend StateCase bsf bcf mov f addwf goto goto goto goto goto goto goto goto IGH ENDIF IGH ENDIF stStartOfLine clrf bcft CITE ifeel ifend ifgtel LENEI ifend ifeel ifend ifeel ifend movlw call letl goto stParseld ifgtel ifltl ifend ifgtel DELE ifend ifelse LastChar 0x0D 1101 goto nextChar 1101 LastChar 0x03 1109 goto nextChar 1109 PCLATH 0 PCLATH 1 tate W E tStartOfLine tSeekNewLine tParseld tNewLineAfterOm tChiocciolaOnly tRiempiLista tNewLineAfterParClo nextChar Q H UNUNUN AN VMN HIGH B OLl CTRL M Carriage Rei Semplicemente ignora CTRL C Semplicemente ignorato Tavola di salto per si La macchina e processer il carat se StateCase ERROR La tavola di salto StateCase ha superato i confini di turn Lo terminatore di riga valido Break a stati del tato corrente Should Never come here pagina ERROR La tavola di salto StateCase ha bisogno di ridefinire PCLATH SSPar
205. ni negate che hai imparato a usare Wile non ha l h perch while parola riservata per il compilatore Scegliere wilel o wile2 a seconda se l if da usare ha 1 o 2 parametri Al termine del ciclo whileend con le stesse 2 etichette usate per il while Esempio s wile2 ifee filel file2 mywhilel mywhile2 lt istruzioni gt lt istruzioni gt 3 wilend mywhilel mywhile2 wilel macro command parameter alabell alabel2 alabel2 command parameter alabell wile2 macro command parameterl parameter2 alabell alabel2 alabel2 command parameterl parameter2 alabell endm wilend macro alabell alabel2 goto alabel2 alabell endm 170 Inverte un bit negbit macro file bit local wass wasc fine btfss file bit goto wasc wass ber file bit goto fine wasc bsf file bit fine endm p aa e SSS EERead EEWrite Ricordo che per molti PIC gli indirizzi sono a 6 o 7 bit anzich a 8 per i PicMicro con soli 64 o 128 byte di EEProm I MSB non vengono forzati a 0 bisogna assicurarsi che lo siano nel software Le routine sono state scritte per un PIC16F628 assicurarsi che non debbano essere modificate per altri PicMicro EERead legge una locazione e d il risultato in W Controllare che return non distrugga il contenuto di W nel vostro microcontrollore era un bug Microchip poi risolto All uscita ci si trova in bank 0 EEWrite scrive il contenuto di file in location All uscita ci si trova in bank 0 All inizio attende cas
206. nnettori a grimpare con relativi header da circuito stampato E lo stesso tipo di connettori usato nel bus IDE dei PC la differenza che si utilizzata la versione a 10 fili anzich a 40 fili La versione a 10 fili molto popolare su circuiti di vario tipo ad esempio si usa lo stesso connettore col nome JTAG per programmare diverse famiglie di FPGA 7 Ds lt fn i sl L esatta funzione di ciascuno di questi segnali verr chiarita meglio in seguito 17 I connettori a grimpare utilizzati per 1l bus di sistema e un esempio di cavo piatto gia montato I connettori presentano uno smusso da un lato che impedisce di inserirli capovolti E piuttosto facile realizzare cavetti della lunghezza desiderata basta tagliare il cavo piatto a misura ed esercitare pressione sui connettori che perforeranno la guaina del cavo realizzando automaticamente le connessioni Il passo tra 1 pin un decimo di pollice tranquillamente alla portata del saldatore manuale e tale da consentire di far passare piste da 16 mils tra un piedino e l altro cosa fondamentale per uno sbroglio monofaccia I segnali da far transitare sul bus sono Riferimento di massa per alimentazione Alimentazione per la logica 5V Alimentazione per 1 relais 12V Segnali di Data Clock Store in logica TTL 0 5V Segnale di feedback terminazione in logica TTL 0 5V Avendo solo 7 segnali e 10 fili a disposizione si scelto di raddoppiare l
207. non si dettaglia meglio un altro aspetto del problema separato concettualmente ma intimamente legato nell implementazione o viceversa Altre volte alcune decisioni facilitano un compito ma ne rendono pi difficile un altro e occorre cercare un compromesso oppure scegliere la via che globalmente rende il progetto pi facile anche a scapito di rendere pi difficile un piccolo particolare o soddisfa globalmente pi richieste del cliente se non possibile soddisfarle tutte 79 Capita anche che sia indifferente implementare una specifica in un modo o in un altro e si desidera appuntare entrambe le possibilita anzich sceglierne da subito una poich altri aspetti del problema possono indicare che una via da preferire perch facilita altre questioni connesse Cercare di tenere tutte queste questioni a mente per cercare il compromesso migliore Impossibile allora ho appuntato le decisioni da prendere le differenti alternative e le decisioni gi prese indicando quali erano definitive e quali rivedibili in un apposito file di testo a pi sezioni Inizialmente la sezione decisioni da prendere aspetti da fissare era la pi corposa Man mano si per sfoltita trasferendo 1 suoi contenuti in decisioni prese scelte effettuate Ogni decisione presa indicava poi la strada per le altre collegate Ogni decisione da prendere poteva indicare la necessit di sperimentare ancora con il circuito o di documentarsi meglio per
208. notices that refer to this License and to the absence of any warranty and give any other recipients of the Program a copy of this License along with the Program You may charge a fee for the physical act of transferring a copy and you may at your option offer warranty protection in exchange for a fee 2 You may modify your copy or copies of the Program or any portion of it thus forming a work based on the Program and copy and distribute such modifications or work under the terms of Section 1 above provided that you also meet all of these conditions a You must cause the modified files to carry prominent notices Stating that you changed the files and the date of any change b You must cause any work that you distribute or publish that in whole or in part contains or is derived from the Program or any part thereof to be licensed as a whole at no charge to all third parties under the terms of this License c If the modified program normally reads commands interactively when run you must cause it when started running for such interactive use in the most ordinary way to print or display an announcement including an appropriate copyright notice anda notice that there is no warranty or else saying that you provide a warranty and that users may redistribute the program under these conditions and telling the user how to view a copy of this License Exception if the Program itself is interactive but does not normally print such an anno
209. nsizioni di livello trasmessi per secondo bps bit per secondo il numero di bit di dati trasmessi per secondo 32 I diagrammi delle porte seriali e le tabelle della descrizione dei pin e del cavo di collegamento null modem sono state prelevate per gentile concessione dal sito http www hardwarebook net 40 Pin Name Dir Description ee RXD Receive Data 3 EXD cog Transmit Data 4 DTR Data Terminal Ready 5_ GND System Ground _ TRIS Sy Request Send CTS Clear to Send o RI Segnali con relative direzioni presenti sulla porta seriale Nella nostra applicazione utilizzeremo solo 1 segnali RXD TXD che chiameremo semplicemente RX e TX il riferimento di massa sul pin 5 ed eventualmente 1 due segnali per il controllo di flusso hardware RTS CTS mentre non useremo gli altri segnali DTR DSR RI CD Il cavo di collegamento dovr collegare le uscita della porta del PC con gli ingressi della porta i 4 ee 33 i sul circuito e viceversa si potr pertanto utilizzare un cavo null modem con il seguente 5 5 1 00008 00000 000 000 g 6 g 6 Connettori D Sub9 femmina A e B alle due estremit del cavo schema di collegamento Po Sub9 A D Sub9 Bj S Receive Data 2 3 ransmitData Transmit Data 3 2 ReceiveData Request to Send 7 8 CleartoSend CleartoSend 8 7 RequesttoSend Schema di collegamento classico di un cavo null modem 33 Detto anche crossed
210. nte sui propri circuiti sperimentali che avessero bisogno della porta seriale senza doverlo rimontare ogni volta Data la facilit con cui possibile inviare caratteri sulla seriale tramite il PIC infatti possibile utilizzare proficuamente questa possibilit durante il debug del firmware lasciando che il programma in test avvisi dei punti del codice eseguiti man mano inviando caratteri di segnalazione Il circuito costruito su millefori pu essere connesso al volo al piedino di trasmissione seriale del PIC da un lato e alla porta seriale del PC su cui gira il terminale di Windows dall altro per 11 debug del firmware tramite la seriale in circuiti che non la utilizzeranno nella versione definitiva 38 EEE ae Pitter is a ne ar nai Bag ih A EN Ft RAJUL Schizzo su carta e montaggio su millefori Il circuito stato rapidamente schizzato su carta quadrettata utilizzando proficuamente un evidenziatore per indicare le saldature e montato su una millefori cercando di realizzare con piste di stagno la maggioranza dei collegamenti in modo da lasciare pochi a fili volanti Sul circuito presente il regolatore di tensione 7805 e un ponte a diodi cos che lo si possa alimentare indifferentemente con tensioni da 8V a 18V in DC senza curarsi della polarit o da SV a 15V in AC Un cavo seriale si collega tramite un connettore ad innesto rapido al circuito mentre un header a 5 pin rende disponibili le linee di trasmis
211. o StNewLineAfterQm 121 Ricevuto il newline verra eseguito il comando e inviati i risultati E stata riconosciuta la parentesi aperta dopo un route open o route close il prossimo carattere deve essere per forza Parsing della lista di canali da chiudere aprire Si attendono ulteriori numeri di canale virgole o la E stato riconosciuto un ROUTe OPEN Q o ROUTe CLOSe Dopo la si attende per forza newline Ricevuto il newline si esegue il comando StChiocciolaoOnly StRiempiLista StNewLineAfterParClose No No No No No No No No No endc Il passaggio del controllo di flusso allo stato corretto del Parser viene eseguito mediante una tavola di salto analoga all istruzione on goto del Basic Le etichette utilizzate per individuare le sezioni di codice che implementano 1 diversi stati del parser hanno lo stesso nome delle costanti appena descritte ma l iniziale minuscola Caratteristiche utili per debug e soluzioni poco eleganti ma efficaci Nel ciclo principale sono stati inserite altre funzioni un po poco eleganti ma molto efficaci La prima l accensione del Led quando il parser si trova nello stato stSeekNewLine una programmazione pi elegante doveva scrivere l istruzione di accensione Led contestualmente al cambio di stato ogni volta che questo si presenta effettuando il controllo nel ciclo principale s1 risparmiata per memoria a vantaggio dell efficienza e dell
212. o circuito si deciso di utilizzare la UART del PIC con un adattatore di livello esterno che trasformasse 1 livelli OV SV tipici del PIC in livelli 10V 10V della porta seriale La Maxim http www maxim ic com ha una serie di adattatori di livello integrati gi pronti per diversi usi E stato scelto 11 MAX232 un nome un programma che integra oltre ai traslatori di livello anche un duplicatore di tensione per portare 1 5V di alimentazione a 10V e un invertitore di tensione per portare 1 10V a 10V Per far funzionare questi due circuiti interni gli unici componenti esterni da montare sono condensatori elettrolitici che non possono essere integrati II MAX232 in grado di traslare di livello 2 ingressi e 2 uscite Sul data sheet riportato lo schema elettrico tipico di collegamento 3 Trad letterale spara bit nel senso che i bit vengono messi sulla linea direttamente dal Firmware anzich da un circuito hardware dedicato 37 45 INPUT TOP VIEW Ue 5 10 10 TCA CI VOLTAGE DOUBLER f 10 TO 10V E ACA VOLTAGE INVERTER TTLICMOS R5 232 INPUTS f OUTPUTS DIP SO TIL CHOS RS 232 OUTPUTS INPUTS MAXZIZA 01 01 01 011 Pinout e schema elettrico applicativo tipico del MAX232 Sebbene sia possibile montare un max232 con gli elettrolitici esterni di contorno su una solderless board si preferito montare il circuito su una millefori cos che fosse possibile utilizzarlo facilme
213. o ho utilizzato la versione 5 5 per Windows a 16 bit perch ho avuto problemi con nomi di path pi lunghi di 64 caratteri con la versione 6 Nell ambiente di sviluppo oltre alla gestione di progetti editor di testo a pieno schermo compilatore integrato disponibile un simulatore e debugger in grado di simulare l esecuzione del codice istruzione per istruzione e la stimolazione dei pin esterni del chip direttamente sul PC e direttamente dall ambiente di sviluppo integrato prima di trasferire il codice sul microcontrollore reale I progetti negli ambienti di sviluppo consentono di mantenere ordinati in un corpo unico diversi file correlati ad esempio per una realizzazione complessa che prevede pi microcontrollori programmati con codice differente 25 Linguaggi di alto livello Esistono dei tentativi ora giunti a maturit di linguaggi di programmazione pi evoluti per 1 microcontrollori della Microchip Certamente si tratta di un grosso aiuto alla stesura del codice poich si pu utilizzare la sintassi del C o del Basic con cui si ha pi familiarit anzich 1 criptici mnemonici assembler Non ci sono solo vantaggi per poich 1 costrutti pi semplici sono disponibili anche in assembler e 1 costrutti pi avanzati ovvero il controllo di flusso strutture if then while for chiamate a sottoroutine con parametri le operazioni aritmetiche con parentesi la gestione delle stringhe si pagano al caro prezzo di una
214. o mai c era una scrittura in atto EEWait fa il polling di EECON1 WR fino a che non si resetta ad indicare che l operazione di scrittura si conclusa Sono scritte come macro per non allungare il codice codice ogni volta che le si richiama per tali routine nomi EERead EEWait loop EEWrite macro banksel movlw movwf bsf movf banksel endm macro local banksel btfsc goto banksel endm macro mov f EEWait banksel movwf bsf bcf movlw movwf movlw movwf bsf BCE bsf banksel endm location EEADR location EEADR probabilmente andranno incluse in una routine le macro vengono infatti reinserite nel Suggerito usare gli stessi ma con le prime due E in minuscolo anzich in maiuscolo Bank 1 Setta l indirizzo a cui leggere y EECON1 RD Inizia la fase di lettura EEDATA W 0 loop EECON1 Restituisce la lettura in W Bank 0 Bank 1 EECON1 WR Aspetta che finisca la write sequence loop 0 location file file W EEDATA EEDATA EECON1 WREN INTCON GIE 0x55 EECON2 OxAA EECON2 Bank 0 File on current bank Bank 1 Enable write to EEProm Disable interrupts Compulsory sequence 7 7 l EECON1 WR Inizia write sequence EECON1 WREN INTCON GIE 0 Disable write do EEProm Riattiva interrupts Bank 0 171 matrix asm Relais Matrix PICMicro Firmware 1 0 Copyright C 2005 Paolo Sancono http www ide
215. o non si settano direttamente i bit di Relais ma si prepara a parte la Lista di canali e si rimanda alla fine della riga l esecuzione dell aggiornamento ifgtel LastChar 0 1061 TELEL LastChar 9 1 i061 movf LastChar W call IdentAddChar ifgtel IdentLength 4 1063 movlw 0x05 05 Invalid Char call errore reti State StSeekNewLine goto nextChar ifend 1063 ifeel IdentLength 3 1064 move Ident 0 W Conversione da caratteri ASCII O 1 2 3 g ngm addlw 0 1 a numeri binari a 8 bit OxFF 0 1 2 3 4 movwf Ident 0 movf Ident 1 W addlw 0 1 movwf Ident 1 movf Ident 2 W addlw 0 1 movwf Ident 2 ifgtel Ident 0 4 1068 movlw 0x06 06 Slot out of range call errore letl State StSeekNewLine goto nextChar ifend 1068 movf SlotN W ifgtew Ident 0 i069 movlw 0x08 508 No module in slot call errore 134 letl State StSeekNewLine goto nextChar ifend 1069 ifgtel Ident 1 4 1i087 movlw 0x07 07 Chan out of range call errore letl State StSeekNewLine goto nextChar ifend 1087 ifgtel Ident 2 4 i089 movlw 0x07 07 Chan out of range call errore letl State StSeekNewLine goto nextChar ifend 1089 let1 FSR Lista ber STATUS Raddoppia Ident 0 in W W vale 0 2 4 6 a seconda di slot number i al Ident 0 W addwf FSR F FSR Lista 0 2 4 6 btfsc Ident 1 1 Se riga 3 o 4 2 o 3 binario 0 based incf FSR F ESR FSR 1 EELT Temp incf Temp F Temp B 0001
216. o perch altrimenti occorre buttare via pi lavoro in caso di revisioni parziali 76 Inoltre finito il lavoro 1 file di testo di appunti utilizzati come riferimento continuo durante la scrittura del firmware si trasformano con poche modifiche nella relazione sul lavoro e nei manuali utente del progetto realizzato con la certezza che la documentazione sia di ottima qualit e descrizione molto fedele del progetto in quanto nata dal cuore stesso della progettazione Inoltre costringere l idea mentale a trasformarsi in periodo di testo anzich in schema rapido aluta a formulare correttamente tutti gli aspetti del problema La descrizione della progettazione logica del firmware e del circuito in generale procede dunque per file di testo successivi ciascuno dedicato ad un aspetto del problema Tali files costituiscono la documentazione interna del progetto in contrapposizione alla documentazione esterna costituita da questa relazione e il manuale per l utilizzatore Glossario dei termini Il glossario dei termini serve ad evitare il pericoloso uso di omonimi e sinonimi nella scrittura degli altri appunti e nella documentazione finale di supporto da fornire all utente Inoltre contiene una descrizione precisa di cosa si intende con ciascun termine in modo da chiarire il concetto a s stessi in fase di progettazione nella documentazione interna e all utente finale nel manuale da consegnare assieme all apparecchio o nel
217. occiola 05 Invalid Char kNewLin LastChar LastChar mov f call ifgtel ifend ifeel ifend goto 1061 LastChar movlw call letl goto 1058 0 i061 9 1 1061 LastChar W IdentAddChar IdentLength 4 1063 la variabile List li per errori vengono rilevati si settano direttamente i la fine della riga l esecuzione dell aggiornamento bit di Relais ta man mano che vengono ricevu che faranno abortire l in ma si prepara a parte la Lista di canali la chiocciola dopo una messaggio di errore naw we 3 4 in base a ti numeri di Slot e Canale validi tero comando Ident 2 riga 2 o riga 4 in Lista corrispondente allo Slot Channel per intervalli di canali movlw 0x05 705 Invalid Char call errore let State StSeekNewLin goto nextChar 1063 IdentLength 3 1064 movf Ident 0 W Conversione da caratteri ASC IO i dI AD NS addlw O 1 a numeri binari a 8 bit OxFF 2 movwf Ident 0 movf Ident 1 W addlw SOM LL movwt Ident 1 movf Ident 2 W addlw DEL movwt Ident 2 ifgtel Ident 0 4 1068 movlw 0x06 06 Slot out of range call errore letl State StSeekNewLin goto nextChar ifend 1068 movf SLotN W ifgtew Ident 0 1069 movlw 0x08 708 No module in slot call errore let State StSeek
218. oduli di relais prevede molti pi ponticelli poich impossibile realizzare uno sbroglio monofaccia efficace per la topologia del circuito infatti Gli interruttori dei relais sono collegati a matrice di righe e colonne e si capisce che 1 relativi segnali finiscono per incrociarsi reciprocamente pi volte Diversi elementi hanno collegamenti in parallelo pin to pin che sono impossibili da sbrogliare su un circuito monofaccia vale a dire gli header del bus di sistema e gli shift register e l alimentazione 12V che deve interessare tutti 1 gruppi relais led resistenza I relais vanno collegati ciascuno alla relativa uscita dell ULN2803 ma questo collegamento a raggiera male si concilia con il collegamento a matrice e con il collegamento dell alimentazione 12V Si fatto il possibile collegando senza ponticelli l alimentazione 12V collegata in orizzontale riga per riga ad una mandata principale verticale sul lato destro Sono stati collegati senza ponticelli 1 tratti orizzontali delle righe delle matrici Per 1 tratti verticali si riusciti comunque a mandare altri due segnali delle colonne delle matrici uno dal lato destro il sinistro era impegnato dall alimentazione e l altro passando abilmente tra 1 piedini delle resistenze limitatrici dei LED Gli altri due tratti verticali delle colonne si risolvono in una serie di ponticelli con il loro spazio dedicato a met basetta Ponticelli sul lato destro collegano le
219. oller e sarebbe stato in grado di accettare un range piuttosto ampio di tensioni di ingresso in modo da facilitare la sostituzione dell alimentatore in caso di rottura La complessit del circuito consigliava se non obbligava a realizzare una basetta incisa almeno monofaccia anzich utilizzare le basette millefori come si pensava inizialmente Avendo deciso di separare su due basette diverse il controller dai moduli e avendo deciso di prevedere la possibilit di collegare un numero variabile di moduli al controller era necessario prevedere un minimo di logica di controllo anche sui moduli e un bus di sistema con possibilit di comunicazione dei dati anche se solo monodirezionale dal controller ai moduli Era desiderabile la possibilit di poter realizzare la rilevazione automatica del numero di moduli connessi Entrambi 1 problemi sono stati risolti semplicemente economicamente ed elegantemente con degli shift register dotati di latch da collegare in cascata in numero Termine sintetico inglese per indicare gli scatolotti neri con spina che si inseriscono direttamente in una presa di corrente e forniscono bassa tensione AC o DC per piccoli apparecchi elettronici Per tutta la relazione si preferito utilizzare un termine inglese quando pi sintetico e o pi preciso del corrispondente italiano 16 arbitrario Dal controller escono i segnali di data clock e store che finiscono sul primo shift register della prima b
220. olte Se trova 1 su Feedback che ha un resistore di pull up su scheda 09 Interrupted chain Per 4 volte movlw OxFF Invia 16 1 sugli shift register call shiftout call shiftout incf SlotN F ifflbc ShRegPort FeedbackBit autotestOk Se trova 1 abbiamo determinato il numero di moduli autotestLooper i021 Altrimenti ci sono pi moduli autotestFallito I moduli connessi sono pi di 4 0x15 15 Too many modules errore Flag FlVerboseAutotest i067 movil call mov call W yn trasmit ngu trasmit 182 call newline ifend 1067 return autotestFallito ifbs Flag FlVerboseAutotest i066 movlw wN call trasmit movlw TOM call trasmit call newline ifend 1066 return i P shiftout store Coppia di routine di shiftout Manda gli 8 bit pre tramite i pin data store Manda un fronte di salita sugli store degli shift register r ai latch agli stadi di uscita dagli shift registe basso livello per interazione con gli shift registers senti in W agli shift register dal LST al MSB e clock con trasmissione sincrona trasferendo l informazione shiftout movwf ShiftMe forl shiftoutLooper 8 1012 DEE ShRegPort DataBit btfsc ShiftMe 0 bsf ShRegPort DataBit pef ShRegPort ClockBit bsft ShRegPort ClockBit ELE ShiftMe F next shiftoutLooper i012
221. on gli consentiva di programmare tutti 1 PIC e che ho dovuto correggere per programmare 1 miei Inoltre dopo un certo numero di utilizzi ha cessato di funzionare inspiegabilmente e non sono riuscito ad avere assistenza dalla ditta per la riparazione n a trovare nessun componente guasto a parte il microcontrollore pre programmato presente sulla basetta Per consolarmi ho cannibalizzato la basetta recuperandone 1 componenti S HEX il formato dei file binari da inserire nella memoria FLASH dei microcontrollori un formato basato su ASCII con ogni riga contenterete indirizzo di memoria e dati da inserire nelle celle adiacenti in esadecimale Il prodotto della compilazione di firmware per PIC un file HEX 24 Il programmatore commerciale acquistato dalla Futura morto dopo pochi mesi di utilizzo e non pi riparabile MPASM Assembler Impariamo a programmare i PIC Una volta verificato che i microcontrollori venivano programmati ed era possibile rileggere 1l codice inserito dentro a conferma che il programmatore funzionava bene non restava che far pratica con il linguaggio di programmazione per poter inserire nei chip programmi sviluppati in proprio Ambiente di sviluppo integrato IDE La Microchip stessa fornisce gratuitamente un compilatore assembler chiamato MPASM oggi disponibile nella versione 3 e un ambiente di sviluppo integrato chiamato MPLAB di cui ora disponibile la versione 6 per Windows a 32 bit I
222. one a tutti gli utilizzatori in modo da garantire per quanto possibile la stessa tensione ovunque Alcune piste di alimentazione particolarmente critiche possono essere ingrossate ricoprendole integralmente di stagno in fase di saldatura Due piste parallele e poco distanziate si comporteranno come un condensatore e segnali elettrici possono copiarsi da una all altra per accoppiamento capacitivo Le piste con 1 segnali di programmazione bene che abbiano tutte la stessa lunghezza Alcuni componenti vanno posizionati molto vicino ad altri per esempio 1 condensatori di bypass dell alimentazione 52 vicino agli integrati CMOS Occorre prevedere gli ingombri dei dissipatori da montare sui componenti che ne hanno bisogno Se il circuito prevede led di segnalazione o interruttori questi devono poter essere visibili o accessibili e quindi non vanno montati vicino a componenti con ingombro verticale elevato A volte si pu rivedere lo schema elettrico per facilitare lo sbroglio il caso dei piedini di I O digitale dei microcontrollori che possono essere riassegnati ad altri senza particolari problemi Eagle facilita di molto il compito poich per ogni componente inserito nello schema elettrico viene automaticamente generato anche il footprint sulla basetta con airwires rappresentati come linee gialle scure da Eagle che indicano quali pin sono collegati fra loro pi facile cos posizionare correttamente 1 componenti prima di
223. oni sul Tech Model RailRoad Club e su Richard Stallman fondatore della Free Software Foundation Steven Levy Hackers Gli eroi della rivoluzione informatica Shake ed Underground Scrittura di un parser Paolo Sancono Generazione dell albero corrispondente ad un documento XML mediante un parser scritto in Java Tema d anno per il corso di Sistemi Informativi Politecnico di Bari A A 2005 Testo della Gnu General Public License GPL http www gnu org licenses gpl txt Testo della Gnu Free Documentation License FDL http www gnu org licenses fdl txt Elettronica applicata Newsgroup in lingua italiana di riferimento per l elettronica applicata in generale e relativa ai microcontrollori Sui newsgroup figurano un migliaio di post a mio nome news it hobby elettronica news it hobby elettronica digitale Newsgroup in lingua inglese di riferimento per l elettronica applicata news sci electronic circuits design Schemi di connettori del presente e del passato http www hardwarebook net Standard RS 232 http www camiresearch com Data_ Com_Basics RS232_standard html http www arcelect com rs232 htm http www beyondlogic org serial serial htm 200 Assembler dei PIC PicBook corso di autoapprendimento all uso dei microcontrollori PIC della Microchip http www mikroelektronika co yu english product books PICbook Il Picbook disponibile in lingua inglese gratuitamente s
224. oppo passato del tempo tra la stampa e il trasferimento con pressa a caldo poich ci s1 era dimenticati di accendere la pressa per tempo e date le generose dimensioni della basetta pi difficile portarla tutta a temperatura e garantire un processo uniforme su tutta la superficie il toner si era ben fissato alla carta si era seccato parecchio e si screpolato in qualche punto durante il trasferimento Incidere la basetta sarebbe significato sprecarla poich in corrispondenza delle spaccature del toner si sarebbero ottenute piste interrotte non pi utilizzabili E stato sufficiente qualche ritocco con una penna decon dalo ad inchiostro acrilico specifica per il disegno manuale delle basette per ovviare all inconveniente Anche se si stati sfortunati c stato l inconveniente di dover ripassare le piste screpolate col pennarello di solito non succede si comunque risparmiato tempo materiali attrezzature a patto di avere una copisteria vicino casa denaro con questo metodo rispetto al classico metodo di fotoriporto con bromografo 62 cristal e 1c0 o FERRI CLORUR aa 2708 08 gr 1098 ert t print oF si da a geneerear Cloruro ferrico in grani Per l incisione si usato il pi che classico docile e tranquillo cloruro ferrico Si scelto il tipo in grani da sciogliere in comune acqua di rubinetto anzich liquido gi dosato poich cos possibile regolare a pro
225. oprietarie La richiesta non prevede una lista di canali ma la semplice richiesta della condizione di apertura chiusura di tutti 1 relais La risposta prevede 1 primi due caratteri che indicano mediante un numero decimale quanti altri caratteri attendere nella risposta I primi due caratteri possono essere 00 16 32 48 64 a seconda del numero di moduli collegati Seguono quindi 0 e 1 ad indicare relais aperti o chiusi ordinati dal numero di canale pi piccolo al pi grande Infine il carattere new line La sintassi della risposta simile a quella di WAVEFORM POINTS degli oscilloscopi Agilent 1 primi caratteri indicano quanti altri caratteri sono presenti nella risposta 89 Switch Control Commands BOOTa CLOSe feriti ta CLOSE EXCLusive Mec Aaa CLOSe Meo lata Close the specified channels on a multiplexer or switch module If any multiplexer channels are configured to be part of the scan list you cannot close multiple channels on that module closing one channel will open the previously closed channel On the other modules you can use the EXCL command to ensure that all channels are open before closing the specified channel The SLOS query returns the state of the specified channels Returns 1 ifthe channel ds closed or O if the channel 1s open Un the 20 channel multiplexer 3490041 only one of the shunt switches ichannels 21 and 22 can be closed at a time connecting one channel will close the o
226. osta all evento di pressione del bottone Chiudi viene generato il comando ROUTE CLOSE opportuno e inviato allo strumento in base alla posizione corrente delle 158 manopole che entra con un tunnel nel gestore degli eventi L altro tunnel porta invece l identificatore della porta seriale utilizzata oj Timeout vh Risposta ricevuta 1 la 4 Colonna value Change Yp Gli altri gestori di eventi Altri 4 gestori di eventi sono stati programmati Pressione del bottone Apri il cui codice analogo a quello relativo alla pressione del bottone Chiudi Le differenze sono che utilizza due variabili locali per l accesso agli indicatori Comando Inviato 1 Risposta Ricevuta 1 poich 1 relativi indicatori erano gia stati utilizzati nel gestore di eventi del bottone Chiudi L altra ovvia differenza che invia 11 comando ROUTE OPEN anzich ROUTE CLOSE Timeout Il gestore di eventi per il time out che vuoto Tale gestore presente perch si desidera ripetere continuamente le query sullo stato attuale anche se l utente non aziona bottoni del front panel Due gestori di eventi per la rotazione delle manopole vengono immediatamente spenti 1 due led di indicazione stato attuale del collegamento in attesa che la query successiva ne rilegga il valore aggiornato e li riaccenda Come si vede 1 costrutti disponibili in LabView sono potenti e permet
227. ottenendo la tranquillit di appuntare tutte le idee man mano che venivano in mente senza 78 curarmi subito se dove e come era giusto inserire ciascuna idea nella relazione era importante nella fase iniziale non perderne neanche una La stesura della relazione consistita solo nel riordinare queste idee suddividendole in capitoli e paragrafi opportuni espandendo 1 contenuti l dove serviva corredando di foto e diagrammi dove opportuno e _ My i a sa k P m T I i j ni pa w ns m oe amp mi o mo Scheda video dual head con supporto per due monitor su cui sono aperti documenti differenti Ogni volta che era necessario modificare un file di testo riorganizzando l ordine dei concetti e per la stesura della relazione mi sono avvalso della scheda video dual head vale a dire con la possibilit di generare due immagini differenti su due monitor Le operazioni di taglia incolla di porzioni di testo da un documento ad un altro erano cos immediate e si potevano tenere sott occhio contemporaneamente gli appunti e il testo definitivo Decisioni da prendere decisioni prese Durante la definizione dei diversi aspetti del problema capita continuamente di dover prendere decisioni su come procedere ed effettuare scelte pi o meno definitive e pi o meno rivedibili Spesso diverse scelte sono collegate tra loro e a volte non possibile prendere una decisione su un aspetto del problema se
228. ow this License in all other respects regarding verbatim copying of that document 7 AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works in or on a volume of a storage or distribution medium is called an aggregate if the copyright resulting from the compilation is not used to limit the legal rights of the compilation s users beyond what the individual works permit When the Document is included in an aggregate this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document If the Cover Text requirement of section 3 is applicable to these copies of the Document then if the Document is less than one half of the entire aggregate the Document s Cover Texts may be placed on covers that bracket the Document within the aggregate or the electronic equivalent of covers if the Document is in electronic form Otherwise they must appear on printed covers that bracket the whole aggregate 8 TRANSLATION Translation is considered a kind of modification so you may distribute translations of the Document under the terms of section 4 Replacing Invariant Sections with translations requires special permission from their copyright holders but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections You may include a translation of this Licens
229. p fclose MatrixSp delete MatrixSp clear MatrixSp evalin base clear MatrixSp matrixread m function Risposta MatrixRead MatrixRead oP oP ol Legge una intera riga terminata dal carattere newline dalla porta seriale 185 alla quale stato collegato il circuito Relais Matrix Il carattere newline non verr passato in uscita Se non viene incontrato alcun newline viene passata in uscita una stringa vuota dopo il timeout dell oggetto seriale Sintassi s MatrixRead Parametri di uscita Risposta Stringa ricevuta dalla porta seriale NOTA MatrixSp deve essere gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixRead AP oP AP AW oP oP NW AP A WP AW WP do OW do global Mabrixsp if get MatrixSp BytesAvailable gt 0 Risposta fscanf MatrixSp end matrixwrite m function MatrixWrite cmd MatrixWrite Invia una stringa terminata dal carattere newline sulla porta seriale alla quale stato collegato il circuito Relais Matrix Il carattere newline non va passato in ingresso Sintassi MatrixWrite cmd Parametri di ingresso obbligatori cmd Stringa da inviare sulla porta seriale NOTA MatrixSp deve essere gi presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunic
230. pici assorbimenti impulsivi di corrente dei chip in tecnologia CMOS bypassando l alimentazione proprio vicino all integrato Il led LEDI segnala che l alimentazione a 5V presente Microcontrollore Il resto del circuito tutto costruito attorno al microcontrollore Sul lato sinistro spicca il cristallo di quarzo E stato scelto un oscillatore al quarzo poich necessaria una temporizzazione precisa per realizzare la comunicazione seriale in maniera affidabile Il valore dei condensatori verso massa presenti accanto al quarzo consigliato direttamente sul data sheet Sul lato sinistro spicca pure un header a 5 pin utilizzato per PICSP In circuit serial programming DI e R3 servono ad evitare che la tensione di 13 8V applicata al piedino 4 del PIC durante la riprogrammazione possa raggiungere l alimentazione a 5V del circuito 49 danneggiando il PIC e gli altri integrati montati sul circuito Durante l uso normale lo stesso diodo e la stessa resistenza realizzano un pull up a 5V positivi sul piedino 4 MCLR che un segnale di reset attivo basso per 11 PIC a meno che non venga disabilitato Il PIC scelto PICI6F628 consente la disabilitazione del segnale altri PIC pin to pin compatibili necessitano invece del pull up verso SV Si deciso pertanto di montare sul circuito DI e R3 in modo da consentire l eventuale successiva migrazione verso PIC differenti con la stessa piedinatura che abbiano bisogno di tale p
231. prio piacimento la concentrazione per ottenere tempi di incisione pi o meno rapidi Personalmente preferisco tempi di incisione di 12 minuti circa cos che sbagliando di un minuto in pi o in meno la basetta comunque utilizzabile Nel caso si debbano produrre molte basette identiche si possono preferire tempi di incisione pi rapidi 4 5 minuti ottenibili con una concentrazione maggiore o portando la soluzione a temperatura pi alta ma occorre essere molto precisi nell istante di arresto reazione per non assottigliare le piste pi piccole fino a distruggerle Il cloruro agisce infatti inizialmente verticalmente ma una volta che sia stato corroso tutto il rame esposto comincia ad agire lateralmente attaccando le piste ai lati passando sotto l inchiostro Anzich travasare continuamente il cloruro ferrico da una vaschetta ad una bottiglia e viceversa con tutti 1 problemi che possono derivare si preferito conservarlo sempre nella sua vaschetta L unica accortezza stata quella di sceglierne una con chiusura ermetica Man mano che il cloruro ferrico perde di efficacia aggiungo semplicemente altri grani ritardando di molto il momento in cui necessario preparare una nuova soluzione poich lo S seri a s 44 smaltimento difficoltoso e occorre rivolgersi a centri specializzati Esistono altri composti per l incisione che richiedono tempi di incisione pi rapidi ma comportano reazioni pi violente
232. questo stato che lo spegne stSeekNewLine Si arriva in questo stato se c stato un errore nell istruzione Non si processa i pi nulla della riga attuale e si attende solo il carattere new line per iniziare il parsing della nuova riga Il led rimane acceso quando si permane in questo stato e spento quando vi si esce in modo da avvisare l operatore che la macchina a stati non sta processando nulla ma sta solo aspettando il carattere newline lfeel LastChar 0x0A 1003 letl State StStartOfLine LedOff ifend 1003 goto nextChar ChiocciolaOnly Se StSeekNewLine lo stato dal codice pi semplice in assoluto StChiocciolaOnly non da meno dopo la parentesi aperta relativa all inizio di una lista di canali la sintassi prescrive la presenza di una chiocciola Questo stato verifica solo questo e passa il controllo a StRiempiLista dopo avergli preparato variabili ausiliarie svuotate StRiempiLista 11 secondo stato della catena di tre stati che processa le liste di canali stChicee olaonly ifeel LastChar de 10 3 In questo stato si attende solo la dopo una clrf Lista e si azzerano le strutture di memoria clrf Listatl che ospiteranno la lista di canali St Listat2 clrf Lista 3 clrf Lista 4 clrf Lista 5 clrf Lista 6 clrf Listat7 clrf IdentLength letl State StRiempiLista ifelse 1057 1070 Se non si riceve una messaggio di errore movlw 0x05 05 Invalid Char call errore letl State StSeekN
233. r numbered version of this License or any later version applies to it you have the option of following the terms and conditions either of that specified version or of any later version that has been published not as a draft by the Free Software Foundation If the Document does not specify a version number of this License you may choose any version ever published not as a draft by the Free Software Foundation ADDENDUM How to use this License for your documents To use this License in a document you have written include a copy of the License in the document and put the following copyright and license notices just after the title page Copyright c YEAR YOUR NAME Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 2 or any later version published by the Free Software Foundation with no Invariant Sections no Front Cover Texts and no Back Cover Texts A copy of the license is included in the section entitled GNU Free Documentation License If you have Invariant Sections Front Cover Texts and Back Cover Texts replace the with Texts line with this with the Invariant Sections being LIST THEIR TITLES with the Front Cover Texts being LIST and with the Back Cover Texts being LIST If you have Invariant Sections without Cover Texts or some other combination of the three merge those two alternatives to suit the situation If your documen
234. ram does not specify a version number of this License you may choose any version ever published by the Free Software Foundation 10 If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different write to the author to ask for permission For software which is copyrighted by the Free Software Foundation write to the Free Software Foundation we sometimes make exceptions for this Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally NO WARRANTY 11 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE THERE IS NO WARRANTY FOR THE PROGRAM TO THE EXTENT PERMITTED BY APPLICABLE LAW EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND OR OTHER PARTIES PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND EITHER EXPRESSED OR IMPLIED INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU SHOULD THE PROGRAM PROVE DEFECTIVE YOU ASSUME THE COST OF ALL NECESSARY SERVICING REPAIR OR CORRECTION 12 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER OR ANY OTHER PARTY WHO MAY MODIFY AND OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE BE LIABLE TO YOU FOR DAMAGES INCLUDING ANY GENERAL SPECIA
235. rameters Channel list parameters specify one or more channel numbers on the module in the specified slot The channel list must be preceded with the symbol and enclosed in parentheses The following command uses a channe dist parameter BOUTe CHANnel DELay Merck det The following command configures a scan lst to include only channel 10 on the module In slot 300 ROUT SCAN b310 The following command configures a scan list to include multiple channels on the module in slot 200 The scan list now contains only channels 10 12 and 15 the scan list is redefined each time you send a new ROUTe SCAN command BOUT SCAN 210 212 215 La pagina del manuale Agilent che descrive la sintassi per le liste di canali Ed ecco gli appunti presi a riguardo Le liste di canali hanno questa sintassi 101 LOL 1025204 101 104 106 Gli estremi devono essere validi col circuito attuale Negli intervalli cono due punti s possono sorvolare POSIZIONI Non valide ma inizio e fine devono essere validi Man mano che si riconoscono numeri di slot viene preparata in memoria la lista degli slot che l operazione corrente interesser Se il comando termina lt orrettamente la lista verra utilizzava altrimenti verra scartata Non si supporta la sintassi coi per si segnala errore non implementata non errore generico di sintassi non riconoscluta cos che in revisioni successive del firmware la si possa implem
236. rante l esecuzione del programma Al nostro programma occorreva questa caratteristica per memorizzare 1 caratteri ricevuti in sequenza riconoscendo eventuali identificatori presenti Assieme al BIOS del nostro sistema descrivo quindi anche una rudimentale gestione di stringhe realizzata con due macro e una routine 114 Cr ee Variabili e Costanti cblock 0x20 ETEN Variabili globali Ident 8 Buffer che contiene la stringa dell identificatore in parsing IdentLength Lunghezza della stringa memorizzata in Ident ifident3 macro charl char2 char3 alabel Si usa come gli altri if in psifthen inc ifeel IdentLength 3 alabel Riconosce l ugualianza tra i primi 3 caratteri di Ident ifeel Ident charl alabel e controlla anche che Ident abbia lunghezza 3 ifeel Tdent l char2 a label ifeel Ident 2 char3 alabel endm ifident4 macro charl char2 char3 char4 alabel Come ifident3 ma controlla 4 caratteri ifeel IdentLength 4 alabel ifeel Ident charl alabel ifeel Ident 1 char2 alabel ifeel Ident 2 char3 alabel ifeel Ident 3 char4 alabel endm una stringa a lunghezza variabile la cui lunghezza attuale viene conservata in IdentLength La routine IdentAddChar aggiunge il carattere passato in W in coda a Ident L J Ident un buffer di byte consecutivi in memoria che implementa in Assembler J J Se Ident gi alla dimensione massima il carattere
237. rasmette il codice numerico della stringa uno spazio la stringa e un new line Emette inoltre un beep se 11 messaggio ha indice gt 3 ovvero se un messaggio di errore Per 1 messaggi 01 e 02 non viene emesso il beep poich sono messaggi informativi Data l architettura Harvard dei PIC le look up tables non possono essere memorizzate in RAM Vengono memorizzate invece in ROM La CPU accede alla ROM solo per il Fetch delle istruzioni ma da programma non dato di accedere ai contenuti della ROM quindi sembrerebbe impossibile memorizzare look up tables Nei PIC esiste per una istruzione apposita retlw Return with literal in W che esegue 1l ritorno da subroutine lasciando nell accumulatore un valore immediato E l istruzione ideale per realizzare una look up table basta far precedere una lunga sequenza di retlw da una istruzione di incremento di PCL Program Counter Low il registro che memorizza gli 8 bit bassi del Program Counter che conserva l indirizzo della prossima istruzione da eseguire Il compilatore facilita ulteriormente il compito sostituendo automaticamente il mnemonico dt Define Table che accetta anche una stringa tra doppi apici con una sequenza di istruzioni retlw Gn Tavole Look up tables EEE e N A sroos lt ich Liu tavMsgSizes bcf PCLATH 0 bcf PCLATH 1 addwf PCL F dt Ory ces Uno zero in pi perch comodo nella routine che usa la tavola Un altro zero perch il codice 00 non viene util
238. raticamente tutti gli alimentatori per PC ATX montano componenti dimensionati per met della potenza di targa e infatti esperienza comune che 73 Assorbimento ingombri pesi Il circuito finito E collegato un solo modulo il cui terminatore inserito Finito il circuito sono state effettuate misure di assorbimento dimensioni peso sui circuiti in modo da compilare il foglio delle caratteristiche tecniche elettriche e meccaniche salienti della macchina costruita Alimentazione Assorbimento 9 15V AC A riposo 30 mA 12 18V DC qualunque polarit Ogni coppia Relais Led inserita 110 mA Connettore Standard 2 5x5 5x9 5 mm Max con 1 modulo 16 relais accesi 1 8 A Ingombri Pesi Controller 90x65x50 mm Controller 89 g Modulo Relais 250x114x50 mm Modulo relais 510 g Wall cube 75x62x 50 38 mm Wall cube 480 g Caratteristiche elettriche e meccaniche salienti del sistema Consuntivo costi Prima di realizzare il progetto stato stilato un preventivo Viene qui mostrato il solo consuntivo poich le differenze tra 1 due sono minime Nel consuntivo figurano 1 costi per la basetta del controller e del modulo a relais non quelli del programmatore per PIC e del circuito di test del max232 I prezzi sono al dettaglio al tali alimentatori tendono a rompersi piuttosto facilmente 74 negozio di componenti elettronici quindi purtroppo un po cari Si poteva risparmiare parecchio acquistando 1 componenti in qu
239. realizzare sulla basetta per piccoli errori di progetto che possibile risolvere con tecniche cut amp wire o altre da valutare caso per caso Le possibilit di intervento sono minime quindi nel progetto di un circuito occorre dedicare molta pi attenzione rispetto al progetto di un software ICSP non funziona La prima brutta notizia relativa al circuito stata che non si riusciva a programmare il microcontrollore in circuit ma occorreva rimuoverlo e inserirlo nel programmatore La cosa non era tollerabile perch durante il debug del firmware occorre aggiornare continuamente la programmazione e verificare le funzionalit 1 reofori del componente si sarebbero rotti dopo ripetuti inserimenti e disinserimenti nel circuito e nel programmatore Il problema comune a molti circuiti che il programmatore di fatto si trova ad alimentare con la sua alimentazione a SV tutto il circuito ospite Se la potenza elettrica resa disponibile dal programmatore non sufficiente il chip non verr programmato Inoltre si rischiava di rompere il 7805 poich gli si collegava alimentazione a valle dal programmatore senza alimentazione a monte Una soluzione funzionante stata interrompere tagliandola con una fresa una pista di alimentazione da 5V che portava corrente al microcontrollore sostituendola con un header su cui montare un ponticello del tipo di quelli usati nei PC per configurare le schede di espansione e la mother board da inserire per
240. reso a modello e quanto distanziarsi per rendere l implementazione pi semplice o attuabile Appunti in file di testo Per ottimizzare 1 tempi evitando di rivedere la stessa questione pi volte e per ordinare le idee in modo da suddividere il problema complesso della realizzazione della macchina in problemi distinti pi facili da trattare singolarmente era necessario prendere appunti il pi possibile dettagliati e precisi sui diversi aspetti del problema da archiviare in maniera il pi possibile ordinata in modo da poterli ritrovare non appena fosse necessario Per molte persone la scelta obbligata in questa prima fase l utilizzo di carta e penna e diagrammi con blocchi e frecce che rispecchino gli schemi mentali con 1 quali si sta approcciando il problema Anche se mi costato fatica inizialmente mi sono imposto di rinunciare all immediatezza di carta penna e schemi in favore di file di testo che hanno il grosso vantaggio di poter essere archiviati pi facilmente e nei quali si pu riorganizzare l ordine delle informazioni molto rapidamente Pi che un livello di dettaglio elevato importante utilizzare un livello di dettaglio uniforme per 1 diversi aspetti del problema e dettagliare meglio dopo sempre utilizzando un livello di dettaglio uniforme man mano che ciascun aspetto prende corpo Durante le prime fasi di progetto quando molte scelte sono ancora rivedibili controproducente dettagliare tropp
241. retto come uscita che il flusso del programma non sia dove ci aspettiamo che disturbi in radiofrequenza sovrascrivano 1 registri interni del PIC e moltissime altre questioni da valutare con pazienza che non si verificano quando si sviluppa un software per PC in cui almeno tastiera mouse e monitor funzionano fin dall inizio Un buon punto di inizio Le prime routine da programmare sono quindi quelle relative ai sistemi di Input Output pi semplici presenti sulla basetta Nel nostro caso il led rosso di segnalazione Una volta scritta una routine funzionante per il Led si potr usare questa segnalazione per sviluppare il resto segnalando con il led il passaggio per punti critici del codice una delle caratteristiche pi necessarie durante il debug Man mano quindi si realizza e si testa 1l BIOS del firmware Si quindi obbligati ad una programmazione bottom up ovvero piccole routine funzionanti di accesso all hardware che se l ultima operazione ha avuto per risultato Zero o ha generato un riporto t Basic Input Output System Letteralmente Sistema base di ingresso uscita ovvero di comunicazione del firmware con l hardware In un PC il BIOS gi pronto in una memoria non volatile sulla scheda madre e difficilmente un utente riprogramma da s 11 BIOS In un circuito con microcontrollore 11 BIOS va realizzato ex novo ogni volta 106 costruiranno poi le routine pi complesse E essenziale avere routine af
242. ricezione del successivo new line Ciascun utente che programmera il PC pu scegliere l approccio a lui pi congeniale nell utilizzare la macchina che si spera possa essere usata proficuamente e con soddisfazione nelle attivit di sperimentazione 166 Appendice B Listati dei programmi Firmware in Assembler psifthen inc psifthen 1 2 Copyright C 2000 2003 Paolo Sancono http www ideegeniali it This program is free software you can redistribute it and or modify it under the terms of the GNU General Public License as published by the Free Software Foundation either version 2 of the License or at your option any later version This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License for more details You should have received a copy of the GNU General Public License along with this program if not write to the Free Software Foundation Inc 675 Mass Ave Cambridge MA 02139 USA Macro in assembler per PIC rendere agevole il controllo di flusso vengono implementati if then if then else for donwto next repeat until Nel file asm che intende utilizzare queste macro mettere INCLUDE lt psifthen inc gt subito dopo INCLUDE lt processore inc gt Esempio LIST p 16 628 i INCLUDE lt p16f628 in
243. ridi di produzione con un rapporto di forma a dir poco particolare 12 cm x 200 cm Sono state tagliate a misura leggermente abbondante per tolleranze di centratura del master nel mio procedimento di incisione con un disco da taglio montato sul trapanino dopo aver sistemato la basetta su sostegni di polistirolo il polistirolo contemporaneamente solido da mantenere la forma cedevole da adattarsi alla forma del materiale elastico da assorbire le vibrazioni Taglio delle basette a misura leggermente abbondante con 1 dischi da taglio per trapanino Dopo il taglio delle basette si procede ad una accurata pulizia con pasta abrasiva alcuni suggeriscono la pagliette metalliche in vendita presso 1 ferramenta che rendono molto lucido il rame io suggerisco del comune Vim in polvere E importante rimuovere impronte digitali Questo tipo di distribuzione favorisce lo scambio di informazioni tra programmatori e lo sviluppo a pi mani di programmi validi in tempi brevi 59 e asperita della superficie per garantire risultati ottimali nelle fasi successive del procedimento di incisione Pulitura con polvere abrasiva del lato rame della basetta Tra la lucidatura della basetta e il successivo riporto delle piste bene non passi molto tempo perch il rame si ossida molto rapidamente e lo strato di ossido pu rendere pi difficile l aderenza al toner nel passaggio successivo Vedere sul mio sito http www ideegenia
244. rio quindi un cavo null modem ovvero con 1 fili invertiti per collegare 1l controller al PC Con questa soluzione dovrebbe essere possibile utilizzare la scheda in remoto attraverso la linea telefonica collegandola ad un modem configurato in auto answer Per quanto riguarda il buzzer piezo elettrico si scelto il tipo con oscillatore integrato vale a dire che basta alimentarlo per ottenerne un suono La corrente consumata dal buzzer dell ordine di 15mA e lo stesso pu quindi essere collegato direttamente ad un piedino di uscita del microcontrollore in grado di erogare o assorbire 20mA da ciascuna uscita digitale non stato quindi necessario inserire un transistor per pilotare il buzzer Con le informazioni raccolte stato stilato un preventivo di massima che ometto per brevit che poi si rilevato grosso modo esatto e praticamente identico al consuntivo finale che verr presentato in seguito DTE Data Terminal Equipment apparecchio che produce e utilizza i dati tipicamente un PC DCE Data Communication Equipment apparecchio che trasporta 1 dati verso una destinazione remota tipicamente un Modem L indicazione su come collegare 1 pin per costruire un cavo null modem verr data in seguito 19 Capitolo 2 Hardware Sperimentazione Non si puo pretendere di progettare e costruire da zero un circuito complesso e sperare che funzioni al primo colpo Specie se il circuito composto da pi parti e le
245. risolvere il dilemma Una volta svuotata la sezione aspetti da fissare questa si riempiva da capo quando si desiderava dettagliare meglio qualche aspetto facendo esplodere differenti scelte implementative di livello pi basso Questa fase di organizzazione delle idee prima e dei dettagli implementativi spiccioli dopo essenziale e determinante per la buona riuscita pi tempo si dedica alla progettazione pi diretta sar la scrittura del codice Le revisioni quando ci Si accorge di una scelta infelice sono possibili ma pesanti frustranti perch spesso si butta via molto del lavoro fatto e fonte di errore se non si aggiorna contemporaneamente tutto quanto si implementato e documentato con la modifica proposta Questa sezione di appunti informe in continuo divenire e cessa di esistere quando 1l progetto finito poich tutte le scelte sono state effettuate e riportate nella documentazione delle specifiche e tutti 1 dettagli implementativi realizzati divenuti ormai circuito e firmware Mostro per alcuni esempi di questi appunti per dare un idea pi concreta di che si tratta e per rendere pi snella la successiva descrizione del firmware In questo paragrafo descrivo le scelte che hanno portato ad una certa implementazione nel paragrafo di commento al firmware descrivo come 1 costrutti assembler utilizzati implementano queste idee senza ripetere le considerazioni di principio e di opportunit fornite qui Il pa
246. rrore nell istruzione ifend ifeel ifeel ifend bef ifeel ifend ifeel ifend ifeel ifbs Anzich implementare una routine di da binario a decimale poich questo l unico caso di utilizzo della conversione binario decimale casi si risparmierebbe pi memoria con una routine dedicata letl State StStartOfLine goto nextChar 1039 SSDefault SSSystem i077 SSParsed SSModule i077 i SYSTEM MODULE movf SlotN W addlw TEO call trasmit call newline letl State StStartOfLine goto nextChar 1077 Flag FlLogic FlLogic SSParsed SSParsed SSClose SSParsed SSClose 1107 SSOpen bsf Flag FlLogic bef Flag FlInvert 1107 SSParsed SSOpen 1108 bsf Flag FlLogic bsf Flag FlInvert Gli 1 e 0 inviati da sendINDF verranno complementati 1108 SSDefault SSRoute 1082 Flag FlLogic 1082 ROUTE CLOSE oppure ROUTE OPEN ifeel SlotN 0 1083 movlw mon call trasmit movlw mon call trasmit call newline let State StStartOfLine goto nextChar ifend 1083 moltiplicazione di SlotN per 16 e successiva conversione preferito un mero elenco di if then per ogni possibile valore di SlotN Se ci fossero pi casi si risparmia si Essendo pochi i memoria con l approccio ad elenco di if then
247. rser sar implementato con una macchina a stati Lo stato principale verr indicato dal punto di esecuzione corrente Altre variabili di appoggio memorizzeranno eventuali GOSCEULLI Gila riconosciuti Non ci sar la variabile di stato principale ma direttamente la posizione di esecuzione indicher in che stato ci si trova Se si riesce ed una idea valida si user lo stack hardware del PIC come stack degli stati evitando di implementarne uno software 80 Queste erano decisioni iniziali per il parser che sono state poi riviste modificate e stravolte ma sono servite come punto di partenza e paletto fissato per costruire il resto del progetto senza pensare piu al parser Aver fissato le idee sul parser ha consentito di analizzare la sintassi dei comandi da riconoscere verificando che il parser cos come era stato pensato sarebbe stato in grado di farlo Finito di definire l elenco delle sintassi che il parser doveva riconoscere si dovuta rivedere la struttura del parser Il parser finale ha utilizzato una variabile per indicare lo stato principale anzich il punto di esecuzione non ha usato uno stack di stati n hardware n software sopperendo alla sua mancanza con molte variabili di stato ausiliarie Ecco un esempio di decisioni obbligate dettate dal data sheet dello strumento Agilent che descrive la sintassi da riconoscere Pur essendo tutto fissato c ancora qualche grado di libert possibile Channel List Pa
248. s 186 i Lair 188 Appendice C GNU Free Documentation License ssssssssccccssssssssssssssccees 190 Appendice D GNU General Public License cccccccsssscsssscccssssssssssssssssssees 194 Fonti delle figure Software utilizzato sssscssssssssscsscccccccccccccccccsssssssssssssees 197 Bibliografia e Webliografia scssecccccscccecccesccsecocosccsccocccscesecocesccsccocosssececosssecseesesse 200 Contenuti In questo tema d anno vengono descritte tutte le fasi che hanno portato alla realizzazione di una matrice di switching da utilizzare in un laboratorio ATE Nel Capitolo 1 Introduzione dopo aver descritto sommariamente in cosa consiste un laboratorio ATE e alcuni dei problemi che si possono incontrare durante le sperimentazioni viene presentato il sistema oggetto del tema d anno che risolve alcune problematiche tipiche con un costo inferiore di almeno un ordine di grandezza ai prodotti commerciali equivalenti Dall idea generale del circuito si passa ad una descrizione pi dettagliata che mostra cosa 1l sistema in grado di fare Si riusciti nell introduzione a dare una descrizione accurata del sistema evitando pero di soffermarsi sui dettagli implementativi Nel capitolo 2 Hardware viene trattato diffusamente della realizzazione fisica del sistema Inizialmente vengono descritte le sperimentazioni sulle diverse sotto sezioni del circuito effettuate prima di affrontare la rea
249. s composed of pixels generic paint programs or for drawings some widely available drawing editor and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters A copy made in an otherwise Transparent file format whose markup or absence of markup has been arranged to thwart or discourage subsequent modification by readers is not Transparent An image format is not Transparent if used for any substantial amount of text A copy that is not Transparent is called Opaque Examples of suitable formats for Transparent copies include plain ASCII without markup Texinfo input format LaTeX input format SGML or XML using a publicly available DTD and standard conforming simple HTML PostScript or PDF designed for human modification Examples of transparent image formats include PNG XCF and JPG Opaque formats include proprietary formats that can be read and edited only by proprietary word processors SGML or XML for which the DTD and or processing tools are not generally available and the machine generated HTML PostScript or PDF produced by some word processors for output purposes only The Title Page means for a printed book the title page itself plus such following pages as are needed to hold legibly the material this License requires to appear in the title page For works in formats which do not have any title page as such Title Page means the text near the
250. salti condizionati unico per ogni struttura di cui si ha bisogno non essendoci la possibilit per le macro di richiedere al compilatore di creare una etichetta casuale senza chiedere all utente di specificarne una esplicitamente Questo complica un po le operazioni di copia incolla di pezzi di codice poich occorre modificare gli identificatori duplicati L inconveniente ben tollerato data la ricchezza espressiva possibile che rende molto pi comprensibile 11 codice Riporto qualche esempio di utilizzo e una succinta descrizione delle macro presenti rimandando 1 dettagli alla documentazione interna nel file psifthen inc il cui listato integrale presente in appendice Struttura if then else Esempio di utilizzo 1f then con condizione di non uguaglianza not equal ne iffne Datal Data2 myif F lt SLSECUZIONIS F lt XLSUIUZIONI gt ifend myif lt resto del programma gt 2 La raccolta di macro da me realizzata viene distribuita con licenza GPL Il file inc giunto al momento in cui si scrive alla revisione 1 2 ed liberamente scaricabile dal mio sito http www ideegeniali it Il file pu essere ridistribuito gratuitamente e utilizzato nei propri progetti a patto di distribuire anche 1 lavori derivati con licenza GPL 102 Dove myif l etichetta utilizzata per le condizioni Datal e Data2 due file registers da confrontare Sono disponibili altre macro relative agli if che realizzano 1 controlli di m
251. secuzione NOP 173 o ROUTe CLOSe Ricevuto il newline 200 ns O pa Occupa 1 te close termina il comando corrente consente di rilevare un header non riconosciuto sola word il prossimo Si attendono ulteriori numeri di canale si esegue il comando in memoria call endm BuzzOn macro DEFE endm BuzzOff bsf macro endm Ledon bcef macro endm LedOff bsf macro endm LedToggle macro negbit endm RtsGo bsf macro endm RtsHalt bef macro endm ifident3 macro QNOP BuzzPort BuzzBit BuzzPort BuzzBit LedPort LedBit LedPort LedBit LedPort LedBit RtsPort RtsBit RtsPort RtsBit A A A Seguono banali macro che settano o resettano piedini di uscita del PIC Accendendo spegnendo il Led il Buzzer piezoelettrico la linea RTS della seriale Si usa come gli altri if in psif inc charl char2 char3 alabel ifeel IdentLength 3 alabel Riconosce l ugualianza tra i primi 3 caratteri di Ident ifeel Ident charl alabel e controlla anche che Ident abbia lunghezza 3 lfeel Ident 1 char2 alabel ifeel Ident 2 char3 alabel endm ifident4 macro charl char2 char3 char4 alabel Come ifident3 ma controlla 4 caratteri ifeel IdentLength 4 alabel Il codice con macro non effici
252. sed Flag FlExclusive TdentLength LastChar 1002 let SSDefault let State StP goto nextChar 1002 LastChar A 1004 LastChar Z 1 1004 All inizio di precedentem una nuova riga Eheenttato Ml SSCommon arseld Incontrato movf LastChar W call IdentAddChar letl State StParseld goto nextChar 1004 LastChar 1011 goto nextChar 1011 LastChar 0x0A i014 goto nextChar 1014 0x05 errore State Sts nextChar kNewLin LastChar A 1i007 LastChar Z 1 1007 goto alfanum 1007 LastChar 0 i017 LastChar 9 1 1017 goto alfanum 1017 alfanum notalfanum Lo stato Parseld fino a riconoscere SSParsed Flag FLE No jIncontrato 705 Invalid if LastChar Incontrato Char 5 nte un carattere alfabetico Subsystem dei common commands ad inizio riga newline ad inizio riga lm TAY saan voi in caso di caratteri alfanumerici un Header xclusive un header non appa oppor rtenente al SubSystem corrente Quando un header riconosciuto tunamente in base a quanto si riconosciuto si ignora semplicemente il riconoscimento egnalato come non valido alla fine del comando poich SSParsed l header verr s rimasta al suo valore iniziale SSUndefined movf LastChar W call IdentAddChar r erdent4 RN SON
253. si in coda Ident variabile stringa a lunghezza dinamica implementata con routine di gestione stringa che contiene 1 successivi caratteri dell identificatore o numero di canale in riconoscimento Man mano che un identificatore viene riconosciuto Ident viene svuotata e quindi sovrascritta dall identificatore successivo dopo aver memorizzato adeguatamente nelle variabili di stato accessorie l identificatore riconosciuto Le dichiarazioni di queste variabili e dei codici numerici che possono assumere sono fatte all inizio del programma State Stato della macchina a stati di parsing SSDefault Ultimo subsystem utilizzato che resta come default SSParsed SubSystem il cui identificatore in parsing Inizialmente vale SSUndefined per permettere di riconoscere header non validi LE eee FlExclusive equ 5 Settato se riconosciuto il tag EXCLusive dopo ROUTe CLOSe siccome l unico tag di 3 livello implementato si preferito un Flag di un bit anzich una apposita variabile di SubSystem di 3 livello riconosciuto No No No No Inizialmente si pensava di mantenere il codice pi generico e utilizzare 3 variabili SS1 SS2 SS3 per 1 codici dei subsystem di primo secondo terzo livello e una variabile Nest che indicasse il livello al quale fosse giunto il parsing attuale Ciascuna di queste tre variabili andava poi raddoppiata per riconoscere un identificatore non valido nel parsing attuale ma conservare com
254. sione e ricezione nonch due linee per il controllo di flusso hardware e il riferimento di massa Per essere un circuito finalizzato alla sperimentazione col MAX232 e il test rapido del funzionamento della UART di un PIC fin troppo complesso Il circuito adattatore di livello consente di testare rapidamente la porta UART di un PIC 39 La sperimentazione con la UART del PIC e un PC su cui girava il terminale di Windows ha mostrato che velocit di 57600 baud sono tranquillamente sostenibili anche da un comune cavo schermato a due poli lungo 40 metri Velocit di 115200 baud o superiori invece vengono raggiunte con difficolt su cavi di lunghezza elevata o di scarsa qualit Si cos deciso di utilizzare la velocit di 57600 come buon compromesso tra rapidit di trasmissione e affidabilit anche su distanze pi elevate Cavo due poli schermo lungo 40 metri con connettori DSUB 9 utilizzato negli esperimenti per determinare la distanza massima raggiungibile affidabilmente per ogni velocit di trasmissione seriale Il nostro circuito monter un connettore a vaschetta a 9 pin DSUB 9 maschio poich quelli a 25 pin sono in disuso da tempo Esistono comunque degli adattatori per adattare un cavo di un tipo ad un connettore dell altro tipo I segnali presenti sul connettore a 9 pin sono 1 seguenti 1 5 00000 0000 6 9 connettore DSUB9 maschio visto da fuori Baud indica il numero di bit fisici tra
255. ssivamente il codice e 1l testo degli errori accodati con comandi successivi di interrogazione Questa struttura si presta bene ad essere utilizzata proficuamente su bus sofisticati come il GPIB ma poco adatta per una connessione punto a punto come quella realizzata dalla seriale Per quanto riguarda 1 messaggi di errore si preferito quindi allontanarsi dallo standard e prevedere che il controller rispondesse al PC dopo ogni comando ricevuto con un codice numerico decimale a due cifre uno spazio vuoto e una stringa informativa in modo da rendere molto facile l interpretazione dell errore sia ad un operatore umano che pu leggere facilmente la stringa informativa sia ad una macchina che pu leggere facilmente 11 codice numerico in posizione fissa all inizio della stringa restituita e di lunghezza costante pari a due caratteri Del resto anche gli errori dello standard prevedono un codice numerico e una stringa descrittiva Ci che cambia la modalit di comunicazione di questi errori immediata nel mio circuito ad accodamento secondo lo standard LO processor isolator framing error LO Processor isolator overrun error Communications RS 232 framing error Communications RS 232 overrun error t Communications RS 232 parity error RS 232 only unable to execute using HP IB 7 There are three commands which are allowed only with the RS 232 interface EYSTam LOCsal SYSTem REMota and SYSTem PWLock Communications
256. stChar 0x0A 1016 Incontrato un newline occorre eseguire il comando riconosciuto ifeel SSDefault SSCommon i024 ifeel SSParsed SSRst 1024 goto 0 RST resetta il PIC rieseguendo l inizializzazione ifend 1024 ifeel SSDefault SSCommon 1032 ifeel SSParsed SSC1s 1032 do nothing CLS viene riconosciuto ma non sortisce alcun effetto ifend 1032 ifeel SSDefault SSSystem i053 ifeel SSParsed SSCpon i053 call aggiornaModuli i SYSTEM CPON richiede di aggiornare gli shift register i nuovi valori sono gi stati memorizzati in Relais ifend 1053 ifeel SSParsed SSUndefined i088 Se SSParsed ancora SSUndefined messaggio di errore movlw 0x04 04 Undefined Header call errore letl State StStartOfLine goto nextChar ifend 1088 movlw 0x01 01 Completed Parte comune all esecuzione dei comandi call errore si visualizza 01 Completed e stato successivo inizio riga letl State StStartOfLine goto nextChar i016 LastChar 1008 Dopo uno spazio si attende l inizio di un nuovo identificatore CET Ident Length goto nextChar 1008 LastChar 1050 Parentesi aperta carattere valido se in precedenza si avuto peT Flag FlLogic ROUTE CLOSE o ROUTE OPEN e si aspetta la chiocciola ifeel SSDefault SSRoute i051 ifeel SSParsed SSClose 1052 pst Flag FlLogic ifend 1052 ifeel SSParsed SSOpen 1056 bsf Flag FlLogic ifend 1056 ifend 1051 ifbe Flag FlLogic 1054 Altrimenti messaggio di errore movlw 0x05 05 Invalid Char call errore
257. standard Dello stesso tenore l implementazione di due funzioni fuori standard attivate dai caratteri CTRL E e CTRL F il primo attiva l echo dei caratteri ricevuti e il secondo attiva l invio di terminatori di riga con la coppia CR LF anzich con LF soltanto Anche queste due funzioni sono molto utili nell interazione con la macchina tramite il terminale di Windows ma andrebbero eliminate dalla versione finale per compatibilit piena con lo standard SCPI oppure lasciate come estensioni proprietarie dello standard L implementazione poco elegante poich si utilizza lo stesso carattere per attivare e disattivare la funzione una implementazione pi elegante dovrebbe poter prevedere la possibilit di indicare esplicitamente l attivazione o disattivazione di una funzione Si fatta questa scelta poich la finalit il debug in interattiva al terminale di Windows e l operatore umano in grado di riconoscere immediatamente se la funzione attiva o disattiva e regolarsi di conseguenza ifeel LastChar 0x05 i096 Ricevuto CTRL E combinazione fuori standard negbit Flag FlEcho Attiva o disattiva l echo dei caratteri ricevuti goto nextChar Utile per il debug al terminale di Windows ifend 1096 ifeel LastChar 0x06 1100 Ricevuto CTRL F combinazione fuori standard negbit Flag F1CrLf Attiva o disattiva il CR accanto al LE in tx goto nextChar Utile per il debug al terminale di Windows ifend 1100 LEDS Flag FlEcho
258. successivo ifend 1026 ua Accoda il messaggio di errore passato in W in Errore variabile globale Appena cessa la ricezione di caratteri dalla seriale verr trasmesso l errore generato 7 Se gi presente un errore viene conservato il primo e scartati gli ultimi errore btfss Flag FlErrorPresent movw Errore bsf Flag FlErrorPresent return Quando viene generato un errore il relativo codice viene semplicemente messo nell accumulatore e viene chiamata la routine errore che setta il flag FlErrorePresente e si memorizza il codice di errore in una variabile globale chiamata Errore Ulteriori errori non verranno memorizzati poich non stato previsto un sistema di accodamento degli errori L errore verr comunicato all utente solo alla fine della ricezione della riga corrente in modo da evitare perdita di byte sulla seriale dato che non stato implementato alcun controllo di flusso In alto nel codice mostrato presente lo stralcio del programma principale che si incarica di inviare 1 messaggi di errore Inizializzazione Abbiamo gi detto dell importanza di una inizializzazione corretta e mostrato qualche esempio In questo paragrafo descriviamo riga per riga il codice di inizializzazione implementato nel firmware finale Il PIC comincia ad eseguire le istruzioni a partire da quella memorizzata all indirizzo zero ORG 0x0000 Reset Vector goto TALE Si saltano le definizioni di tavole i
259. successivo carattere dalla seriale Condizionamento del carattere letto Fornitura del carattere al Parser per l analisi dell input Il Parser stesso chiama eventualmente la routine che esegue un comando riconosciuto Della comunicazione di errori accodati abbiamo gi discusso vediamo 1l resto nextChar da ifbs ifend ifbs letl ifend movf movwf LELEL ifgtel ifend ifeel RCSTA OERR i072 Test for overrun error movlw 0x13 13 RS232 Overrun call errore letl State StSeekNewLine bef RCSTA CREN Riinizializza la logica di ricezione disattivandola bsf RCSTA CREN e riattivandola subito dopo si perso almeno un byte 1072 RCSTA FERR 1074 Test for framing error movlw 0x12 12 RS232 Framing call errore movf RCREG W Scarta il byte perch contiene dati non validi State StSeekNewLine Stato cerca inizio nuova linea 1074 RCREG W Legge il carattere successivo LastChar LastChar z 1 i1005 Converte in maiuscole le minuscole a z LastChar a i005 movlw LATS mng addwf LastChar F 1005 LastChar 0x03 1109 CTRL C Break goto nextChar Semplicemente ignorato per compatibilita con SCPI 120 ifend 1109 StateCase Tavola di salto per stato corrente bsf PCLATH 0 La macchina a stati del parser comincia da qui e processera Der PCLATH 1 il carattere in LastChar ultimo letto dalla seriale mov f State W addwf PCE FE goto stStartOfLine goto stSeekNewLine goto stParseld
260. t contains nontrivial examples of program code we recommend releasing these examples in parallel under your choice of free software license such as the GNU General Public License to permit their use in free software 193 Appendice D GNU General Public License GNU GENERAL PUBLIC LICENSE Version 2 June 1991 Copyright C 1989 1991 Free Software Foundation Inc 51 Franklin St Fifth Floor Boston MA 02110 1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed Preamble The licenses for most software are designed to take away your freedom to share and change it By contrast the GNU General Public License is intended to guarantee your freedom to share and change free software to make sure the software is free for all its users This General Public License applies to most of the Free Software Foundation s software and to any other program whose authors commit to using it Some other Free Software Foundation software is covered by the GNU Library General Public License instead You can apply it to your programs too When we speak of free software we are referring to freedom not price Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software and charge for this service if you wish that you receive source code or can get it if you want it that you can change the software or use pieces of it in n
261. tate ai bit anzich ai byte ifbs BS Bit Set Bit a 1 ifbc BC Bit Clear Bit a 0 Le macro sono implementate sostanzialmente con istruzioni di sottrazione e verifica del segno del risultato sfruttando la ALU del PIC Ecco ad esempio la macro per il controllo dell ugualianza ifee macro filel file2 alabel 1f egual File File movet Faved pan subwf file2 W DELSs STATUISZ goto alabel endm Viene caricato in W il valore del primo file register sottratto quindi il secondo lasciando il risultato in W per non sovrascrivere 1 file registers ed effettuato il salto condizionato se il risultato non zero Il flag Z del registro di stato dell ALU del PIC mappato in RAM e la CPU accede a questo e ad altri registri di controllo come accederebbe ad un file register senza 104 la necessit di istruzioni apposite per la gestione di tali flag L opcode btfss che pu disorientare chi non conosce l assembler dei PIC un acronimo e sta per Bit Test File Skip Set ovvero Controlla un bit nel file register salta l istruzione seguente se il bit a I Assieme all altra istruzione sorella btfsc Bit Test File Skip Clear rappresenta l unico modo per effettuare salti condizionati nell assembler dei PIC Sono istruzioni potenti in quanto consentono di controllare se un bit settato o no senza ricorrere alle maschere con AND come occorre fare in linguaggi assembler di altre CPU Altre macro ut
262. te due manopole a selezionare riga e colonna da collegare e due pulsanti etichettati intuitivamente chiudi e apri Si ha immediato riscontro visivo dell invio del comando con lo spegnimento di entrambi 1 Led Aperto e Chiuso che indicano lo stato attuale del circuito Solo successivamente al ricevimento della risposta dalla macchina sullo stato attuale verr acceso il led Aperto o Chiuso a conferma che l azionamento sia stato eseguito Djidatticamente vengono mostrati a schermo tutti 1 comandi inviati e ricevuti La conferma dell azionamento fondamentale nel caso dell utilizzo in remoto senza riscontro visivo del circuito 156 Risposta ricevuta 1 omando inviato 1 List gt gt Colonna Pio rst T gt tl EN p ra oo cecsssassessesenesee Porta seriale alla quale collegato il circuito o i Aperto Ged TSE ROUTE CLOSE 5 Teli Ea i gt j WRITE gt Cig g Cg n Caw d 16 1 2 o 1 fl Di 2 n o o Zz o ee e eo Sica TE Ca Ca Ca gna p gna p a 21 Ea la p3 i Bal G H H oO i be PTFE D i e PTF i Sel PTE Ca ca ca ca DS DS ci DS rd Bui ra Pi a Bd BI i Bz i Bal o a o tal oO ho o 4 TI z PARO ARESA Coo Cda g g 0 fl E El p BL p if i i i dee Block Diagram di MatrixKnob VI Il Block Diagram piuttosto complesso Ne descrivo le funzionalit un pezzo per volta Porta seriale alla quale collegato il circuito
263. te seriali Per indicazioni pi precise sulla costituzione del cavo s1 veda il capitolo 1 Il circuito si alimenta tipicamente con il wall cube fornito a corredo 162 AC AC Adapter fornito a corredo In mancanza di questo si pu usare un qualunque alimentatore con tensione d uscita compresa tra 9 e 15V AC o tra 12 e 18V DC qualunque polarit L assorbimento tipico di 1 A Si veda il capitolo 2 per indicazioni precise sull assorbimento Il connettore di alimentazione il popolare 2 5x5 5x9 5 mm Aspettare ancora prima di dare tensione al circuito Utilizzare un cavo piatto a 10 poli per connettere 1 moduli in cascata Su ciascun modulo sono riportate le diciture in e out accanto ai due connettori per il bus per distinguere tra l ingresso e l uscita Inserire il ponticello di terminazione catena sull ultimo modulo collegato Tale ponticello presente tra 1 due header di ingresso e uscita bus di sistema Il connettore per il cavo piatto utilizzato presenta uno smusso che impedisce di collegarlo capovolto quindi non dovrebbe essere possibile sbagliare connessione IMPORTANTE Costruzione di un cavo piatto Se si realizza un cavo piatto a misura assicurarsi che la banda rossa presente da un lato del cavo corrisponda al pin indicato con una freccia sul connettore per entrambi 1 connettori grimpati sul cavo in modo da realizzare un cavo che effettui 11 collegamento corretto 1 a 1 di tutti 1 segnali e non un
264. tendere il numero di comandi accettati L echo dei caratteri permette al contempo di leggerli sullo schermo del terminale di Windows e di verificare che la trasmissione seriale stia funzionando e il firmware stia eseguendo il ciclo principale anzich essersi smarrito chiss dove Con copia incolla di lunghe sequenze di comandi si potuto verificare che l approccio scelto per il controllo di flusso funziona bene anche senza nessuna cura particolare da parte del programmatore al PC a matrix HyperTerminal TOR n p File Modifica Visualizza Chiama Trasferimento 01 Complet i pane OPEN 111 113 122 124 131 133 142 144 om HE ma 112 114 121 123 132 134 141 143 omp ROUTE OPEN 112 114 121 123 132 134 141 143 01 Completed ROUTE Close 111 113 122 124 131 133 142 144 01 Completed in peas DEY SELL 113 122 124 131 133 142 144 om it teas tat bar 112 114 121 123 132 134 141 143 om ROUTE To 112 114 121 123 132 134 141 143 01 Com plet ROUTE cost 111 113 122 124 131 133 142 144 om ROUTE 0PEN 111 113 122 124 131 133 142 144 01 Completed R13 RS232 Overrun UT13 RS232 Overrun E 13 RS232 Overrun CL13 RS232 Overrun Connesso a 0 23 32 Riley aut 57600 8 N 1 Solo sporadicamente si riusciti a generare l errore di overrun della seriale Evidentemente anche il terminale di Windows inserisce brevi pause di trasmissione mentre riceve caratteri con lo scopo di visualizzare
265. tesso potenziale di massa sulla porta parallela e sulla porta seriale Per fortuna era cos altrimenti si sarebbe dovuto procedere all isolamento galvanico di uno dei dispositivi o del collegamento ICSP poich non era proponibile di scollegare e ricollegare continuamente 1 dispositivi il lavoro di debug sarebbe risultato estenuante e alla prima distrazione si sarebbe rotta una porta del PC Per fortuna stato invece possibile tenere tutto permanentemente collegato Il PC portatile era sprovvisto di una porta seriale si allora usato un adattatore USB Seriale con tutti 1 vantaggi che ne derivano se serve una porta in pi basta comprare un altro 100 adattatore Se il software sul PC blocca la porta per un errore di programmazione non necessario riavviare il PC per riprenderne il controllo ma sufficiente scollegare e ricollegare l adattatore per liberare le risorse impegnate e riconfigurare la nuova porta grazie alla tecnologia plug and play Come si nota in figura 1 relais non erano presenti durante lo sviluppo del firmware Questo per diversi motivi dovevano ancora essere acquistati a prezzo conveniente ad una fiera locale di elettronica anzich a prezzo pieno al negozio di componenti elettronici Ssi voleva testare il circuito con meno incognite contemporanee per volta e carichi induttivi possono procurare malfunzionamenti difficili da rilevare quindi inizialmente si preferito testare il resto delle funzional
266. that version gives permission B List on the Title Page as authors one or more persons or entities responsible for authorship of the modifications in the Modified Version together with at least five of the principal authors of the Document all of its principal authors if it has fewer than five unless they release you from this requirement C State on the Title page the name of the publisher of the Modified Version as the publisher D Preserve all the copyright notices of the Document E Add an appropriate copyright notice for your modifications adjacent to the other copyright notices F Include immediately after the copyright notices a license notice giving the public permission to use the Modified Version under the terms of this License in the form shown in the Addendum below G Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document s license notice H Include an unaltered copy of this License I Preserve the section Entitled History Preserve its Title and add to it an item stating at least the title year new authors and publisher of the Modified Version as given on the Title Page If there is no section Entitled History in the Document create one stating the title year authors and publisher of the Document as given on its Title Page then add an item describing the Modified Version as stated in the previous sentence J Preserve the network location
267. ther Cin the matrix module 34904A you can close multiple channels at the same time Each crosspoint relay on this module has Its own unique channel label representing the row and column For example channel 32 represents the crosspoint connection between row 3 and column 2 ROUTe OPEN ch_list Apre 1 relais specificati ROUTe OPEN ch_list Non implementato ROUTe OPEN Comportamento analogo a ROUTe CLOSe Uno 0 rappresenta per un relais chiuso un 1 un relais aperto ROUTEe OPEN lt ch_list OPEN lt ch_list gt Open the specified channels on a multiplexer or switch module The OPEN query returns the state of the specified channel Returns 1 if the channel is open or O if the channel is closed 90 Subsystem SYSTEM SYSTem CPON 1OOI2Z00I300I400IALL Apre tutti 1 relais del modulo nello slot specificato Specificando ALL verranno aperti 1 relais di tutti 1 moduli collegati Lo strumento Agilent dotato di 3 slot mentre Relais Matrix ne supporta 4 Lo strumento Agilent supporta condizioni di accensione differenti da tutti 1 relais aperti impostabili dall utente mentre Relais Matrix avr sempre tutti 1 relais aperti all accensione SYSTem CPON 100 200 300 ALL Reset the module in the specified slot to its power on state CPON means card power on To reset all three slots specify ALL SYSTem VERsion Viene indicata la versione del protocollo SCP
268. ther restrictions on the recipients exercise of the rights granted herein You are not responsible for enforcing compliance by third parties to this License 7 If as a consequence of a court judgment or allegation of patent infringement or for any other reason not limited to patent issues conditions are imposed on you whether by court order agreement or otherwise that contradict the conditions of this License they do not excuse you from the conditions of this License If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations then as a consequence you may not distribute the Program at all For example if a patent license would not permit royalty free redistribution of the Program by all those who receive copies directly or indirectly through you then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program If any portion of this section is held invalid or unenforceable under any particular circumstance the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license pract
269. ti i codici 01 e 02 sono informativi i codici superiori messaggi di errore trasmit btfss PIR1 TXIF goto trasmit movwf TXREG return newline ifbs Flag FlCrLf i1l103 ifend movlw call return sendMsg movwt swapf andlw addlw Gall movf andlw addlw call movlw call mov f call call ifgtel ifend return sendString movwf GLrf for next incf call forw next return movlw 0x0D call trasmit i103 Ox0A trasmit sendMsgBcd sendMsgBcd W Ox0F TAY trasmit sendMsgBcd W Ox0F mo trasmit trasmit sendMsgBcd W sendString newline sendMsgBcd 0x03 1043 call BuzzBeep Beep se sendMsgBcd gt 3 1043 sendMsgBcd sendMsgTemp sendMsgLooper sendMsgBcd 1040 movt sendMsgLooper W call tavMsgSizes addwf sendMsgTemp F sendMsgLooper 1040 sendMsgBcd W tavMsgSizes sendMsgLooper 1041 mov sendMsgTemp W call tavMsgText call trasmit incf sendMsgTemp F sendMsgLooper i041 112 Trasmit attende che la UART finisca una eventuale trasmissione in corso e trasmette quindi il carattere passato in W Se la UART era libera la routine non bloccante se la UART era impegnata la routine bloccante Newline trasmette normalmente il carattere OxOA Se attiva la modalit di debug e test della quale parlo diffusamente in seguito fa precedere OxOA da 0x0D Carriage return SendString trasmette una delle stringhe memorizzate nelle look up tables delle quali parlo pi avanti SendMsg t
270. ti incondizionati o condizionati in un tale codice difficile tenere traccia dei percorsi di esecuzione cos come difficile seguire con lo sguardo 1 ripiegamenti degli spaghetti in un piatto di pasta fumante 2 Una macro un nome simbolico per un frammento di codice che verr reinserito dal compilatore ogni volta che viene richiesto occupando cos tanta pi memoria quante pi volte viene richiamato Si differenzia dalle sottoroutine che sono presenti in memoria una volta sola e sfruttano lo stack hardware per tornare all uscita alla procedura chiamante corretta ZI Microchip fonte dalla quale ho imparato 10 poich avevo gia una piccola esperienza in altri linguaggi macchina e mi servivano solo informazioni specifiche su questa architettura all help in linea dell assembler MPASM della Microchip e al libro PicBook disponibile gratuitamente in lingua inglese sul Web all indirizzo http www mikroelektronika co yu english product books PICbook e a pagamento in lingua italiana in libreria la versione italiana inoltre contiene molto meno materiale dell originale in inglese J e 22 Microcontrollore resistenza led Prima di affrontare il progetto completo si testato il microcontrollore con piccoli circuiti che hanno consentito di prendere familiarit con le possibilit disponibili operando in un contesto pi controllato in cui era difficile rompere qualcosa per esempio con le extra tensioni di apertura del
271. to si tiene traccia nelle variabili di stato accessorie che mantengono una rappresentazione molto compatta in memoria dei costrutti gi riconosciuti Variabili di stato accessorie Queste conservano SSDefault 1 byte codice del subsystem di default gi settato da comandi precedenti o appena settato durante l analisi della riga di comando attuale 125 SSParsed 1 byte codice dell identificatore appena riconosciuto Exclusive 1 bit settato se si riconosciuto l identificatore EXCLUSIVE che l unico identificatore di terzo livello esistente nella sintassi se ce ne fossero di pi si dovrebbe sostituire questa variabile con un altra da un byte in grado di memorizzare pi codici differenti Lista 8 byte utilizzata solo durante il parsing di channel list comandi ROUTE CLOSE e ROUTE OPEN memorizza in maniera molto compatta 1 bit per ogni relais dei 64 possibili su 4 moduli per un totale di 8 byte la lista di canali ricevuta in modo da consentire il posticipamento ma soprattutto l esecuzione in contemporanea dei comandi di apertura chiusura di relais L alternativa non praticabile avendo deciso di non bufferizzare l intera stringa di comando ricevuta era di aprire chiudere i relais man mano che si riceveva il relativo numero di canale valido Cos facendo per ci si sarebbe ritrovati nell impossibilita di abortire evitandone l esecuzione un comando che conteneva un errore di sintas
272. tono di risolvere qualsiasi problema di programmazione rendendolo di fatto un linguaggio general purpose Inoltre un programma ben scritto in LabView consente a chiunque di utilizzare proficuamente il circuito realizzato in questo tema d anno 159 Capitolo 6 Conclusioni Il circuito realizzato rispetta tutte le specifiche iniziali e soddisfa in pieno gli scopi per il quale stato realizzato E in grado di effettuare l auto test ha un ampio range di tensioni di ingresso ha superato 1 test di affidabilit modulare ed espandibile compatibile con il protocollo SCPI standard industriale IEEE 488 2 consentendo una facile migrazione del software di controllo da e verso prodotti commerciali equivalenti Rispetto a questi ultimi presenta 1 vantaggi di un costo inferiore di un fattore almeno 10 una documentazione esaustiva su tutti gli aspetti caratteristica ottima in un contesto didattico universitario e tale da consentire la riparazione immediata o lo sviluppo di versioni successive migliorate e ingombri pi contenuti che consentono di trasportare il sistema inizialmente pensato per essere cablato permanentemente alla strumentazione del laboratorio ar ee Die lazio ST Paar eer RR a ea pe ee ae Valigetta a doppia apertura con PC portatile programmatore controller modulo cavi di collegamento L intero sistema pu essere trasportato facilmente sul campo per l utilizzo o per dimostrazioni didatti
273. trasmissione o ricezione che descriver pi avanti assieme al ciclo principale del programma Qui descriver invece la routine in grado di trasmettere stringhe memorizzate in look up tables 57 sh f i as n Tradizionalmente il primo programma realizzato in ogni linguaggio di programmazione quello che stampa su schermo la scritta Hallo world in cui il programma appena creato saluta il mondo intero rendendo manifesta la sua esistenza 111 Routine di trasmissione caratteri sulla seriale trasmit Passare in W un byte da trasmettere verr trasmesso sulla RS232 eventualmente subito dopo aver atteso che terminasse la trasmissione precedente se ancora in corso In questo caso la procedura bloccante Non stato previsto infatti un buffer di uscita e una gestione ad interrupt poich non necessario per il nostro progetto newline Invia semplicemente il carattere Ox0A oppure la coppia 0x0D Ox0A se Flag F1CrLf settato sendString Invia solo una stringa sulla seriale senza neppure il carattere new line dietro Passare in W il codice BCD del messaggio desiderato i messaggi definiti nelle tavole in pagina 0 sendMsg Invia un codice numerico a due cifre uno spazio un messaggio testuale e un carattere i new line sulla seriale Passare in W in BCD l indice del messaggio da trasmettere Se l indice del messaggio gt 3 verr emesso un beep dal buzzer Infat
274. tteri consecutivi adeguati en ch seguito se riconosciuto dopo il si attende per forza newline riconosciuta una query il newline verra j caratter A terParClose Parsing della gole stato riconosciuto un ROUTe OPEN vir E dev sser seguito il comando e riconosciuta la parentesi aperta dopo un route open o rou inviati to subito si setta il SubSystem di default e il SubSystem do non verra esegui spazi ma a fine riga parentesi aperta i risultati per forza una chiocciola lista di canali da chiudere aprire o la parentesi chiusa 5 Dopo la si attende per forza newline endc chlock 0x00 i Valori possibili per SSDefault e SSParsed SSUndefined Valore predefinito iniziale Se non viene modificato SSCommon Common Commands Livello 1 SSSystem System Livello 1 SSRoute Route Livello 1 SSMemory Memory Livello 1 SSClose Close Livello 2 sotto Route SSOpen Open Livello 2 sotto Route SSExclusive Exclusive Livello 3 sotto Route Close SSCpon Cpon Livello 2 sotto System SSVer Version Livello 2 sotto System SSModule Module Livello 2 sotto System SSState State Livello 2 sotto Memory
275. tto Similmente volendo implementare un altro dei common commands non implementati basta duplicare la struttura implementativa di CLS per il comando che si desidera supportare CLS Clear the event register in all register groups This command also clears the error queue and the alarm queue PSC 011 ESE lt enable_value gt SRE lt enable_value gt ESR ESE ZOPE STB SRE PSC WAI TRG Tutti questi comandi non avevano senso per il circuito Relais Matrix e non sono stati implementati Con la revisione corrente del firmware si ottiene in risposta ad uno di questi comandi l errore 04 Unknown Header Volendo rispondere con 03 Unimplemented occorre semplicemente aggiungere una struttura analoga a quella presente nel codice per CLS Mi Trad letterale Segna posto 87 sembrava inutile aggiungere controlli al parser solo per mostrare un messaggio di errore differente per questi comandi rispetto all immissione di un identificatore realmente sconosciuto Subsystem ROUTE E il subsystem pi importante in quanto contiene 1 comandi per aprire e chiudere 1 relais presenti sui moduli di espansione La descrizione della sintassi dei questo comando utilizza le lettere maiuscole per indicare la parte necessaria dell identificatore le minuscole per la parte facoltativa Ricordo che nella mia implementazione dopo la parte obbligatoria si pu completare il comando con un numero arbitrario d
276. ttuate mascherature con AND e OR logiche e si fa ricorso all unica modalita di indirizzamento indiretto disponibile sul PIC per effettuare correttamente tali operazioni Non questa relazione la sede adatta per approfondire questi aspetti del linguaggio e si rimanda ad un libro di base sulla programmazione in assembler NewLineAfterParClose Anche dopo aver riconosciuto un comando valido ROUTE CLOSE seguito da una lista di canali valida cio senza errori fino alla parentesi chiusa non si pu ancora eseguire il comando poich dopo la parentesi chiusa al posto del carattere new line potrebbero apparire ulteriori caratteri non consentiti dalla sintassi E necessario perci uno stato apposito che aspetta il carattere new line dopo la parentesi chiusa ed esegue il comando se lo riceve oppure genera un errore in caso contrario Questo stato gestisce in maniera efficiente riutilizzando le parti di codice in comune 1 tre comandi ROUTE CLOSE ROUTE CLOSE EXCLUSIVE e ROUTE OPEN stNewLineAfterParClose In questo stato ci si aspetta un NL dopo un ROUTE CLOSE o ROUTE OPEN per eseguire finalmente il comando utilizzando SSParsed Flag FlExclusive e Lista per sapere che tipo di comando se il CLOSE di tipo EXCLUSIVE e la lista dei canali da Chiudere Aprire Se si riceve un altro carattere che non sia newline un carattere non valido e si genera l errore di sintassi relativo ifeel LastChar 0x0A 1045 bet Fla
277. tuata la mascheratura dei relais gia chiusi che non verranno aperti dal comando 88 ROUTe CLOSe EXCLusive ch_list Comportamento simile a ROUTE CLOSE 1 relais specificati vengono chiusi ma in questo caso non viene effettuata la mascheratura quindi verranno chiusi 1 relais specificati e aperti tutti gli altri ROUTe CLOSe ch_list La query in questa forma dovrebbe restituire un 1 per ciascun relais chiuso e uno 0 per ciascun relais aperto tra quelli indicati nella lista Gli 1 e 0 devono essere restituiti nello stesso ordine nel quale compare la lista di canali nella richiesta Questa query non stata implementata in questa forma perch avrebbe richiesto un buffer in memoria di lunghezza non nota a priori per memorizzare la lista di canali o almeno la risposta da fornire da inviare poi al termine della riga se il comando non avesse contenuto errori di sintassi Gestire buffer di lunghezza arbitraria in un dispositivo con poca memoria era difficile avrebbe richiesto del tempo e si preferito modificare leggermente la sintassi della richiesta e della risposta per questa query con il comando seguente pi facile da implementare dedicando il tempo risparmiato a questioni pi interessanti ROUTe CLOSe Questo tipo di richiesta non previsto dallo strumento Agilent di cui si vuole copiare la sintassi ma stato implementato in Relais Matrix con una sintassi per la richiesta e per la risposta pr
278. ul sito indicato e tradotto in lingua italiana a pagamento in libreria MpAsm 3 0 User guide Manuale MpLab 5 5 Data Sheet PIC16F628 http www microchip com Data Sheet dei componenti utilizzati I data sheet degli integrati utilizzati nel circuito sono stati scaricati in formato PDF dai siti dei rispettivi produttori Agilent Technologies 34970A User s guide english version 34970A Product overview 34970A Quick reference guide http www agilent com Microchip 40300c PICI6F62X Data Sheet http www microchip com Philips Semiconductors 74HC595 8 bit serial in serial or parallel out shift register with output latches 3 state http www semiconductors philips com ST SGS Thomson Microelectronics ULN2803 Eight Darlington Array http www st com http www sgs thomson com 201 Dallas Semiconductors Maxim MAX232 5V Powered Multichannel RS 232 Driver Receiver http www maxim ic com National Semiconductor LM78XX Series Voltage Regulators http www national com 202
279. ull up A due pin del PIC sono collegati il LED LED3 e il Buzzer piezoelettrico BUZZERI utilizzati per la segnalazione di errori I pin del microcontrollore sono quasi tutti utilizzabili come porte I O generiche la scelta di quali pin utilizzare stata fatta tenendo conto dello sbroglio sulla basetta In basso presente l header a 10 pin del bus di sistema dello stesso tipo di quello usato per il JTAG delle FPGA che serve a collegare il controller ai moduli Feedback configurato come ingresso nel microcontrollore e ha una resistenza di pull up Su questa linea tornano 1 bit uscenti dall ultimo shift register sull ultimo modulo in cui sia stato inserito il ponticello di terminazione La resistenza di pull up garantisce una lettura obbligata in caso di feedback non collegato a nulla flottante Gli altri tre segnali clock data store sono collegati a piedini configurati come uscite che piloteranno la catena di shift register Inizialmente 11 segnale di clock era collegato al pin 3 del PIC ci si poi resi conto solo dopo aver montato la basetta che tale pin ha una uscita del tipo open drain anzich push pull S1 poteva inserire una resistenza di pull up sul circuito ma dato lo sbroglio effettuato e la mancanza di linee a 5V l vicino risultato pi agevole spostare 1l collegamento dal pin 3 al pin 17 E questo un esempio d uso delle tecniche cut amp wire per errori di cui ci si rende conto solo dopo aver realizzato
280. ulo contiene un connettore di ingresso e uno di uscita per il bus 13 Oscilloscopio Automatic Test Equipment di varia natura Componenti Integrati Circuiti a a gt Moduli da 1 a 4 Linea telefonica Controller Il sistema Relais Matrix completo PC modem e linea telefonica controller 4 moduli per 64 relais strumentazione ATE componenti sensori integrati circuiti in test o di condizionamento del segnale tutto collegabile dinamicamente da programma di controllo remoto tramite le matrici di switching Se si ha bisogno di matrici di switching piu ampie di 4x4 si possono combinare tra loro piu moduli collegando righe o colonne omologhe come esemplificato nel diagramma seguente relativo alla macchina Agilent di riferimento 14 Matrix Module 1 Matrix Module 2 Unire due matrici 4x8 a formare una matrice 8x8 Si pensato di inserire sul controller un led di segnalazione e un buzzer piezoelettrico in modo da segnalare con un beep la ricezione di comandi con sintassi non valida dal PC cos come la maggioranza degli strumenti di acquisizione dati automatici Il circuito prevede tre alimentazioni SV per la logica duale 10V 10V per l interfaccia seriale 12V per 1 relais Sono stati inseriti direttamente sul circuito due led di segnalazione alimentazione presente sulle linee SV e 12V in modo da avere subito indicazione visiva di malfunzionamenti critici nello stadio d
281. ume tutte le responsabilit Ringraziamenti Un sentito ringraziamento ai docenti del corso di Misure Elettroniche prof ing Nicola Giaquinto e dott ing Francesco Adamo per le chiare spiegazioni fornite su ogni aspetto della disciplina per la straordinaria competenza in materia per la conoscenza delle pi moderne innovazioni tecnologiche disponibili sul mercato e per il giusto equilibrio didattico tra approfondimenti teorici e prove pratiche Seguire il corso ha definitivamente ampliato le mie conoscenze e fornitomi strumenti concreti di misura automatica di grandezze fisiche elettriche e non valutazione dell incertezza condizionamento dei segnali provenienti da sensori e trasduttori algoritmi di analisi ed elaborazione automatica dei dati strumenti di controllo automatico e remoto indispensabili nelle attivit ingegneristiche Un sentito ringraziamento anche per la disponibilit dimostrata in studio e in laboratorio dai docenti per appuntamenti fuori dall orario di lezione alcuni studenti si sono letteralmente accampati in laboratorio per concludere 1 propri esperimenti abusando della pazienza dei docenti che sembrata senza fine Indice PAAA LU C 4 11 EE AE E E E O E E E E E 3 BLA ULLLE E E PONE E E E EE E EEE E EA 7 2 OA EAL N EIN AN 10 E E E E E E EE O EE EE 11 E A EE 11 EEA EO T 13 Descrizione DIARI Aiino tenerone anto 16 ail 20 LE LL ELE PA LL C PRAIA REA FERRATA ON ARPA ARTO SA EA E E RICA 20 CEUT
282. un nonostante non sia stato previsto esplicitamente alcun controllo di flusso CLOSE 111 CLOSE 112 OPEN ACILI CLOSE E115 OPEN Cer LZ CLOSE 114 OPEN 113 CLOSE C 1Z1 OPEN 0114 CLOSE 1l22 OPEN 121 CLOSE 123 OPEN C122 CLOSE 0124 OPEN 0123 CLOSE 131 OPEN 124 CLOSE 0132 OPEN E131 CLOSE KCL33 OPEN 132 CLOSE 134 OPEN 133 CLOSE Q141 OPEN CLS4 CLOSE 142 OPEN 141 CLOSE Q143 OPEN 142 CLOSE 144 OPEN 143 OPEN 144 Esempio di una lunga sequenza di comandi inviata con un copia incolla tramite il terminale di Windows senza che ci abbia provocato errori di buffer overrun X Con queste scelte si evitato di dover implementare un buffer di ricezione software sul microcontrollore che poteva comunque riempirsi potendosi affidare alla sola UART hardware con 1 sui 2 3 byte di buffer di ricezione Progetto e realizzazione circuito Giudicando sufficiente l esperienza maturata con 1 circuiti di base che avrebbero costituito come tante tessere di un puzzle il circuito finale si deciso di procedere con lo schema elettrico del circuito finale La complessit del progetto obbligava al ricorso ad un software di 36 AET i i a e EEA Nei programmi di emulazione terminale infatti importante che 1 caratteri inviati al server si inframmezzino correttamente a video con quelli inseriti in
283. un solo modulo al quale verr assegnato lo slot 1 0 o oP o Sintassi MatrixOpen Ch o o Parametri di ingresso opzionali o o Ch Vettore contenente numeri di canale di relais da chiudere sul modulo alloggiato nello slot 1 sul circuito Relais Matrix I relais hanno numeri di canale 11 12 13 14 21 22 23 24 31 32 33 34 41 42 cos come prevede lo standard industriale Default Vettore vuoto invia il comando con una lista vuota e questo non sortir alcun effetto oO 00 00 oA o o 0 o NOTA MatrixSp deve essere gia presente come variabile globale e deve contenere l handle per un oggetto seriale gi aperto per comunicare con lo strumento Il modo pi facile per ottenere la cosa invocare MatrixInit a riga di comando prima di usare MatrixWrite NOTA Non viene controllato se il comando genera errori Utilizzare MatrixRead WP 00 o o global MatrixSp cmd ROUTE 0OPEN while length Ch gt 0 if isempty find Ch 1 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 disp I numeri di canale devono essere scelti tra i seguenti disp L1 12 13 14 21 22 23 24 31 32 35 34 41 42 435 44 return end cmd strcat cmd 1 int2str Ch 1 3 Ch 1 end cmd strcat cmd MatrixWrite cmd Script dimostrativo pizzica m function Pizzica Pizzica o o o Suona la pizzica danza popolare del salento mediante RelaisMatrix o o Sintassi Pizzica NOTA MatrixSp deve esser
284. uncement your work based on the Program is not required to print an announcement 194 These requirements apply to the modified work as a whole If identifiable sections of that work are not derived from the Program and can be reasonably considered independent and separate works in themselves then this License and its terms do not apply to those sections when you distribute them as separate works But when you distribute the same sections as part of a whole which is a work based on the Program the distribution of the whole must be on the terms of this License whose permissions for other licensees extend to the entire whole and thus to each and every part regardless of who wrote it Thus it is not the intent of this section to claim rights or contest your rights to work written entirely by you rather the intent is to exercise the right to control the distribution of derivative or collective works based on the Program In addition mere aggregation of another work not based on the Program with the Program or with a work based on the Program on a volume of a storage or distribution medium does not bring the other work under the scope of this License 3 You may copy and distribute the Program or a work based on it under Section 2 in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following a Accompany it with the complete corresponding machine readable source code whi
285. unque informazione sul subsystem di default settato nei parsing precedenti Con una analisi pi attenta del set di comandi da riconoscere si poi riusciti a semplificare il parser Ecco un altro esempio di progettazione pi laboriosa del programma per ottenere una codifica pi semplice 126 cbhlock 0x00 Valori possibili per SSDefault e SSParsed SSUndefined Valore predefinito iniziale Se non viene modificato consente di rilevare un header non riconosciuto SSCommon Common Commands Livello 1 SSSystem System Livello 1 SSRoute Route Livello 1 SSMemory Memory Livello 1 SSClose Close Livello 2 sotto Route SSOpen Open Livello 2 sotto Route SSExclusive Exclusive Livello 3 sotto Route Close SSCpon Cpon Livello 2 sotto System SSVer Version Livello 2 sotto System SSModule Module Livello 2 sotto System SSState State Livello 2 sotto Memory SSDelete Delete Livello 3 sotto Memory State SSValid Valid Livello 3 sotto Memory State SSidn Idn Livello 2 sotto Common SSTst Tst Livello 2 sotto Common SSRst Rst Livello 2 sotto Common SSSav Sav Livello 2 sotto Common SSRcl Rel Livello 2 sotto Common SSC1s Cls Livello 2 sotto Common endc Operazioni demandate a ciascuno stato Segue il commento del codice che implementa ciascuno stato con la descrizione delle funzionalita svolte StartOfLine
286. unter mentre 1 bit alti sono conservati in PCLATH Sono state memorizzate separatamente le lunghezze delle stringhe per risparmiare memoria alternativa era il padding con spazi alla stringa pi lunga Se occorre ancora pi memoria s1 pu ottimizzare ulteriormente il codice utilizzando un separatore di stringa successiva nel bit pi alto con la condizione di utilizzare solo codici ASCII a 7 bit nei messaggi ma occorre complicare la routine sendString I codici di errore vengono descritti all utente finale come decimali Non stata necessaria per nessuna routine di conversione da decimale a binario o viceversa poich internamente 1 codici vengono memorizzati come esadecimali o BCD e le posizioni 0A 0F non vengono utilizzate Questo spreca un po di memoria nella tavola poich occorre comunque memorizzare degli zeri per la lunghezza delle stringhe non utilizzate ma risparmia memoria poich evita routine di conversione decimale binario Per la quantit e la lunghezza delle stringhe presenti si scelto l approccio ottimale 6 parole di memoria sprecate per saltare le posizioni 0A 0F una ventina di parole di memoria risparmiate per l assenza di una routine di conversione Se aumenta il numero di stringhe l approccio ottimale e quello errato si scambiano di posto Stringa Ident In assembler non prevista alcuna funzionalit di gestione di stringhe ovvero sequenze di caratteri di lunghezza variabile dinamicamente du
287. unzioni in Matlab 1 cui listati sono riportati in appendice immediato tradurre tali funzioni in un qualsiasi altro linguaggio di programmazione che consenta l utilizzo di una porta seriale presente sul PC Un esempio di utilizzo pizzica m Just for the fun of it stato scritto uno script dimostrativo che invia a ciclo continuo una sequenza di aperture e chiusure relais alla macchina Per la temporizzazione ci si volutamente affidati esclusivamente alla funzione pause del Matlab Questo script volto a dimostrare l inaffidabilit di tale approccio che non consente temporizzazioni precise anche perch il sistema operativo sottostante Windows XP non di tipo real time ma multi tasking e pu togliere 11 controllo al programma utente in qualunque momento Con lo script che prevede accensioni e spegnimenti contemporanei di un numero continuamente variabile di relais fino ad 8 si dimostra anche che 1l circuito stato realizzato correttamente ed insensibile ai disturbi elettromagnetici e ai problemi derivanti da carichi induttivi considerevoli durante aperture e chiusure continue Tale script anche indicato per il burn in test ovvero un test stressante per l hardware in cui si verifica che tutto funzioni a dovere con le sollecitazioni massime possibili per un certo tempo Conviene non esagerare poich 1 relais si scaldano diventano appena pi fragili e finiscono per rompersi con molti azionamenti a raf
288. usively with the relationship of the publishers or authors of the Document to the Document s overall subject or to related matters and contains nothing that could fall directly within that overall subject Thus if the Document is in part a textbook of mathematics a Secondary Section may not explain any mathematics The relationship could be a matter of historical connection with the subject or with related matters or of legal commercial philosophical ethical or political position regarding them The Invariant Sections are certain Secondary Sections whose titles are designated as being those of Invariant Sections in the notice that says that the Document is released under this License If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant The Document may contain zero Invariant Sections If the Document does not identify any Invariant Sections then there are none The Cover Texts are certain short passages of text that are listed as Front Cover Texts or Back Cover Texts in the notice that says that the Document is released under this License A Front Cover Text may be at most 5 words and a Back Cover Text may be at most 25 words A Transparent copy of the Document means a machine readable copy represented in a format whose specification is available to the general public that is suitable for revising the document straightforwardly with generic text editors or for image
289. usso 57600 baud bit nessuna partita Bit dI stop Lo strumento Agilent ha un comando che richiede di memorizzare continuamente in memoria non volatile il default di power on e di ripristinarlo alla riaccensione Non implemento questa cosa Lo strumento deve fare beep quando si verifica un errore Lo strumento accetter i due punti a inizio riga che possono anche essere omessi come prescrive lo standard Si onorer il discorso dei sub system e dell ultimo sub system usato non si onorer il per inviare pi comandi di seguito Questo significa che si memorizza l ultimo sub system usato in una variabile di stato accessoria Non conter il numero di azionamenti di ciascun relais a prevedere l istante di rottura dalla vita media perch non c abbastanza spazio nella eeprom del microcontrollore che verr utilizzata per salvare richiamare configurazioni di relais che giudico uno scopo pi utile Il led rosso indica che si verificato un errore e si attende solo il termine della riga corrente senza processare pi nulla L errore verr comunicato al termine della riga per evitare di perdere caratteri in ricezione e generare un buffer over run Tutti i comandi sono case insensitive La questione del fine riga che pu apparire banale in realt molto delicata 82 Come separatore di riga verr riconosciuto new line 0x10 I caratteri 0x0D verranno semplicemente scartati cos che possa essere
290. usso di dati e 0x11 XON che la richiesta a riprendere le trasmissioni Il vantaggio di questo tipo di controllo di flusso che sono sufficienti le due linee TX e RX e nessuna altra linea hardware per implementare il controllo di flusso Lo svantaggio che due caratteri del codice ASCII sono riservati al controllo del flusso e accorrono accorgimenti particolari se s1 intendono trasferire dati binari che possono comprendere tali caratteri solitamente si raddoppia il carattere se presente nel payload RTS CTS E un controllo di flusso hardware ciascuna delle due parti setta la linea RTS quando ha spazio nel buffer di ricezione e si astiene dall inviare dati se la linea CTS non bassa Il vantaggio di questo tipo di controllo di flusso che di facile implementazione in sistemi embedded come quelli a microcontrollore pur richiedendo due linee dedicate DTR DSR Funziona allo stesso modo di RTS CTS ma usa altre due linee disponibili sulla porta seriale I modem usano tipicamente una combinazione dei due controlli di flusso disponibili riferendo la coppia di segnali DTR DSR all avvio del software di controllo sul PC e del firmware di controllo sul modem e la coppia RTS CTS al controllo di flusso vero e proprio legato ai buffer Nessun controllo di flusso per velocit di comunicazione non elevate o quando il protocollo consente di avere la certezza che l apparecchio dall altro lato della linea sempre disponibile 43
291. uzione return ma si guadagnato in leggibilit del codice Shift Register Appena pi difficile stato gestire gli shift register e 1 relais l connessi Una prima routine shiftout che usa due variabili temporanee ShiftMe e shiftoutLooper invia gli bit presenti nell accumulatore W sul bus di sistema dal meno significativo al pi significativo Per le variabili temporanee delle routine si deciso di sprecare un po di memoria dichiarandone una per ciascuna routine anzich riutilizzare sempre le stesse posizioni in memoria col rischio di pericolose sovrapposizioni e la necessit di una analisi approfondita 109 dello scope delle variabili del quale in assembler si deve fare carico il programmatore e non il compilatore l l Coppia di routine di basso livello per interazione con gli shift registers shiftout Manda gli 8 bit presenti in W agli shift register dal LST al MSB con trasmissione Sincrona tramite i pin data e clock store Manda un fronte di salita sugli store degli shift register trasferendo l informazione dagli shift register ai latch agli stadi di uscita ai darlington ai relais e led shiftout movwf ShiftMe forl shiftoutLooper 8 i012 bef ShRegPort DataBit btfsc ShiftMe 0 bsf ShRegPort DataBit bet ShRegPort ClockBit bsf ShRegPort ClockBit rrf ShiftMe F next shiftoutLooper 1012 DCE ShRegPort DataBit E bene che stia sempre a zero return La routine fa uso delle
292. variabili in gioco che possono causare malfunzionamenti sono numerose Con un circuito si opera molto spesso alla cieca e occorre mantenere calma e concentrazione e procedere in rassegna tutte le possibili fonti di errore Volendo collegare sonde di oscilloscopio per misurare segnali l ordine corretto delle operazioni togliere alimentazione al circuito saldare uno spezzone di filo alla pista da controllare verificare col multimetro che non si siano procurati corti con l operazione collegare la sonda dall altro lato del filo alimentare il circuito La tentazione di poggiare la sonda un po qua un po la mentre il circuito in funzione per grossa e infatti ho ceduto a questa tentazione rompendo due stadi di uscita del PIC mentre osservavo lo schermo dell oscilloscopio ho perso di vista 11 puntale della sonda che ha messo in corto due uscite che il PIC teneva a livello differente E stato quindi necessario comprare un altro X microcontrollore Quello vecchio non stato buttato via perch sembra funzionare tutto A volte il circuito funzionava correttamente il segnale di clock passava dallo stato di collegamento a massa allo stato floating che a volte veniva letto correttamente come 1 dagli shift register per esempio se la pista data adiacente conteneva anch essa un 1 Si ottenevano quindi malfunzionamenti molto strani e non ripetibili che hanno finalmente orientato verso la ricerca di u
293. viene conservato assieme ai messaggi di errore per riutilizzare la routine che stampa stringhe sulla seriale ottimizzando 1il codice Messaggi informativi Errori hardware 01 Completed 09 Interrupted chain 02 Hallo 15 Too many modules Errori del parser Errori memoria SA V e RCL 03 Unimplemented 10 Empty state 04 Unknown Header 11 Different modules 05 invalid char Errori nella comunicazione seriale Canale non valido o non presente 12 RS232 framing 06 Slot out of range 13 RS232 overrun 07 Chan out of range 08 No module in slot Tabella riassuntiva messaggi di errore generabili 99 Capitolo 4 Firmware Stazione di lavoro hi N Ried in oe OE DB ho Ca a TE n 7 are seg ea iv ma oe Th T TI mary Em Leo ce qe lt u La workstation di sviluppo del firmware al completo PC portatile con MpLab ed EpicWin in esecuzione programmatore controller modulo relais senza 1 relais montati tutto cablato La stazione di lavoro per la stesura e verifica del firmware costituita da un PC portatile pi indicato per l interazione con 1 circuiti rispetto ad un PC da tavolo il programmatore collegato alla porta parallela la scheda controller collegata alla porta seriale con un modulo inserito Prima di collegare contemporaneamente la porta parallela e la porta seriale a due circuiti elettrici che condividevano la massa tramite l ICSP stato verificato che anche 11 PC fornisse lo s
294. visione miglioramento e debug di un software non ha mai termine Nel nostro caso dopo l utilizzo pratico del circuito col Terminale di Windows con LabView e Matlab si sono ideate nuove funzionalit utili e modificata leggermente l implementazione di alcune Queste revisioni possono essere spesso pesanti e difficili anche se 11 codice molto ordinato Modificare un pezzo di programma pu produrre errore inaspettati in altre parti del programma che si basavano sulla presenza o assenza di operazioni in altre zone Per questo importantissimo progettare fin dall inizio tutte le funzionalit di cui si ritiene di aver bisogno si dedica pi tempo e lavoro all inizio ma se ne evita dopo In caso di revisioni profonde opportuno progettare adeguatamente anche l approccio migliore da seguire per introdurre le variazioni nel codice gi pronto in modo che l operazione di codifica e debug sia il pi possibile diretta e rapida Progettare prima di codificare anche le revisioni dunque Revisioni postume Segue qualche esempio di revisione alle modalit di funzionamento la cui necessit s1 evidenziata solo dopo l uso con altri programmi a testimonianza che spesso in un progetto si costretti a tornare indietro e rivedere un aspetto che si riteneva definitivo e riaprire un discorso che si riteneva chiuso Inizialmente il circuito all accensione dopo il messaggio 02 Hallo ne inviava un altro con il numero d
295. vo dei costi e iniziare il progetto della parte hardware del circuito Per facilitare la discussione su queste questioni col docente che simulava il cliente del sistema stata preparata una lista di domande sulle specifiche del circuito con una o due proposte per le risposte e un preventivo di massima aperto dal quale aggiungere e togliere componenti in caso di variazioni di progetto o disponibilit o meno del materiale gi nel laboratorio dell Universit Grazie a questo lavoro fatto a casa l elaborazione di specifiche pi dettagliate col docente stata piuttosto rapida Per l alimentazione si pensato ad un alimentatore dedicato poich snervante dover cercare un alimentatore in DC disponibile ogni volta che si vuole utilizzare un circuito Inizialmente si pensava di alimentare il circuito direttamente a tensione di rete 240V AC e di montare lo stadio di alimentazione direttamente sul circuito Per risparmiare sui costi del trasformatore e per evitare 1 potenziali pericoli derivanti dall avere piste a tensione di rete potenzialmente letali sulla basetta si invece deciso di utilizzare un alimentatore gi disponibile in laboratorio da dedicare permanentemente al circuito un wall cube con uscita 12V AC 1 5A che sembrava proprio di potenza adeguata per gli assorbimenti previsti del circuito 100 mA per relais 16 relais 1 6A 12VDc Lo stadio di stabilizzazione sarebbe stato comunque localizzato sulla basetta del contr
296. y programs If your program is a subroutine library you may consider it more useful to permit linking proprietary applications with the library If this is what you want to do use the GNU Library General Public License instead of this License 196 Fonti delle figure Software utilizzato Diagrammi e figure relativi alla macchina presa a modello Agilent 34970A Data acquisition and switch unit e al suo modulo accessorio Agilent 34974A 4x8 Switch Matrix for Agilent 34970A sono stati ricavati direttamente dai data sheet in formato PDF della Agilent Technologies scaricati dal rispettivo sito indicato nella bibliografia Diagrammi e figure relativi ai circuiti integrati utilizzati nel progetto compreso il microcontrollore sono stati ricavati dai datasheet PDF dei rispettivi produttori scaricati dai rispettivi siti indicati nella bibliografia Le illustrazioni relative al Fiser s programmer di Fiser sono state scaricate dal sito dell autore http www jofi it fiser I diagrammi con il pinout e il nome dei connettori della seriale sono stati scaricati dal sito Hardware book http www hardwarebook net La foto del laboratorio ATE stata trovata con la funzione di ricerca immagini di altavista http www av com Le foto del TMRC Tech Model Railroad Club sono state scaricate dalla MIT Gallery Special Exhibits Page http members aol com chopstcks gallery2 mit tmrc2 htm Tutte le altre
297. za alcun interesse pratico ma perfettamente idoneo per l uso tipico tra 4 e relais in funzione Il motivo principale stato risparmiare 1 soldi per acquistare un trasformatore ma utilizzare quello gi disponibile Il motivo secondario non meno importante esercitarsi nella i progettazione di caso tipico anzich di caso peggiore per contenere 1 costi a discapito dell affidabilita e della durata Volendo fare le cose meglio necessario sostituire il 7812 con un regolatore da 3A e calcolare la potenza elettrica dissipata come caduta di tensione ingresso uscita per corrente erogata Occorre poi scegliere un dissipatore che consenta di dissipare tale potenza raggiungendo la differenza di temperatura desiderata Le formule sono banali e si possono calcolare anche a mente ma il suggerimento migliore quello di sostituire semplicemente il dissipatore con uno pi grosso se scalda troppo poich esistono molte variabili non note a priori come il coefficiente di convezione naturale influenzato dai componenti circostanti e dal contenitore in cui viene montato il circuito che non possibile valutare analiticamente ma solo sul prototipo Per rendersi conto se il dissipatore scelto poteva essere adatto ho fatto un test di riscaldamento senza troppe pretese di accuratezza Con una temperatura ambiente di 22 C la temperatura del dissipatore proprio vicino al componente a regime con tutti e 16 1 relais accesi stata di 8
298. zza Preferiti Strumenti Indietro 3 p Cerca E Cartele Fit Indirizzo D D Matrix Assembly v ed Vai Norton Antivirus v Nome Dimensione Tipo Data ultima mod Operazioni file e cartella Ref Cartella di file 18 05 2005 9 11 E matrix 01 hardware demo asm 8 KB File ASM 18 05 2005 16 3 Altre risorse E matrix 02 asm 11KB File ASM 19 05 2005 18 4 E matrix 03 echo back LEB accepted asm 14KB File ASM 20 05 2005 9 50 E matrix 04 Ident asm 16 KB File ASM 20 05 2005 14 2 E matrix 05 idn tst asm 19KB File 45M 20 05 2005 15 2 Assembly E matrix 06 systemver rst cls asm 20KB File ASM 20 05 2005 16 5 Cartella di File E matrix 07 route subsystem asm 20 KB File ASM 20 05 2005 18 0 Data ultima modifica mercoled 18 E matrix 08 system cpon asm 21 KB File ASM 20 05 2005 18 2 maggio 2005 9 09 E matrix 09 route open close asm 26 KB File ASM 20 05 2005 20 0 E matrix 10 echoOnOff OttimizzatoRiempiLista asm 26KB File ASM 20 05 2005 21 3 E matrix 11 exclusive module closeopenquery asm 33KB File ASM 03 06 2005 13 0 E matrix 12 hex 9KB File HEX 03 06 2005 14 2 E matrix 12 lotta remarks in code asm 42KB File ASM 03 06 2005 14 2 E matrix 13 hex 9KB File HEX 04 06 2005 11 4 E matrix 13 minor enhancements asm 43 KB File ASM 04 06 2005 11 4 E matrix asm 43 KB File ASM 04 06 2005 11 4 E MATRIX HEX 9KB File HEX 04 06 2005 11 4 E psifthen inc 12KB File INC 21 05 2005 9 01 Dettagli La cartella con versioni successive numerate
299. zzato sempre lo stesso carattere la lettera 1 seguito da tre numeri in modo da non dover inventare etichette differenti ogni volta e indicare chiaramente che le etichette del tipo 1xxx hanno l unico scopo del controllo di flusso tramite macro e non qualche significato specifico particolare come per le etichette utilizzate per chiamare sottoroutine I mnemonici a due o tre caratteri che seguono 1 caratteri if nei nomi delle macro implementate rappresentano ifee EE Equal ugualianza 103 ifne NE Not Equal disegualianza ifgte GTE Greater Then or Equal maggioranza o equalianza iflt LT Less Than minoranza stretta I confronti sono normalmente tra due file register Volendo realizzare confronti tra un file register e 1l valore dell accumulatore o un valore immediato si fa seguire agli mnemonici precedenti la lettera W per l accumulatore o literal per un valore immediato ifeew EEW Equal W ifnew NEW Not Equal W ifgtew GTEW Greater Than or Equal W ifltw LTW Less Than W ifeel EEL Equal Literal ifnel NEL Not Equal Literal ifgtl GTL Greater Than Literal flit LTL Less Than Literal Sono state poi scritte macro per la verifica di appartenenza ad un intervallo espresso mediante due valori immediati ifr R Range File register nel range specificato ifrw RW Range W Accumulatore W nel range specificato Altre macro implementano condizioni orien
300. zzo leggere le risposte date dal circuito ai comandi inviati in modo da ottenere conferma che il comando sia stato eseguito correttamente Non previsto alcun controllo di flusso sulla seriale ma questo non dovrebbe procurare problemi poich il protocollo di comunicazione stato progettato tenendo conto di questa scelta costruttiva L unica accortezza richiesta al programmatore al quale non interessi la velocit di esecuzione dei comandi e che non voglia incorrere in errori di comunicazione quella di inviare un comando per volta concluso correttamente dal new line e di attendere 112ms caso peggiore prima di inviare il comando successivo ovviamente il PC pu fare altro durante questo tempo di attesa Volendo inviare comandi pi rapidamente una procedura certamente funzionante quella di attendere solo 12ms dopo l invio del comando leggere la riposta del microcontrollore e ae i tempo leggermente abbondante per inviare la stringa di risposta piu lunga caso peggiore vale a dire la risposta alle query ROUTE CLOSE e ROUTE OPEN nel caso di tutti e 4 gli slot occupati 165 solo in caso di errore attendere ulteriori 100ms prima di inviare il comando successivo In caso di risposta 0 Completed quindi possibile inviare comandi al ritmo di uno ogni 12ms Se si ha confidenza che 1 comandi inviati siano sempre o quasi sempre tutti validi e si abituati a non ricorrere a tecniche di programmazione pi sofisticat
Download Pdf Manuals
Related Search
Related Contents
IBM System x 3100 M4 日本語 - Kodak one2clean DE American Standard Plumbing Product 7015.051) User's Manual Untitled - Sprint Support Copyright © All rights reserved.
Failed to retrieve file