NIEUW:
LocoNet projecten
Deze
beschrijving van de diverse terugmelders en S88 bus vereist een minimale
basiskennis van digitale elektronica. Ook is de wijze van voorstelling
ontstaan uit een door mij reeds eerder geprogrammeerde terugmelders in PIC
microcontrollers. De opbouw van het terugmeld en detectie principe is dan
ook uiteindelijk bedoeld om de assembler software beter te kunnen begrijpen.
DISCLAIMER:
Ik kan geen garantie bieden betreffende de juistheid van informatie op de
website, noch aansprakelijk gesteld worden voor de schade die, rechtstreeks
of onrechtstreeks, het gevolg is van informatie verkregen van deze site.
Inhoud:
Van
terugmeldbit naar een eenvoudige terugmelder:
Terugmeldbit
Schuifregister
S88 bus
Een terugmelder voor 8 drukknoppen
met eenvoudige elektronica (zonder microcontroller!)
Een terugmelder met
massadetectie
Een terugmelder met massadetectie in een PIC-microcontroller
Assembler program
Printje
Met
stroomdetectie
Een S88 Master
(om zelf S88 bus signalen op te weken en
terugmeldingen weer te geven via LED's)
Een S88 Volger
(om de data uit de S88
bus te halen en door te sturen naar LED's)
Een terugmelder op basis van stroomdetectie in een PIC-microcontroller
Principe stroomdetectie en terugmelder met microcontroller (µC) technologie
Problemen en oplossingen
Minimum en maximum
stroom detectiegrens
Praktische
uitwerking op print
Extra's
Kostprijs
schakeling
Van
terugmeldbit naar een eenvoudige S88 terugmelder:
Terugmeldbit:
De
basis bestaat uit een Data Flip-Flop, in het kort als D
F-F geschreven, maar meestal als D Flip-Flop uitgesproken. Deze D F-F heeft
als eigenschap dat hij één databit ‘Q’ kan onthouden. De inhoud van ‘Q’ kan
afkomstig zijn van de logische waarde op ingang ‘D’ maar kan ook afkomstig
zijn van de logische waarde op ingang ‘Q IN’. Zoals in het schema hiernaast
voorgesteld wordt de data op ingang ‘D’ aangeboden via een weerstand en een
schakelaar. Is de schakelaar dicht dan staat er een logische ‘0’ (massa) op
ingang ‘D’, is de schakelaar open dan staat er een logische ‘1’ (+5V via
R=10k) op ingang ‘D’. De logische waarde op ingang ‘D’ zal pas ingelezen
en opgeslagen worden in databit ‘Q’ als de logische toestand op ingang ‘LEES
D’ van ‘0’ naar ‘1’ gaat. Wordt ook wel eens voorgesteld als: ‘de data wordt
ingelezen bij een positieve flank (‘0’-->’1’) op ingang LEES D’.
Dit is de eerste manier hoe ‘Q’ aan zijn data komt. De tweede manier is
dezelfde zoals hiervoor beschreven maar nu is de data afkomstig van de
logische waarde op ingang ‘Q IN’. De data van deze ingang wordt in ‘Q’
gelezen door middel van een positieve flank op ingang ‘SCHUIF Q’.
Tenslotte moeten we ook nog weten dat de logische waarde van databit ‘Q’
ook op uitgang ‘Q UIT’ staat. Tabel 1 geeft dit allemaal weer. Zo één
blokje zoals hiernaast getekend noem ik voor het gemak ook een
‘terugmeldbit’.

Schuifregister:
We
gaan nu een stapje verder. Als we nu meerdere terugmeldbits in serie
plaatsen en wel zodanig dat telkens ‘Q IN’ verbonden wordt met ‘Q UIT’ van
de volgende, zoals het schema hiernaast, dan staan we op het punt een
terugmelder te creëren. Een in serie gekoppelde reeks databits wordt in de
digitale techniek ook een schuifregister genoemd.
Voor de duidelijkheid gaan we elk terugmeldbit nummeren van 1 tot in
principe heel veel, maar we zullen ons voorlopig beperken tot 8 (standaard
microcontrollers werken ook intern met 8 bits). Het schema is vereenvoudigd
tot enkele terugmeldbits, de rest moet je er maar bij denken…
We gaan weer de twee manieren van data inlezen bespreken zoals hiervoor maar
nu voor de acht terugmeldbits te samen. Als er een positieve flank komt op
‘LEES D’ dan zullen alle 8 terugmeldbits tegelijkertijd hun respectievelijke
ingang ‘D’ lezen en in hun databit ‘Q’ plaatsen. Elke ‘Q uit’ krijgt de
logische waarde van zijn databit ‘Q’. In tabel2 hieronder voorgesteld in de
eerste rij.
Bij de tweede manier haalt ‘Q1’ zijn data van ‘Q1 IN’. Maar ‘Q1 IN’ is
verbonden aan ‘Q2 UIT’, en daar staat de logische waarde van ‘D2’ op. En we
kunnen zo verder gaan ‘Q2 IN’ is verbonden met ‘Q3 UIT’ en daar staat de
logische waarde van ‘D3’ op enz… Enkel de logische waarde op ‘Q8 IN’ is
niet bepaald. Als deze de laatste is in een reeks, dan is het best deze een
logische waarde te geven, meestal ‘1’ via een weerstand van 10kOhm. Op het
moment dat er een positieve flank komt op ‘SCHUIF Q’ zal ‘Q1’ de logische
toestand overnemen van ‘Q2 UIT’ = ‘D2’, ‘Q2’ zal de logische toestand
overnemen van ‘Q3 UIT’ = ‘D3’ enz… Uiteindelijk zal ‘Q8’ een logische ‘1’
inlezen. Het inlezen van de logische toestanden van hun buur gebeurd wel
tegelijkertijd. Op tabel 2 hieronder zie je op regel twee dat Data ‘D8’ tot
en met ‘D2’ een plaatsje zijn opgeschoven. Data van ‘D1’ is verdwenen.
Geven we weer een positieve flank op ‘SCHUIF Q’ dan zal de data weer
opschuiven, dit verklaart waarom ik deze ingang ‘SCHUIF Q’ heb genoemd.
Na 7 positieve flanken op ‘SCHUIF Q’ (jawel 7) staat ‘D8’ op ‘Q1 UIT’.

S88 bus:
Een centrale kan via een S88 bus deze terugmelder als het ware bedienen en
de data die telkens verschijnt op ‘Q1 UIT’ inlezen via ‘DATA UIT’. De S88
bus geeft de opdracht de data op ingangen ‘D’ te lezen in de terugmeldbits.
De S88 bus gaat ook de opdracht geven de data te laten doorschuiven. Maar,
het S88 protocol (=afspraak) doet dat iets anders dan zoals ik dat hiervoor
beschreven heb. Het S88 protocol kent geen afzonderlijke ‘LEES D’ en
‘SCHUIF Q’ opdracht. Wat deze S88 bus wel heeft is een ‘CLOCK’ en ‘LATCH’
signaal. Dit werkt zo: op het moment dat er een positieve flank komt op
de ‘CLOCK’ dan moet de schuifregister iets gaan doen. Dit is afhankelijk van
de logische toestand van het ‘LATCH’ signaal. Is ‘LATCH’=‘1’ dan zal de
schuifregister de data op de ‘D’ ingangen lezen, is ‘LATCH’=‘0’, dan zal de
schuifregister 1 positie opschuiven. (zie tabel 3) Daarvoor moeten we ons
schema wel iets aanpassen met enkele logische poorten. Ik veronderstel dat
je vertrouwd bent met zulke poorten zodat ik daar geen woordje uitleg moet
bij plaatsen.

De centrale gaat er ook voor zorgen dat heel dit proces van data inlezen en
dan doorschuiven regelmatig herhaald wordt. Het tijdsdiagram hieronder maakt
dit duidelijk voor 8 bits. Ook zit er op de S88 bus een voedingsspanning
bestaande uit massa en +5V. Deze voeding kunnen we gebruiken om de
terugmelder van werkspanning te voorzien.

Een terugmelder voor 8 drukknoppen
met eenvoudige elektronica:
(zonder microcontroller!)
Nu hebben we toch geluk zeker dat er een IC bestaat die een 8
bit-terugmelder allemaal al in zich heeft. Namelijk een 4014 CMOS IC. (ik
veronderstel dat Marklin het S88 protocol heeft afgestemd op deze reeds
bestaande 4014 chip?) Een 4014 is een 8 bits schuif register met 8 data
ingangen. De logische schakeling intern op deze chip is een klein beetje
anders dan zoals ik deze beschreven heb, maar het resultaat blijft
hetzelfde. Deze terugmelder is geschikt voor schakelaars of voor
drukknoppen met verbreekcontact. Zo is het bijvoorbeeld met MR-direct
mogelijk een hele wisselstraat aan te sturen met één S88 terugmeldcontact.
Een bedingingspaneel met drukknopen, schakelaars en lichtjes blijft toch
zijn charme behouden hé. Ook kunnen ze zo gecombineerd worden met PC
sturing.

De schakeling
is zo eenvoudig dat iedereen dit wel moet kunnen nabouwen. Het handigst is
een stukje strokenprint waar je hier en daar wat koper weghaalt. Wil je
meer dan 8 terugmeldcontacten dan zet je er gewoon dezelfde schakeling er
achter en je hebt er al 16. De meeste centrales werken met blokken van
telkens 16 terugmeldcontacten. Er zijn twee versies, je kan deze maken met
SIL weerstandsnetwerken of met afzonderlijke weerstanden. Hou rekening met
de breedte als je connectoren gebruikt, zo kan het zijn dat je het
strokenprintje iets breder moet nemen! Het is ook mogelijk een printje zelf
te ontwerpen en te ontwikkelen. Ik ben zeker geďnteresseerd in de layout er
van.
 

Maar omdat de meeste centrales werken met 16 terugmeldbits per terugmelder
kan je deze combineren met een tweede er naast.

Een foto maakt veel duidelijk, dit is er eentje met weerstanden en 8
terugmeldbits:

Wat kost
zoiets voor 8 terugmeldcontacten: (anno 2012)
1x 4014 IC Conrad nr. 172707-60 0,76€
1x IC voet 16pin Conrad nr. 189529-8A 0,19€
een weerstandje van 10kOhm kost per stuk 0.02€. Bij Conrad nr. 404160-8A
moet je deze wel per 100 stuks kopen 1,89€
2x SIL 1+4x10k Conrad nr. 416037-8A 2x0,15€= 0,30€ of 8xR=10kOhm = 0,16€
strokenprintje 1/8 van eurocard = 0,7€
Pakweg 1,65€ ŕ 1,79€. Wat zit er niet in deze prijs, deze van de
connectoren. Dat laat ik over aan de gebruiker. Het goedkoopst is gewoon
geďsoleerde draadjes direct op de print solderen. Je kan ook duurder gaan
met schroefverbindingen of zelfklemmende verbindingen. Het belangrijkste is
dat de pitch afstand (afstand tussen elk klemmetje) 2.54mm is.
Een terugmelder met
massadetectie:
De terugmelder die we tot hiertoe besproken hebben geeft de toestand op
ingangen ‘D’ weer enkel en alleen maar op het moment van een positieve flank
van ‘LEES D’. Kortstondige pulsen kunnen zo gemist worden. Bijvoorbeeld
deze van reed-contacten, Ook vuile sporen (of wielen) kunnen bij 3 rail
systemen er voor zorgen dat er net geen massa op ingang ‘D’ staat bij een
‘LEES D’ opdracht. Om er voor te zorgen dat de schakeling ook kortstondige
pulsen kan detecteren gaan we er een Set Reset flip-flop (SR
F-F) aan toevoegen. Deze SR F-F heeft twee ingangen, als de Set ‘S’ ingang
hoog wordt dat zal uitgang ‘Q’ van de SR F-F logisch 1 worden en
blijven. Als ingang Reset ‘R’ hoog wordt dan zal uitgang Q van de SR F-F
logisch ‘0’ worden en blijven. Dus als de ‘S’ ingang een kortstondig
puls krijgt, dan zal de SR F-F geset blijven.

Omdat we in de modelspoorwereld een massacontact willen detecteren doordat
de wielen een verbinding maken tussen een geďsoleerde spoorstaaf en de massa
(3rail), hebben we hier eigenlijk een signaal dat van logisch ‘1’ naar ‘0’
gaat. De SR F-F kan enkel geset worden bij een logische ‘1’. Daarom moet we
het signaal logisch gaan omkeren, ook inverteren genoemd. Deze invertor is
dat bolletje voor de ‘S’ ingang. Het meetprincipe die de massa detecteert,
ook al is deze maar kortstondig noemt men massadetectie. Nu zitten we daar
wel met een SR F-F die geset blijft, ook al is er al lang geen massacontact
meer aanwezig. De S88 bus heeft daar gelukkig een oplossing voor. Direct na
de ‘LEES D’ opdracht zal de centrale via de S88 bus een positieve puls geven
die alle SR F-F’s reset. Daarvoor heeft de S88 bus een ‘RESET’ lijn. De SR
F-F’s kunnen dan terug massacontacten detecteren. Zie tijdsverloop van de
S88 bus nu met ‘RESET’ signaal. Praktisch worden SR F-F’s gebruikt die geset
worden als het ingangssignaal ‘0’ wordt. Dit is al handig, maar dit geld ook
voor de reset ingang van deze SR F-F’s. Vandaar dat de ‘RESET’ van de S88
bus eerst nog geďnverteerd moet worden op de schakeling. (niet schematisch
voorgesteld!) Aan de ingang van het te detecteren signaal kan je best ook
een condensator mee parallel plaatsen met het te detecteren contact.
Kortstondige stoorpieken en ruis worden zo weg gefilterd. Gebruik je de
schakeling voor massadetectie van 3 rail systemen, dan is het aan te raden
in serie met het te detecteren signaal een weerstand van 1kOhm te plaatsen.
Dit voorkomt dat de detectieschakeling eventueel de lokstroom moet gaan
leveren, iets wat sommige IC’s nog zwarter maakt dan ze al zijn…
In wezen zijn alle terugmelders gebaseerd op massadetectie. Ook deze die
gekend zijn als stroomdetectie. Bij stroomdetectie is de stroom die een
spanningsval creëert over dioden, die meestal via opto-couplers de ingang
van de SR F-F naar de massa schakelt. Symbolisch voorgesteld door eerste
ingangsschakeling schema.
Het tijdsdiagram hieronder geeft het beeld weer van de diverse signalen op
een S88 bus. Let wel elke centrale heeft mogelijk een andere timing, maar de
volgorde is wel belangrijk!

Praktische terugmelders met massadetectie zijn al voldoende beschreven en te
vinden op internet. Het ligt niet in mijn bedoeling ook zo eentje verder
functioneel uit te werken. Maar we gaan deze schakeling, zoals we ze nu al
hebben, omzetten naar een programma die we in een PIC microcontroller kunnen
steken.
Een terugmelder met massadetectie in een PIC microcontroller:
Wat willen we bereiken: een zo eenvoudig mogelijke terugmelder met een
minimaal aan onderdelen die ongevoelig is voor ruis, stoorpieken en slechte
wiel contacten. Met minimaal bedoel ik dat dan ook letterlijk, alles wat te
programmeren valt zal ook geprogrammeerd worden. Flip Flops, schuifregisters
maar ook condensators. En nog meer zelfs, we gaan achter die geprogrammeerde
condensators geprogrammeerde schmitt-triggers hangen. En dit steken we in
een PIC microcontroller die zo 32 massadetecties kan uitvoeren en
doorschuiven via een standaard S88 bus.
Zoiets dus:

Wordt omgezet naar dit:

Op het aangepaste schema zien we dat de D F-F en SR F-F er nog op staan. Ook
de ‘CLOCK’ en ‘LATCH’ ingangen zijn nog aanwezig. Bij een positieve flank op
‘CLOCK’ ingang roept deze een interrupt program op die afhankelijk van de
logische toestand van ‘LATCH’ ingang data inleest in de schuifregisters of
de inhoud ervan doorschuift. Wat er verdwenen is de ingangscondensator. Deze
is vervangen door een teller die telt tussen 0 tot 255. Met tussen bedoel ik
dat deze omhoog of omlaag kan tellen en dit afhankelijk van de logische
toestand aan de ingang. Is er massa detectie, dan telt de teller omhoog tot
maximum 255. Is er geen massadetectie dan telt de teller omlaag tot 0. De
teller werkt net zoals een condensator. Maar i.p.v. lading op te slaan
worden hier bitjes geteld. Wanneer wordt de flip-flop nu geset? Op het
moment dat de teller 192 bereikt bij het omhoog tellen zal de flip flop
geset worden. Wanneer wordt hij nu gereset? Bij het omlaag tellen als deze
teller 64 bereikt. Deze manier van schakelen noemt men in de elektronica een
schmitt-trigger. In de elektronica schakelt de schmitt-trigger wel op
spanningsniveaus! Wat voor voordelen hebben we hiermee? Als er massacontact
via de wielen even verbroken wordt door vuil op de sporen dan moet de teller
al eerst terugtellen tot 64 om de flip flop te resetten. Dat lukt zelden.
Ook stoorsignalen en ruis moeten al minstens ľ van de tijd de ingang aan de
massa houden om de flip-flop te setten. Ook dit zal zelden voorkomen. Omdat
de schmitt-trigger de SR F-F set maar ook reset, hebben we de S88 bus
‘RESET’ signaal niet nodig.
Toch even uitrekenen over welke tijdsintervallen we spreken:
De PIC 16F887 interne klokfrequentie is 8MHz
dat geeft 2000000 (twee miljoen) instructies per seconde.
De S88 CLOCK ingang genereerd een interrupt die
bij een schuiftoestand 50 instructies nodig heeft. (Ik hou rekening met de
extra tijd voor o.a. GOTO CALL enz…) Bij een S88 CLOCK van 9kHz (MR-Direct)
heeft de µC 9000x50= 450000 instructies per seconde nodig om de interrupts
te verwerken. Dit trekken we af van 2000000 en dit geeft een overschot van
1550000 instructies per seconde voor de tellers.
De meest voorkomende toestand van een ingang is
+5V en de teller staat op 0 en doet niets. Hiervoor zijn maar 6 instructies
nodig. Moet hij wel tellen dan geeft dat 10 instructies. Omdat we 32
ingangen moeten testen geeft dit 32*6 = 192 instructies om alle 32 ingangen
te testen. Dit testen herhaald zich in een ‘loop’ die zich 1550000/192= 8070
keer per seconde herhaald. Komt ook overeen met 8070Hz of 1/8070= 124µs per
loop.
Hoe lang duurt het nu om een massacontact te
detecteren? Wel, als de teller van 0 tot 192 telt dan set de SR F-F zich pas
op 192 maar telt wel voort tot 255. De SR F-F set zich dus pas na 124x192=
23800µs (24ms). En als er eenmaal geteld is tot 255 en er is een slecht
wielcontact dan mag deze ook 24ms duren voordat de SR F-F gereset wordt.
Er is in het schema nog iets toegevoegd. Namelijk van ‘DATA IN’ wordt een
copy gemaakt tijdens het interruptprogramma. Dit heb ik toegevoegd om te
voorkomen dat bij het door elkaar gebruik van verschillende terugmelders er
eventueel problemen ontstaan bij het inlezen van de logische waarde van
‘DATA IN’ . De schakelsnelheid van andere terugmelders is anders. Zo kan
een terugmelders op basis van CMOS-logica (de commerciële) de ‘DATA UIT’ op
de S88 bus al aangepast hebben voordat deze op basis van µC de ‘DATA IN’
ingelezen heeft. Deze met µC lezen eigenlijk de data al in die bij de volgende
schuifopdracht moest ingelezen worden. Wat de software nu doet is data op de
‘S88 DATA IN’ al op voorhand inlezen om zo deze problemen te voorkomen. Het
inlezen van ‘DATA IN’ is even vertraagd met tijd ‘t’ (zie schema hierboven).
Het volgend tijdsdiagram maakt dit duidelijk:

Assembler program:
Er staat voldoende toelichting bij het assembler programma om het programma
verloop te kunnen volgen. Omdat deze microcontroller met bytes werkt (8bits
per byte) zijn de 32 SR F-F’s onderverdeeld in 4 Bytes nl. FFB1; FFB2; FFB3
en FFB4, zo ook de 32 bit schuifregister: SCHUIFB1 t.e.m. SCHUIFB4. Het
programma is ook geschreven met gebruik van MACRO’s. MACRO BITTEST leest
elke ingang in en zal aan de hand van de logische waarde de teller verhogen
of verlagen, en zal indien nodig de SR F-F’s setten of resetten. Deze
software is o.a. getest met MRDirect; Intellibox II.
ASM CODE
(versie
maart 2012)
HEX FILE
(versie
maart 2012)
Printje:
Veel stelt zulk printje ook weer niet voor, neem een stukje van een
strokenprint en neem hier en daar wat koper weg. Ook kun je meerdere µC op
één printje combineren zodat je 64 en zelfs 96 massadetectie terugmeldingen
op een stuk eurocard krijgt.

Achterzijde strokenprintje is de eenvoud zelf, even met het slijpschijfje er
over om wat koper weg te nemen en solderen maar:

Een bestukt printje:


Kostprijs voor 32 massaterugmelding (anno 2012)
Een PIC 16F887
2,60€
Een 40 pin IC voetje 0.122€
Een SIL weerstandsnetwerk van 8x10k kost bij Velleman = 0.112€x4=
0,448€
32 weerstandjes van 1kOhm kost 0.02€x32=0.66€
en eentje van 10kOhm = 0.02€
Een stukje strokenprint 1€
Of samen (zonder de prijs van connectoren) = 4,85€ of 0,15€ per terugmeldcontact.
Met stroomdetectie
Een correspondent uit Italië
heeft op voorgaand ontwerp een deel toegevoegd om ook te kunnen gebruiken
met stroomdetectie. Ik heb toelating gevraagd en gekregen om dit ontwerp ook
hier te plaatsen. De uitleg bij het ontwerp is in het Engels. (E-Mail adres
correspondent kan je bij mij opvragen)
Informations about
S88_32 PCB assembly
1) RJ45-8X (S88N) connections to digital controller and from other feedback
modules via standard Ethernet patch cables.
2) Supply of module via S88N line, 5 or 12 Vdc (regulator on-board). See ref.
6c for details.
3) Inputs can work either with on-board occupancy detector or as standard
inputs; optoinsulation in both modes.
4) Can be fitted as:
- 32 occupancy detectors;
- 16 occupancy detectors and 16 NO contacts;
- 32 NO contacts;
5) Several digital power allowed: only one line intercepted:
- Single input for each channel (ex. for sections powered via semaphore
switch);
- common power for each group of eight input (ex. for normal sections);
- mixed power mode allowed in groups of 16;
All the power sources can be different (i.e. separate boosters).
6) a) Assembly variants, referred to input #1:
- Occupancy detector: B1 installed and R1 = 22 to 33 ohm, not critical;
- NO contact: B1 not installed, R1 = 15K-33K ohm, OK1 can be replaced with
cheaper or AC type ones;
Note: a supply voltage is required; can be used a -12/15 Vcc (negative
respect to common) or the standard
digital voltage
b) Assembly notes
R34: Not used
c) If power is 5 Vdc (S88): - IC1, C1, C2, C5 and C6 not used;
- Place a jumper (wire) across IC1 pins In and Out (the external ones).
d) Alternative: R16-R24 (on solder side) or RN2;
R25-R32 (on solder side) or RN1;
R35-R42 (on solder side) or RN3;
R43-R50 (on solder side) or RN4.
7) Common power line, referred as inputs 1-8:
- Close (solder) jumpers SJ1 to SJ8 (on component side);
- Use a 5.08 pitch screw headers.
Pay attention to the proper headers or connectors placement: the soldered
pin has to be NOT on the soldered jumper
8) Single power line: referred as inputs 1-8:
- Leave SJ1 to SJ8 open;
- Use a 2.54 pitch screh header;
- The input pin is the one corresponding to SJx. If swapped the detector
will work, but with less sensitivity.
I hope that the drawings can clear all doubts.
In the attached photo you can see a 2-row 41612 Din connector:I used this
one because in my application I found better a removable connection rather
than 32 screw headers; furthermore, 2.54 pitch connectors are rather
expensive, and not so easy to find in blocks bigger than 3-4 places.




