|
Composizione e codifica pacchetti DCC a norme NMRA, service mode.
Premessa
In questo articolo verranno trattati i pacchetti DCC più
comuni nella modalità service, cioè la programmazione/verifica delle CV dei
Decoder. Le CV sono delle celle di memoria, composte ognuna da 8 bit, che
vengono utilizzate dell'utente per personalizzare il funzionamento del decoder
DCC in base alle esigenze. e sono al massimo 1024 (da CV1 a CV1024, indirizzo
reale da 0 a 1023). Ci sono più modalità per impostare/verificare queste CV, in
questo articolo tratteremo le più usate: modalità Direct e Paged. Nella modalità
direct per puntare una determinata CV si utilizza un indirizzo a 10 bit, mentre
in modalità paged esiste un registro di appoggio (Phisycal Register,
composta da 8 registri da 1 a 8, indirizzo reale da 0 a 7 ) che viene utilizzato
per puntare una CV. In seguito vedremo a fondo come si utilizzano queste due modalità.
Legenda sul significato di alcuni BIT
A = Indirizzo CV;
D = Valore da scrivere nella CV puntata;
P = Valore che contiene indirizzo della "Page"
R = Indirizzo registri contenuti nel "Phisycal Register";
C = Verifica/Scrittura;
E = Errore;
1/0 = Altri dati fissi.
Composizione di un pacchetto DCC
Ogni pacchetto DCC in modalità service e'
composto da:
- Preambolo composto da almeno 11 Bit a 1
- Bit a 0 (Bit Start) per indicare l'inizio di un pacchetto DCC
- Funzione e indirizzo CV composto da un byte (0111CRRR) per la modalità Paged o da due byte (0111CCAA 0 AAAAAAAA) per la modalità Direct.
- Dato Byte che contiene il valore da inserire nel CV puntato dall'indirizzo CV.
- Errore composta da un byte ricavato, tramite la funzione logica XOR*, applicata tra tutti i byte che compongono il pacchetto DCC
- Bit a 1 (Bit Stop) per indicare la fine del pacchetto DCC
PS:
Dopo ogni byte si deve inserire un Bit a 0, che viene usato per separare i
vari byte del pacchetto DCC.
* La funzione XOR confronta 2 o più byte bit per bit, e
restituisce come risultato il valore 1 con bit diversi e 0 con bit uguali.
Esempio di funzione XOR tra 2 e 3 byte.
| 1° Byte |
00011101 |
00011101 |
| 2° Byte |
10110100 |
10110100 |
| 3° Byte |
|
10011100 |
| Risultato Funzione XOR |
10101001 |
00110101 |
Pacchetto per la scrittura/verifica CV in modalità DIRECT
Pacchetto :
[Preambolo] 0 0111CCAA 0 AAAAAAAA 0 DDDDDDDD 0 EEEEEEEE 1
In modalità direct, per verificare o scrivere un CV, basta un solo pacchetto DCC
composto da 4 byte, come riportato sopra e con il significato dei vari bit/byte
riportato sotto in tabella.
Significato dei vari Bit/byte del pacchetto DCC
| Significato Bit |
I Bit AA sono i 2 Bit alti indirizzo a 10 bit CV |
| I Bit AAAAAAAA sono gli 8 Bit bassi indirizzo a 10 bit CV |
| CC |
11 = Scrive Dato in CV |
10 = Verifica Dato in CV |
| DDDDDDDD |
Dato da scrivere/verificare** nel CV puntato da indirizzo a 10 bit |
| EEEEEEEE |
Byte di controllo Errore (Controllo parità) |
Vedi esempio di programmazione direct tramite un pacchetto DCC
** Quando si verifica il dato contenuto in una CV, se il dato corrisponde,
il decoder genera un segnale di acknoledge, che in seguito vedremo meglio.
Pacchetto per la scrittura/verifica CV in modalità PAGED
1° Pacchetto: [Preambolo] 0 011CCRRR 0 PPPPPPPP 0 EEEEEEEE 1
2° Pacchetto: [Preambolo] 0 011CCRRR 0 DDDDDDDD 0 EEEEEEEE 1
In modalità paged, per verificare o scrivere una CV, servono 2 pacchetti
DCC composto da 3 byte ciascuno, come riportato sopra e con il significato dei
vari bit/byte spiegati sotto in tabella.
| Significato dei vari Bit/byte del pacchetto DCC |
| Significato Bit |
RRR |
Indirizzo registri contenuti nel "Phisycal Register" |
| CC |
11 = Scrive Dato | 10 = Verifica Dato |
| PPPPPPPP |
Valore che contiene indirizzo della "Page" da utilizzare |
| DDDDDDDD |
Dato da scrivere/verificare** nel CV puntato tramite il "PageRegister" |
| EEEEEEEE |
Byte di controllo Errore (Controllo parità) |
In questa modalità, bisogna tener conto delle seguenti indicazioni:
-
le 1024 CV vengono divise in gruppi di 4 CV, per un totale di
256 gruppi che vengono chiamati "Page".
-
Per poter individuare ed utilizzare una determinata CV si deve
utilizzare il "Phisycal Register", composto da 8 locazioni
di memoria da un byte l'una (dalla 0 alla 7).
-
Del "phisycal register" vengono utlizzate solo le prime 4
locazioni di memoria (dalla 0 alla 3) chiamate "Data Register"
e anche la 6 (5 loc.) chiamata "Page Register".
-
La "Page Register" serve per puntare una
delle 256 "Page", e questo avviene con il primo pacchetto DCC.
-
Le 4 locazioni di memoria "Data Register" rappresentano le 4 CV
che compongono la "Page" individuata con il primo pacchetto DCC.
Una volta puntata la "Page" e volendo memorizzare/verificare la seconda
CV della stessa, memorizzo nel secondo "Data Register" il valore da
utilizzare.
Vedi esempio di programmazione page tramite 2 pacchetti DCC:
Esempio pratico per memorizzazione nella CV1022 il valore 200
-
Sapendo che la CV 1022 si trova nella "Page" 256, nel
primo pacchetto DCC devo caricare nel "Page Register"
(Locazione memoria 5 "Physical Register") il valore 256
utilizzato per puntare la "Page" 256.
-
Il primo pacchetto sarà: [Preambolo] 0 011CCRRR 0 PPPPPPPP 0 EEEEEEEE 1
dove:
-
CC = 11 Binario = Scrittura Dato
-
RRR = 101 Binario = Locazione di memoria 5 Decimale (la
"Physical Register" = "Page Register"
-
PPPPPPPP = 11111111 = 256 Decimale = "Page" 256
-
Primo pacchetto con dati reali: [Preambolo] 0 01111101 0 11111111 0 10000010 1
-
Sapendo che la CV 1022 è il secondo nella "Page" 256, dovro'
memorizzare il valore 200 nel secondo "Data Register" che poi
passa il valore alla CV 1022.
-
Il secondo pacchetto sarà: [Preambolo] 0 011CCRRR 0 DDDDDDDD 0 EEEEEEEE 1
-
CC = 11 Binario = Scrittura Dato
-
RRR = 001 Binario = Locazione di memoria 1 Decimale (la seconda sapendo che
la prima parte da 0)
-
DDDDDDDD = 11001000 Binario = 200 Decimale
-
Secondo pacchetto con dati reali: [Preambolo] 0 01111001 0 11001000 0 10110001 1
-
Fine Della sequenza per memorizzare il valore 200 nel CV 1022 in modalità paged.
** Quando si verifica il dato contenuto in una CV, se il dato corrisponde,
il decoder genera un segnale di acknoledge, che in seguito vedremo meglio
Sequenze di pacchetti DCC per memorizzare/verificare un dato
Per inviare pacchetti DCC in modalità service, per scrivere/verificare un dato in una
determinata CV, bisogna tenere presente, a differenza dei comandi DCC in modalità di
comando classica, una determinata sequenza di pacchetti da rispettare:
- Inviare per prima cosa 3 pacchetti di Reset (vedi articolo sul DCC parte 2).
- Inviare per 5 volte il pacchetto scrittura/verifica (in modalita paged o direct sopra visti).
- Infine inviare per 6 volte il pacchetto di reset o il pacchetto scrittura/verifica (nel caso di verifica, questo ultimo passaggio non serve).
Nel caso di un pacchetto DCC in modalità Direct eseguire la sequenza una sola volta,
mentre per i 2 pacchetti in modalità Paged, ripetere la sequenza una volta per il primo
pacchetto e una volta per il secondo.
Seqnale di Acknoledge Generato dal decoder dopo una richiesta di verifica dato
Dopo la scrittura di un dato in una determinata CV o durante la verifica dello stesso,
se la procedura va a buon fine il decoder deve rispondere con una segnale di Acknoledge
(scrittura/verifica eseguita con esito positivo). Il segnale di Acknoledge consiste in
un aumento dell'assorbimento di corrente da parte della locomotiva/decoder di circa 60mA
per circa 5mS. Per far si che che ci sia questa variazione di assorbimento il decoder
attiva per 5mS il motore della locomotiva.
Con questa terza ultima parte, abbiamo visto la tecnica, le caratteristiche e
i protocolli utilizzati nel sistema digitale DCC a norme NMRA, ripreso poi anche
dal MOROP, associazione europea sugli standard fermodellistici. Spero di essere
stato utile a tutte quelle persone che volevano saperne di più sul sistema
digitale DCC. Qualsiasi spunto, suggerimento e ben accetto. Per eventuali
segnalazioni od altro, mandare i messaggi al seguente indirizzo E-mail.
<- Torna alla Seconda Parte
articolo realizzato da Alessandro Tardioli (tardioli.alex@libero.it)
|