Salve, vorrei descrivervi in questa
occasione un’esperienza da me condotta durante l’estate scorsa,
ripercorrendo assieme a voi, tutte le tappe che mi hanno poi indotto alla
realizzazione di un decodificatore di segnali per telecomando TV. Lo scopo
iniziale della mia impresa era di analizzare i segnali emessi dal
telecomando del mio televisore, per indagarne il codice ed il tipo di
modulazione. Come vedete nulla di particolare, infatti, questo lavoro
vuole principalmente essere uno studio di base per eventuali sviluppi ed
ampliamenti futuri.
La prima cosa che ho dovuto fare, è stata procurarmi un ricevitore a luce infrarossa del tipo usato nei TV, impresa tutt’altro che difficile, in quanto ne ho subito trovati due, prelevandoli da un TV e da un videoregistratore, ormai entrambi fuori uso. Uno dei due ricevitori in questione è visibile nella foto1, ma posso assicurarvi che sia con uno sia con l’altro ho ottenuto i medesimi risultati. In alternativa, suggerisco l’uso del ricevitore ad infrarossi IS1U60 prodotto dalla SHARP , da cui non fatevi trarre in inganno dalle apparenze, infatti, anche se esternamente si presenta come un normale transistor, internamente contiene tutta la circuiteria necessaria per ricevere un segnale ad infrarossi, demodularlo e generare un segnale TTL pronto per essere decodificato dal PIC. Successivamente ho alimentato il ricevitore ad infrarossi con una tensione continua di 5V. ed ho collegato la sua uscita direttamente all’ingresso del mio oscilloscopio. A questo punto premendo un qualsiasi tasto sul telecomando, in direzione del ricevitore ad IR, ho visto scorrere sullo schermo dell’oscilloscopio, una serie d’impulsi inizialmente molto confusi. Intervenendo però sui vari comandi dell’oscilloscopio, mi è stato possibile visualizzare sullo schermo un treno d’impulsi come raffigurato nella fig.1.
E’ risultato subito evidente che quando un pulsante sul telecomando è
premuto, il treno d’impulsi corrispondente si ripete ad intervalli di
tempo costanti e pari a 60 mS. circa, ed ognuno di loro è costituito da
12 impulsi stretti di durata pari a 20 uS. circa, ognuno dei quali si
ripete rispetto al precedente dopo un intervallo di tempo di 6 mS. oppure
9 mS., per un totale di 11 intervalli di tempo. Per comodità mia, ho
infine deciso di associare il valore “1” agli intervalli lunghi 9 mS.
ed il valore “0” agli intervalli brevi da 6 mS.; ottenendo in questo
modo un codice binario costituito da 11 bits. A questo punto, valutata la
possibilità di poter decifrare tali segnali usando un microcontrollore
che ne leggesse il codice e lo rappresentasse su un display a cristalli
liquidi, l’evoluzione più naturale dell’impresa è stata la
realizzazione di un decodificatore che ho attuato utilizzando il
microcontrollore PIC.16F628 prodotto dalla Microchip. Durante la fase di
messa a punto del software e di test, ho notato che in realtà sono
sufficienti soltanto gli ultimi 6 bits per determinare univocamente quale
codice si sta ricevendo e di conseguenza quale tasto è stato premuto sul
telecomando. In effetti, i primi cinque intervalli di tempo variano la
loro durata, non solo premendo tasti diversi, ma anche premendo lo stesso
tasto sul telecomando. Ecco il motivo per cui non sono presi in
considerazione in fase di decodifica.
Passo ora a descrivervi le operazioni svolte dal microcontrollore durante il riconoscimento del codice ricevuto.
|
Facendo riferimento al diagramma di flusso rappresentato in fig.2, notiamo che dopo l’accensione e dopo il “VIA”, vengono azzerati il “REGISTRO di CODICE” ed il “CONTATORE di DURATA”. Successivamente una routine di controllo verifica continuamente che non vi sia un impulso in arrivo, incrementando il “CONTATORE di DURATA”. Se invece un impulso è arrivato, viene letto il valore del “CONTATORE di DURATA” e confrontato col valore di 7,5 mS. Se risulta essere minore, allora vuol dire che l’intervallo tra gli ultimi due impulsi ricevuti da 20 uS., era di 6 mS. e quindi viene caricato uno “0” nel “REGISTRO di CODICE”. Se invece risulta essere maggiore di 7,5 mS., allora può essersi trattato di un intervallo da 9 mS. oppure da 60 mS., per cui si rende necessario eseguire un altro confronto col valore di 50 mS. Se il risultato di quest’ultimo confronto è minore, allora vuol dire che l’intervallo era di 9 mS. e quindi viene caricato un “1” sul “REGISTRO di CODICE”. |
Se invece il risultato del confronto è maggiore di 50
mS.,
allora è evidente che è stata ricevuta una pausa di 60 mS. e quindi si
può essere certi che il codice ricevuto è completo. Dopo di che si
ritorna all’inizio del programma, si azzerano nuovamente il “REGISTRO
di CODICE” ed il “CONTATORE di DURATA” e si ritorna ad attendere
l’arrivo di un nuovo treno d’impulsi, ripetendo il ciclo finora
esaminato. Da notare che dopo il caricamento di un “1” o di uno
“0” sul “REGISTRO di CODICE”, viene ovviamente azzerato il solo
“CONTATORE di DURATA”, per poi procedere alla misurazione
dell’intervallo successivo.
Terminata questa prima parte di lavoro, ho proseguito
cercando di trovare un’applicazione pratica che non si limitasse alla
sola rappresentazione del codice sul display. Per cui alla fine,
modificando leggermente il software, ho fatto in modo che si chiudesse od
aprisse un relè, in relazione al riconoscimento di un codice
prestabilito. In realtà, come si vede dallo schema elettrico di fig.3,
ho preferito impiegare un TRIAC comandato da un optoisolatore. In questo
modo mi è stato possibile alimentare direttamente un carico a 220 VAC,
mantenendo allo stesso tempo il perfetto isolamento del decodificatore
dalla rete elettrica d’alimentazione. Più precisamente premendo il
tasto “TONI ALTI” del telecomando corrispondente al codice binario
trentatré, si da alimentazione al carico; premendo il tasto “TONI
BASSI” corrispondente al codice binario trentadue, si toglie
alimentazione al carico. Il motivo della scelta di questi due tasti è
solo d’ordine pratico, in quanto posso comandare il mio dispositivo
anche col televisore acceso, senza che su quest’ultimo avvengano
modificazioni di rilievo. Con questi due comandi, infatti, il televisore
si predispone solo alla ricezione di ulteriori comandi, per aumentare o
diminuire la tonalità del segnale audio riprodotto.
Va da se che chi è già in possesso del telecomando “SABA-365”, oppure di un suo equivalente ad esempio del tipo “VISA”, potrà subito utilizzare il progetto, realizzando il solo circuito ricevente. A chi ne è sprovvisto invece propongo anche la realizzazione di un semplicissimo trasmettitore, il cui schema elettrico che non ha bisogno di commenti è visibile nella fig.6, impiegante oltre al pic pochissimi altri elementi, tra cui il diodo emittente all’infrarosso recuperabile da un qualsiasi telecomando TV in disuso.
Ricordatevi che i due PIC vanno
programmati con i files RX_TLC.HEX per
il ricevitore e
TX_TLC.HEX per il
trasmettitore. Dopo il montaggio, se non avrete commesso errori di
distrazione, dando alimentazione tutto dovrà funzionare al primo colpo.
Chi volesse approfondire in dettaglio le istruzioni impartite al PIC, può
fare riferimento alla fig.4 che
riproduce integralmente il file RX_TLC.ASM con le 90 istruzioni
utilizzate, con annesse indicazioni che ne facilitano il percorso logico.
Nella fig.5 invece troverete il
file TX_TLC.ASM con le istruzioni che implementano il modulatore per il
trasmettitore. Potete scaricare comunque tutti i files, compresi gli HEX
dal sito, oppure farne richiesta al mio indirizzo e-mail, dove potete anche inoltrare eventuali suggerimenti o richieste di
chiarimenti. Concludo salutandovi ed augurando a tutti buon lavoro e buon
divertimento.
IT9DPX - #135 (Francesco M.)