Waar zijn we nu mee bezig ? Microcontrollers

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

doomslu

Peter, ook al ben ik hier totaal niet mee bezig, toch begrijp ik het! De specialisten zullen het zeker begrijpen.  ;)
luc    * MODEL RAILROADING IS FUN *

Geert

Het verhaal van Peter klopt volledig. Maar, per bank kan je maar 80 Bytes gebruiken. De eerste 32 bytes per bank zijn niet bruikbaar voor vrije data (registers om hardware aan te sturen). De laatste 16 zijn voor elke bank dezelfde (gemeenschapelijk geheugen per bank).

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

raf

volledig begrepen peter
want bij de z80 konden wij niet anders dan dit zo doen om meer geheugen te krijgen
128 kB was de max die we konden aanspreken dacht ik
en dan waren we reeds aan het bank switchen als gek
toen zonder compiler moest je inderdaad kijken of je plaats genoeg had in de banken

was wel plezant werken zo en die 4 Hz van de pic's was ook in de standaard z80 de snelheid
sommige (ikke ook )hadden de militaire versie op 18 Hz draaien LOL
als je nu de snelheden ziet die er gehaald worden staan die Z80 processoren bijna stil

gr raf en nog bedankt om het geheugen eens terug op te frissen
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

conducteur

Even een vraagje voor de experten onder ons....


Ben eindelijk gestart aan de DCC-decoder...
http://www.treinbaanrian.be/elektronica/decoder.htm


Een eerste experiment (zie link) lijkt al redelijk te lukken... De CCP module genereert een interrupt op elke stijgende flank van een gewoon kloksignaal van 15khz (=nog geen DCC, dat is de volgende stap). De waarde van de CCP module registers worden weergegeven op een display.


Ik zie vrij stabiel 84 a 86 op de display. Na omrekening zou dat 25 Khz zijn? Is dat geen grote afwijking? Maakt allicht niet zoveel uit, is niet de bedoeling om een frequentiegenerator te bouwen, als ik in de volgende stap maar het verschil kan uitmaken tussen "0" en "1"?


Zou moeten ongeveer 120 zien denk ik? Op 8 Mhz zijn er 120 instructietijden verstreken in één periode van de 15 khz toch? Of maak ik een rekenfout

Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Klaas Zondervan

Citaat van: conducteur op 19 april 2015, 13:55:53 PM
Ik zie vrij stabiel 84 a 86 op de display.
Zijn dat microseconden? Dan kom ik op (ongeveer) 11,7 kHz

conducteur

#860
Nee de klok van de µC draait op 8Mhz. Er zijn 4 kloktijden nodig om één instructie uit te voeren. Dus 2 000 000 instructies / seconde. Timer 1 "telt" het aantal instructies. Op het moment dat de interrupt gegenereert wordt, geef ik de waarde van Timer1 weer op de display ;)

Edit: nu hangt mijn multimaus aan de controller, en krijg 185 & 412, dat lijkt wel te kloppen? (kan dus al zeker "1" en "0" onderscheiden van elkaar  :D   )
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Rian,

Als ik nog kan rekenen:
15KHz -> 66µs
@8MHz -> één instructie 500ns
Zonder ISR overhead zou je (theoretisch want die ISR overhead is er: registers saven, interruptsprong, ...) 132 op je display moeten krijgen.

Let wel op om je display vanuit je ISR te sturen: je hebt slechts 132 cycles per interrupt en dat is veel te weinig om naast je ISR routine uit te voeren ook nog je display te updaten!  Een ISR hou je best zo kort mogelijk (kort ook in verwerkingstijd).

Properder is om in je interruptroutine een vlagje te zetten en in je mainloop continue dat vlagje te testen om je display te updaten.  Is het vlagje geset, is er een nieuwe waarde.  Na het verwerken op het display van die waarde reset je dat vlagje.  In je interruptroutine kijk je ook naar dat vlagje en wanneer dat nog geset staat, betekent dat dat de vorige waarde nog niet is verwerkt.

Wel opletten als je variabelen zowel binnen als buiten je ISR gebruikt om die 'volatile' te declareren (vb var volatile byte variabele_naam).
Groetjes, Peter


conducteur

#862

