zondag 28 juli 2024

SchakelBord (6)

 Na het programmeren van de functie voor wisselstraten is het kunnen versturen van CV commands de laatste grote functie van SchakelBord. Dit werkt nu ook. 

SchakelBord heeft naast de in-bedrijf mode, waarbij de 64 drukknoppen of schakelaars, accessoires als wissels omschakelen of wisselstraten instellen, een mode voor het instellen van de werking van de knoppen in een knopset en een mode voor het instellen van meer algemene zaken. In de laatste zit dan een venster voor het creƫren en instellen van wisselstraten, een venster voor het samenstellen en versturen van CV commands, een venster voor het instellen van diverse en een venster waarmee de module kan worden terug gebracht in de begin instellingen.

Het kunnen versturen van CV commands heeft weliswaar niks van doen met de hoofdfunctie van SchakelBord, een bedienpaneel, maar maakt project SchakelBord een heel handig veelzijdig hulpmiddel voor experimenten en allerlei bouwprojecten. Benodigde DCC commands voor bediening van een (zelfbouw)project kunnen op de werkbank door SchakelBord worden gegeven.

SchakelBord doet niet aan terugmelden of uitlezen van de aangesloten decoders. De gestuurde CV commands overschrijven altijd de geadresseerde CV van de decoder. Vindt je het belangrijk om te weten hoe je de CV’s hebt aangepast, dan moet je daar een administratie voor maken. 

In het CV venster kies je loc of accessoire  decoder. Stel het adres in. Kies welke CV. Stel de de nieuwe waarde in en verstuur het command.  Decoder zal dan de CV instellen. Er is geen weg terug.

Decoders kunnen in de meeste gevallen terug worden gezet in hun begininstellingen door het versturen van een reset command: CV8 met waarde 8.

SchakelBord kent ook een kunstje voor wanneer je ook het adres van de loc niet meer weet. Met SchakelBord kun je een command als broadcast versturen. Ongeacht het adres zal een decoder deze command uitvoeren. Zo kun je het adres instellen met CV 1 of de decoder resetten met CV 8. Doe dit nooit op de baan met vele locs en accessoire decoders want die staan dan allemaal op hetzelfde adres. Gebruik een rollenbank of programmeerspoortje.

Schakelbord is dus een veelzijdige module. Te gebruiken om een bedienpaneel te maken met drukknoppen en of schakelaars. Met multikleuren leds of aparte rode en groene leds om de standen van de wissels en wisselstraten te laten zien. 

SchakelBord kun je nesten, op de DCC  ingang kun je nog een SchakelBord aansluiten, voor nogmaals een 64 drukknoppen, of een andere centrale.  De DCC signalen worden met elkaar gemengd. Twee of meerdere DCC 'stroomkringen' een voor de rails met het rollend materiaal en een aparte stroomkring voor de stationaire decoders. Werkt ook met een treinenprogramma als Koploper of Itrain. Itrain kan je wissels automatisch zetten en op je met SchakelBord zelfgemaakte paneel kan dit gelijktijdig ook. 

Met wisselstraten is onder meer een schaduwstation te besturen. Een druk op een knop zet alle wissels om een trein naar het gewenste spoor te sturen.

Met het CV venster zijn eenvoudig en snel instellingen van loc- of wisseldecoders aan te passen. 

Wordt vervolgt.....



dinsdag 23 juli 2024

Schakelbord (5)

 De wisselstraten werken. Een set van 4 knoppen kan worden ingesteld als wisselstraatset. De 4 knoppen activeren 4 verschillende wisselstraten. Iedere wisselstraat heeft nu 8 acties , een actie zet als voorbeeld een wissel in een bepaalde stand. De indicatie, de smartled voor deze knop, brand geel als de knop een wisselstraat bedient en wordt paars als de wisselstraat wordt geactiveerd. Daar is aan te zien dat de wisselstraat is gezet en dat de trein erover kan gaan. Zet je nu een van de wissels apart om, dan wordt de indicatie voor de wisselstraat weer geel.

Diverse zaken moeten nog worden gefinetuned maar dat komt later, eerst alle hoofdzaken. 

Volgende hoofdstuk is de CV aansturen.

Het plan is om SchakelBord ook als een enorm basic CV programmer te kunnen inzetten. Dan zonder alle fancie opties die je op centrales tegenkomt, geen handshakes of terugmelding voor het uitlezen van decoders. Alleen basis. Instellen: is het een multifunctie decoder, zoals in een loc?  Of een accessoire decoder. Dan het adres, dan het CV nummer en de nieuwe waarde en een knop voor verzenden. SchakelBord stelt dan een DCC command samen en stuurt dat uit. Spijkerhard instellen van een CV. Top voor een ieder die precies weet wat hij wil. Aan te raden voor starters je eerst even in te lezen in de materie voordat je gaat experimenteren.

