Signalsidan

Henry's signalsida

DCC

1. Bitformat

DCC bygger på en symmetrisk fyrkantsvåg, där två olika frekvenser används för att avkoda binära siffror. Frekvenserna är 8,3 kHz för ettor och 5 kHz för nollor, eller om man så vill, en fyrkantsvåg på 120 mikrosekunder för ettor och 200 mikrosekunder för nollor. En våg består av en hög och en låg fas, lika långa. Faserna är röda och blå i figur 1 nedan. Notera alltså att den positiva blå fasen av en våg följs av en lika lång negativ fas. Eftersom fyrkantsvågen är symmetrisk kan protokollet polvändas. En etta utgörs av en positiv fas på 60 mikrosekunder följt av en negativ puls på 60 mikrosekunder. En nolla utgörs av en positiv fas på 100 mikrosekunder följt av en negativ fas på 100 mikrosekunder. Eftersom ingången på en dekoder har en diod som halvvågsriktar fyrkantsvågen, och därmed filtrerar bort positiva eller negativa pulser -beroende på hur man ansluter dekodern eller vänder loket på spåret- så spelar det ingen roll. Pulslängden på ingången är densamma. Dioden filtrerar bort den ena fasen, men det är likgiltigt vilken.

Fig-1

Figur 1 visar på hur en DCC-signal ser ut på spåret. Om man vänder polaritet på ingången på dekodern så kommer signalerna under 0V att filtreras bort så att endast den positiva delen återstår.
Signalen är naturligtvis alldeles för stark för att användas direkt av processorn i dekodern, därför sätter man ett ingångsmotstånd på 1,5 kOhm på ingången. Över ingången ligger även den diod (1N4148) som filtrerar bort den negativa delen av signalen. För att få ingången bombsäker är den galvaniskt isolerad från dekoderns processor med en 6N137 optoisolator. LED:en inuti optoisolatorn är motriktad mot ingångsdioden. Ur optoisolatorn får vi pulser på 5V, som kan läsas av processorn.

Fig-2

 

 

 

Fig 2 visar hur ingångssteget är uppbyggt

2. DCC-paket.

Ett DCC paket är uppbyggt av flera delar, som i sin tur består av bitar, som består av av vågformerna beskrivna i kapitel 1.

Början på paketet utgörs alltid av minst 12 st DCC ettor (60 mikrosekunderspulser) som avslutas med en nolla (100 mikrosekunderspuls). Detta kallas preamble, och är det enda ställe i ett paket där det kan förekomma tio eller fler ettor i en följd. Efter nollan följer åtta stycken godtyckliga ettor eller nollor, och dessa utgör DCC-paketets första byte, byte 0. Vi börjar räkna med noll. Efter första byten följer alltid en ny ensam nolla. Därefter följer en ny byte, följt av en ny ensam nolla. Detta är den andra byten, byte 1, i DCC-paketet.

Därefter följer en ny byte, följt av en nolla ensam eller en etta. Detta är den tredje byten, byte 2, i DCC-paketet. Om den ensamma biten är en etta betyder detta att DCC-paketet är slut. Är det en nolla kommer ytterligare en byte etc. Tre byte är de kortaste DCC-paketen, och de avslutas med en etta. Denna etta kallas stoppbit och innebär att meddelandet är slut. Om paketet har fyra, fem eller sex byte kommer den tredje byten följas av en nolla, och det kommer alla byte utom den sista att göra. Stoppbiten kommer efter den sista byten i meddelandet och är alltså alltid ett.

Fig-3

Fig 3 visar ett paket med 3 byte. Paket med 4,5 och 6 byte förkommer också. Den sista byten är en checksumma som är ett ”sigill” på att meddelandet inte förvanskats. Mer om hur man räknar ut denna i kapitel 12.

3. Vad betyder de olika byten?

Byte 0 är den första byten och används till adressen, den blå byten i figur 3. Den jämförs med adressen i CV (processorns EEPROM-minne). För tillbehörsdekodrar används även flera bitar i den andra byten för adressering. Byte 0:

