Un “giocattolo” ad infrarossi dai mille usi, con pic18F2550 : USB Infrared Toy

Il nome USB Infrared Toy (giocattolo USB ad infrarossi) in realtà è più che azzeccato. Si tratta di un progetto del grande Ian Lesnet di Dangerous Prototypes basato su un PIC18F2550, un led ad infrarossi e uno (o due) ricevitori IR. Cosa fa? Tutto quello che si può fare con un pic e gli infrarossi. Ci sono difatti diversi firmware da caricare sul PIC che permettono di realizzare applicazioni differenti. E per tutti i firmware, come per tutti i progetti di DP, è possibile scaricare gratuitamente il sorgente.

pcb USB IR toy versione through-hole

Dell’USB Infrared Toy ne esistono varie versioni, l’ultima è la versione 2, in formato SMD. Esiste anche la versione through-hole (cioè con componenti classici). Le differenze tra l’una e l’altra versione sono minime e comunque sia i firmware lavorano su tutte le ultime versioni.

L’IR toy, come dicevo, monta un led ad infrarossi e due ricevitori. Un ricevitore (il TSOP34838) esegue la demodulazione del segnale infrarossi ricevuto e quindi fornisce al PIC un segnale già cucinato, il secondo ricevitore (un QSE159) è invece di tipo “grezzo”, cioè da in pasto il segnale IR al PIC così come viene rilevato, senza eseguire nessun tipo di demodulazione. Questa seconda opzione è molto utile nei casi in cui bisogna eseguire analisi approfondite sul segnale. Io avevo sottomano solo il ricevitore TSOP (si trova a pochi spiccioli e se smontate un vecchio televisore probabilmente ce lo trovate dentro, e se proprio non è lui potrebbe essere comunque compatibile con una probabilità molto molto alta) e quindi ho montato solo quello.

I firmware possono essere scaricati dalla pagina ufficiale del progetto al paragrafo Download. Nello Zip troverete vari files hex, che corrispondono ai diversi firmware, ognuno in grado di trasformare il nostro giocattolo in uno strumento diverso. La prima volta dovete utilizzare per forza un programmatore, le volte successive potete sfruttare il bootloader utilizzando unicamente la connessione USB predisposta sulla scheda seguendo le istruzioni. Mi raccomando solo di una cosa: quando andate a caricare il firmware state attenti alla disposizione del connettore ICSP. Non ho controllato sulle altre versioni com’è, ma sulla versione through-hole, a parte che manca il 6° pin (ma ok, tanto per la programmazione dei pic non serve a niente), il connettore ICSP è disposto al contrario per cui il pickit va innestato a pancia in giù:

Basta che vi ricordate che la freccetta sul pickit va sul pin VPP/MCLR

Prima di partire

Il firmware base dell’IR Toy (quello cioè nativo, per il quale l’IR Toy è stato concepito) è identificato come USBIRToy.vXX.hex e l’ultima versione disponibile al momento della stesura di questo articolo è la versione 1.20 (USBIRToy.v20.hex)

Dalla versione 1.05 il firmware dell’IR Toy viene indicato unicamente come vXX, per cui V20 identifica la versione 1.20

Collegando l’IR Toy al PC verrà riconosciuta una nuova periferica USB. Non c’è bisogno di drivers in quanto l’IR Toy utilizza lo stack originale della microchip per l’emulazione seriale e quindi i driver nativi di windows. C’è però bisogno di istruire windows su come usare tali driver e lo si fa selezionando, nella finestra di installazione manuale, il file mchpcdc.inf nella cartella inf-driver del pacchetto che avete scaricato.

Su un PC con Windows 7 mi è capitato che l’IR Toy non veniva riconosciuto e non partiva nemmeno l’installazione. Del problema me ne sono accorto subito grazie al suono diverso che Windows 7 emette quando non riesce a far funzionare un dispositivo (e non ci prova nemmeno!). Nella gestione periferiche avevo questa situazione:

In questo caso basta cliccare col tasto destro sul CDC Test e selezionare “Aggiornamento Software Driver”, scegliere quindi l’opzione “Cerca il software del driver nel computer” e selezionare la cartella inf-driver del pacchetto che avete scaricato. Apparirà una bruttissima finestra di windows con un avviso di sicurezza, ma dato che mi fido più di Dangerous Prototypes che della Microsoft clicco tranquillamente “Installa il software del driver”. Dopo un po di tempo perso si sente il suono di periferica riconosciuta e compare quindi una nuova porta COM con un numero spropositato nell’elenco di gestione periferiche:

Decoder IRMAN

Il firmware standard permette di fare varie cose. L’una o l’altra modalità di funzionamento viene impostata tramite comandi inviati sulla seriale virtuale, ogni modalità ha la sua documentazione. Di default, all’accensione, il firmware standard agisce in pratica come un decoder infrarossi compatibile IRman: riceve i segnali dai telecomandi infrarossi e li trasmette sulla seriale emulata su USB (documentazione su questa modalità). In questa modalità il diodo trasmettitore non viene sfruttato: l’IR Toy riceve soltanto e decodifica i comandi inviati secondo lo standard RC5 della Philips (che è quello maggiormente diffuso). Le applicazioni sono molteplici e in molti lo utilizzano accoppiato a winlirc (o altri programmi simili, disponibili anche per Linux e Mac) per controllare le funzioni del PC con un normale telecomando tv. Chi è appassionato dei media center (o, come li chiamano altri, box multimediali) fai-da-te ben sa di cosa parlo.

