Per decodificare il segnale
DCF.77 ho usato un microcontrollore 89C51. Il segnale è stato collegato
al piedino dell’interruzione 0, e ogni volta che si verificava un fronte
di discesa, veniva svolta questa routine:
La routine prevede la valutazione del bit ricevuto, se è 1 o 0 o se il
fronte di discesa sia un disturbo del segnale, l'individuazione del bit di
inizio stringa e il controllo di parità dopo aver ricevuto un'intera
stringa.
Per la valutazione della durata dello stato basso del segnale
ricevuto si campiona il segnale ogni 20ms e si incrementa la variabile
"durata" finché il segnale rimane basso. Quando quest'ultimo va
alto, si passa alla valutazione della variabile e in particolare: se il
valore è inferiore a 4, si considera il fronte basso un disturbo, se
inferiore a 7, il bit ricevuto va interpretato come uno 0, mentre se è
maggiore di 7, il bit vale 1.
La fase di valutazione del segnale dunque può esser riassunta in:
I bit ricevuti sono memorizzati in un registro a
scorrimento lungo 8 byte (i bit sono 59, in 8 byte stanno 64 bit).
Ogni 20ms, a partire dal fronte di discesa, si
incrementa anche la variabile "Durata per inizio", che al
raggiungimento del valore 60 (1200 ms), azzera il buffer del
registro a scorrimento.Se la stringa ricevuta è giusta si ha la
segnalazione sul bit 2 della porta P2. Quando questo è alto il
programma principale visualizza i dati ricevuti, opportunamente
decodificati.
La decodifica prevede che vengano estratti, dal
buffer di ricezione, i bit necessari per costruire le informazioni
da visualizzare. Questa operazione viene fatta con opportune
traslazioni di byte, e operazioni di AND o OR con byte che escludono
o includono bit del byte di partenza per ottenere i bit informativi
ricevuti.
Il bit P2.2 va inizializzato all'inizio del codice
principale a 0.
Nel caso di errori di ricezione o in generale quando
la stringa non è corretta il programma deve incrementare i minuti
ogni 60 secondi, senza star ad aspettare una futura ricezione priva
di errori.
Ogni secondo quindi, viene incrementata anche una
variabile denominata "base secondi", che al raggiungimento
del valore 60 incrementa i minuti, e se necessario, ora, giorno e
mese.
Ho aggiunto anche 3 pulsanti nella scheda di
ricezione, prevedendo che, nel caso venga a mancare l'alimentazione,
e dopo il ripristino di quest'ultima il ricevitore non riesce a
sincronizzarsi, l'utente possa avere la visualizzazione dell'ora,
semplicemente impostando i valori.
Per far cambiare lo stato di 4 variabili con 3
tasti, ho fatto in modo che un tasto svolge la funzione di
"selettore", e cioè il suo stato definisce la coppia di
variabili che deve essere modificata: con il tasto
"selezione" rilasciato, la modifica avviene sui minuti e
sulle ore, mentre con il tasto "selezione" premuto la
modifica avviene su mese e giorno.
Nel momento in cui il ricevitore si sincronizza e
avviene una corretta decodifica, i valori impostati vengono
sostituiti con quelli ricevuti. Il progetto è stato realizzato in 2
schede separate, una per il microcontrollore e la parte per la
programmazione dello stesso, e una con gli 8 display, il ricevitore,
e i tasti di impostazione manuale.
La scheda del microcontrollore è stata realizzata
con la tecnica del circuito stampato, mentre quella di ricezione -
visualizzazione con la tecnica filata e wrappata. Il collegamento
tra le due schede è stato fatto mediante un cavo piatto (flat cable)
a 26 conduttori.