00000000 är en broadcastadress, adress 0, som samtliga dekodrar ska lyssna på, lokdekodrar såväl som tillbehörsdekodrar. 00000001 – 01111110 används av lokdekodrar och det är adress 1-126. 01111111 används för broadcastmeddelanden till alla lokdekodrar. Detta är adress 127- 10000000 – 10111111 är de adresser som utgör en del av en tillbehörsdekoders adress, och de sex lägsta bitarna utgör en del av dessas 11-bitars adress. De första två bitarna skall alltid vara 10 och de tillhör inte själva adressen. 11000000 – 11000111 är de adresser som utgör en del av en dekoders adress, och de tre lägsta bitarna utgör en del av dessas 14-bitars adress. De första fem mest signifikanta bitarna skall alltid vara 11000 och de tillhör inte adressen. 11001000 – 11111110 är reserverade för framtida bruk. De börjar med 11001. 11111111 är den så kallade tomgångsadressen som används för att skicka ut ”idle” meddelandet till alla dekodrar. Adress 255. Dekodern ska inte göra någonting när detta meddelande sänds.
Minnesregel: 7-bitars lokdekoderadresser börjar med 0. 11-bitars tillbehörsdekoderadresser börjar med 10. 14-bitars dekoderadresser börjar med 11000. 00000000 är broadcast och 11111111 är idle-paketadressen

Fig-4

Figur 4. Byte 0 innehåll vid olika typer av adresser.

4. Byte 0’s funktion vid adressering av 7-bitars lokdekodrar.

Om värdet i byte 0 i paketet är 126 eller mindre jämförs detta med värdet i CV1. Överensstämmer dessa värden är paketet avsett för just denna dekoder. Paket med adress 127 (01111111 binärt) OCH 0 (00000000 BINÄRT) är avsett för alla lokdekodrar oavsett vad som står i CV 1.

5. Byte 0’s funktion vid adressering av 11-bitars tillbehörsdekodrar.

Om värdet i byte 0 i paketet börjar med 10 jämförs värdet av de sex minst signifikanta bitarna minus 1 med värdet i CV1 minus 1. Eftersom hela adressen på 11 bitar inte får plats i byte 0, utan det bara är de sex minst signifikanta bitarna som används, så finns det ytterligare fem bitar av adressen i byte 1. Av skäl som förklaras i nästa stycke, så är utgör dessa sex bitar i byte 0 de bitarna 2 till 7 i en 11-bitarsadress.

6. Byte 1’s funktion vid adressering av 11-bitars tillbehörssdekodrar.

Den andra byten, byte 1, innehåller delar av adressen i de fall det rör sig om en 11-bitars tillbehörsdekoder. Byte 1 är grön i figur 3. Även 14-bitarsadressering använder byte 1. 11-bitarsadressering är krånglig.

11-bitarsadressering används av funktionsdekodrar, där en dekoder har en adress per utgång. Typiskt är att dessa dekodrar har fyra utgångar, faktum är att DCC-protokollet bygger på detta. En växeldekoder med fyra utgångar för solenoider har alltså fyra konsekutiva (i följd) adresser, varav den lägsta kallas basadressen. En växeldekoder med åtta utgångar har följaktligen åtta konsekutiva adresser. Det är de 9 mest signifikanta bitarna av basadressen som lagras i två av dekoderns CV, normalt CV1 och CV9. Basadressen skall vara jämt delbar med 4. Det är nämligen så att alla tal som är delbara med 4 slutar med två binära nollor. Om basadressen alltid slutar med två nollor så behöver vi bara veta de första nio bitarna för att kunna adressera dekodern! Därav det ganska förvirrande begreppet 9-bitarsdekoder.

Dekoder logisk adress (decimal) Dekoder logisk adress (binär 11 bit) Dekoder logisk adress (binär, 9 mest signifikanta bitarna) Dekoder logisk adress (decimalform av de nio mest signifikanta bitarna) Utgångsnummer binär form (två minst signifikanta bitarna i 11-bitarsadressen) Utgångsnummer i decimal form
32 00000100000 000001000 8 00 0
33 00000100001 000001000 8 01 1
34 00000100010 000001000 8 10 2
35 00000100011 000001000 8 11 3

Tabell 1. Logiska adresser. Dekoderns basadress är den lägsta adressen dekodern svarar på, i detta fall 32. Lägg märke till att de 9 mest signifikanta bitarna i 11-bitarsadressen är identiska, och är talet 8. De 9 mest signifikanta bitarna multiplicerat med 4 ger dekoderns 11-bitars logiska basadress! Att multiplicera ett 9-bitarstal med 4 ger ett 11-bitarstal som resultat, och detta tal slutar alltid med två binära nollor. Detta ger oss att en dekoders logiska basadress måste vara delbar med 4!