s88_32_conn1.pdf
s88_32_conn2.pdf
Eagle 6 files:
s88_32.brd
s88_32.sch
s88_32b.brd
s88_32b.sch
Een S88 Master:
Het idee om een S88 Master is ontstaan om de diverse
S88 microcontroller projecten eenvoudiger te testen zonder dat er een
centrale aan te pas moet komen. De S88 master genereert zelf de benodigde
S88 signalen op de S88 bus en zal de eerste 32 ontvangen contacten uitsturen
naar LED’s. Ook is dit een deel van een project om een digitale centrale
zelf te bouwen. Het is een redelijk eenvoudig projectje geworden en we
gebruiken hiervoor weer de PIC µC 16F887. De nodige ,weliswaar beknopte,
uitleg programma staat in de assembler code. Bij de praktische uitvoering
heb ik 4 keer een 10 LED bar gebruikt om telkens maar 4 keer 8 LED’s (samen
32) uit te sturen. Ik had ze gewoon nog ergens liggen vandaar…. Een zwarte
tape heb ik over de overtollige LED’s geplakt. Verder veel uitleg hoeft het
printje niet. Ik heb weer gekozen voor een strokenprintje waar hier en daar
stroken doorgeslepen zijn. Zelf uit te zoeken hoe je dat best doet, de
foto’s en schema zijn duidelijk genoeg. Voor de waarde van
voorschakelweerstand R voor elke LED (LED wel getekend als diode) is
afhankelijk van de maximale stroom door de LED volgens zijn specificaties.
Maar je moet ook rekening houden met de maximale stroom die de µC kan
leveren per uitgang en in totaal. Per pin kan de µC 25mA leveren maar voor
alle pinnen tegelijker tijd is dit maximum 90mA. Omdat het theoretisch
mogelijk is dat alle 32 LED’s aangestuurd kunnen worden, komen we zo uit op
pakweg 3mA per LED. Softwarematig heb ik dit opgevangen door maximum 8 LED’s
aan te sturen maar door snelle rotatie naar de volgende 8 LED’s enzovoort
valt dit niet op. Zo kunnen we per LED ongeveer 12mA aansturen maximum.



