Nieuws:

Nu in MSM 244 REPORTAGE: De Nederlandse Modelspoordagen * A4 Dioramawedstrijd * Virtuele Messe 2024

Hoofdmenu

Waar zijn we nu mee bezig ? Microcontrollers

Gestart door ToThePoint, 13 januari 2012, 10:27:28 AM

Geert

#1020
Even al mijn vorige projecten bundelen tot één groot project. Iets dat al lang op mijn To Do lijstje staat.

Ik ben begonnen om een PCB te maken (hardware en software) waar ik 32 in- en uitgangen ter beschikking heb. Elke in- of uitgang vrij en eenvoudig te programmeren voor o.a.  servo uitgang (wisselaansturingen, slagbomen, poorten...); bezetmelder (massa); schakelaars en drukknopen; relaisuitgang (puntstuk polarisatie, licht in gebouwen...); puls uitgang (wisselspoelen); LED uitgangen (Fade in Fade uit voor seinen...) enz...

Dit voor mijn module baan project.
En geloof me, 32 vrij te programmeren in en uitgangen stelt niet veel voor om enkel wat seinen (LED's); terugmelders; wisselaansturingen; huisverlichting ; handbediening enz... aan te sturen en dit op modules van 1,20m op 0,60m. Soms zullen er meerdere PCB's nodig zijn.

Er is maar één protocol die dat allemaal kan ondersteunen, en dat is LocoNet.

Nu maar hopen op koude en natte winteravonden zodat ik op mijn To Do lijstje weer snel iets kan afvinken.  ;)

De vorderingen zal ik wel posten, zoals gewoonlijk met een begeleidend YouTube filmke.

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Geert,

Blij te lezen dat je terug aan de slag bent.

Hoe ga je het aanpakken om de individuele pinnen te programmeren als in- of uitgang en dan nog welke in- of uitgang (servo uitgang (wisselaansturingen, slagbomen, poorten...); bezetmelder (massa); schakelaars en drukknopen; relaisuitgang (puntstuk polarisatie, licht in gebouwen...); puls uitgang (wisselspoelen); LED uitgangen (Fade in Fade uit voor seinen...))?
Wordt dit via een programma/PC geprogrammeerd of via eenvoudige LocoNet schakelopdrachten (OPC_SW_REQ -  0xB0)?  Of ga je gebruik maken van de 'OPC_PEER_XFER'?  Let dan wel op dat je niet in conflict komt met geregistreerde LocoNet producenten (die gebonden zijn aan hun overeenkomst om niets (maar ook niets) te lossen over de 'professionele' LocoNet commando's)!

Een 'evenwijdig' project loop hier nog steeds bij mij (ligt ondertussen wel al anderhalf jaar stil): een controller met enkele druktoetsen en enkele WS2812 RGB Leds om een 'universeel' synoptisch bord mee op te bouwen.  Sturing: LocoNet.
Probleem: die WS2812 leds verwachten een vrij hoge continue seriële datastroom die niet mag worden onderbroken (anders volgt een reset van alle leds).  Wanneer je WS2812 leds en LocoNet in één processor wil integreren moet je een prioriteit stellen en daarbij zijn de LocoNet commando's prioritair.  Die LocoNet-commando's worden via interrupt opgewekt (en vrij ruim gebufferd - 64 bytes send- en 64 bytes receivebuffer) en ga ik met vlagjes moeten werken om te zien of de seriële WS2812 datastroom werd onderbroken door één (of meerdere) LocoNet-commando's.

Ik kijk uit naar je project.  Ik beschik over een 'universele' LocoNet omgeving.  Producten van verschillende leveranciers (om geen namen te noemen: Belgische, Nederlandse en Duitse).  En heb bijna continu de jmri LocoNet monitor actief. Ik ben altijd bereid om je zaken te testen  ;)

Succes en hou ons op de hoogte!




PS: in je vorig bericht zijn de foto's of filmpjes verdwenen.
Groetjes, Peter


Geert

#1022
Peter,


Ik zal wel antwoorden, (en daarvoor zeker je advies vragen aan jou) als ik iets degelijks kan laten zien...


Ik ben wel overgeschakeld op een zeer krachtige microC

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Citaat van: Geert op 07 november 2016, 20:14:55 PM
...Ik ben wel overgeschakeld op een zeer krachtige microC...