Tabell 1 förklarar varför en dekoders 11-bitars logiska basadress måste vara jämnt delbar med fyra. Anledningen är att alla binära tas som är delbara med fyra slutar med två binära nollor. Eftersom detta även gäller 11-bitars binära tal, räcker det med att veta de första nio bitarna. Därför säger man att tillbehörsdekodrar har 9-bitarsadressering. Nu är inte det riktigt sant, för man konkatenerar de sista två bitarna (00) genom att multiplicera med 4 och därmed har man fått ett 11-bitarstal, själva logiska basadressen. Varför uttrycket logisk basadress? Jo, därför att den lägsta logiska basadressen som är jämnt delbar med 4 faktiskt är 0. I 11-bitarsversionen ser talet 0 ut så här: 00000000000. Elva nollor i följd. Delar vi detta med 4 så får vi 9 nollor i följd. 000000000. Den adressen kan vi inte använda! Adress 0 är nämligen en allmän broadcastadress och den svarar varenda dekoder på. Nu kan man ju tycka att man skulle kunna använda adress 4,8,12,16,20 etc som basadresser, för om man stryker två nollor i slutet på dessa binära tal så får man 1,2,3,4 resp. 5. Nej då, DCC gör istället så att man plusar på 1 på det tal som utgörs av de 9 mest signifikanta bitarna. I figur 6 ovan så ser vi hur adressen 32 (11 bitar) har talet 8 i sina nio mest signifikanta bitar. Men nu är det så att de ”mänskliga” adresserna till en sådan här dekoder inte alls heter 32-35, utan 33-36. De ”mänskliga” adresserna är exakt 1 för mycket. Den ”mänskliga” basadressen på en dekoder är alltså ett tal delbart med fyra adderat med 1. Inte nog med det. När kontrollenheten ska bygga ihop sitt DCC-paket så använder den bara 9 bitar för adressen, eftersom de 9 bitarna ju alltid är samma. Det ser man i kolumn tre i tabellen i figur 6. Men även här adderar man 1, så i DCC-paketets 9 adressbitar skickar man talet 8+1=9! Så när dekodern tar emot DCC-paketet, kontrollerar de nio bitarna i adressen, så börjar den med att subtrahera 1 från detta tal ( 9 – 1 = 8), multiplicera med 4 (8 * 4 = 32). Ja, det var ju den ”logiska” basadressen, men för att få den ”mänskliga” så måste vi adderea 1 (32+1 = 33). Detta värde jämförs sedan med CV1 och CV9. Krångligt? Vi tar det igen. 1. Kontrollenheten vill slå på utgång 2 på dekodern med (mänsklig) adress 65-68. Utgång 2 har (den mänskliga) adressen 65+2 = 67. 2. Om den mänskliga adressen är 67, då är den logiska adressen 66. 3. 66 i binär form, 11 bitar, är 00001000010 4. Om vi stryker de två minst signifikanta bitarna får vi ett 9-bitarstal som är 000010000. Eller om vi så vill, 16 i decimal form. Vi kan ju roa oss med att konstatera att 16*4 är 64, som är dekoderns logiska basadress, eller om vi vill ha den mänskliga formen på basadressen: 65. 5. Talet 16, som ju är de högsta nio bitarna i dekoderns basadress, adderas med 1. 9-bitarsadressen är nu 17. Alltså 000010000 + 1 = 000010001

Kommandostationen skickar iväg paketet. 7. Dekodern har sin ”mänskliga basadress” satt till 65 i CV, så därför är den logiska basadressen 64. 8. Dekoderns logiska basadress nio mest signifikanta bitar är talet 16.   9. Dekodern ska därför acceptera DCC-paket med 9-bitarsadressen 17 som sina

De bitar i DCC-paketets byte 1 som utgör de tre mest signifikanta bitarna i 9-bitarsadressen, är inverterade. De tre mest signifikanta bitarna i en 9-bitarsadress är bit 6,5 och 4 i byte 1.

Fig-5

 

 

 

 

 

 

Figur 5. Broadcastmeddelande till alla tillbehörsdekodrar på 9-bitarsadressen 0. Detta är anledningen att DCC-paket inte kan använda 0 som basadress, trots att talet är jämnt delbart med 4.

Fig-6

