IRDispl
Da
diverso tempo avevo un display LCD alfanumerico 16x2, nonchè
un piccolo PC quasi sempre acceso, dotato di scheda sonora e CD-ROM
ma senza monitor e tastiera (è un server Linux). Perché
non fare due più due e non dotarlo di un'interfaccia di
pilotaggio per mpg123 (un player MP3 a riga di comando per Linux),
con output sul display LCD e che potesse rispondere a un telecomando
a infrarossi?
Detto fatto. Il "cervello" di IRDispl
è il microcontrollore PIC16x84 della Microchip;
esso svolge sostanzialmente tre compiti:
Comunica con la porta seriale del PC (sia
in ricezione che in trasmissione) attraverso un MAX232;
Riceve i pacchetti RC5 spediti da un
telecomando a infrarossi attraverso il rilevatore IS1U60 della
Sharp;
Pilota il display LCD dotato del "solito"
controller HD44780.
Per semplicità in questa versione tutti
gli eventi vengono gestiti in polling. Se date un'occhiata al
programma per il PIC noterete un vero e proprio "ciclo" che
verifica le condizioni di ogni evento. Ah, attenzione: è
fondamentale utilizzare un
quarzo da 4 MHz. La frequenza di clock è "parametrizzata"
solo in alcuni moduli, in
quello principale tutte le temporizzazioni sono state calcolate su 4 MHz.
1. Comunicazione con la porta seriale
La comunicazione avviene a 2400 bps, 8n1, senza
nessun tipo di controllo di flusso (né hardware né
software). Questo permette di ridurre al minimo i fili fra
IRDispl e la porta seriale: RxD, TxD e la massa. L'interfacciamento
(e adattamento di livelli logici) è assicurato da un MAX232,
il cavallo di battaglia della sempre più simpatica Maxim,
che ne spedisce anche dei campioni gratuitamente. Il formato di
comunicazione è ridotto al minimo. Quando IRDispl riceve un
pacchetto IR, spedisce subito al PC due byte che contengono il codice
del tasto premuto (vedere il prossimo paragrafo per il formato);
viceversa, quando il PC spedisce un byte a IRDispl, quest'ultimo lo
interpreta in base al valore del bit più significativo:
1aaaaaaa = Vai all'indirizzo
aaaaaaa del display 0bbbbbbb = Scrivi il carattere ASCII bbbbbbb
all'indirizzo attuale
Evidentemente si possono specificare solo
caratteri ASCII a 7 bit, e indirizzi fino a 127 (sufficienti anche
per un display a 32 righe per 4 colonne, che è il massimo
gestibile dall'HD44780). Forse in futuro svilupperò un set di
comandi più flessibile che permetterà di usare anche le
funzioni "avanzate" del controller LCD.
2. Ricezione dei pacchetti IR
I pacchetti IR vengono ricevuti dallo Sharp
IS1U60, un dispositivo a tre piedini che si occupa di tutto:
demodulazione, filtraggio, controllo automatico di guadagno. Voi lo
alimentate, e lui vi da' in uscita un segnale digitale TTL
compatibile già "cucinato". Se può
interessare l'ho trovato da RS (www.rs-components.it);
mi sono costate di più le spese di trasporto del sensore, ma
pazienza. ;-) Probabilmente se avete una vecchia TV da
cannibalizzare potreste trovarcelo dentro (lui o un suo surrogato).
In questa versione del codice PIC, IRDispl
riconosce soltanto la codifica RC5. Essa è utilizzata
da tutti gli apparati della Philips e probabilmente anche da qualche
altro costruttore/sottomarca; l'ho scelta perché sembra che
sia l'unica per cui esiste un vero e proprio standard internazionale,
quindi è supportata sicuramente da qualunque telecomando
universale che potete trovare in commercio. È una codifica
bifase, con la quale vengono trasmessi dei pacchetti di 14 bit; una
volta che li ha ricevuti, IRDispl li comunica al PC "così
come sono" - prima gli 8 meno significativi e poi i 6 più
significativi (più due di pad):
byte 0: aacccccc byte 1:
00sstaaa
ss sono due bit di start e in teoria
dovrebbero essere entrambi '1' (anche se nella pratica per alcuni
pulsanti il secondo è posto a '0'); t è un bit
che cambia valore a ogni pressione, aaaaa sono cinque bit di
indirizzo (identificano il dispositivo di destinazione: TV, stereo,
VCR...) e cccccc sono sei bit che contengono il codice vero e
proprio del tasto premuto. Comunque capire la semantica di questi due byte non
è granchè utile, basta memorizzare i valori per ogni tasto premuto e usare
quelli.
3. Pilotaggio del display LCD
Questo praticamente è un argomento da
FAQ, vista la "notorietà" del controller HD44780.
Non ho nessuna intenzione di spendere più di tre parole per
questa sezione; il display viene pilotato nella modalità a 4
bit, e (senza nessun motivo apparente, a parte la mia idiozia) ho
ignorato il fatto che ci fossero le librerie già fatte, quindi
ho scritto da zero l'intera libreria di pilotaggio. Però ora
posso fregiarmi di aver scritto/progettato TUTTO io... hahahaaaa!!!
:-)
4. Il plugin per il WinAmp
Questo plugin l'ho sviluppato solo per mia
comodità, per poter iniziare a testare IRDispl in un ambiente
più "amichevole". Il mio obiettivo era però
quello di utilizzare il sistema sotto Linux, quindi (per ora) non è
mia intenzione fare qualcosa di completo per Windows. In particolare
il plugin non è "personalizzabile", ossia non
permette di impostare in esecuzione i codici del telecomando
associati a ogni funzione; per modificarli è necessario andare
a mettere le mani direttamente nel codice, quindi temo che questo
plugin servirà a pochi fra quelli che non sanno programmare o
quantomeno ricompilare dei sorgenti (ah, a proposito, si tratta di un
progetto per Visual C++ 4.0). C'è però da dire che
il telecomando che ho usato è un modello molto comune: si
tratta del telecomando di uno stereo compatto della Philips (vedi
foto fatta pessimamente con uno scanner) che ha gli stessi codici
dei telecomandi per le TV ma (ovviamente) un indirizzo diverso.
Scommetto cinque a uno che si riesce a trovare senza nessun problema
in un qualsiasi negozio di elettronica/elettrodomestici. In ogni
caso, sono curioso di sapere se qualcuno è veramente
interessato a questa parte del progetto; in tal caso me lo faccia
sapere, semmai vedrò di renderla un po' più completa.
5. Il plugin per mpg123
Il "plugin" per mpg123 è già
più completo di quello per il WinAmp (se non altro perché
permette di personalizzare i codici IR associati a ogni comando), ma
necessita ancora di molte migliorie e bugfix. È inutile che mi
soffermi più di tanto sulla descrizione di ogni componente di
questo plugin; consiglio di leggere il file README allegato.
6. Download
Non c'è nient'altro da fare, se non
darvi il seguente link:
irdispl02.zip (59 KB)
In questo pacchetto potete trovare tutto il
materiale necessario per realizzare IRDispl:
Lo schema elettrico del circuito, in
formato FidoCAD;
La traccia del circuito stampato, in
formato FidoCAD;
Binari e sorgenti del programma per
PIC16x84;
Binari e sorgenti del semplicissimo plugin
per il WinAmp (Windows);
Binari e sorgenti per il plugin di mpg123
(Linux).
|