Welke?  Ik gebruik nu steevast de 18F2550.  Xtal 20MHz en via interne PLL opgepept tot 48MHz.  Als je daar zuiver in assembler in programmeert zoals jij doet, heb je processortijd te over.  Met JAL als programmeertaal lukt het ook (en is voor mij iets begrijpelijker en even low level bruikbaar).

Succes!
Groetjes, Peter


Geert

Pic18F4620 op 32mhz

In asm code super snel...

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Pic18F4620.  Krachtig beestje.  Mijn limiet is deze maand nog niet overschreden en ik ga eens bij Microchip 'samplen'    :) ;)
Groetjes, Peter


raf

haha peter sampled ook bij micro chip
ik kan zolang ik door ford betaald word nog steeds sampels opvragen
dus tot 2021 sampel ik elke maand 6 processoren allerhande

iemand een goede processor voor geluid
ik heb ooit eens eentje tegen gekomen die je met een bcd code ingang 256 geluiden kon laten afspelen
maar ik kan die niet meer vinden
gr raf 
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

PeterC

Mede dankzij Geert is mijn µC + Loconet avontuur weer aangewakkerd en heb ik een 2014 projectje terug aangepakt.
Een LocoNet Start/Stop schakeling (ideaal als de volledige baan via LocoNet wordt bestuurd en je her en der een noodstop schakelaar wil).

Eén zaak wou ik van af: RGB leds.  RGB leds gebruiken drie poorten om tot de juiste kleurcombinatie te komen (Rood-Groen-Blauw en alle mogelijke combinaties) en ik wou die vervangen door de steeds goedkoper wordende WS2812B leds (RGB via een interne controller aangestuurd via een eigen seriëel protocol) die slechts één controller pinnetje gebruiken.

Zo gezegd, zo gedaan...  ...Het project was ondertussen al van 2014 en ik had net iets te weinig commentaar in mijn code geschreven om snel aan de slag te gaan.  Lezen, herlezen en nu wel van commentaar voorzien van wat ik met welke functie/procedure wou bereiken.

Alles klaar en een werkende schakeling als gevolg.  ...Maar steeds vaker kreeg ik niet de gewenste kleur op de ws2812 leds.  Groen was soms violet, rood was soms blauw...  Niet haalbaar voor wat ik in gedachte had en op zoek naar de fout.

Mijn LocoNet interface is deels gebaseerd op het OSI model.  Een layer neemt (via interrupts) het LocoNet gebeuren waar en plaatst de ontvangen gegevens in een 64 byte ontvangst ring buffer.  De te verzenden gegevens worden door een lager gelegen codegedeelte eveneens in een 64 byte (ring)zendbuffer geplaatst.  De code zelf hoeft zich van het ganse LocoNet gebeuren niets aan te trekken: kijken in de buffer of er LocoNet-data in zit en die verwerken en gegevens verzenden (die ook terug in een zendbuffer terecht komen).

Die niet juiste kleuren van de ws2812 leds was vlug achterhaald: de seriële datastroom naar die leds mag niet worden onderbroken.  Mijn interruptgestuurd proces (LocoNet + verschillende timers) onderbreekt dus af en toe die datastroom...  Mij suf gezocht naar een oplossing.  Geen interrupts tijdens het verzenden van die ws2812 dat was geen optie: de LocoNet en timer interrupts gaan voor...  Een heel simpele oplossing gevonden en het probleem is opgelost: iedere interruptroutine zet een vlagje "process_interrupted = 1".  Wanneer ik zie dat na het verzenden van mijn seriële informatie naar die ws2812 leds dat vlagje is gezet, is er een interrupt geweest.  Ik geef dan een reset aan die ws2812 chips en start de routine opnieuw tot ik er zeker van ben dat alles ononderbroken werd verzonden.

Het geheel werkt nu zoals vooropgesteld en het volgende stadium is om uit te breiden naar een schakeling met 5 ws2812 leds en 6 schakelaars.  Eén led voor Aan/Uit/Programmeren met 2 schakelaar en 4 leds en 4 schakelaars voor een universele synoptische interface.  Synoptisch wil ik de toestand van een wissel, melder, ontkoppelrail, bloksein, inrijsein, uitrijsein, rangeersein, universele schakelaar, universele melder.  Telkens verschillende kleurcombinaties, alles eenvoudig programmeerbaar (instelbaar) via een keyboard op een IB (of via de IB zelf) of via een Marklin 6021 met LocoNet interface.