ASM code S88 Master
Een S88 Volger:
Uit een S88 Master is een S88 Volger ontstaan. Op
diverse modelbouwforums had ik al opgemerkt dat er behoefte is om de
signalen tussen de S88 bus van de centrale naar diverse S88 terugmeldunits
te kunnen volgen. Om zo bijvoorbeeld een LED sporenplan aan te sturen waar
het treinenverloop mee op te volgen is. Ook voor testdoeleinden kan het
nuttig zijn de terugmeldingen te kunnen
volgen tussen centrale en S88 terugmelders. De schakeling is zodanig
opgebouwd dat je kan kiezen welke block van 32 stuks terugmeldingen je wil
visualiseren. Dit kan je door een brug aan te leggen naar de massa op ingang
schakelaar op de µC. Dit doe je als de schakeling nog niet op spanning
staat! Zo gauw je de schakeling op spanning brengt zal de software 1 voor 1
om de 2 seconden een
LED aansturen. De eerste LED is voor de eerste 32 terugmeldingen. LED 2 voor
terugmeldingen 33 tot 64 enzovoort en dit in een oneindige lus. Als je de
brug onderbreekt bij de bijhorende LED zal de schakeling deze reeks van 32
terugmeldingen visualiseren. Deze instelling wordt opgeslagen in EEPROM
zodat je dat niet telkens weer moet doen. Zo gauw de brug onderbroken is,
werkt de
schakeling net zoals de S88 master als hiervoor maar dan zonder opwekking
S88 signalen. Let ook op de schakeling is de DATA In en DATA OUT lijn niet
onderbroken. De schakling leest gewoon mee, of ‘volgt’ de signalen op de S88
bus. Let ook op dat je deze schakeling (of meerder volgers) enkel kunt
plaatsten tussen de centrale en de terugmeldunits. Het spreekt vanzelf dat
achteraan de S88 na de laatste terugmeldunit er geen data staat op de DATA
IN pin.


