Progetti - PIC

 

Display remoto via radio.


Vediamo una semplice implementazione di quanto trattato qui.

Si tratta di un ricevitore sui 433MHz che presenta su un display a 7 segmenti il valore del dato ricevuto.

Questo può essere la base per realizzare una trasmissione da un sensore remoto oppure un comando di più relè.


Il trasmettitore.

Utilizziamo lo schema già visto, estremamente semplice.

L' alimentazione è derivata da una batteria tra 3 e 5V, ad esempio una Li-Ion oppure 3 pile da 1.5V. Maggiore è la tensione, maggiore sarà la potenza radio emessa. 
Siccome occorre tassativamente non superare i 5.5V, massimo sopportabile dal PIC, usando batterie di tensione maggiore si inserirà il solito regolatore a tre terminali (78L05) oppure uno zener da 4.7-5.1V con relativa resistenza.
Dato che il trasmettitore può operare fino a 12V, complicando un poco il circuito si potrà alimentare questo con una tensione maggiore del microcontroller.

C1 potrà essere un 4.7uF e C2 un 100nF. Un pulsante collega la batteria al trasmettitore.

Tre jumper consentono di generare numeri da 0 a 7:

Volendo disporre di un maggior numero di valori occorrerà utilizzare un chip con più pin; ad esempio, con un 12F a 8 pin si avranno a disposizione 4 I/O e quindi 16 selezioni.

Alla chiusura del pulsante, il circuito è alimentato e il microcontroller genera un pacchetto di dati che invia al modulo di trasmissione, che è del genere "verticale" a 4 pin, dotato di una breve antenna (nel prototipo è un Quasar AM-TX2).

Va osservata la disposizione dei pin, indicati con una serigrafia sul minuscolo stampato, dato che non è identica per tutti i modelli di trasmettitore di questo tipo, anche se uguali ad una vista superficiale.

Per realizzare il circuito si potrà utilizzare una qualsiasi millefori o un c.s. dedicato.

L'antenna accorciata è quella descritta qui. Potrà essere usato qualsiasi altro genere di antenna adeguata, tenendo presente che essa è indispensabile.

Nello schema, i pin del chip sono relativi al package SMD; per il DIP a 8 pin la disposizione è diversa.

Ovviamente si potrà utilizzare un qualsiasi altro PIC, dato che non sono utilizzate funzioni particolari  e il set istruzioni è quello ridotto dei Baseline.


Il ricevitore.

Il ricevitore è stato un poco più complicato del trasmettitore:

Utilizziamo sempre un Baseline, questa volta a 14 pin per avere gli I/O necessari al comando del display a 7 segmenti. Il sorgente è compilabile per 16F505/506/526, ma, come sopra, si potrà utilizzare un qualsiasi altro PIC.

Il circuito, così combinato, consente di rappresentare numeri da 0 a F.

Il ricevitore radio è un modello a 8 pin molto comune (quello qui usato è un Quasar RX-2, ma vanno benissimo anche altri simili).

Anche qui sarà necessaria una piccola antenna.

Non è stato realizzato uno stampato per questo circuito, ma è stata utilizzata la scheda di sviluppo LPCuB:

Questo permette una realizzazione rapidissima del prototipo, con la possibilità di studiarne ogni dettaglio.
Il ricevitore è collegato alla scheda con tre brevi cavetti terminati F/F.
Attenzione perchè in alcuni modelli i due gruppi di pin gnd possono non essere collegati tra loro e necessitare quindi di un ponticello.

Va osservato che l'uscita del ricevitore è collegata a RB3, che il pin MCLR/Vpp: durante la programmazione in circuit attraverso la presa ICSP, il ricevitore va scollegato in quanto viene applicata la tensione Vpp dal dispositivo di programmazione. In alternativa si potrà inserire una resistenza da 1k tra RB3 e l'uscita del ricevitore.

Ovviamente sarà possibile qualsiasi altra soluzione costruttiva, non essendoci alcuna criticità nel circuito.


Il programma.

Il trasmettitore, non appena alimentato, genera un impulso di preambolo da 10ms, seguito da un pacchetto dati di 16 bit. Il preambolo ha lo scopo di allertare il ricevitore, facendo cessare la ricezione dei disturbi casuali.

Il dato trasmesso è costituito da due bytes, il cui nibble alto contiene un valore di riferimento che funge da chiave della trasmissione; il ricevitore dovrà identificare questo valore per attivare le uscite. La cosa consente di avere più trasmettitori in una stessa area, ognuno col suo riferimento, che si accoppia solamente con ricevitori aventi lo stesso codice.
Il nibble basso è costituito dall'indirizzo selezionato con i jumper: il ricevitore presenterà sul display il numero corrispondente.

Il secondo byte trasmesso è il complemento del primo ed è utilizzato dal ricevitore per verificare la correttezza di quanto ricevuto. Questa situazione costituisce un sufficientemente elevato grado di sicurezza, in ambiente non professionale, per evitare azionamenti non desiderati delle uscite.

