Principe schema van de twee SchakelBord printen kun je vinden als PDF onder downloads.
Arduino sketch van Schakelbord is ook te vinden onder downloads.
Het software-project is ook te volgen op mijn GITHUB account >>
Tips, hulp maar ook vragen zijn welkom.
Het ontstaan van het project SchakelBord is hier als een soort tijdlijn te volgen.
Nu het project klaar is niet meer actueel, maar geeft wel een beeld hoe ik dit heb gemaakt.
In het project SchakelBord kunnen we een paar onderdelen onderscheiden.
We hebben een inlees deel nodig wat de schakelaars uitleest, een deel wat controle leds laat branden en een deel wat een DCC signaal maakt wat dan de decoders op de baan kan aansturen.
Ik gebruik als microcontroller voorlopig even een Arduino UNO compatibel, gewoon omdat ik die heb liggen.
DCC command station
Als uitgangs basis heb ik de de DCC standaards genomen van de NMRA. Dit is een USA modelspoorclub die het protocol voor DCC heeft beschreven. Drie van de normbladen heb ik gebruikt:
9.1_electrical_standards_2006.pdf
S-9.2 DCC Communications Standard - (2004)
S-9.2.1 DCC Extended Packet Formats - (2012)
Eerst maar het elektrische deel. Een H-brug, model L293N, aangestuurd door een Arduino UNO verzorgt de benodigde wisselspanning. Zie het schema. (volgt..)
Ondanks dat er geen locomotieven worden aangestuurd is de totale belasting van een x-aantal decoders niet te verwaarlozen. Per decoder is dat toch al minimaal 20mA. Voor banen met 10 decoders dus een 200mA, wat ook nog eens continue wordt gevraagd.
De H-brug moet dus energie kunnen leveren. In dit prototype 1A bij 12Vac.
Gevolg hiervan is dat een kortsluiting beveiliging van het DCC stuursignaal essentieel is om alles heel te houden bij kortsluiting. Zoals bekend bij commerciële commando stations.
Opgelost door het uitgaande DCC-signaal middels 2 dioden gelijk te richten en deze spanning terug te voeren naar de Arduino. De Arduino test doorlopend of er een spanning op de DCC uitgang staat. Is die er niet dan is er sprake van kortsluiting en schakelt de Arduino de DCC sturing uit. (zie schema, en DCC schets...volgt)
{Opmerking 9feb2017}
Dus niet, bovenstaande 'kortsluitbeveiliging' werkt niet stabiel genoeg. Ik ga op zoek naar een andere oplossing.
Timing van de Bits & bytes
Uit het normblad 'electrical standard' leren we dat een 1-bit ongeveer een 58 microseconden moet duren, en dat dit best wel een beetje kritisch is, mag niet al te veel afwijken. De Arduino loopt op een kloksnelheid van 16Mhz. 1 klokpuls duurt dus 1/16 microseconde. Dus kunnen er niet meer dan 16*58=928 klok pulsen verlopen gedurende een 1-bit. Dat is best wel krap. De Arduino zal best wel een beetje overhead hebben dus moet het programma bij het maken van een 1-bit zo mager als mogelijk zijn, eigenlijk alleen maar die 2x58 microseconden aftellen.
Gelukkig is het zo dat DCC protocol helemaal geen eisen aan de duur van het 0-bit stelt, behalve dan dat het niet te kort mag zijn natuurlijk. Dus moeten alle andere programma delen van deze sketch worden afgewerkt tijdens het maken van een 0-bit. Of in periodes waarin er geen DCC-signalen verstuurd hoeven te worden.
Verder studerend op het protocol leren we dat alle bytes telkens worden gescheiden door een 0-bit, tijdens dit 0-bit, en eventuele 0-bits die in een adress, data of error byte zitten, zullen dus alle andere programmadelen van de sketch moeten worden afgehandeld.... uitdaging hoor.
Na een avondje rekenen en meten denk ik dat ik de basis voor voor dit gedeelte wel voor elkaar heb, helaas pas met zekerheid als de controller ook echt werkt. Wordt vervolgt.....
9feb2017- vervolg Timing en counters
Nu ja, dat avondje rekenen is dus een 3 weken geworden.
Bovenstaande is inhoudelijk misschien juist maar een werkend DCC basis station controller gaat het zo nooit worden. Timing is cruciaal bij het sturen van een DCC signaal. Deze oplossing is veel te veel oNgeveer.
Dus maar een paar weken gestudeerd hoe de timing dan wel correct te krijgen.
De uiteindelijke oplossing zat erin door de timing kritische delen van het programma in een lagere programmeer taal te schrijven. Hiervoor ben ik gaan werken met Visual Studio ipv met de Arduino IDE.
Met C (dus geen C++ wat de arduino IDE gebruikt) kunnen de verschillende registers in de microcontroller
ATMEGA328P-PU ( die grote chip die op de Arduino zit ) direct worden gelezen en geschreven waardoor de noodzakelijke functies voor updaten van de timer en counter registers van de microcontroller vele malen sneller worden uitgevoerd, volgens mijn 'On-Line' cursus die ik heb gevolgd ( Van dr Robert Paz check it out...) tot wel 200x sneller!
Maar goed dat was wel ff een dingetje om te leren, maar zeker de moeite waard, en uiteindelijk is me het daardoor gelukt een 'geldig' DCC signaal te versturen. Nu ga ik 'even' (dat zal ook wel weer weken worden....) de logica voor uitlezing en opbouw van de DCC opdrachten maken. Gelukkig dit gaat op een behapbare, en voor ons 'mensen' nog te bevatten tijdschaal ... wordt vervolgt...
18 feb 2017 DCCtrain werkt.
Kortsluit beveiliging werkend gemaakt. Hiervoor gebruik gemaakt van een 7805. zie schema in het werkblad. Basis gelegd voor de input. Doel is om een 100 tal schakelaars en 200 tal leds minimaal met dit project te kunnen verwerken. een timer in de arduino gebruikt die periodiek alle schakelaars afgaat. Bouncing switches zijn door deze werkwijze nagenoeg geëlimineerd. wordt vervolgt.....
27 feb 2017 Eerste commando verzonden
Nu het bericht van 18 februari was iets te optimistisch, wat werkte was de juiste timing. Toch nog wel even bezig geweest, maar nu verzend de test opstelling commando's die de wisselmotoren om zetten.
Check de video: https://www.youtube.com/watch?v=aO3nBFJrY_w excuses voor de matige video kwaliteit batterij van de HD camera is ff leeg...
16 juni 2017
Een dingetje met mijn idee om projecten voor modelspoorbanen te maken is dat er heel veel verschillende kleine onderdeeltjes voor nodig zijn.
Kosten hiervan valt wel mee, maar het word een steeds groter probleem wanneer ik als voorbeeld een ictje model x nodig heb om dan dat dingetje ook te vinden. Overal in bakjes en vakjes zakjes en doosjes ligt alles overal en nergens wat resulteert in steeds meer frustrerende zoekacties naar dit ictje X.
Oplossing is een administratie. Vandaar deze ´cap´ in de ontwikkeling van dit project omdat ik me heb moeten inlezen en opnieuw leren, (vroeger heb ik dit ook al eens gedaan voor mijn werkgever) hoe een administratief programma te maken in VB met Sql server als onderliggende database.
Maar goed dat is nu klaar alle onderdeeltjes netjes geadministreerd, in de database opgenomen en opgeborgen en kunnen we weer verder met dit project...
24 juni 2017 Begin schakelaars, en terugkoppeling
De schakeling stuurt nu een geldig DCC commando.
De bedoeling is dat we straks heel veel schakelaars kunnen aanmaken, van 1 tot 128. (opmerking augustus 2017) waarschijnlijk max 256 met 4x schakelbord pcb.
Verder is het leuk als er bij de schakelaar een ledje kan branden die de stand van deze accessoire, wissel aangeeft.
En als volgend punt moeten we de schakelaars kunnen programmeren. Hiervoor zal een of ander vorm van terug koppeling moeten worden gemaakt. Zodat we voor alle 128 schakelaars het gekozen DCC adres kunnen instellen, of het een enkel (een lampje) of een dubbel accessoire (een wissel) betreft en of we in het geval van een dubbel accessoire we met 1 of 2 aparte schakelaars, drukknoppen willen bedienen. Zoals de meeste spoorders gewend zijn.
Best wel veel, daarbij moeten het allemaal zeer intuïtief en makkelijk werken. Ook nog....en het mag allemaal ook nog eens niks kosten....
Daarom dus een LCD display die dit verzorgt.
En dat allemaal in 1 Arduino.... uitdaging...
Begonnen met het uitbreiden van het aantal PINNEN van de Arduino.
Een schakeling verzonnen zodat het aantal pinnen theoretisch oneindig kan worden. Voorlopig maar een printje met 4 standaard schuifregisters geeft 32 xtra pins.
Foto toont de setup, op ports(1) staat een tellertje geprogrammeerd .
Te zien is dat met 3 pinnen van de Arduino nu 32 pinnen zijn gerealiseerd. Dit kunnen er veel en veel meer zijn, al getest met 800 poorten... geen probleem.
Op mijn github account kun je de vordering van het programma volgen. Als dit (eigenlijk best wel slim bedacht stukje programma, al zeg ik het zelf) je interesse heeft, is dat daar te vinden. (project LEDS).
wordt vervolgt.....
3juli2017 schakelaars toegevoegd
Aan de outputs toegevoegd de inputs van 64 schakelaars.
Werkt. Ondertussen is de schakeling op het breadboard onbeheersbaar geworden. Veel te veel aansluitingen die allemaal het af en toe niet doen. Om nu al het PCB te ontwerpen en laten maken is te vroeg. Dus de schakeling opgebouwd op een stukje experimenteer print.
Nu eerst het programma uitbreiden met een 'opstart-doen-alle-ledjes-het wel-test. Ook nodig om straks de gebruiker de zekerheid te geven dat het aangeschakelde SchakelBord printje het ook werkelijk doet.
Wordt vervolgt....
9juli2017
De schakelingen van het DCC command deel en het switches en leds deel samengevoegd op een Arduino shield.
Breadboards zijn fantastisch voor kleine schakelingen maar dit project wordt veel te groot daarvoor. Schakeling is nu veel stabieler. Nu de beide delen van het programma die (gedeeltelijk) klaar zijn samenvoegen tot 1 programma. Spannend want ze mogen elkaar qua timing niet in de weg zitten.
Voorlopig verder werken aan SchakelBord met maar 1 aangesloten switches&leds board (SB-Controls)
Wordt vervolgt.....
4aug2017, hardware prototype klaar
Tijdje niks op de site gezet, maar wel intensief bezig met dit project.
Derde grote proces, na de DCC command en schakelaar uitlezing en indicator leds is de humane feedback en de programmering.
Daartoe een nieuw `lcd PCB` aan het project toegevoegd, bestaat dus nu uit 3 PCB´s: shield, 1 of meerdere Schakelbord PCB's en een lcd bord voor het programmeren.
Op het lcd pcb een M1602 lcd (lekker goedkoop en betrouwbaar) een encoder en een paar schakelaars.
Met de schakelaars en encoder kun je nu het Schakelbord gaan programmeren, dus wat is de functie van de verschillende schakelaars. De lcd verteld je daarbij wat je aan het doen bent.
Alle pcb's worden met standaard cat kabels met elkaar verbonden, dus geen nood....in de praktijk klik je de printjes zo aan elkaar door.
Ook het lcd pcb werkt, de lcd zelf en de schakelaars. Nu ga ik werken aan het programmeer deel.
Zal ook wel een 'dingetje' worden want zeer gedetailleerde kennis van hoe dit deel van het DCC protocol in elkaar steekt is daarbij een vereiste.
Of ik zo ver ga dat het 'Schakelbord' ook als een programmer voor je decoders kan worden gebruikt? Dus de CV's programmeren... Wie weet in theorie zou het met deze hardware moeten kunnen ... maar is misschien te hoog gegrepen voor een autodidact als ik....
Waarschijnlijk maak ik voor de geïnteresseerde lezer hierover een apart deel op de website. Met een uitleg hoe het werkt in mijn eigen woorden.
Het NMRA protocol blad is natuurlijk helemaal correct maar..... best wel eens lastig te vatten....
wordt vervolgt....
23aug2017 SchakelBord kan CV's programmeren.
Het kunnen instellen van je decoder direct met SchakelBord is natuurlijk een ontzettend bruikbare optie. Nu is een programmer of een (duur) DCC commando station niet meer nodig om bv. Servo's in te stellen, of je ESU switchpilot decoder in te stellen om leds aan te sturen.
Was eigenlijk een relatief eenvoudige extra optie om te maken, na het verzenden van het DCC adres nog een tweetal extra bytes zenden die het adres en waarde van het in te stellen CV bevatten, dat was al....
wordt vervolgt....
7 sept 2017 SchakelBord V1-01 klaar...
Eerste versie van de scetch, het programma, schakelBord V1-01 is klaar.
Hier kun je de definitieve sketch met alle commentaar en hulp routines downloaden, meest bruikbaar voor als je delen ervan wit gaan gebruiken. BV. alleen DCC command deel.
Versie 1-01 (met commentaar)
Deze bladzijde ga ik verder niet aan werken. Ik laat deze bladzijde wel op de site staan, misschien vinden de lezers het leuk te lezen hoe zo een best wel groot project tot stand kan komen.
Project gaat nu verder:
Footprint van sketch aanpassen, en verkleinen. Verbetert en stabiliseert het programma, maar maakt het veel moeilijker leesbaar als je de werking wilt doorgronden.
documentatie van sketch bijwerken. (website)
Begin maken aan de handleiding
Definitief besluit nemen over de hardware uitvoering.
Ontwerpen PCB's
Maken en samenstellen van bouwpakket.
11 okt 2017
Schakelbord is met eerste deelname aan modelspoorbeurs mee geweest.
Goede reacties erop ontvangen.
Maar gebleken is dat er iets niet goed gaat als de print wat langer aan staat.
Een van de IC's die de schakelaar matrix uitleest gaat na een uurtje defect.
De volgende aanpassingen gemaakt:
Pull down weerstand op de input van dit IC verlaagt naar 8x1K, hardere pull down gemaakt. Theorie erachter is dat een Cmos ingang een maximum stelt aan de schakeltijd, transitietijd. Tijdens transitie is er een ' schemergebied' tussen de 1,8 en 3V ongeveer. waar feitelijk een interne sluiting is in de chip. Deze transitie tijd kan ontstaan door een te hoge pull down weerstand in combi met een capacitaire waarde van de snoertjes en componenten.
Alleen voor het ' scanproces' de snelheid gehalveerd. Nadeel is dat schakelaars wat langzamer reageren, voordeel is dat de snelheid dus het aantal transities per seconde wordt gehalveerd. Theorie is dat daarmee het vermogen opname in die kritieke chip ook wordt gehalveerd, en blijft hij binnen de specificaties.
//**slows scanning process factor 2
IORegist ^= 1 << 7;
if (bitRead(IORegist,7)==true)SwitchLoop();
Helaas is dit pas na enkele ' duur' testen te bewijzen, dus stel ik productie van de PCB's een maand uit.
20-november 2017
Gebleken is dat schakelaars richtinggevoelig moeten worden gemaakt met een kleine diode gewoon in serie. Het denderen van de schakelaars veroorzaakt een hele rits transities op de PISO schuifregister wat deze te veel belast.
De diode voorkomt dit.
Systeem is nu volledig stabiel, printen ondertussen besteld en SchakelBord is klaar voor distributie.