RINVIO SERIALE

ovvero trasmettere e ricevere fino a sette segnali digitali su una linea seriale dedicata

 

Progetto pubblicato sulla rivista Fare Elettronica  

IL PROGETTO

Vi è mai capitato di avere la necessità di comandare degli utilizzatori elettrici ad una certa distanza dai comandi e di non avere cavi elettrici a sufficienza per tutti comandi necessari, se pensate che l'unica soluzione sia di stendere altri cavi, leggete questo articolo.

 

Il progetto che stiamo a presentarmi, serve proprio a rinviare lo stato degli ingressi dalla prima scheda alla seconda e viceversa. Infatti ogni scheda controlla fino a 7 ingressi e altrettante uscite. Le due schede, peraltro identiche, vanno collegate tra loro da un semplice doppino. Sugli ingressi può essere collegato qualsiasi tipo di comando, come interruttori, pulsanti, fine corsa, fotocellule e altro, purché la tensione applicata non superi i 24 Vcc. Per quanto riguarda le uscite, dei comodi relè con morsettiere separate permette la possibilità di collegare qualsiasi tipo di attuatore, purché non superi i 3A, limite imposto dal tipo di relè utilizzato.

 

SCHEMA ELETTRICO

DISTINTA COMPONENTI RINVIO

R1-7: 2,2 KOHM 1/8W
R8-15: 1 KOHM 1/8W
R16: 470 OHM 1/8W
R17: 10 KOHM 1/8W
R18: 10 KOHM 1/8W
R19: 1 KOHM 1/8W

RR1: RETE RESISTIVA 10 KOHM

C1: 1000 mF 25VL
C2-4: 100 mF 25VL
C3: 100 mF 16VL

D1-7: ZENNER 4V7 1/2W
D8: ZENNER 5V1 1/2W
PR1: PONTE RADDRIZZATORE 1A

DL1-7 LED VERDE (INGRESSI)
DL8-14 LED VERDE (USCITE)
DL15 LED ROSSO (ALLARME)
DL16 LED GIALLO (MONITOR RTx)

TR1: BC547B

U1: PIC16F628(A)
U2: ULN2803
U3: 7812
U4: 78L05

K1-8: RELE' 12V TIPO SPDT

S1: PULSANTE PER CS

X1-8: MORSETTIERA DA CS 2 POLI
X9: MORSETTIERA DA CS 9 POLI
X10-11: MORSETTIERA DA CS 2 POLI

 

Come potete osservare lo schema elettrico si presenta piuttosto semplice e intuitivo, il merito va all'utilizzo di un microcontrollore che svolge gran parte delle funzioni necessarie. Il micro in questione è un comune PIC16F628 che oltre a testare gli ingressi e controllare le uscite, gestisce la linea seriale attraverso un apposito protocollo progettato per l'occasione. Per rendere sicura ed efficiente la trasmissione, sono stati inseriti dei controlli che provvedono a isolare le uscite nel caso il protocollo venga ricevuto in maniera errata o non venga ricevuto per niente per più di 8 cicli. Vedremo più tardi il protocollo e le garanzie adottate.

Per mantenere il numero di ingressi/uscite sufficientemente elevato e non complicare assolutamente circuito più del necessario, non abbiamo utilizzato il quarzo che avrebbe garantito un'elevata precisione del clock. Per questo abbiamo studiato un protocollo hardware che permette di minimizzare le differenze di clock tra due micro che dialogano assieme. Vedremo in seguito di che si tratta e da dove deriva. In questo modi abbiamo guadagnato due piedini che tradotto in pratica significa un ingresso e un’uscita in più.

Come abbiamo già detto gli ingressi sono 7 e vi si accedono attraverso la morsettiera X3. La presenza dei LED negli ingressi e nelle uscite rende un eventuale controllo, soprattutto sul campo, più semplice e veloce, ma non sono assolutamente necessari per il corretto funzionamento della scheda. Perciò se volete semplificare ulteriormente il circuito potete ponticellare i LED dal 1 al 7 e omettere di montare quelli dal 8 al 15. Proseguendo la descrizione è possibile notare la presenza di una resistenza in ingresso e di una, facente parte di un partitone resistivo da 10K, che forza l'ingresso a livello basso in mancanza di segnali applicati alla morsettiera, mentre il diodo zenner da 4,7V limite la tensione all'ingresso del PIC al massimo valore supportato da micro. In questo modo è possibile applicare sulla morsettiera tensioni che vanno da 5 a 24V.

