Composizione pacchetti Dcc più utilizzati in modalità "service mode" (programmazione CV).

Il DCC da Zero (Parte 3)

 

 

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.

Articolo realizzzato da Alessandro Tardioli (tardioli.alex@libero.it)

  Ultima Revisione 03-01-2002

Indietro