a
La home page di Lorenzo
Home

FidoCAD
    Introduzione
    FidoCAD Win
    FidoCAD FAQ
    FidoCAD sources

Elettronica
    Oscilloscopio
    Misurare la potenza
    CS low-cost
    SMD for dummies
    PIC16x84
    Propic2clone
    IR-displ

Software
    EZ Tunnel
    Varie

Varie
    Segnalare lo spam

Links
Forum
Guestbook
Contattami

Ritirare le truppe italiane dall'IRAQ:

Si

No

Risultati

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