ASM code S88 volger
Een
terugmelder op basis van stroomdetectie in een PIC-microcontroller:
(update 7/12/2014)
Noot: deze terugmelder met stroomdetectie
werkt enkel voor locomotieven die aangestuurd worden met een digitaal
signaal. Het gebruikte digitaal protocol zelf, maakt niets uit.
Principe stroomdetectie en terugmelder met microcontroller (µC)
technologie:
Het principe van stroomdetectie is eigenlijk heel eenvoudig. Elke
elektrische verbruiker die stroom nodig heeft, zal een spanningsval creëren
over een diode die in serie staat met de verbruiker. Bij Silicium diodes is
deze spanningsval 0,6 ŕ 0,7 Volt. Het is deze spanningsval die we gaan meten
met een analoge ingang van een µC. De meeste terugmelders, werken met een
veelvoud van 8 ingangen, gewoonlijk 16 ingangen. Daarom gebruiken we een µC
die 16 analoge ingangen heeft.
Problemen en oplossingen:
Als er geen stroomafname is, dan is de geďsoleerde rail en de kabel naar de
detectieprint vatbaar voor het oppikken van stoorspanningen. Aan de
printzijde worden deze stoorspanningen afgeleid naar de massa via een
weerstand van 10kOhm. Zeer krachtige stoorspanningen worden door de software
eruit gefilterd.
De digitale voeding voor verbruikers bestaat uit wisselende polariteit op de
aansluitklemmen naar de rails (het is deze wisselende polariteit die de
digitale instructies bevatten) . De µC die we gebruiken kan enkel positieve
spanningen meten op zijn analoge ingang. Daarom zal de µC moeten weten
wanneer er een positieve polariteit staat op de rails. Deze wordt digitaal
ingelezen. Enkel als er een positief signaal op de rails staat wordt er
spanning gemeten. Sommige stoorspanningen worden door de digitale voeding
zelf opgewekt. Een stroomvoerende draad kan bij snelle polariteitwissel
(digitaal signaal van + naar - en omgekeerd) via elektro- magnetische
werking een spanning opwekken op een aanliggende draad. Nu zal de software
nooit een spanningsmeting uitvoeren tijdens dit moment. De software wacht
even tot het digitaal signaal al even geen polariteitwissel heeft ondergaan.
Het gaat wel over µs...
Slecht wielcontact, of slecht slepercontact, kan er voor zorgen dat er net
geen spanningsval gemeten wordt over de diode. Om dit soort fouten op te
vangen worden er heel veel analoge metingen uitgevoerd op zeer korte tijd.
De analoge meting met een µC kan zeer snel uitgevoerd worden, weliswaar ten
koste van de juistheid, maar dit is hier niet van belang of er nu 0,62V of
0,63 V over een diode staat. Alle metingen boven 0,5V worden aanzien als een
diode in geleiding en dus stroomdetectie.
Uit softwarematige analyse uit zeer veel metingen (zie ook massadetectie met
µC) kan de µC besluiten of er wel een terechte stroomdetectie is, en/of er
niet te veel stoorsignalen op de ingang aanwezig zijn.
Minimum en maximum stroom detectiegrens:
De minimumstroom detectiegrens: Deze is proefondervindelijk vastgesteld door
weerstanden over de rails te plaatsen en zo te kijken bij welke weerstand er
geen detectie meer was. Boven 150kOhm was er geen detectie meer. De testen
zijn uitgevoerd met een digitaal signaal met pulsen van -18V en +18V (MS2),
dit geeft een minimum detectiestroom van 120µA.
De maximum detectiestroom is vastgelegd door de gebruikte dioden. Bij de
1N4001 is deze stroom 1A. Andere typen Si-dioden kunnen de maximum
detectiestroom beďnvloeden.
Bij gebruik van Germanium of Schottky diode kan de spanningsval veel lager
zijn. Hiervoor moet in het assembler program constante ‘DREMPELSPANNING’
aangepast worden. Waarde in te vullen in mV.
Het principe van metingen met een µC wordt ook deels
hier uitgelegd.
Praktische uitwerking op print:
Het is mogelijk deze schakeling onder te brengen op een strokenprint, maar
dan moet je het zelf praktisch uitwerken. Eenvoudiger was voor mij deze
schakeling uit te tekenen voor een enkelzijdige PCB. De afmetingen van het
ontwerp passen dan nog op 1/3 van een Euroformaat PCB. (Euroformaat= 16 op
10cm)
Op dit
filmpje kan je de
schakeling in testopstelling zien. Hier wordt gebruik gemaakt van de
S88 Master (rechts) om de S88 bus signalen te
genereren. Het is met Marklin C-rails, en het is op de middengeleider waar
de stroom op gemeten wordt. De baan is ingedeeld in secties, en elk sectie
wordt terug gemeld. (het is maar een testopstelling waar ik de software en
hardware uitvoerig kon testen en indien nodig verbeteren) De functie van de
LED's op de terugmeldprint wordt hieronder uitgelegd.
Extra’s:
Er zitten in de software en hardware enkele extra’s in. Er waren nog 4 in-
uitgangen over. Met 4 weerstandjes en 4 LED’s kan je een toestand van de
bezetmelders, digitaal signaal en S88 bus weergeven. Deze hoeven niet op de
PCB aangebracht te worden, maar kan toch soms handig zijn. (zie rode
omcirkeling onderstaande schema)
Gele LED3 (zie ook filmpje) geeft de goede werking van de S88 bus weer.
Zonder goede werking van de S88 bus is er geen goede terugmelding. De
signalen die gevolgd worden zijn de CLOCK en de LATCH (geen RESET is niet
nodig bij terugmelders met µC) Ontbreekt er een van die signalen, dan zal de
LED uitgaan. In principe wordt ook de massa en de +5V van de S88 bus
gecontroleerd, immers zonder deze kan de LED nooit branden ;)
Gele LED4 geeft aan dat er een digitaal signaal vanuit de centrale aanwezig
is. Ook dit signaal moet aanwezig zijn, tenminste het positieve deel, om een
eventuele stroomdetectie te kunnen detecteren.
Groene LED1 geeft weer dat er een terechte stroomdetectie inkomt. Na één
seconde gaat de LED wel uit, ook al is de stroomdetectie nog aanwezig. Dit
is zo uitgevoerd omdat er natuurlijk ook nog andere stroomdetecties kunnen
opkomen.
Rode LED2 is net het tegenovergestelde van LED1, deze geeft gedurende 1s aan
dat er een stroomdetectie is verdwenen.
LED1 en LED2 zijn handig om een
stroomdetectie te testen zonder centrale, je moet dan wel massa en 5V
voorzien.

