HOME 

RX e TX  per telecomando SABA-365

      Introduzione

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. schema

Tipo di codice

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.

Operazioni eseguite

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.

Applicazione pratica

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.

Conclusioni

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.)