La Decodifica
Home

 

Il segnale DCF.77
Significato dei bit
La Ricezione
La Decodifica
Il microcontrollore
La visualizzazione
La modulazione ASK
Foto DCF.77

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.