Il protocollo X-10 con PIC

Il continuo sviluppo di nuove tecnologie ha portato innovazioni in svariati settori, tra cui quello della domotica. La domotica è un particolare aspetto di questa evoluzione tecnologica: cambia l’interazione tra l’uomo e la casa, apportando migliorie in quella che è la vita quotidiana, sia essa racchiusa tra le mura domestiche o in ambienti lavorativi.

La domotica spazia sia nel settore dell’automazione di grandi dimensioni come condomini e aziende (Building Automation) e sia dell’automazione di una singola casa (Home Automation). La Building Automation si pone come obiettivo quello di integrare tutti gli impianti (di sicurezza, di climatizzazione, di distribuzione) sotto un unico strumento di controllo, sfruttando tecnologie elettroniche ed informatiche avanzate per migliorare la sicurezza,  il comfort e il risparmio energetico. L’Home Automation si prefigge di far interagire  i dispositivi presenti nella casa, rinnovando quindi il concetto di ambiente domestico, non più visto come un insieme di dispositivi a sé stanti, ma come un contenitore di dispositivi che intercomunicano. Esistono però delle limitazioni dovute al protocollo.

Il protocollo x-10

Il campo dell’automazione domestica offre una serie di sistemi commerciali tra i quali EIB-KONNEX, Bticino MyHome e X-10. Il protocollo X-10 si propone di sfruttare la rete elettrica esistente nelle abitazioni, per implementare un sistema di comunicazione tale da permettere all’utente di controllare l’interazione tra i  dispositivi presenti nell’impianto. Possiamo individuare due componenti fondamentali utilizzati da X-10:

■ controllore/trasmettitore che viene inserito in una normale presa elettrica o installato al posto di un interruttore di corrente

■ Un modulo X-10 che si interpone tra il dispositivo che si vuole controllare e la presa elettrica a cui è connesso.

La comunicazione tra il controllore/trasmettitore e i vari moduli avviene tramite le linee elettriche, non richiedendo quindi modifiche alla rete elettrica di distribuzione preesistente. Questo sistema è sicuramente fra i  più economici ed offre molte possibilità, ma ha una serie di limitazioni funzionali: è possibile solo effettuare l‘accensione e lo spegnimento di utenze elettriche e la cosiddetta dimmerizzazione di luci. Inoltre non si può interrogare un dispositivo per sapere se è presente e qual è il suo stato. Ulteriori svantaggi sono la scarsa ampiezza di banda fornita da X10 e la difficoltà di comunicazione in caso di rumore sulla rete elettrica.

Il funzionamento del protocollo X-10

I segnali utilizzati per la comunicazione richiedono piccoli segnali a radio frequenza per la rappresentazione delle informazioni digitali. Le trasmissioni sono sincronizzate con il passaggio per lo zero della tensione alternata (zero crossing), in questo modo è possibile conoscere quando trasmettere o ricevere le informazioni. Una informazione di “1” binario è rappresentato da un burst di durata 1ms e alla frequenza di 120KHz inviato subito dopo lo zero crossing. Viceversa, uno zero binario è rappresentato dalla mancanza del burst di 120 KHz. La figura 1 mostra il timing del formato in trasmissione, mentre la figura 2 identifica i vari key code disponibili.

Figura 1: X-10 transmission timing.

Figura 1: X-10 transmission timing.

 

Figura 2: key code.

Figura 2: key code.

 

Un messaggio, indirizzo o comando, secondo il protocollo X-10 è costituito da una serie di bits: un campo  di inizio (chiamato start code), il codice della casa (house code), o codice del comando, e un codice chiave (key code), mentre l’ultimo campo identifica il suffisso. Il suffisso è un particolare valore che identifica se il codice chiave è un indirizzo o un codice di funzione. Quando il suffisso è 1, allora si tratta di un codice indirizzo, viceversa se è uguale a 0, allora si tratta di un codice comando. Per la trasmissione dei vari house code e i codici key, sono utilizzati due zero crossing. La trasmissione di ogni bit come coppia complementare (per esempio uno zero è rappresentato da 0-1 mentre un uno è rappresentato da 1-0). Per esempio, per trasmettere il codice casa A, il codice trasmesso è 01101001 poiché il singolo bit è rappresentato da una coppia di bit complementari. Dato che solo il codice casa e il codice chiave sono trasmessi usando la coppia di bit complementari, il codice di inizio (start code) è l’unico che viene trasmesso senza manipolazioni particolari. Il codice chiave, che è composto da 5-bit usa 10 bit per la sua trasmissione mediante coppia complementare. Poiché l’ultimo bit del codice chiave è sempre zero per un indirizzo e uno per un codice di funzione, l’ultimo bit del codice chiave può essere trattato come un suffisso che denota se il codice chiave è un indirizzo di unità o un codice di funzione. Così per accendere ad un modulo x-10 assegnato alla casa A, unità due, deve essere trasmesso, per prima, la trama come mostrato in figura 3. Ogni messaggio è trasmesso due volte. Tra una trasmissione e l’altra del doppio pacchetto passano 3 cicli completi della tensione elettrica o sei zero crossing. La seconda trasmissione identifica il comando da applicare alla casa A e all’unità due. La figura 4 mostra la modalità comando, anche in questo caso, la trasmissione deve essere fatta due volte e sincronizzata con sei zero crossing.

Figura 3: address sequence.

Figura 3: address sequence.

 