Per quanto riguarda le uscite, l'uso di relè ampia di campo di utilizzo del progetto, è possibile infatti applicare sia carichi alimentati a 220V che utilizzatori alimentati a batteria, oppure misti, perché i contatti di ogni relè fanno capo a una morsettiera indipendente. Da notare il relè K8 il cui unico compito è quello di segnalare eventuali allarmi dovuti a un cattivo funzionamento di una delle due schede o a problemi di ricezione del protocollo. La presenza di tale relè si è resa necessaria perché nel caso di problemi, i relè delle uscite vengono immediatamente isolati per garantire la massima sicurezza dell'utilizzatore finale. È utile infatti venire in qualche modo avvisati che nessun carico è alimentato e il sistema si trova nella condizione di stand-by.

Per pilotare i relè abbiamo utilizzato un integrato progettato appositamente a tale scopo, reperibile in qualunque negozio di elettronica, tutto sommato economico considerando che evita la costruzione di un circuito stampato più grande e l'acquisto di otto transistor altrettante resistenza e lo stesso numero di diodi di protezione. Come già precisato per gli ingressi, i LED da DL8 a DL15 e le resistenze da R8 a R15, nonostante rendano il progetto più completo ed esteticamente presentabile, possono essere omessi senza pregiudicarne il funzionamento finale.

Sia la trasmissione che la ricezione avviene con un unico piedino del PIC precisamente il pin 16, in maniera alternata cioè quando la scheda 1 trasmette, la 2 riceve, e viceversa, ogni ciclo dura circa 100 millisecondi. La presenza del diodo D8, garantisce una maggiore sicurezza scaricando a massa eventuali picchi presenti nella linea di trasmissione. Il transistor TR1 e il LED DL16 con relativa circuiteria, servono unicamente da monitor di trasmissione e ricezione. Il pulsante S1 viene utilizzato unicamente in fase di programmazione per impostare un indirizzo univoco alla scheda che deve essere uguale alla seconda altrimenti la ricezione non viene accettata. E’ prevista la programmazione di un indirizzo univoco perché all'inizio avevamo pensato di creare una piccola rete con le schede, sempre collegati a coppia. È possibile selezionare fino a 4 indirizzi il che limita la rete a quattro coppie. Se volete sperimentare in tal senso, potrete scaricare dal sito della rivista il file oggetto completo.

Per rendere indipendente ogni scheda, abbiamo completato il circuito con l’alimentatore, è sufficiente collegare in ingresso una qualsiasi sorgente alternata o continua da 14-15 V.

 

MONTAGGIO

 

Come sempre abbiamo previsto un circuito stampato che contiene tutti i componenti, vi consigliamo di utilizzarlo perché rende più semplice il collaudo finale. Se volete semplicemente fare delle prove e non volete spendere molti soldi, potete omettere le morsettiere, sempre molto costose, i relè ed eventualmente i diodi zenner stando molto attenti ad alimentare gli ingressi unicamente con 5V.

Per il circuito stampato vi indirizziamo all'utilizzo dei fogli blu (PRESS-N-PEEL) molto comodi per la costruzione dei prototipi. Unico problema è la stampa che deve avvenire attraverso una stampante laser o una fotocopiatrice. Per il resto sono molto economici e pratici.

Il montaggio dei componenti non presenta particolari difficoltà, unico consiglio l’utilizzo degli appositi zoccoli per i due integrati. Le due reti resistite le potete smontare da una vecchia matherboard o una vecchia scheda video per PC.

Ovviamente il micro va programmato con il ‘Rin_Ser4.HEX’ che potete scaricare dal sito della rivista.

 

 

PROGRAMMAZIONE

La programmazione è necessaria solo nel caso siano presenti più coppie di dispositivi.

Con questa, infatti, viene cambiato l'indirizzo che va da 1 a 4. Ovviamente ogni coppia di dispositivi deve avere lo stesso indirizzo in maniera univoca.

Per accedere alla programmazione, è sufficiente premere il pulsante presente a bordo scheda, e alimentare la stessa. Il LED rosso di allarme si accende e resta acceso per circa due secondi dopo che abbiamo rilasciato il pulsante. Per un attimo il LED di allarme si spegne indicando l'indirizzo 1, se a questo punto ripremiamo il pulsante, alla scheda viene riassegnato l'indirizzo 1 (default). Nel caso non premiamo il pulsante, dopo una pausa di circa tre secondi il LED si spegne per due volte indicando l'indirizzo 2, quindi pausa per tre secondi, e spegnimento del LED per tre volte consecutive, pausa di tre secondi e infine quattro volte consecutive. Com'è facile intuire, per assegnare alla scheda l'indirizzo desiderato, è sufficiente premere il pulsante subito dopo la segnalazione dell'indirizzo da parte del LED di allarme. Lo spegnimento o l'accensione molto debole del LED, indica la fine della programmazione.