Figur 6 visar hur dekodern beräknar adressen ur DCC-paketet, och jämför med adressen i CV1 och CV9. Notera att det bara är 9 bitar i den kompletta 11-bitarsadressen som jämförs med CV9 och CV1. De två minst signifikanta bitarna läggs på efteråt, och är egentligen utgångsnummer på dekodern.

De ursprungliga tillbehörsdekodrarna var avsedda för fyra växlar med solenoider, och därför har varje utgång två spänningsutgångar och en gemensam jord. Utgången har två lägen, alltså att spänningssätta spolen som drar växeln åt ena hållet, och att spänningssätta spolen som drar växeln åt andra hållet. Vilken av spänningsutgångarna som ska spänningssättas bestäms av den minst signifikanta biten i byte 1 i DCC-paketet, vi kan kalla den vänster/höger-biten. En signaldekoder kan fungera helt annorlunda. Där kan varje adress sätta två stycken ”mönster”, aspekter, med godtyckligt antal LED:ar eller vetekornslampor. En renodlad signaldekoder kan alltså betraktas som en dekoder med 12-bitarsadressering! Den bit som är vänster/höger-bit på en växeldekoder blir en extra adressbit på en signaldekoder. På en Uhlenbrock kontrollstation ändrar man ”vänster/höger”-biten med grön resp. röd knapp.

Fig-7

 

 

 

 

 

 

Figur 7. Tillbehörsdekoder med signalaspekter, i princip 12-bitarsadressering.

 

7. Beräkning för CV-värden på tillbehörsdekodrar

Att beräkna CV9 (CV521) och CV1 (CV513) på tillbehörsdekodrar är lite knepigt. CV9 kan bara innehålla värdena 0-7, och CV1 värdena 1-64. Kom ihåg att den logiska basadressen ska vara delbar med 4, därför måste den mänskliga basadressen vara ett tal delbart med 4, adderat med 1.

CV9 = (Mänsklig basadress – 1) / 256, heltalsdelen. CV1 = ((Mänsklig basadress – CV9*256 – 1) / 4) + 1 Exempel: Dekodern ska svara på adress 741 -744. 741 – 1 = 740, och eftersom 740 är delbart med 4 så är detta en fungerande basadress. CV9 ska innehålla (741 – 1) / 256 = 2,980625. Heltalsdelen är 2. CV1 ska innehålla ((741 – 2*256 – 1) / 4) + 1 = 58

Omvänt kan man räkna ut en dekoders mänskliga basadress genom denna formel (CV9 * 256) + ((CV1 – 1) * 4) + 1 Exempel: (2 * 256) + ((58-1) * 4) + 1 = 741. Dekodern svarar på de mänskliga adresserna 741-744

 CV9 är 0 om de mänskliga basadresserna finns i intervallet 1 – 253 CV9 är 1 om de mänskliga basadresserna finns i intervallet 257 – 509 CV9 är 2 om de mänskliga basadresserna finns i intervallet 513 – 765 CV9 är 3 om de mänskliga basadresserna finns i intervallet 769 – 1021 CV9 är 4 om de mänskliga basadresserna finns i intervallet 1025 – 1277 CV9 är 5 om de mänskliga basadresserna finns i intervallet 1281 – 1533 CV9 är 6 om de mänskliga basadresserna finns i intervallet 1537 – 1789 CV9 är 7 om de mänskliga basadresserna finns i intervallet 1793 – 2045

 

 

8. Programmering av CV

Den vanligaste programmeringen av CV görs på ett separat programmeingsspår. Dekodrar har en speciell mode, programmeringsmode, där man kan skriva in värden i deras CV, som oftast är ett EEPROM-minne. För att ställa dekodern i programmeringsmode skickar man ut kommandot ”programmeringsmode” (se kap 9) och detta broadcastas ut på adress 0. Byte 0 innehåller alltså 00000000 och byte 1 innehåller också 00000000. Även byte 2, som är den sista byten och som är en checmsumma, är 00000000. Ett antal sådana här paket skickas ut. När dekodern tagit emot dessa ställer den sig i programmeringsmode. Detta kommando får aldig skickas ut på spåret på en anläggning, då varenda dekoder kommer att programmeras om, och kaos blir oundvikligt! Detta kommando är förbehållet separata programmeringsspår.

Fig-8