Beetje voort gedaan deze avond aan wat schoolgroeps[size=78%]werk: een pic controller stuurt per pwm 6 IR ledjes aan op een bepaalde frequentie. De bedoeling is om een soort "afstandsbediening" te maken voor onze robot die een doolhof moet oplossen. Er zijn meerdere begin/eindpunten aan het doolhof en de bedoeling is dus om de kortste weg tussen deze punten te zoeken. Op elk zo'n eindpunt ligt zo'n schakelingetje (nog 5 printjes te solderen). Aan de hand van de knipperfrequentie zal de robot met een mBed ARM processor weten of hij wel juist is aangekomen. Alle 6 printjes hangen aan een basisstation (een raspberry pi) via I²C . Zo kan interactief gewerkt worden... bv ga op zoek naar eindpunt met gegeven frequentie en dan kun je de frequentie aanpassen via I²C.

(geen irDa protocol gelijk de tv afstandsbediening, meeste communicatie gaat via xbee direct van de pi naar de m3pi robot). De PI is ook een tussenschakel tussen de app op android voor de bediening van het geheel en de elektronica....



Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

dani

#863
vandaag een nieuwe DCC library gevonden voor Arduino.
Deze even getest en hij is super !!!  Het laat toe om op 1 enkele adres tot 18 functies te programmeren.

Ik heb 'm "gestript" en een beetje omgebouwd.
Ik ga nu de bediening van mijn "spycam" in de camera trein doen met een ATT85 die wordt aangestuurd op hetzelfde adres als de loco zelf.
F0 =  verlichting van de trein  (front en sluitlichten)
F1 = start de camera
F2 = stop de camera
F3 = reset de camera
F4 = extra schijnwerpers.

Benieuwd hoe dat gaat werken.     Op mijn breadboard met een Arduino Uno alvast wel...
Maar bij het compileren naar ATT85  krijg ik nog foutmeldingen van de DCC library....  blijkbaar toch niet 100% compatibel
De kruik is te water gegaan...
De kruik is niet meer.

Geert

Citaat van: conducteur op 19 april 2015, 13:55:53 PM

Ik zie vrij stabiel 84 a 86 op de display.


Zoals Peter al zij, zou je bij 15kHz 132 op je display moeten krijgen, hexadecimaal komt dat neer op 84. Zou wel toeval zijn geweest... Je code geeft de waarde echter decimaal weer, dus dit is niet de fout.

Ik merk in je programmacode dat je de interne clock van 8MHz naar een pin voert (fuses: OSC INTOSC_CLKOUT) Dit heeft niet veel zin. Beter is _NOCLKOUT te gebruiken. Dit geeft een extra in-output pin vrij.

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

minitreintje

Citaat van: dani op 23 april 2015, 23:29:58 PM
vandaag een nieuwe DCC library gevonden voor Arduino.
Deze even getest en hij is super !!!  Het laat toe om op 1 enkele adres tot 18 functies te programmeren.

Ik heb 'm "gestript" en een beetje omgebouwd.
Ik ga nu de bediening van mijn "spycam" in de camera trein doen met een ATT85 die wordt aangestuurd op hetzelfde adres als de loco zelf.
F0 =  verlichting van de trein  (front en sluitlichten)
F1 = start de camera
F2 = stop de camera
F3 = reset de camera
F4 = extra schijnwerpers.

Benieuwd hoe dat gaat werken.     Op mijn breadboard met een Arduino Uno alvast wel...
Maar bij het compileren naar ATT85  krijg ik nog foutmeldingen van de DCC library....  blijkbaar toch niet 100% compatibel

Heb je soms een linkje?

Groeten,
Dylan
Märklin C-rail modulebaan met Arduino

Geert

Ik laat Dani eerst alles testen, en vraag dan het linkje  ;)


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

minitreintje

Märklin C-rail modulebaan met Arduino

dani

De kruik is te water gegaan...
De kruik is niet meer.

PeterC

Tussen alle 1/1 werkzaamheden toch op 'verloren' momenten nog wat verder aan het werken aan mijn LocoNet synoptisch bordje.  De status van 32 schakelaartjes via I2C opvragen met twee keer een MCP23017.  32 RGB ledjes (WS2812B) stuur ik aan via een zelf ontworpen I2C slave met een PIC 18F2550.  Een 18F2550 is misschien een beetje 'overkill' maar ik heb hier een hoopje dergelijke processoren liggen...

Een printje voor de led interface heb ik reeds samen geflanst:



Omdat ik bij de processor nog heel wat poorten en geheugen vrij had, heb ik er een extra WS2812B led bijgezet en een trimmertje voor rood, groen, blauw en intensiteit.  Via I2C kan ik eenvoudig de waarden opvragen voor een mooi kleurtje.  Aan de trimmertjes draaien tot de kleur me aan staat en via een terminal programma en de Bus Pirate de waarden uit de I2C slave lezen.

We blijven bezig...
Groetjes, Peter