Wordt vervolgt...



woensdag 17 juli 2024

Schakelbord (4)

Signalering met gebruik van de smartleds werkt perfect. Volgende stap zijn de wisselstraten. 

Gewoon zet een knopactie 1 wissel of andere accessoire.  Met een wisselstraat zet je meerdere wissels tegelijk. Wisselstraten kun je gebruiken bij stations om alle wissels te zetten nodig om een trein van een spoor naar een specifiek perron te laten gaan. Voor een schaduwstation kunnen met een druk op een knop alle wissels worden gezet om een trein naar een vrij opstelspoor te sturen. Zeker zijn er nog veel meer toepassingen te bedenken.

Ook instellen van de wisselstraten gaat in een set van 4 knoppen. SchakelBord heeft aansluitingen voor 64 knoppen, schakelaars, opgedeeld in 16 sets van 4 knoppen. Een (knoppen)set schakelt als voorbeeld de 4 kanalen, channels van een decoder. Maar door een wisselstraat op een set in te stellen schakelen de 4 knoppen in de set dan 4 wisselstraten. Iedere wisselstraat krijgt een aantal acties. Een actie is het zetten van een wissel of andere accessoire in een vooraf ingestelde stand.

Hoeveel acties per wisselstraat en hoeveel wisselstraatsets SchakelBord straks heeft weet ik nog niet omdat dat afhangt hoeveel geheugen er overblijft.

Het ontwerp moet rekening houden met meerdere zaken.

Timing. Stel een wisselstraat heeft 8 acties die alle 8 een electro-magnetische wissel aansturen. De acties moeten dan 1 voor 1 met minimaal de pulsduur van 1 wissel ertussen worden gezet. 250ms is een bekende  waarde voor zo een puls. Doen we dit niet dan worden de wissels alle 8 tegelijk bekrachtigd en dat gaat niet. De voeding van de wissels kan dit niet aan. Dus een kwart seconde tussen de acties. Keer aantal acties duurt dan het omleggen van de hele wisselstraat 2 seconden. 

Een accessoire heeft een DCC adres en kan continue aangezet worden of met een puls. Verder kan het DCC command omgedraaid worden voor wanneer de aanduiding niet overeenkomt met de werkelijke stand. Immers bij een wissel aangestuurd door een servo maakt het uit aan welke kant van de wissel de servo zit. 

Meerdere gegevens zijn al ingesteld voor iedere accessoire bij de gewone knop bediening, en worden door de wisselstraten ook gebruikt.  Andere al ingestelde waardes bij de accoires zoals de knopfunctie en continue of moment schakeling, worden genegeerd. Dit kan ongewenste effecten hebben. 

Een knop ingesteld op een wisselstraat krijg in de smartled een eigen kleur, we hebben 16.581.375 kleuren dus keuze genoeg. Is de wisselstraat gezet, dat geeft dan weer een andere kleur. Maar wanneer een wissel opgenomen in een straat met zijn eigen knop in een andere stand wordt gezet, dan moet de indicatie van de knop  van de wisselstraat weer terug naar uit.

Best nog wel een uitdaging.

Wordt vervolgt......


woensdag 10 juli 2024

Schakelbord (3)

 In de vorige post ging het over een DCCdecoder opgenomen in het project. Dat werkt nu. Alle 3 bytes DCC commands ontvangen door deze decoder van een andere centrale worden samengevoegd met de commands die in SchakelBord zelf worden opgewekt door het schakelen van de 64 aan te sluiten  accessoires. 

Deze 3 bytes commands zijn alle 2048 mogelijke aansturingen voor accessoires. Maar ook de aansturing voor 127 verschillende locs van rijopdrachten en het schakelen van de eerste 12 functies in de loc. Anders gezegd, de commands bedoeld voor locs met een 7 bits adres worden ook doorgeven.

Dit geeft mogelijkheden waar ik bij start van het project niet eens aan had gedacht, SchakelBord is ook als een booster te gebruiken. Met die verstande dat het alleen werkt met kort adres (7bits) locs. In uitgebreidere centrales als Ecos of CS3 kunnen ook locs met lang  adres (15bits) decoders worden gebruikt, dus 9999 verschillende adressen. Zoveel locs staan natuurlijk zelden samen op 1 modelbaan.

