ho praticamente concluso la rima versione funzionante del telecomando DTMF.
Funziona in questo modo.
Il segnale DTMF viene decodificato da un MT8870 (MT8870 pdf, MT8870 Description, MT8870 Datasheet, MT8870 view ::: ALLDATASHEET :::), cablato secondo lo schema che c'è a pagina 4.20 e connesso ad arduino così:
//ARDUINO PD3 PD4 PD5 PD6 PD7
//MT8870 PIN 15(STD) PIN 11(Q1) PIN 12(Q2) PIN 13(Q3) PIN 14(Q4)
su PD3 (pin digitale 3) di arduino, viene impostato l'interrupt in modo RISING... sugli altri 4 pin viene "raccolto", tramite i 4 bit Q1-Q4, il codice del carattere decodificato ...
Il telecomando è organizzato in tre banchi di 8 comandi ciascuno, per n° 24 comandi di tipo ON/OFF, controllabili separatamente.
I comandi di tipo ON/OFF vengono eseguiti attraverso 3 integrati tipo 74HC595 (http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf) collegati come da qui: (http://www.arduino.cc/en/Tutorial/ShiftOut) con il terzo 74HC595 collegato esattamente come il secondo...
i pin utilizzati per lo shift out sono questi:
const byte dataPin = A3; // PIN utilizzati per lo shift register
const byte latchPin = A4; // 24 uscite indipendenti
const byte clockPin = A5; //
Per fare le prove io uso questo semplicissimo software, scaricabile gratuitamente da qui (http://www.roadkil.net/program.php/P35/DTMF%20Keypad). Questo software genera i codici con la scheda audio, simulando un tastierino telefonico.
Quindi i comandi vengono inviati al telecomando mandando il segnale audio con i toni DTMF all'ingresso dell'MT8870.
Il comando generico è costituito da una sequenza di caratteri. I caratteri, corrispondenti al tastierino telefonico, sono questi: (0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,#) ovvero 16 caratteri diversi decodificati tramite i 4 bit dall'MT8870 ...
la sequenza generica di caratteri avrà la seguente forma:
XXXXXX1#112#0** dove
- XXXXXX è una generica password constituta da n caratteri (da impostare nel codice prima di compilarlo)..
- l'asterisco è un carattere separatore per separare i vari comandi
- il cancelletto separa il generico comando nelle sue due parti, cioè l'"indirizzo" e l'"azione". L'indirizzo (0...23) corrisponde al pin da accendere| spegnere, e l'azione (0|1) determina l'impostazione del livello alto (1) o basso (0) del generico pin ...
il sistema memorizza sulla eeprom l'ultimo stato di funzionamento eseguito così che all'accensione ripete l'ultimo stato di funzionamento attivato,
nella configurazione, prima di compilarlo, bisogna stabilire, oltre alla password, il numero max di caratteri del buffer ricevili, ed il numero max di comandi che si possono inviare nella medesima sequenza ...
la sequenza deve terminare con due asterischi per inviare la stringa all'analisi, oppure se si supera il n° max di caratteri del buffer, comunque la stringa viene inviata all'analisi ...
Siccome questa è la prima versione funzionante mi farebbe piacere che qualcuno volesse provarlo (anche se non credo sia possibile se non avete in casa un MT8870 con il suo quarzo) , o semplicemente dare una controllata al codice per segnalrmi ogni punto dove si potrebbe migliorare, ottimizzare etc....
per facilitare la (mia) lettura ho suddiviso tutto il codice in sub schede ... e raggrupato le istruzioni collegate da una certa logica, anche più di una sulla stessa riga fino a giungere il risultato atteso (lo so che è contro le regole, ma credo che comunque sia più leggibile)...
adesso aggiungo il sorgente... siccome sono più schede .ino le ho zippate in un'unico file
NB .. non infierite è solo la prima versione destinata ad essere migliorata in ogni sua parte ..
grazie per l'interessamento ciao
TelecomandoDTMF_0_2.zip (4.83 KB)