La trasmissione utilizza una variazione di lunghezza degli impulsi inviati: i bit a 0 sono trasmessi come livello alto per 400us e livello basso per 400us. I bit a 1 sono costituiti da un livello alto per 800us e un livello basso per 400us. Questo consente un accoppiamento tra trasmettitore e ricevitore anche nel caso in cui i cui microcontroller abbiano clock un poco diversi, dato che non è previsto un oscillatore quarzato.
Ricordiamo che il clock interno dei PIC10F è calibrabile all'avvio del programma e il costruttore garantisce una tolleranza dell'1% sul valore nominale (in questo caso 4MHz), il che è più che adeguato per il nostro scopo.
Ovviamente, è obbligo effettuare questa calibrazione perchè differenze maggiori nei clock potrebbero impedire la corretta ricezione dei dati.
Da prove fatte è possibile ridurre i tempi di durata degli impulsi, anche dimezzandoli, ma per l'applicazione prevista la cosa non riveste alcuna importanza, per cui si è preferito restare su tempi "lunghi" per maggiore sicurezza di ricezione.

Il sorgente per il trasmettitore è compilabile per 10F200/202/204/206/220/222
Dato che non viene utilizzata la funziona analogica, nè il comparatore, tutti questi chip sono equivalenti e, adeguando le assegnazioni degli I/O sarà utilizzabile qualsiasi altro PIC.

Il ricevitore è sempre alimentato e il microcontroller riceve i disturbi casuali captati dall' ambiente. Questi disturbi hanno probabilità assai remote di combinare col sistema di chiavi sopra visto.
Quando il trasmettitore si attiva, il ricevitore si adegua al segnale, escludendo i disturbi; il preambolo consente di stabilizzare la ricezione e garantire che i pacchetti necessari a completare una trasmissione con successo necessitino di essere ripetuti il meno possibile.

Il ricevitore riconosce il preambolo, quindi passa a campionare il segnale in arrivo dopo 600us da ogni fronte di commutazione basso-alto.
Questo fa si che il campionamento cada con il segnale a livello alto per i bit a 1 e a livello basso per quelli a zero.
Il fatto di risincronizzarsi sulla transizione in salita di ogni impulso permette una discriminazione sicura dei bit in arrivo anche se i tempi non sono assolutamente precisi a causa di una differenza di clock dei microcontroller.
Comunque, anche se sono accettate differenze di clock di oltre il 5%, risulta in ogni caso indispensabile calibrare l'oscillatore interno, il che porta il clock generato entro l'1% del valore nominale, assicurando una corretta ricezione.

Se i due byte ricevuti sono verificati, il valore del nibble basso è passato al display, che è comandato attraverso la solita lookup table. Avendo un port solo 6 pin, il segmento g è comandato da un pin dell' altro port.

Dato che il trasmettitore, fino a che è alimentato, continua ad inviare pacchetti dati, il ricevitore, una volta azionata l'uscita, la mantiene per 2 secondi, in modo da evitare un indesiderabile sfarfallio della cifra, dopo di che il display viene spento fino all'arrivo di un nuovo dato valido.
Questo tempo può essere variato con  una semplice modifica al sorgente.

Il sorgente del ricevitore è compilabile per 16F505/506/526, ma, come accennato prima, nulla vieta di utilizzare a qualsiasi altro PIC. Il sorgente, operando col set di istruzioni Baseline, richiede solamente le modifiche necessarie al config iniziale ed alla assegnazione degli I/O, come ampiamente descritto nel corso di programmazione


Estensioni.

Utilizzando un driver (transitor open collector, MOSFET open drain, integrati genere ULN2003, ecc) si potrà sostituire il display con carichi differenti, come relays.
Occorrerà modificare il sorgente per adeguare la tabella in uscita da 7 segmenti al modo scelto.


Portata e sicurezza.

La portata, che potrebbe essere la massima preoccupazione dell' utilizzatore, come abbiamo detto, dipende essenzialmente dalla presenza di una antenna efficiente. Quanto migliore è l'antenna, tanto migliore sarà la portata.
Va però tenuto conto che all'interno di un ambiente ci possono essere ostacoli alla trasmissione delle onde radio, come pareti, elementi metallici, solette in cemento armato, ecc. Quindi la posizione reciproca di TX e RX all'interno di una casa (e ancor più di una officina o simili) potrà essere determinante.
Inoltre, la presenza di disturbi elettromagnetici (motori, varialuce, regolatori di tensione, elettrodomestici, macchine elettriche, ecc), può essere di intralcio; abbiamo tratteggiato come opera il ricevitore e la sua struttura  non è il massimo per operare in ambienti molto rumorosi. 

Per ultimo, va considerato che non si tratta di una una comunicazione di sicurezza, come potrebbe essere un Keeloq o rolling code. Quindi potrebbe essere non ideale per chiavi e simili.
Per trasmissioni a rate più elevati o dove è richiesta una diversa qualità o sicurezza, esistono moduli con tecnologie differenti (con costi che possono essere assai maggiori), sui quali implementare protocolli di comunicazione di maggiore complessità.



 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 09/06/16.