Generering af DCC Preamble

Min originale plan var egentlig at lade min Raspberry Pi (eller hvad der nu kommer til at styre det hele) udregne DCC signet inden det sendes over til mit kredsløb. Og det vender jeg muligvis tilbage til, da jeg "næsten" er i mål. Tager jeg kredsløbet fra min sidste blog post, laver et array af 9 shift registre og bruger SPI SS (slave select) til at styre om registrerne får clock fra DCC og input i ring, eller clock og input fra SPI så skulle det egentlig være nok.

Men jeg vil lige lege lidt med at generere et "renenere" SPI interface - så min Raspberry Pi bare kan sende selve kommandoen "rent", så sørger kredsløbet for preamble m.m. specifict for DCC protokollen.

En DCC kommando starter altid med et preamble, der består at 14 eller flere 1 bits.

Så jeg har lavet følgende simple kredsløb:

Billede

74163 er en 4 bit counter (så den kan tælle pulser fra 0-15). Den har et output der indikerer om den er kommet til 15 (det er ben 15, meget passende - det har de sikkert moret sig over længe dem der designede den). Derudover har den synkront reset/load. Asynkrone tællere reagerer på et reset signal øjeblikkeligt - en synkron tæller reagerer først når den får en klok-puls.

Jeg bruger ikke chippens parallel load funktion - så jeg lader den tælle helt fra 0.

Bemærk ben 1 ikke er forbundet i kredsløbet her. Der vil senere komme et input signal der angiver at en ny kommando skal startes. I mine eksperimenter har det signal bestået af en ledning jeg sidder og rykker i. Smile

DCC_OUT er det signal jeg genererede i mit sidste kredsløb.

Når der kommer et reset på ben 1 går timeren til 0. Det betyder ben 15 vil være lavt, og derfor vil "IN_PREAMBLE" være højt. IN_PREAMBLE er forbundet til ben 7, der aktiverer timeren. Den vil altså begynde at tælle hver gang der kommer en raising edge på DCC_OUT. Når den kommer til 15 vil ben 15 blive højt og "IN_PREAMBLE" vil nu være lavt indtil næste reset på ben 1.

Formegentlig vil et reset kun vare en enkelt klok-cycle, men så længe det er genereret af mig der rykker i en ledning er det nu engang langsommere.

Så til at starte med vil jeg bare se om kredsløbet reagerer som forvented på henholdsvis reset start og reset slut.

Start command (ben 1 sættes lavt) ser sådan her ud:

Billede

Som forventet går "In Preamble" fra lav til høj med næste raising edge på DCC signalet.

Når start command går højt igen ser sådan her ud:

Billede

Jeg har indsat tal hvor hver raising edge på DCC signalet efter start command er gået højt. Som forventet holdes In Preamble højt indtil der har været 15 bits.

Så det ser ud til at preamblet kan styres på denne måde.

 

__________________

mvh
Lars M

Er så småt ved at begynde at pille i skala n, epoke III, DB.

Like 0 kan lide
Top