Eén zaak wou ik steevast en dat was om de helderheid van de ws2812 leds te kunnen regelen.  Die leds zijn enorm fel!  Via een lok-adres op een centrale wou ik de helderheid kunnen regelen.  Dat gedeelte is ook reeds klaar en het desbetreffende adres kan op een eenvoudige manier via één of ander keyboard of centrale worden geprogrammeerd terwijl de interface in het LocoNet netwerk zit.

Wordt vervolgd...
Groetjes, Peter


Gerolf

Interessante RGB's ... als ik het goed lees kan je via één poort tot 1024 stuks elk een eigen kleur geven ...
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

dani

dit zijn de bewuste  "neopixel"LEDs e je kan die inderdaad ook daisy-chainen.
ze gebruiken een rgb(255,255,255)  aansturing.
Dus je regelt eigenlijk de helderheid en de kleur samen met deze 3 waarden....  lage waarden zorgen voor lage helderheidmaar minder uitgebreid kleurenpallet aangezienje dan minder variatie hebt in de verhouding tussen R-G-B kleur.

Heel leuke dingetjes !!!!
De kruik is te water gegaan...
De kruik is niet meer.

PeterC

Ik zie in de datasheet nergens een maximum staan.  Bij een refresh rate van 30 keer per seconde kan je tot 1024 leds gaan (1,25µs bittijd * 24 bits/led * 1024 leds is ongeveer 31ms * 30 refresh rate is ongeveer één seconde).
Bij een lagere refresh rate kan je vermoedelijk er meer dan 1024 aan sturen.

En inderdaad via 1 poortje is een ganse sliert aan te sturen.  Eéntjes en nullekes op het juiste tempo op de poort zetten.  De datastroom niet langer onderbreken dan 50µs of je genereert een reset.

En zoals Dani zei: niet alleen de kleur bepaal je individueel, ook de helderheid.  Daar iedere led 8 bits per kleur krijgt, kan je heel eenvoudig de helderheid regelen.  Op volle lichtsterkte zijn die wel enorm fel.
Groetjes, Peter


Geert

Citaat van: PeterC op 13 november 2016, 19:37:42 PM
Een LocoNet Start/Stop schakeling (ideaal als de volledige baan via LocoNet wordt bestuurd en je her en der een noodstop schakelaar wil).

Een LocoNet noodstop zonder µC technologie kan ook:




Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Citaat van: Geert op 07 november 2016, 17:07:40 PM
...Er is maar één protocol die dat allemaal kan ondersteunen, en dat is LocoNet...

Aangewakkerd door Geert's LocoNet avonturen, ben zelf ook terug aan de slag gegaan.  Wanneer vrouwlief is gaan werken, ligt de livingtafel vol met oa een IB+6040, HDL Locobuffer, een Rosoft melder, een PicKit3 en een breadboard en heel wat draadjes...

Mijn al-lang-bezig-projectje voor een universeel synoptisch bord, gestuurd via LocoNet begint nu toch stilaan toch wat vorm te krijgen.

Wat wil ik: 8 rgb leds + 8 schakelaartjes (één combinatie daarvan noem in een 'device') die gelijk wat (wissel, sein, melder,...) kunnen weergeven en die op een eenvoudige manier kunnen worden ingesteld (geprogrammeerd -> gegevens opslaan in EEPROM).
De schakeling is voorzien van een Stop- en een Goschakelaar en van een RGB led die de toestand van de centrale weergeeft (rood = centrale uit, groen = centrale aan).  Die led wordt ook gebruikt om de programmeer toestand aan te geven.

Momenteel ben ik met 4 schakelaartjes en 4 ws2812 leds bezig.  De software en de controller kan gemakkelijk 8 devices ondersteunen. 
Wat werkt al?  Een melder.  Geeft ciaan bij een bezetmelding, is uit bij een vrij blok/spoor. 
Een wissel: rood bij afbuigend, groen bij rechtdoor (is ook te gebruiken bij een bloksein). 
Een driekleurig sein: rood/groen/rood/geel. 
Verder nog een testkleurtje (4kleuren - die geen praktische toepassing zal hebben op de baan).