Figura 4: command sequence.

Figura 4: command sequence.

La proposta  Microchip

Microchip propone una soluzione basata sul componente PIC16F877A, questo è un processore versatile composto da ROM, RAM ed è disponibile per varie frequenze operative, periferiche e costi di approvvigionamento. La cosa che lo rende veramente appetibile è la possibilità di utilizzare il driver X-10: in questo modo possiamo disporre da subito del codice già pronto all’uso evitando di costruirci qualcosa di analogo con impatti sul testing e il collaudo della libreria software.

Il driver software

La soluzione Microchip fornisce una serie di ruotine e flag necessarie per la corretta gestione del protocollo. La libreria X-10 può anche essere utilizzata così com’è senza bisogno di modifiche. La cosa importante da tener presente è che utilizzando la libreria Microchip non è necessario conoscere in maniera dettagliata il protocollo con le relative funzioni software disponibili. Vediamo quali sono le funzioni di questo driver:

- InitX10

Questo modulo software è utilizzato per inizializzare  le periferiche che forniscono la funzionalità di X10. E’ necessario chiamare questa primitiva prima di ogni altra chiamata.

- SkipIfTxReady

Questa primitiva deve essere utilizzata prima di trasmettere un messaggio X-10. La funzionalità di questo modulo è quello di controllare se è già in corso un’altra spedizione e per fare questo è testato il flag

- SendX10Address (House, Unit) Questo modulo è utilizzato per trasmettere un indirizzo X-10 verso una particolare unità. Questo modulo richiede due parametri: un house address e una unit address. Le eventuali definizioni da utilizzare sono riportate nel file x10lib.inc.

- SendX10AddressVar

Questo modulo è utilizzato per spedire ad un indirizzo X-10 mediante una variabile piuttosto che attraverso una costante. In questo modo, per spedire un indirizzo contenuto nelle variabili MyHouse e MyUnit deve essere utilizzata la seguente sequenza:

MOVF MyHouse, W ;contains a value
;from 0-16
MOVWF TxHouse
MOVF MyUnit, W ;contains a value
;from 0-16
MOVWF TxUnit
SendX10AddressVar

- SendX10Command (House, Function) Questo modulo è utilizzato per spedire un comando X-10. Questa primitiva richiede due parametri: l’indirizzo e la function code. Anche in questo caso, le definizioni degli indirizzi e delle funzioni sono contenute nel file x10lib.inc. In questo modo, per spedire un comando “All Lights On” verso tutte le unità contenute nella casa A, occorre scrivere: SendX10Command HouseA, AllLightsOn

- SendX10ComandVar

Questo modulo spedisce un comando X-10 attraverso una variabile invece di utilizzare una costante. In questo modo, per spedire una comando contenuto nella varibile MyCommand verso tutte le unità di MyHouse occorre scrivere:

MOVF MyHouse, W ;contains a value
;from 0-16
MOVWF TxHouse
MOVF MyCommand, W ;any X-10
;function defined in x10lib.inc
MOVWF TxFunction
SendX10CommandVar
- SkipIfRxDone

Prima di leggere un messaggio è necessario essere sicuri che tutto il messaggio sia prima ricevuto. Per garantire l’utilizzatore questa primitiva verifica il  flag X10RxFlag.

- SkipIfAddressRcvd

Questa primitiva è utilizzata per verificare se l’indirizzo è stato ricevuto. Anche in questo caso si utilizza un flag: Rx-CommandFlag.

- SkipIfCommadRcvd

Questa è l’equivalente della primitiva precedente. In questo caso si verifica dell’avvernuta ricezione del commando e il flag testato è RxCommandFlag.

- ReadX10Message

L’uso di questo modulo è quello di leggere un messaggio X-10 ricevuto precedentemente. Se il messaggio  è di tipo address allora l’indirizzo e l’unit code saranno posti nelle variabilii RxHouse e RxUnit. Viceversa, se il messaggio  è invece un comando, allora l’indirizzo è posto in RxHouse, mentre il  codice della funzione in RxFunction.

Il progetto

La casa costruttrice Microchip, per invogliare  il progettista ad utilizzare la propria soluzione, fornisce un’applicazione Home Controller.  I vari componenti hardware sono mostrati in figura 5.

Figura 5: application block diagram

Figura 5: application block diagram

La figura 6 pone in evidenza, invece, le varie risorse hardware richieste per realizzare l’applicazione suggerita da Microchip.

Figura 6: risorse richieste.

Figura 6: risorse richieste.

E’ utilizzato una comune ISR per gestire gli interrupts dei vari timer presenti, ad esempio il timer0 genera un evento asincrono ogni 1ms, il timer1 è utilizzato per il realtime counter (RTC). La lettura del documento [1] fornisce tutte le necessarie informazioni per realizzare un dispositivo di questo genere.

Conclusione

La proposta Microchip è sicuramente interessante sia perché offre un driver già testato e collaudato e sia perché riduce la componentistica esterna a pochi dispositivi. L’uso del PIC16F877A fornisce al progettista una serie di strumenti utili al suo lavoro: un microprocessore facile da usare corredato da una serie di dispositivi onchip, una libreria software ottimizzata per applicazioni embedded e il supporto della casa costruttrice attraverso la disponibilità di documentazione e idee di progetto. In conclusione implementare un progetto di Home Automation non è mai stato così facile.

 

 

Approfittane ora!

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend