Så er der DCC signal!

For et halvt års tid siden fik jeg brygget mit første PCB design sammen - godt på vej til at lave en elektronisk dims der kan sende et DCC signal fra en Raspberry PI eller andet godt med SPI interface.

Jeg har så rodet med alt muligt andet et godt stykke tid, men er den sidste uges tid har jeg endeligt fået loddet komponenterne på:

Billede

Jeg skal nok ikke se frem til ansættelse på et elektronikværksted med disse lodninger, men for et første forsøg på SMD lodning er jeg egentlig meget tilfreds. IC'ernes ben er loddet med loddekolbe hele vejen (efter et ordentlig bad i noget flux middel). De små kombonenter brugte jeg kun loddekoæben til at få tin på. Jeg brugte varmt luft til selve lodningen af komponenten. Jeg burde nok have brugt solder paste, men nu får vi se om det går på denne måde. Jeg regner i hvert fald ikke med at det bryder sammen fordi jeg brugte for lidt flux.

Der er et par ting jeg har lært (eller indset) på nuværende tidspunkt.

  1. Brug en SMD dip switch istedet for den der "lus" fra 1990'erne.
  2. Lav et sted (en pad eller noget) der er let at komme til når frekvensen skal instilles. Nu skal man enten have started dyret op så der er et signal, eller også skal man sidde og fedte med at måle på et ben på en IC.
  3. Evt skulle man smide stikkene over på bagsiden (eller smide komponenterne derover, resultatet bliver det samme). Så er der blads til at skrive hvad de enkelt connections er. Nu skal jeg sidde og vende det hele på hovedet mens jeg håber mine test ledninger ikke falder ud.
  4. Afstanden mellem komponenter er rimelig. Jeg kan left presse flere ind (for eksempel afstanden mellem IC'er ende mod ende), men det er lettere at lodde når der er god plads.

 

Nåh... ja.... jeg har også lært en enkelt ting mere:

5. Man skal lige kigge forbindelsen mellem de forskellige sheets igennem i KiCad.  Sick

Da jeg endeligt fik sat dyret til min Raspberry Pi så det egentlig meget godt ud. Der var noget der lignede et rigtig DCC signal. Men så opdagede jeg der var 5 databytes der blev sent, selv om jeg kun brugte en kommando med 3 bytes.

I gang med målingerne.

U404 (en 74HC193 tæller kreds) der styrer hvornår kredsløbet afslutter en kommando og starter igen fik 5 ind som kommando længde. Så den kreds virkede sådan set fint - den gør som den får besked på. Det er bare en skam at en anden kreds tilsyneladende lyver til den.

Videre til U502 (en 74hc75 latch i min "Command buffer") der fastholder kommando længden fra input siden. Den afsender - som den skal - en kommando længde på 3. Da U502 og U404 er forbundet direkte må det være forbindelsen den er gal med. Så et nærmere kig på diagrammet igen, og så fandt jeg denne lille "detalje":

Billede

Jeg har fået byttet rækkefølgen på CMD_LENGTH_BIT output i mit Command Register. Angry

Det er ikke noget jeg opdager når jeg bruger mit breadboard - der sidder jeg og roder med benene direkte på IC'erne. Øv.

På mit PCB design går signalerne fra U502 over U503 til U404. U502 og U503 er forbundet korrekt. Så jeg må ind og afbryde mellem U503 og U404. Heldigvis løber alle tre traces et stykke på bagsiden af boardet hvor jeg kan komme til dem. Så jeg afbryder forbindelsen med en skruetrækker og forsøger at lodde et par ledninger på med de rigtige forbindelser. Men jeg har ikke ledninger der er tynde nok og stadig isolerede så de kan krydses, så nu ser der sådan her ud på bagsiden (jeg har rengjort en anelse efter billedet er taget):
Billede

Nå, næste forsøg gik bedre - forbindelserne blev loddet på forsiden. Ikke så kønt i længden som noget der kunne skjules på bagsiden... men det er godt nok til at jeg ikke vil bestille et nyt PCB:

Billede

Der er grønt lys i LED'en, så kredsløbet tror i det mindste selv at det laver noget fornuftigt. Der var nu også grønt lys da det smed kommandoer med forkert længde afsted så jeg stoler ikke rigtig på det der lys. Jeg kigger nærmere på et signal med 3 bytes alle sat til 15 (4 bits med værdi 0 efterfulgt af 4 bits med værdi 1):
Billede

Det ser umiddelbart rigtigt ud. Der er 15 x 1 bit preamble (16 hvis man tæller den foregående stopbit med). Derefter de 3 bytes med de forventede bits der alle har en 0 bit foran, og til sidst en stopbit før det starter igen.

Jeg prøvede naturligvis andre byte værdier og kommandoer fra 3-6 bytes - og alt ser fornuftigt ud (altså signalet, de der ledninger jeg måtte lodde på ser ikke så fornuftige ud). Smile

Og smider jeg 7 bytes afsted bliver status LED'en gul og DCC signalet stoppes som det skal.

Jeg fandt desværre også en anden lille detalje, men jeg regner ikke med at det giver problemer. Jeg har sat en transistor ind op DCC output. Det gør jeg så signalet kan trække en eller flere optokoblere på boosterne. Men min transistor (BC807-40 der er en standard BC327-40 PNP transistor i SMD format) skifter fra høj til lav noget langsommere end den skifter fra lav til høj. Så der er omkring 1 μs forskel på længden af den lav og den høje del af mit DCC signal. Jeg målte også input på transistoren for at checke at det er problemet:

Billede 

1 μs er indenfor den margin som DCC dekoderen skal acceptere - så det burde kun give problemer hvis min booster ender med at forlænge forsinkelsen. Hvis det sker kan jeg altid smide endnu en BC807 ind i boosteren på det indgående DCC signal - så burde den lave ca. samme forsinkele på den "modsatte" edge af DCC signalet - hvis den altså bliver styret nogenlunde lige så kraftigt. Er det ikke nok fjerner jeg transistoren og trækker boosteren direkte fra min IC. Så kan den nok ikke bruge optokobler - men det er jo alligevel altid sjovere når man kan sidde og vente på at 12V rammer éns 3.3V kredsløb. Tongue

Nu er det nok ved at være tid til en booster... det vender jeg tilbage med på et eller andet tidspunkt. Hvem ved, det kan endda være at det bliver i år. Smile

__________________

mvh
Lars M

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

Like 3 kan lide
Top