BeneluxSpoor.net forum
Vraag en antwoord => Digitaal => Topic gestart door: john26 op 02 February 2013, 11:07:52
-
Hallo,
Daar ik zelf decoders bouw naar diverse voorbeelden van internet is mijn interesse gewekt voor het zelf schijven van DDC programma's voor Microchip PIC processors. Zoektocht op internet levert vele voorbeelden op, echter deze zijn geschreven in de ontwikkelingstaal van Microchip. Ik heb een proefversie van Proton Pic basic van Crownhill waarmee ik aan de slag ben gegaan. Erg leuk om te doen! Nu wil ik graag voor een DDC decoder zelf een programma in Pic Basic schrijven maar mijn kennis schiet te kort. Dus de vraag: wie heeft in Proton Pic Basic zelf een soort gelijk prog. geschreven? Ik kom er niet mee verder.
Ik hoor jullie denken, waarom het wiel opnieuw uitvinden? Wil ik niet maar puur uit interesse heb ik mij hierin verdiept. Daarnaast is het erg leuk om zelf te doen. Kan iemand mijn een stukje verder helpen?
Bijvoorbaat dank en groeten
John
-
Goh, niemand? :o
-
Ik heb hier wel interesse in (alleen dan niet met Proton maar gewoon in C), alleen antwoorden heb ik helaas niet voor je :-\
Ik denk dat op BNLS alleen Karst weet hoe je een DCC signaal decodeert. In principe kan je dit ook online wel vinden, alleen dan moet je zelf nog uitdenken hoe je dat in je programmeertaal vertaald :)
Vriendelijke groet,
Benno
-
Hum... DDC is blijkbaar een eigen protocol? ;) DCC is bekender ;D Goed nu je vraag. Mogelijk kan deze site je wat verder helpen: Digital Playground (http://www.digitalplayground.be/) Hij doet veel zelf ontwikkelen.
Groeten Ronald.
-
Pic basic is denk ik niet echt een gangbare taal, zeker niet voor iets als dit. Ben zelf ook meer fan van C.
Ook is het begrijpen van DCC de hele kracht van je code. De rest is zo simpel als blink led zeg maar. Wil je er dus echt lol uit halen om iets zelf te bouwen zul je dus zelf aan de slag moeten gaan om DCC begrijpelijk te maken in pic basic. Alle gegevens over dcc zijn vrij beschikbaar. Doe maar eens een kleine zoektocht op het forum. (http://www.google.com/m?q=site:beneluxspoor.net%20dcc%20spec)
Timo
-
Dank voor jullie antwoorden! Ben wel consequent met mijn fout, DDC ipv DCC :P
Ga ermee aan de slag, bij eventueeel resultaat laat ik het weten.
Groeten John
-
Ik denk dat op BNLS alleen Karst weet hoe je een DCC signaal decodeert. In principe kan je dit ook online wel vinden, alleen dan moet je zelf nog uitdenken hoe je dat in je programmeertaal vertaald :)
Denkfoutje... ;D De personen die ik zo even kan bedenken is al 1 hand. ;)
Een goede start om DCC en de techniek erachter te doorgronden is: http://www.nmra.org/standards/DCC/ (http://www.nmra.org/standards/DCC/). Een jaar of 6 á 7 geleden was dit voor mij DE informatiebron bij het schrijven van wat spul in assembler en C voor AVRs.
Gr. Dave
-
@Dave,
Oeps :D
En ik had nog niet zo lang je geleden je website bekeken, dus ik kende er twee op dit forum :D
Ben benieuwd wie de andere 3 zijn trouwens ;)
Maar zou jij, of iemand anders in pseudo-code eens op willen schrijven hoe een functiedecoder werkt. Gewoon een stappen plan. Nog geen cv's aanpassen en dat soort dingen, maar gewoon de basis in Jip en Janneke taal :)
-
je kan ook de site http://www.opendcc.de/index_e.html (http://www.opendcc.de/index_e.html) bekijken.
Veel info over DCC
gr Hans
-
Een functiedecoder is een van de simpele divices dus zeker een aanrader om te beginnen.
Om een DCC signaal te decoderen en daar een aantal uitgangen mee aan te sturen zou ik het volgende doen:
- Synchroniseren (DCC is een asynchroon protocol dus eerst start zoeken)
- Adres vinden (en vergelijken met je ingestelde adres)
- Indien gelijk: data lezen.
- Data naar uitgangen.
Nu alleen nog de bits uit de informatie stroom halen.
Bits hebben twee verschillende lengtes. Kort is de 0 en lang is de 1.
Algemene methode:
- zoek naar een nul doorgang
- start timer
- zoek volgende nul doorgang
- bepaal stand timer en restart
- Als lengte kleiner dan x tellen dan een 0
(Overigens worden de waardes twee maal gevonden)
Voeg 0'n en 1'n tot een byte en bytes tot een boodschap.
Hierna de boodschap bekijken
Groet,
Gerard van der Sel.
PS.: de zesde ;D
-
Voor de echte basis: http://bahn-in-haan.de/_decoder.html (http://bahn-in-haan.de/_decoder.html)
groet,
Guus
-
Het is lastig om e.a. 'even' te verwoorden, maar de basis is vaak een interrupt gestuurde routine voor het decoderen van een digitaal ingangssignaal (in dit geval DCC). Die basis kan op verschillende manieren, ook afhankelijk van het gebruikte type/soort microcontroller.
Ik heb zoals vele anderen het DCC signaal op een interrupt pin zitten. Bij een rising edge komt er een interrupt en wordt o.a. de teller gestart, op een falling edge komt er wederom een interrupt en wordt deze timer weer gestopt. Als vervolgens de ontvangen puls voldoet aan de timing specs conform NMRA DCC wordt het ontvangen/herkende bitje aangeboden aan een DCC handler.
Deze DCC handler is niets meer dan een routine welke de DCC pakketjes verzamelt en verwerkt aan de hand van de bitjes uit de interrupt routine. Deze handler houdt diverse statussen bij, o.a. in welke stap van het decodeerproces de handler op dat moment zit (o.a.: wachten op preamble, startbit ontvangen, data byte ontvangen, stopbit ontvangen, volledig (geldig) pakketje ontvangen).
Korte samenvatting van de door mij gebruikte basis (en vele anderen overigens):
- Op interrupt gebaseerde DCC decodering (middels externe interrupt pin i.c.m. een losse timer OF een zgn. input capture pin/interrupt).
- In de main loop wordt continu gecontroleerd of er een pakketje is ontvangen met het adres van de decoder (in de DCC handler wordt een vlaggetje gezet bij ontvangst van een pakketje welke aan de decoder is geadresseerd).
- Indien er een pakketje voor de decoder is ontvangen wordt deze aangeboden aan de routine voor de verwerking, in het geval van bv. een wisseldecoder wordt de databyte bekeken en de betreffende uitgang in/uitgeschakeld.
Er zijn echter veel verschillende wegen naar Rome en ieder doet dat op zijn eigen manier. Vaak met diverse overeenkomsten, maar met een beetje kennis en logisch nadenken kun je een mooi klein (en dus snel) stukje code in elkaar zetten. Een goed hulpmiddel daarbij zijn de reeds genoemde websites. Deze staan vol met nuttige informatie waardoor je niet persé het wiel zelf opnieuw hoeft uit te vinden. Tenzij je dat leuk vindt om te doen, want dat is het wel! ;D
Gr. Dave
-
Ben benieuwd wie de andere 3 zijn trouwens
Ikke = nummer 3, nog twee missende dus...
Stappen die Dave beschrijft zijn de basis voor goede herkenning. De pijn zit hem als beginner in het leren werken en combineren van interrupts, timers enzovoort...
Edit : Volgens mij staat hier aanzet naar de oplossing na wat Google...
http://www.protonbasic.co.uk/showthread.php/67047-dcc-decoder
Mvg,
Robert
-
Heel veel nuttige info, ben er blij mee en mijn dank! Zoals altijd, antwoorden wekken ook weer vragen op. Misschien is volgens jullie Proton Basic niet zo'n goede keus. Via internet kwam ik hier op, heeft wat overeenkomst mij GW Basic waar ik jaren geleden mee ben begonnen. Derhalve is Mikro C iets, heeft iemand hier ervaring mee? Is, als ik het goed heb, is het meer op C gebaseerd, een taal welke voor mij vreemd is. Als ik dan toch iets nieuws moet gaan leren, is daar nu de tijd voor, ben nog maar net begonnen en overstappen is nu nog te doen.
Nogmaals mijn dank voor jullie inbreng.
Groeten John
-
... een taal welke voor mij vreemd is. ...
Veel embedded software is C (of C++), dus even doorbijten en de taal leren. In de basis is het wel enigszins gelijk aan basic, alleen de manier van opschrijven e.d. verschilt nogal.
Ik weet effe niet met welke PIC serie je aan de gang wilt, maar ik zou me even op MpLab concentreren.
Dat is een IDE van Microchip zelf. Daarin kun je dan met echte C aan de gang. Al die aftreksels zijn in mijn ogen beetje vaag als je ooit verder wilt in je werkzame leven met software...
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002
Daarin kun je compilers selecteren. Voor de PIC16 en lager de HiTech geloof ik, voor 18 series en hoger kun je bij Microchip de C18 en hoger compilers downloaden.
Voordeel is dat je met dit soort gangbare zaken voorbeelden kunt gebruiken die je kunt vinden....
En verder, ik ben ook begonnen met ledje knipperen in C en zo verder gekomen....
Mvg,
Robert
-
Basic is leuk (om te beginnen), maar het blijft basic. ;) ;D
C (en zijn aftreksels) is 1 van de meest gangbare talen voor embedded software zoals Robert al aan gaf. Daarnaast lijkt C ook veel op PHP en Java bv. Mogelijk dat je met die talen al ervaring hebt? Dan is C weer niet zo'n 'heel ver van je bed show'...
Gr. Dave
-
Dank je Dave,
Mijn aandacht is nu gevestigd op MikroC, lijkt mij wel wat om mee te beginnen. Prima documentatie en op You Tube heeft iemand een cursus van 28 delen geplaatst. Iets voor de lange winteravonden.
Dank voor allen en de groeten
john
-
Als deze link (http://users.telenet.be/RedDeBist/MBAAN/Servo_aansturen_digitaal_2.htm) kan helpen. Achteraan staat asm code met wat uitleg hoe DCC gedecodeerd wordt door een PIC µC. Uit ervaring weet ik dat je al zult moeten programmeren in C of asm. Er zitten redelijk wat tijdskritische processen in...
De bedoel van deze schakeling is 16 servo's aan te sturen en 16 relais uitgangen. De DCC adressen van de relaisuitgangen kunnen dezelfde zijn als de DCC adressen servo's. Zo kunnen de relais dienen voor o.a. puntstuk polarisatie. (de software is getest met MR Direct, en moet nog verder ontwikkeld worden o.a. CV programmatie)
succes,
Geert
edit: wat spellingsfoutjes er uit gehaald ;)
-
Helemaal eens Geert,
PIC's DCC en/of Servo's laten 'begrijpen' is een assembler aangelegenheid ;)
Grtzz,
Karst
-
Hallo Geert
Mooi werk dat je ervan gemaakt hebt, servo sturing met een PIC controller op DCC protocol, ga deze gelijk toe passen.
De S88 bus met deze PIC controller draait ook perfect.
Een pluim heb je wel verdiend, meer dan dat.
Groeten Frans
-
Wacht nog even voor je deze code gebruikt. Er is al een update onderweg. Maar eerst wat genieten van wat verlof. ;)
Geert