La cronologia

La Cronologia

La prima versione del programma era stata fatta con schede per multiplex-are pin di ingressi e di uscita da collegare ad una porta parallela di un PC.

Il PC sarebbe stato ingombrante ma allora (2003-2004) era il metodo piu’ economico per far intereagire un programma con il mondo esterno.

Mentre procedevo alla realizzazione delle schede, parallelamente nacque il progetto arduino www.arduino.cc. Offriva potenzialità enorme a bassissimo costo. Disponeva di tutto il necessario in una schedina minuscola. Fu subito chiaro che dovevo cambiare rotta passando da un PC a tale scheda Arduino.

Così nacque la prima versione del programma e le prime schede capaci di moltiplicare gli ingressi e uscite disponibili per assecondare le esigenze di controllo totale di una casa.

Realizzai schede di input e output utilizzando due comuni integrati Shift Register 8-Bit: il 74HC595 e il 75HC165 (messi a memoria, verificarli). Ma non uno diversi messi in serie per rilevare 64 ingressi e altri per comandare 40 uscite.

Tali schede hanno lavorato per piu’ di un anno, ma hanno sempre avuto un piccolo difetto, casualmente la sequenza dei bit che da seriale vengono trasformati in parallelo venivano alterate dagli spike prodotti dai rele che essi stessi comandano.

Succedeva raramente ma quando capitava tutte le luci si accendevano in maniera casuale per qualche centinaia di centesimi di secondo (periodo tra due invii successivi della sequenza di bit).

Seppur un tempo minimo era tale da essere percepito. Inoltre relè che si accendono casualmente non sono adatti a controllare sistemi come l’apertura automatica porte o sistemi di irrigazione.

Il problema è tipico dei convertitori seriali/parallelo e normalmente si risolve con un piccolo condensatore sulle linee dati degli integrati ma per quanti condensatori ho provato non ero riuscito a risolvere il problema.

Dall’analisi avevo notato che il problema era dato sia dal circuito di rilevamento ingressi che da quello di output per comandare i relè. Però solo la parte output ne risentiva perchè gli ingressi erano filtrati in modo software da una routine di debounging (antirimbalzo).

Le sequenze di bit in ingresso erano controllate quindi dal software mentre le sequenze di output arrivavano agli integrati che al loro interno non disponevano di nessun meccanismo di correzione degli errori basato sulla ridondanza dei dati trasmessi.

Così ho cercato metodi diversi per multiplexare gli ingressi e le uscite. Il migliore mi è sembrato quello di utilizzare il wire o I2C, uno standard di comunicazione tra integrati introdotto da Philips negli anni 80.

Tale standard permette di chiedere agli integrati che rilevano gli ingressi lo stato dei loro pin e quindi ottenere una risposta. Così ho scelto l’integrato MCP23016 ed ho realizzato una sezione ripetuta 6 volte per controllare 96 ingressi. Il massimo numero di integrati MCP23016 che si possono utilizzare insieme sono 8. Così potevo mettere solo altri due integrati impostati come uscite per un massimo quindi di 32 pin. Dato che 32 uscite per comandare una casa sono poche ho cercato un altra soluzione senza limiti.

Così ho deciso di utilizzare degli ATMEGA328 alla stessa stregua degli MCP23016 e quindi ho creato un software che li rendesse simili e quindi con tre ingressi per selezionare l’indirizzo I2C dall’esterno dell’integrato.

Così tali integrati ricevono istruzioni su cosa fare dal bus I2C e accendono i pin. Ma un software può fare di piu’ e quindi ho implementato nell’ ATMEGA328 routine varie per temporizzare le accensioni, i ritardi e i lampeggi dei pin.

L’atmega328 così confezionato diventa a tutti gli effetti un circuito integrato utilizzabile in quasi tutti i progetti di domotica, temporizzazione, allarmi e altro.

(da completare)