MFX en vergelijkbare terug- en aanmeld systemen worden door SchakelBord niet ondersteund. Ook CV boodschappen ontvangen in de decoder worden niet doorgestuurd naar de DCC uitgang. Wel zijn er plannen als er nog wat geheugen over is om SchakelBord ook vergaande functies te geven als CV programmer.

Punt van aandacht is nog wel een dubbele aansturing van een accessoire door SchakelBord en door een extern aangesloten centrale. De extern aangesloten centrale kan nooit weten wanneer SchakelBord deze accessoire omzet, dus de externe centrale toont dan de verkeerde stand van dit accessoire. Andersom zou in theorie, door het door de externe centrale gestuurde signaal te decoderen, SchakelBord dit wel kunnen weten. Maar SchakelBord heeft meerdere methoden om de aangesloten schakelaars te interpreteren. En dat kan de centrale ook niet weten. Beste om er gewoon niks mee te doen. Als gebruiker moet je je gewoon realiseren, dat als je een accessoire vanuit een externe centrale omzet, de aanduiding op SchakelBord niet meer klopt en andersom.

Volgende hoofstuk in het project is de signalering. Natuurlijk kun je voor de signalering aparte decoders op het DCC signaal zetten. 

Maar SchakelBord krijgt ook een aansluiting voor smartleds van het type WS2811. Deze chips zijn er in meerdere uitvoeringen. Losse chips voor drie leds rood, groen en blauw. Of meerdere versies 3-kleuren leds waar de chip ook bij is ingebouwd. Deze smartleds zijn dan weer los te verkrijgen of als ledstrip of als slinger van leds, vergelijkbaar met een kerstboomverlichting. Alle 64 mogelijk accessoires krijgen een pixel.(zo worden die setjes van drie rood, groen en blauw in dat wereldje genoemd) Het kleurenschema moet ik nog bedenken.

Nu volgt een technisch verhaal: Voor Arduino zijn er meerdere libraries te vinden om die smartleds aan te sturen. Bekendste is FastLed, een aanrader voor een ieder die met die World Semi chips (WS=worldsemi) wil experimenteren. Aardige lui trouwens van World Semi voor mijn eerste project 'LicHt' waar ik deze chips in gebruik, hebben ze mij  veel ondersteuning en uitleg gegeven hoe dit te doen, maar dit terzijde.

Die libraries als bv. FastLed hebben allen 1 probleem. Voor iedere pixel dient er een geheugen plekje te zijn voor drie bytes die de waarde van lichtsterkte voor de drie leds in een pixel bevat. Voor 64 pixels zijn dat dus 192 bytes. Zoveel ruimte is er dus niet meer in het geheugen van de Arduino over met SchakelBord. Nodig is dus dat de lichtsterkte per led in de pixel berekend moet worden uit de gegevens die al bekend zijn, zoals de stand van het accessoire. Maar dat kan Fastled niet. Een zelf te maken smartled encoder is dus nodig. 

De datasheet van de WS2811 leert dat er een pulstrein nodig is van ongeveer een 800khz.  Een serieel gestuurt bit  is opgedeeld in een aan-tijd direct gevolgd door een uit-tijd. De totale tijdsduur van een bit is ongeveer constant. Is het deel aan-tijd 2x langer als het deel uit-tijd dan interpreteert de WS2811 dit als een 1. Is het deel uit-tijd twee keer het deel aan-tijd dan is het een nul. Een pixel krijgt 24bits. Een pixel leest 24 bits en stuurt de rest van het signaal door naar de volgende pixel. Zonder die eerste 24bits dus.

Na experimenten is gebleken dat die chips het niet zo nauw nemen met die pulsduur. Wat belangrijk is, is die verdeling van die twee helften in tijdsduur die het onderscheid maken tussen een 1 of een 0.

Praktisch heb ik het opgelost door voor een 0 bit een minimale pulsduur mogelijk met een arduino te maken. Dat is twee keer een PINB |=(1<<0). Pin 8 van de arduino heb ik gebruikt voor de smartleds. En direct daarachter de port hard naar laag met PORTB &=~(1<<0). Hierna moet een volgend bit worden bepaald, uitvoering van die logica duurt lang genoeg om dit als een 0 bit te kunnen gebruiken.

Voor een 1 bit ligt het lastiger. Na het zetten van de pin moet deze minstens 2x langer hoog blijven als het tweede laag deel inclusief weer de tijd voor het bepalen van het volgend bit. Dit gedaan met een delay bestaande uit een aantal direct door de compiler in te voegen assembler nop instructies.

En zo waar dit werkt nu perfect.....

Maar nu  nog implementeren in de rest van het SchakelBord project......

Wordt vervolgt...





zaterdag 6 juli 2024

