Il sistema non ha lo scopo di allarme o protezione antifurto; serve solo per collezionare dati provenienti da varie sorgenti, e reagire secondo una macchina a stati. Il sistema è costituito da tre parti principali.
* La prima è un programma in linguaggio macchina per 6502 (per un vecchio computer Apple ][ ) che effettua una misurazione ciclica dei valori che variano lentamente, ed un controllo frequente per i segnali che hanno brevi transienti (es. suona il campanello). Le misurazioni vengono convertite in un sistema di messaggi a byte che vengono inviate, via interfaccia parallela, ad un PC con sistema operativo DOS.
* In questo PC gira un programma in C (QuickC2.5) compilato, e che contiene una grande macchina a stati, che reagisce in vari modi in funzione dei segnali ricevuti dall’altro computer.
* La terza componente (nell’immagine sotto, tutto cio’ che è a sinistra dell’Apple2) è tutto l’hardware necessario a condizionare i segnali
Come usare la parallela per un dialogo tra un PC e HW esterno
L’interfacciamento tra l’hardware e l’apple2 (nello schema sopra chiamato Driver I/O) è presentato qui a lato. In sintesi la comunicazione avviene tramite memory-mapped I/O (tipica del processore 6502) e dove vengono usate le locazioni da C060 a C07F.
Viene usata una logica di decodifica che usa le linee A0..A3 dell’address bus, il data bus D0..D7, il segnale /C070 (che indica che è in fase di accesso la memoria che va da C070 a C07F), il segnale /C060 (analogo), il segnale R/W dal processore ed il segnale di clock phi0.
Tramite un 74LS138 estraggo i segnali da C060 a C067, mentre tramite un 74LS259 ottengo 8 linee di output dal C07X (X sono 4 bit, dove il MSB deve essere 0, gli altri tre indicano quale linea deve essere variata, e R/W indica acceso/spento).
Sono usati anche due riconoscitori DTMF 8870, un ADC a 8 ingressi multiplexati, e vari integrati di I/O. Si noti che ho dovuto aggiungere qualche condensatore per eliminare strani spike che creavano problemi (ovviamente non vi dico quanto tempo ho perso qua..).
Qui sotto ci sono gli schemi dei rilevatori di tre segnali: luce SCALE (220volt), CAMPANELLO (12 volt), APERTURA PORTONCINO (12volt). Dal progetto originale ho dovuto variare il valore di qualche componente (dal progetto alla realtà… cambiano molte cose).
Questo è lo schema della parte che riguarda la commutazione telefonica, ed il rilevamento dello stato della linea: RING e LINEA ESTERNA OCCUPATA. Come si vede, i tre telefoni di casa possono essere collegati, ognuno in modo indipendente, alla linea esterna, a quella interna, o alla linea di “ring” (che fa squillare il telefono).
Qui invece c’è un circuito che mi ha fatto perdere un bel po’ di tempo: l’interfacciamento audio telefono, che prevede sia l’amplificazione dell’audio in ingresso, sia l’iniezione di audio in uscita.
Anche questo schema è stato molto sofferto: come misurare la corrente consumata dalla casa?? (a quel tempo non c’erano cose già fatte e pronte). Basta misurare la tensione indotta su alcune spire avvolte su uno dei due fili che portano il 220v alla casa. Ma si parla di microvolt!! Ed il segnale è tutt’altro che sinusoidale. E’ stata dura amplificare quel segnale, e non solo il rumore…
Questo è l’alimentatore ed è piuttosto semplice. Il secondario del trasformatore è un 17+17 volt. Si noti come ricavo la tensione di 60volt con un raddoppiatore (usato per la linea telefonica interna), e come uso un’impedenza per evitare che il segnale di fonia sulla linea interna venga annullatto dal condensatore di stabilizzazione.
Il software per l’Apple2 non è tantissimo. Ecco il LISTATO!
Idem per il SW in C per il PC (su DOS 3.3). Qui il LISTATO.
Ormai parliamo di tecnologie e software che si usavano decine di anni fa, quindi probabilmente poco interessanti, se non per i nostalgici.
Al solito non è il massimo cercare di capire qualcosa da un listato assembler. Basti capire che entrambi i programmi sono un loop continuo che tiene sotto controllo vari valori, e comunicano tra loro tramite un opportuno protocollo usando la porta parallela.
Dopo un anno di variazioni, il SW si è stabilizzato, ed ho lavorato poi solo sul programma in C, fino alla dismissione.