Hieronder zie je de
plaats van de componenten op het PCB:

Hieronder zie je de
componenten met het spiegelbeeld van de koperzijde.

Het
PCB in
PDF formaat. (versie kan nog iets wijzigen!)
Foto's, meer uitleg en ASM code volgen nog.
Kostprijs schakeling : (Conrad anno 2014)
Dioden 1N4001: 32 stuks (koop ze per 100!) 0,04 x 32 = 1,28€ (162213-89)
(D1-D32)
IC voet: 28pin 0,41€ (183812-89)
IC PIC 16F1516 2,01€ (651584-89)
Rnetwerk 10k 2 x 0,39 = 0,78€ (414310-89) (RN1-RN2)
R1k 16 x 0.027 = 0,432€ (koop ze per 100!) (404047-89) (R1-R16)
R100k 0,04€ (R17)
Condensator 0,1µF 0,22€ (530037-89) (C1)
Schroefconnectors 6x3pinnen = 0,25 x 6 = 1,5€ (731891-89)
(X1-X2)
Male connector 2 x 6 pinnen 0,13€ (741119-89) (SV1-SV2)
Printplaat 1/3 europrint 0,927€ (525080-89)
7,73€ totaal
Extra's: 4 LED's en 4
weerstanden van 330 Ohm (R19-R22)
|