Het geheel moet voor ieder individueel 'device' eenvoudig te programmeren zijn via een IB (al dan niet met extern 6040 keyboard).
In die opzet ben ik tot nu toe geslaagd.
 
Het programmeren gaat als volgt:
Druk de Go-schakelaar in, blijf die ingedrukt houden en druk op de Stop-schakelaar.
De led die aan/uit van de centrale weergeeft (rood of groen) kleurt blauw.  Alle andere leds gaan uit.
Het programma verwacht nu een druk op een toets en die zijn heel simpel:
  Toets 1 en 'device1' gaat in programmeer toestand.
  Toets 2 voor 'device 2' enz.
Na het drukken op het gewenste 'device' kleurt de led van dat device blauw.

Nu kan ik instellen wat dat device moet worden:
  Toets 1: niks (device wordt niet gecontroleerd tijdens allerlij LocoNet meldingen,
           aan de schakelaar wordt geen aandacht besteed).
  Toets 2.  Wissel (of bloksein).  De led gaat rood/groen knipperen.
  Toets 3.  Driekleurig sein.  De led gaat rood/groen/rood/geel knipperen
  Toets 4.  Melder.  De led gaat ciaan/uit knipperen.

Door telkens toets 2/3/4 (en na uitbreiding heel wat meer toetsen) te drukken kan aan het device een identiteit worden gegeven. 

Eenmaal de identiteit gekozen, kan die worden bevestigt met toets 16 (=enter).
Dan licht de led op in de eerste kleur (in het geval van een wissel de rode kleur) en verwacht het programma een adres voor de die kleur. 
Na het ingeven van het adres (via een IB- of extern keyboard - of via om het even welke centrale die een adres kan genereren) gaat de led op de tweede kleur over (in het geval van een wissel wordt dit groen).
Eenmaal dat adres is ingegeven, dooft de led en verwacht het programma een opdracht/toets voor een andere led.

De programmeermodus kan eenvoudig weer worden verlaten door eerst de start toets en nadien en gelijk de stoptoets in te drukken.  Wijzigingen worden in de Eeprom van de chip geschreven.  Na het wegschrijven van de gegevens in de Eeprom volgt een quick and dirty reset ('asm goto 0').

Er is één speciaal adres: 10.  De aan/uit led die normaal continue blauw kleurt, begint nu te knipperen.  Het programma verwacht nu terug een adres en wel een loco-adres waarmee de heldelheid van alle leds kan worden geregeld.  Het adres wordt op dezelfde manier als die van de andere devices ingegeven, nl via een toetsenbord.
Nadien kan via het loc-adres met de regelaar de helderheid van de leds worden geregeld (ws2812 leds zijn heel fel en moeten worden gedimd).

Momenteel kan ik al volgende zaken weergeven:
- wissel (of bloksein): rood/groen
- melder: ciaan/uit
- driekleurensein: rood/groen/rood/geel
- test: oranje/groen/magenta/roze

Binnenkort voorzie ik nog:
- rangeersein: wit/rood
- ontkoppelaar: magenta/uit
- ...

Een momentschakelaar kan worden geëmuleerd met een melder, een wisselschakelaar via een wissel.

Ik gebruik een vrij krachtige PIC 18F2550 controller maar zit bijna op een codeverbuik van 14316/32768 en dataverbruik van 878/2047.  Ik heb nog de helft reserve en ga die wel nog nodig hebben.

Een dikke boterham om te lezen maar verschillende broden te implementeren  ;)

Groetjes, Peter


Geert

#1033
Boterham smaakt naar meer Peter.

Vandaag ook bezig geweest met LocoNet toestanden.

Testen van LED aansturingen,
Servo's
Relaiskaarten
Inputs.
enz...

Programmatie zal via dit toetsenbordje gaan. En een 2x16 array Display  voor weergave (ken jij ook Peter...).







Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Was het niet die Philips monitor en die voeding, dacht ik dat je op mijn zolder bezig was  :D ;)
Groetjes, Peter