Figur 8. DCC-Paket som sätter en dekoder i programmeringsmode. Preamble och bitarna mellan bytarna är utritade på i denna figur. Ett flertal sådana patek måste skickas ut efter varandra. Efter dessa paket kommer ett antal paket som saknar DCC-adress. De skriver data rakt in i olika CV på dekodern.
Dessa paket är uppbyggda på detta sätt:

Fig-9

Fig 9. Paket som innehåller data som ska skrivas i CV på dekodern. Efter att datapaketen med CV-data har skickats, så skickas återigen ett antal programmeringsmode-paket som i figur 10. Dekodern går då ur programmeringsmode och återgår till sin normala operationella mode.

9. Error correction . Checksumma

Den sista byten i ett DCC-paket består av den bitvisa exklusive-or summa av de övriga byten.

Fig-10

Fig 10. Paritet på checksumman. Om det finns ett udda antal ettor på en bitposition, så blir den biten 1 i checksumman, annars blir den 0. Om man tar med även checksumman i sin exclusive-or operation, blir resultatet alltid 00000000.

Varje enskild bit i checksumman beskriver om det finns ett udda eller jämnt antal 1:or i de andra bitarna i de andra byten. Är det ett udda antal ettor blir biten i checksumman 1, annars blir den 0. Det är alltså en paritetscheck. Gör man en exklusive or där man tar med själva checksumma ska resultatet bli 00000000. Om checksumman inte stämmer beror detta på en brusig DCC-kontakt, t.ex. dålig kontakt mellan hjul och räls. DCC-paketet ska då anses felaktigt och kastas bort av dekodern. Principen för exklusive or

1 xor 1 = 0
0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1    

 10. Byte 1 funktion på 7-bitars lokdekodrar, basfunktionalitet.

Eftersom byte 1 inte används för adressering på 7-bitarsdekodrar, så används den för att sätta riktning, körsteg och funktioner grupp 1 F1-F4 och gruppp 2 F1-F8.

Fig10.2

För körsteg gäller följande värden på de fem V-bitarna

00000 = stopp
10000 = stopp
00001 = bryt ström till motorn
10001 = bryt ström till motorn
00010 = körsteg 1
10010 = körsteg 2 00011 = körsteg 3
10011 = körsteg 4 00100 = körsteg 5
10100 = körsteg 6 00101 = körsteg 7
10101 = körsteg 8

etc.

11. Byte 1 funktion på 7-bitars lokdekodrar, avancerad funktionalitet.

Dessa värden gäller för byte 1

00000000 = ställ dekodern i programmeringsmode.
00000001 = radera CV och återställ fabriksvärdena
0000001x = Fabrikstestprogram
0000010x = Reserverad
0000011x = Dekoderflaggor (Under omarbetning av NMRA)
0000100x = Reserverad
0000101x = Använd avancerad adressering
0000110x = Reserverad
0000111x = Acknowledgment vid förfrågan

 

12. Byte 2 vid dekoderflaggor

To be done

13. Byte 2 vid avancerad adressering

To be done

12. Programmering av CV på programmeringsspår eller motsvarande

En dekoder ställs i programmeringsmode genom att kommandostationen skickar ut kommando 00000000 (dekodern ställs i programmeringsmode), och detta kommando broadcastas ut på adress 00000000. Detta får absolut inte ske annat än på ett separat programmeringsspår eftersom broadcastadressen 00000000 används! Alla dekodrar på hela anläggningen kommer i så fall att ställa sig i programmeringsläge. DCC-paketet som skickas ut för att ställa dekodern i programmeringsmode har byte 0 värdet 00000000 (broadcastadressen) och kommando 00000000 i byte 1 (ställ dekodern i kommandomode).

Den tredje byten, byte 2, är en checksumma och den är 11111111. Ett antal sådana här paket sänds efter varandra. Efter detta sänds ett antal programmeringspaket. Dessa paket saknar adress i byte 0. De fem mest signifikanta bitarna i programmeringspaket skall vara 01111. De två minst signifikanta bitarna i byte 0 och samtliga bitar i byte 1 utgör CV-nummer. CV-numret beräknas som de två lägsta bitarna i byte 9 multiplicerat med 256 + byte 1 + 1. Byte 2 i programmeringspaketet utgör värdet som skall skrivas in i det aktuella CV. Byte 3 utgör checksumma När programmeringspaketen skickats och CV skrivits skickas nya paket för programmerringsmode ut, Dekodern går du ur programmeringsläget.