Come promesso nelle "Idee di progetto", è stato realizzato un nuovo prototipo di telecomando monointegrato con mC.
Lo schema elettrico del telecomando è abbastanza semplice. Il cuore del sistema è IC2, un mC tipo PIC16C54A(*) della Microchip che gestisce l'intero processo, controllando tastiera e codice e generando il treno d'impulsi d'uscita.
Il problema principale lavorando con un microcontrollore resta però quello che tali dispositivi, anche se CMOS, richiedono una tensione di alimentazione compresa tra 3 e 6V, mentre lo stadio ad alta frequenza ne richiede almeno 9/10. Per questo si è reso necessario l'uso di un integrato stabilizzatore esterno che generi i 5V per alimentare il processore. Si potrebbe pensare che un mA78L05 potrebbe risolvere tutto, ma non è così: da solo assorbe almeno 7mA! Si è quindi adottato un MC78BC50NTR (si veda la documentazione Motorola®) con transistor esterno, un integrato SMT a cinque piedini a basso consumo: questo integrato assorbe a riposo circa 0,2mA, circa 10mA in funzione. Con questa soluzione tutto il circuito, a riposo, assorbe circa 300mA e 5mA medi in trasmissione.
Una volta alimentato il circuito, dopo che IC1 ha ricavato i 5V per IC2, quest'ultimo comincia ad eseguire il programma contenuto nella sua ROM. Inizializzato il PORT A come uscite, ed il PORT B come ingressi, comincia con controllare il codice formato dai cinque bit facenti capo ai pin PB0÷PB5. Questi bit sono di tipo Three State ™, e possono essere collegati ad un valore basso, alto o essere lasciati aperti (si riveda la descrizione del MC145026 o la documentazione originale Motorola®). Dato che per gestire completamente il telecomando occorrerebbero otto pin per la tastiera, 5 per il codice ed uno per l'uscita seriale, per un totale di sedici, e che il processore usato ha solo 14 linee di I/O, gli stessi piedini vengono usati anche dalla tastiera. Si sarebbe anche potuto usare un processore più grande senza aumentare sensibilmente i costi, ma questo, oltre ad essere più difficilmente reperibile, avrebbe aumentato le dimensioni del telecomando, o richiesto la realizzazione di un circuito in SMD (qui poi, per il processore, andiamo dal difficile reperimento all'introvabile). Dovendo usare le stesse linee per codice e tastiera, si devono inserire dei diodi, nel giusto verso, per gestire il codice, nonché si devono alimentare questi ultimi solo quando si deve leggere il codice. Per questo i diodi non sono collegati ai capi di alimentazione ma a due pin del PORT A: al momento di leggere il codice il PA2 diventa BASSO, mentre il PA3 viene portato a livello alto. Per leggere i bit Three State si procede in due fasi. La rete resistiva RR1, che è da otto elementi un con terminale in comune, ha collegato quest'ultimo al Pin PA0. Portando questo Pin, prima al livello alto (in qui si trova normalmente), e poi a quello basso, si memorizzano i cinque bit più significativi del PORT B in due variabili (rispettivamente, con scarsa fantasia per i nomi, ALTO e BASSO): se uno dei piedini era collegato(tramite un diodo nel giusto verso) ad uno dei due Pin di abilitazione codice, la variazione sul comune di RR1 gli risulta indifferente e si leggerà in ambo i casi lo stesso valore; ma se il piedino era stato lasciato aperto, allora la prima volta si leggerà uno 0, la seconda un 1 logico. Dopo aver letto il codice PA2 e PA3 vengono invertiti per risultare ininfluenti, e PA0 viene posto a livello alto.
Finita la procedura di lettura codice si riinizializza il PORT B ponendo il nibble alto come ingressi e quello basso come uscite a livello basso. Si controlla quindi ripetutamente se uno dei quattro ingressi PB4÷PB7 diventa basso per controllare se sia stato premuto un tasto (più precisamente si controlla, in un solo colpo, se la parte alta della negazione del PORT B è diversa da zero). In tal caso si procede ad una strana operazione di lettura del tasto premuto: si controlla quale delle quattro linee è stata attivata, per sapere la riga della tastiera, dopo di ché si invertono ingrerri ed uscite e si vede quale delle quattro linee del nibble basso del PORT B è a livello basso per conoscere la colonna. Il programma è stato scritto per avere, col CS proposto, la stessa corrispondenza tasti del vecchio telecomando col relativo CS proposto; se volete modificarlo per "riordinare" i tasti potete farlo molto semplicemente.
Ci si potrebbe chiedere perché tutta questa macchinosa operazione e non la solita scansione? È presto detto: il progetto era nato per il PIC16C554, che gestisce gli interrupt. Dato che si può generare un interruzione sulla variazione di stato di una delle quattro linee PB4÷PB7, si era pensato di mandare il processore in sleep dopo aver letto il codice in attesa della pressione di un tasto, per ridurre i consumi: serviva quindi una procedura che funzionasse in modo statico con qualunque tasto si premesse. Con tale processore era anche possibile abilitare il Pull-Up interno per il PORT B. Il programma che gestiva lo Sleep, testato su un PIC16C84 funziona perfettamente, ma questo costa più del doppio del 54 (portando il costo di realizzazione addirittura al di sopra di quello del vecchio telecomando a logica cablata), mentre il 554 non l'ho mai trovato in commercio, neanche sul catalogo RS (provateci voi poi ditemi dove l'avete trovato e a che prezzo). La procedura di lettura tastiera incorpora un rudimentale sistema di anti rimbalzo, resosi necessario in quanto, usando tastiere con contatti in gomma, poteva capitare che il processore si accorgesse della pressione dil tasto, ma, al momento di andare a decifrare quale fosse questo tasto, nessun contatto risultava più chiuso, generando un codice errato: con questa procedura, se non si rilevano tasti premuti si abbandona immediatamente tutto e si torna nella fase di attesa pressione tasto.
Una volta letto il tasto si trasmette, per almeno quattro volte, ma per non più di quaranta, il codice completo secondo le specifiche Motorola® per l'MC145026 /26 /28, inviando prima i dieci bit del codice e poi gli otto del tasto (che in questo caso, essendo binari, sono a due a due uguali). Si usano due cicli, il primo di cinque, per il codice, l'altro di quattro per il tasto. Nel primo ciclo si invia, un bit alla volta tramite uno shifting delle relative variabili, prima un bit della variabile che conteneva il dato letto con PA0 alto, e poi quello della variabile letta con PA0 basso. Nel secondo ciclo si inviano i quattro bit del tasto, che sono a due a due uguali, o ambedue alti(1) o bassi(0). Si usa comunque un sistema simile a quello usato nel primo ciclo, con due shift e controlli, anziché un unico controllo, per garantire la medesima temporizzazione, dato che si usa un quarzo a bassa frequenza (un 32768Hz modello orologio, scelto sia per poter usare la modalità basso consumo, sia per le sue ridottissime dimensioni).