Nel caso non venga premuto in corrispondenza di nessun indirizzo il pulsante, la scheda mantiene quello presente nella memoria EEPROM (indirizzo 1).

Molto importante è l'assegnazione dello stesso indirizzo ad ogni coppia di schede, con indirizzi diversi, il comando non viene accettato.

 

 

PROTOCOLLO SOFTWARE

E' composto da 3 Byte e dal bit di START.

Viene inviato in automatico ogni 100 ms.

1°Byte -> INDIRIZZO SCHEDA: l'indirizzo è contenuto nel primo nible (LSB), mentre nel secondo (MSB) si trova lo stesso ma complementato.

2°Byte -> STATO 7 INGRESSI: contiene lo stato degli ingressi. Se la ricezione avviene in maniera corretta, lo stato degli ingressi della prima scheda viene riportato nella seconda (e viceversa). Il settimo bit (MSB) è il controllo di parità.

3°Byte -> STATO 7 INGRESSI COMPEMENTATO: è un controllo sul secondo Byte. Anche in questo il settimo bit contiene la parità.

CONTROLLO STRINGA RICEVUTA

1) L'indirizzo deve corrispondere, nel caso contrario, il dispositivo ignora semplicemente la stringa ricevuta.

2) Il terzo Byte una volta complementato, deve corrispondere al secondo. Nel caso contrario, viene attivato l'allarme.

3) il controllo della parità sia nel secondo che nel terzo Byte deve essere corretto. Nel caso contrario, viene attivato l'allarme.

ALLARME (OUT)

L'allarme viene attivato anche nel caso il dispositivo non riceva alcun segnale per otto cicli (circa 0,8 sec).

IN OGNI CASO, OLTRE ALLA SEGNALAZIONE DI STATO DI ALLARME DA PARTE DEL LED ROSSO E RELATIVO RELE’ (K8), LE USCITE VENGONO IMMEDIATAMENTE RESETTATE.

Ovviamente il sistema rileva anche il corto circuito di linea, ed è protetto in tutte le fasi della ricezione segnale (time-out).

 

PROTOCOLLO HARDWARE

KEELOQ

Protocollo

Il formato del segnale da trasmettere è molto importante in un sistema senza quarzo il quale avrebbe garantito un'elevata precisione del clock. Dalle prove pratiche effettuate durante il collaudo del progetto, abbiamo rilevato una differenza importante della frequenza dell'oscillatore interno al PIC tra i due micro. Per questo motivo siamo stati costretti a scartare il formato classico della comunicazione seriale usato per esempio dalla porta seriale del PC (RS232) che rendeva impossibile la sincronizzazione delle due schede.

Per ovviare a tale inconveniente in maniera sicura, tenendo conto che l'oscillatore interno può variare la propria frequenza anche in presenza di sbalzi di temperatura, abbiamo preso in considerazione il sistema adottato dalla Microchip per codificare il protocollo "KEELOQ".  Come evidenziato nella figura (disegno KEELOQ.bmp), il bit viene diviso in tre parti, il primo sempre alto, il secondo alto se deve inviare uno 0, altrimenti basso per 1 logico. La terza parte sempre bassa per sincronizzare il segnale. In questo modo aiutati dal primo terzo e dall'ultimo terzo, possiamo testare la parte centrale sincronizzando il segnale non più con il solo bit di start ma ad ogni bit trasmesso. Il protocollo da noi adottato per motivi pratici è stato leggermente modificato (disegno Protocollo.bmp). Per trasmettere l'uno logico viene portata alta la parte centrale del bit, mentre lo 0 logico viene costruito in due sole parti, la prima altra, la seconda bassa.

Il segnale è sempre stato ricevuto in maniera corretta nonostante il baudrate dei due PIC siano stati volontariamente alterati simulando periodi di trasmissione e ricezione fortemente differenti.

È un sistema che vi invitiamo a provare anche in altre applicazioni perché veramente efficace in qualsiasi situazione.

 


Il progetto è stato pubblicato dalla rivista FARE ELETTRONICA

Il pacchetto non è più raggiungibile dal sito della rivista: scaricalo QUI.

RITORNA ALLA MAIN PAGE