Schakelbord (2)

Volop bezig met de nieuwe versie van SchakelBord.  Dit was mijn tweede project, toen bedoelt voor analoge modelbanen om toch digitale componenten te kunnen gaan gebruiken. Als voorbeeld servo's die de wissels omleggen of mijn project WisselAandrijving hiervoor. SchakelBord is en was dus een DCC centrale voor, wat het DCC protocol noemt, accessories. Accessoires als wissels, lampjes en alles wat geschakeld wordt en niet op de rails rijdt.

Een zelf te maken bedienpaneel met schakelaars en controle lampjes sluit je aan op SchakelBord en deze maakt er een tweedraads DCC signaal van waarmee de afzonderlijke decoders kunnen worden geschakeld. 

De eerste versie van SchakelBord werkt uitstekend en gebruik ik zelf nog dagelijks voor mijn experimenten, maar is ingewikkeld en biedt behalve die basisfuncties weinig extra mogelijkheden.  

Versie 2 van SchakelBord wordt simpel in het gebruik en krijgt een paar unieke extra functies. 

Zoals veel van mijn projecten heb ik weer gekozen voor een standaard Arduino uno met daarop een zelf ontwikkelde shield met aansluitingen, een OLED display en alle andere benodigde hardware. 

8 drukknoppen waarmee direct met de module 8 accessoires kunnen worden geschakeld.

4 aansluitingen voor een 4x4 drukknoppen 'keypad'. Deze zijn in meerdere uitvoeringen te koop maar je kunt natuurlijk ook zelf iets hiervoor maken. In totaal dus 4x4x4=64 mogelijke schakelaars.

Het display maakt een GUI (=grafische user interface) toont de stand van geschakelde accessoires en voor het instellen van de functies.

Net als bij decoders zijn de schakelaars gegroepeerd in groepjes van 4. Instellingen van zo een groep met schakelaars gelden dus voor alle 4 de schakelaars. Ook afgekeken van de DCC decoders, het DCC adres stel je in per groep op een decoder adres. Dit maakt instellen veel eenvoudiger als bij versie 1 waarbij iedere schakelaar apart moest worden ingesteld. Drukknoppen of tuimel(wissel)schakelaars kunnen worden gebruikt.

Je kunt beide poorten in een channel van de decoder omschakelen, zoals bij een wissel, maar ook kun je de poorten van een channel apart schakelen zodat je 8 aan en uit schakelingen kan maken met een standaard decoder. Het schakelen kan dan continue of met een instelbare puls, standaard op 250ms. De geschakelde poort in een channel wordt dan na afloop van de pulsduur met een extra command weer uitgeschakeld. Belangrijk bij schakelen van electro-magnetische wisselaandrijvingen.

Het bovenstaande samen met nog wat meer functies, waar ik in handleiding straks uitgebreid over zal uitwijden, werkt momenteel al feilloos in het prototype.

Bezig momenteel met een DCC decoder. 

SchakelBord is een encoder (iets wat iets codeert), in het modelspoor jargon noemen we dit een centrale. De decoder (iets wat iets decodeert) in SchakelBord maakt het straks mogelijk om een DCC signaal aan te sluiten en dit te mengen met het signaal van SchakelBord. Een andere centrale kun je aansluiten op SchakelBord, een accessoire kun je dan schakelen vanuit deze centrale en vanuit SchakelBord. Dit geeft nieuwe mogelijkheden in combinaties van bedienpanelen, centrales en treinenprogrammaas als koploper en Itrain. Digitale modelbanen kunnen dan met twee gescheiden DCC systemen  werken, eentje voor alles wat op de rails staat en eentje voor alle vaste accessoires.

Hiervoor ben ik zelf een decoder aan het programmeren met een super smalle footprint. De, overigens iedereen aan te raden gratis perfecte decoder van de NMRA, neemt veel te veel resources van de Arduino in beslag om in combinatie met al het andere in de arduino gelijktijdig te kunnen draaien. Maar de decoder in SchakelBord hoeft alleen maar 3 bytes commands voor accessoires te kunnen decoderen en al die andere zaken die de NMRA decoder perfect kan zijn voor dit project niet nodig. 

Verder zal SchakelBord functies krijgen voor het schakelen van wisselstraten en andere vormen van sequenties van gebeurtenissen. En dan moet ik nog iets verzinnen voor controle lampjes die de stand van de accessoires op het bedienpaneel moeten verklappen. 

Wordt vervolgd...



 


SchakelBord (7)

De tweede versie van SchakelBord is klaar. Deze is vele keren eenvoudiger dan de eerste versie van enkele jaren terug en met veel meer funct...