Il SUMP Logic Analyzer

Con questo firmware è anche possibile utilizzare l’IR Toy come analizzatore logico per segnali infrarossi sfruttando i numerosi software free e/o open source messi a disposizione, il SUMP Logic Analyzer in primis. Questa modalità si chiama appunto SUMP Analyzer mode. (la documentazione su questo protocollo è presente qui).

Vi faccio un breve riassunto: il SUMP Logic Analyzer (dove le ultime lettere M e P suppongono stiano per Michael Poppitz, l’autore di questa genialata) è un analizzatore logico open source basato originariamente su una FPGA Spartan 3. Il sig. Poppitz in pratica ha realizzato sia il firmware per la FPGA che il software in Java lato PC per comunicare con il suo analizzatore. Col passare del tempo questo SUMP logic analyzer è diventato molto popolare e ne è stato eseguito il porting su varie piattaforme. Se la cosa vi interessa come ha interessato me, la pagina originale del progetto è questa.

L’IR Toy, con questa modalità consentita dal firmware standard, è in grado di interfacciarsi con il software del SUMP Logic Analyzer per cui è possibile osservare sul pc i segnali IR ricevuti e usare quindi l’IR Toy come un analizzatore logico, seppur limitato ai soli segnali infrarossi. In giro si trovano svariate versioni del SUMP Logic Analyzer, l’unica che sono riuscito a far funzionare senza problemi su tutti i PC è quella che ho scaricato da qui: http://www.papilio.cc/index.php?n=Papilio.Download (giusto per informazione: Papilio è un progetto open source per imparare l’utilizzo delle FPGA). Andate al paragrafo Papilio Software => SUMP Logic Analyzer. Questa versione include tutto, motore Java e drivers seriali.

Una volta scaricato il pacchetto bisogna estrarlo, collegare l’IR Toy al PC e lanciare il file BP_LogicAnalyzer.exe (su windows!). Premete il pulsantino a forma di razzo e impostate i parametri come vi indico nell’immagine seguente (a parte il numero di COM creata dall’IR Toy che magari a voi sarà diversa dalla mia):

Premete quindi il pulsante Capture. Software e IR Toy si mettono in attesa della ricezione di un segnale IR. Premete un pulsantino su un telecomando IR posizionato di fronte al ricevitore dell’IR Toy… et voilà:

L’elenco di tutti i software per sfruttare la funzione SUMP Logic Analyzer mode è presente qui.

Infrared Sampling Mode

Questa funzione, offerta sempre dal firmware di base, misura la lunghezza degli impulsi ricevuti e li invia al computer su seriale. E’ una modalità simile alla IRMAN ma in pratica invia i dati secondo un diverso standard, più semplice da interpretare ad “occhio nudo” e sul quale girano alcuni software che permettono anche di salvare e replicare i segnali ricevuti (record/play). La documentazione su questa modalità è presente qui.

Altre modalità

Non mi soffermo a parlare delle altre due modalità offerte dal firmware standard: convertitore Seriale/USB e Self-Test.

Firmware alternativo: porting del TV-B-Gone®

Il TV-B-Gone® è un progetto di Mitch Altman, molto interessante a livello educativo ma anche adatto per fare dei bei scherzetti. Il firmware invia, tramite IR, i codici per lo spegnimento (power codes) di oltre un centinaio di marche diverse di apparecchi televisivi. Per cui immaginate lo scenario: centro commerciale con 50 televisori accesi, premete un unico pulsante e dopo un po’, una alla volta, tutte le tv si spengono (e se vi acchiappano vi menano e fanno bene!). Ovviamente bisognerebbe realizzare una versione modificata, con molti LED IR pompati alla bisogna per poter coprire una bella distanza. Ma il succo del discorso è proprio questo. Ho provato questa modalità e devo dire che mi sono divertito parecchio.Tenete conto che non è detto che funzioni anche col vostro televisore dal momento che questo firmware è un porting e pare non sia possibile riuscire ad inserire tutti i power codes presenti nel progetto originale.

Il Firmware da caricare per usare questa funzione è USBIRToy-TVBGone.hex . Ovviamente non è comodo portare in giro l’IR Toy appresso per fare gli scherzetti dal momento che è alimentato con l’USB, a meno che non vi portiate dietro anche delle batterie. Appena date alimentazione il pic comincia subito ad inviare i codici dopodichè va in sleep e quindi per risvegliarlo potete premere il pulsante di reset.

Links

Il punto di partenza è sicuramente la pagina ufficiale del progetto, dopodichè non posso fare altro che consigliarvi la sezione del Forum dedicata all’IR Toy dove vengono anche presentati firmware non ufficiali, modifiche, porting, consigli ecc.

Tutti i file del progetto (compresi sorgenti in MPLAB C18, i files per la realizzazione dei pcb ecc) sono presenti nell’apposito repository su Google Code.

 

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)