Waar zijn we nu mee bezig ? Microcontrollers

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

PeterC

@Raf: gebruikt toch indents (inspringen met tab of spaties).  Veel duidelijker!


select case expr
  case value X
    statement(s) to execute
  case value Y
    statement(s) to execute
  case value Z
    statement(s) to execute
  case else
    statement(s) to execute
end select



Citaat van: Havoc op 23 december 2014, 23:10:02 PM
...ik heb deze week mijn C terug afgestoft. Zal meer dan een stofvod voor nodig zijn na 25 jaar vrees ik...

Het voordeel is dat er in sé (woordspelinkske) op de 25 jaar niets is veranderd (gelukkig!).  Een ander voordeel dan 25 jaar terug is dat je nu tig online cursussen en code-snippets kan vinden (was 25 jaar geleden wel wat anders).
Succes ermee!


Citaat van: Havoc op 23 december 2014, 23:10:02 PM
...in assembler, pascal en fortran. Vang daar maar eens iets mee aan...

Met assembler van je alles aan.  Kijk maar naar Geert.  Alleen moet je er dubbel je hoofd bijhouden en is de ontwikkelingssnelheid heel laag.

Groetjes, Peter


Geert

Citaat van: PeterC op 24 december 2014, 14:07:30 PM

Met assembler van je alles aan.  Kijk maar naar Geert.  Alleen moet je er dubbel je hoofd bijhouden en is de ontwikkelingssnelheid heel laag.

Lap zeg, ik werk dus te traag  ;)

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

PeterC

Citaat van: Geert op 24 december 2014, 14:31:30 PM
Citaat van: PeterC op 24 december 2014, 14:07:30 PM

Met assembler van je alles aan.  Kijk maar naar Geert.  Alleen moet je er dubbel je hoofd bijhouden en is de ontwikkelingssnelheid heel laag.

Lap zeg, ik werk dus te traag  ;)

Geert

;D ;D ;D
Groetjes, Peter


raf

ja das een vast staand feit maar dat haal je daarna in want assembler werkt veel sneller dan eerst alles door een compiler te halen

uiteindelijk worden het dan ook 0/1 en
gr raf
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

Havoc

C is niet veranderd maar de moderne ide's maken het toch wel anders. Ik ben momenteel meer daarmee aan het vechten dan met de code. Vooral opsplitsen in verschillende files -wat ik nooit gedaan heb- valt tegen. Je vind wel veel over de taal zelf maar weinig over "intermediate" programmeren. Eenmaal meer dan "hello world" maar minder dan een relationele database. Iemand een goed forum/boek/website daarvoor?

Assembler heeft tegenwoordig niet veel voordeel meer tov gecompileerde talen zoals C (Pascal, Ada, etc) De compilers zijn zo goed dat je amper nog iets kan winnen. Zeker als je moet gaan foutzoeken of 1 jaar later functionaliteit wil wijzigen. En dat was dan een Z80 bij mij, met Eprom. Begin ik niet meer aan.

Trouwens, ik ben niet direct op een microcontroller bezig maar op pc. Helemaal geen goesting om zo'n beest in assembler te gaan doen.
Met vakantie voor onbepaalde duur.

patrick smout

Johan,

zoek eens op "Modular programming in C" of zoiets.
Dit zal je de informatie geven die je zoekt.

Nu is het niet echt zo dat C niet veranderd is. C is wel degelijk veranderd de voorbije jaren vb ISO C90, C99, C11 standaard). Nu spreek ik niet over de basis syntax maar er zijn heel wat uitbreidingen toegevoegd Zo is bvb. in de ISO C99 versie de mogelijkheid toegevoegd voor inline functies terwijl deze in de ISO C90 nog niet aanwezig was. Op zich heel handig, vooral bvb in interrupt handlers (en een welkome aanvulling voor diegenen die ermee vertrouwd waren in C++)
Ook de 64 bit integer variabele (long long) is iets wat het voorbije decennia toegevoegd is.

mvg,

Patrick Smout
Met vriendelijke groeten,

Patrick Smout

PeterC

#711
De LocoNet start/stop heeft duurtesten doorstaan dus nu op naar een volgende stap (om uiteindelijk tot een LocoNet synoptisch bord te komen).

Waarom een synoptisch bord op het LocoNet en niet gewoon het MM/DCC signaal van de rails decoderen (wat ondertussen maar weinig geheimen meer voor mij heeft)?  Op het MM/DCC signaal zie je alles passeren: een wissel wordt omgeschakeld, een sein wordt gezet, een ontkoppelingsrail wordt bediend.  Maar je ziet het enkel passeren en kan zelf niets sturen.  Info over een bezetmelder in het MM/DCC signaal?  Daar kom je totaal niets van te weten.

Al die info (wissels, seinen, melders, ontkoppelingsrails, locomotief gegevens, ...) passeren wel op het LocoNet...  ...En het zijn net die gegevens die ik nodig heb voor een synoptisch bord.




In eerste instantie wil ik de toestand van 16 'devices' weergeven.  Ik noem ze 'devices' want het kan een wissel zijn (2 standen - led rood of led groen), een sein (3 standen - rood, geel of groen), een ontkoppelingsrail (niet bekrachtigd: magenta - bekrachtigd: rood) of een bezetmelder (niet bezet: ciaan - bezet: blauw).

Ik wil het project ook universeel opzetten.  Ieder van de 16 devices moet elk device aan kunnen (via een eenvoudige herprogrammering met een druktoets en een digitale (LocoNet) centrale).  Elke punt op het bord zal dan bestaan uit een drukknopje en een RGB led (een drukknopje bij een melder heeft wel geen zin - tenzij om de reactie van de baan-besturings-software te testen = spookmeldingen genereren).




Ik wil 16 druktoetsen lezen en 16 RGB leds aansturen (16 x 3 = 48 leds).  Nu heb ik wel nog enkele pootjes op mijn µC over maar veel te weinig om dat alles te verwerken.  Dus extra hardware.

De toetsen wou ik in eerste instantie in een 4x4 matrix plaatsen - dat zijn rechtstreeks op de µC nog 8 IO pennen die ik nodig heb - en om I/O te besparen had ik mijn oog laten vallen op een PCF8574, een oud gediende en betrouwbare I2C naar 8 bit IO expander.  Enkele testen en dat werkte.  Helaas wel heel wat software om die 4x4 matrix via I2C aan te sturen en uiteindelijk uit te lezen.

Een verder speurtocht bracht mij bij een MCP23017 (eveneens een I2C IO expander maar wel 16 bits) en na uitpluizen van de lijvige datasheet tot de conclusie gekomen dat die expander de oplossing is.  Geen matrix meer maar aan elke van de 16 ingangen een schakelaartje (pull-up weerstand niet nodig - interne weak pull-up softwarematig in te schakelen).  Via I2C telkens de ingangen opvragen om te zien of er een toets is ingedrukt, is ook niet nodig.  Een interruptlijntje geeft aan wanneer een toets wordt ingedrukt of los gelaten.  Dus enkel op tijd en stond dat lijntje controleren en daarmee is de kous af.
...Misschien (als ik tijd en goesting heb) kan ik in een latere fase daarmee een LocoNet terugmelder opzetten met slechts 2 IC's  8)




Voor die 16 RGB leds (waarbij ik ook de helderheid wil regelen - via een bepaald (te programmeren) locomotiefadres) heb ik het direct laten varen om die rechtstreeks vanuit de controller aan te sturen (Charlieplexing even bekeken maar dat idee toch naast me neergelegd).

Bij een verdere speurtocht (wat is dat internet toch een luxe) naar externe hardware toch een leuk IC'tje gevonden: MAX7219 - stuurt op zijn gemak 64 ledjes aan MET helderheidsregeling via slecht 3 I/O poortjes.




En nu een extra breadboardje bijprikken en nog een hoop draadjes van isolatie ontdoen en experimenteren...

Wordt (hopelijk) vervolgd...


Groetjes, Peter


conducteur

Benieuwd naar de code!


Ingewikkelde menucode even aan de kant gezet


Eens mijn µPLC modules nuttig inzetten, tot nu toe al nuttig kunnen gebruiken voor enkele kleine experimentjes, maar nu dus een echte toepassing
Baantje aan het bouwen achter mij  (als ik wat tijd heb ruim ik op en maak ik  wat fotootjes). Doel is om met het ding de opstelsporen te besturen (3 sporen waar 2 treinen op kunnen staan, en een kopspoor). Besturing dus van 7 stopsecties (simpelweg met een relais) en 3 wissels.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Gerolf

@ Peter: je kan een µC toch programmeren tot I2C-slave ?
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Citaat van: Gerolf op 30 december 2014, 05:14:31 AM
@ Peter: je kan een µC toch programmeren tot I2C-slave ?

Gerolf: ja...  I2C zit in veel van de PIC's die ik gebruik zelfs hardwarematig ingebouwd (bij sommige enkel slave, bij andere zowel master als slave).   ...Maar terug een programma schrijven, extra weerstanden want de PIC's die ik gebruik hebben slechts op één poort (8 bits) interne pull-up weerstanden.  Een I2C programma debuggen (moet ik weer die Bus-Pirate gaan opsnorren)...
Die I2C IO expanders zijn speciaal voor dit doel ontwikkeld en kosten ook maar een appel en een ei.

...En wat je allemaal met een controller kan doen:
Citaat van: Willem Vermandere
k Kost het zodanig programmeren
Totda 'k van toeten noch blazen ni meer wist
:D :D :D


Citaat van: conducteur op 29 december 2014, 23:16:59 PM
Benieuwd naar de code!

...Ingewikkelde menucode even aan de kant gezet...

Rian, zoek dan maar een extra paar bretellen om je broek op te houden.  Die menucode is hierbij 'klein bier'...

Om dat LocoNet signaal uiteindelijk te interpreteren maak ik gebruik van 'layers' (een beetje gebaseerd op het OSI-model).  Eén layer bekijkt of de data voldoet aan de eisen gesteld in de LocoNet Personal Edition  De individuele bits worden omgevormd tot bytes.  Indien OK geeft die layer de data door aan een volgende layer die kijkt of de individuele bytes van een pakket voldoen aan de eisen en eens die pakketten daar zijn goed bevonden, worden ze doorgegeven aan weer een volgende layer die die pakketten eventueel interpreteert (eventueel omdat er pakketten worden ontvangen waar er in een synoptisch bord niets kan mee worden aangevangen).
Dit alles met een softwarematig gescheiden ontvangst- en zendgedeelte en een gescheiden pakket-generator (toetsenbord) en pakket-interpreter (16 RGB leds).  Gelukkig bestaan er interrupts en controllers met voldoende geheugen (PIC18F2550)...

Vrij complexe materie maar een heerlijk gevoel telkens ik weer een stap dichter sta...

Groetjes, Peter


Geert

Ja Peter, hoe jij met µC technologie kan toveren daar doe ik mijn hoedje voor af. En dan nog eens ondersteund met zeer handige en leerzame links. Doe zo verder, ik blijf dit volgen. En zeker links erbij blijven vermelden, ik sla deze allen op.

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

conducteur

Menucode: te ingewikkeld als ontspanning 's avonds na het veel te ingewikkelde studeren... Is allicht niet zo moeilijk, maar heb geen goesting om m'n hoofd te breken op iets als ik dat al heel de dag moet doen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

raf

peter een probleem met ccpmx  bij een 16f88
die heeft twee ccp ingangen waar je deze een beetje kan verkrachten om er een A/D converter van te maken
we krijgen dit in basic niet goed of helemaal niet aan het werk
deze twee registers zouden we met elkaar moeten kunnen vergelijken
dit is om een brander van een stoom machine te sturen
heb jij daar eventueel een oplossing voor

gr raf 
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.

conducteur

Ingangen verkrachten om er een adc van te maken? Ik zou zeggen: ga op zoek naar een µc met een echte ADC ingebouwd.... (moest die dat niet hebben). Met PWM kun je wel een beetje een DAC maken, maar ook dat lijkt me prutsen...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

#719
Citaat van: raf op 30 december 2014, 21:29:41 PM
peter een probleem met ccpmx  bij een 16f88
die heeft twee ccp ingangen waar je deze een beetje kan verkrachten om er een A/D converter van te maken
we krijgen dit in basic niet goed of helemaal niet aan het werk
deze twee registers zouden we met elkaar moeten kunnen vergelijken
dit is om een brander van een stoom machine te sturen
heb jij daar eventueel een oplossing voor

Raf, CCP is een Capture/Compare/PWM module; heeft volgens mij weinig te zien met ADC (tenzij je een tijdsmeting/tijdsvergelijking wil doen?).  Op een 16F88 zitten trouwens 7 ADC ingangen, waarom gebruik je die niet als het effectief een analoge meting is?

Alle gegevens zijn in de 228 pagina's tellende datasheet te vinden.

En om zo maar een pasklaar antwoord op je vraag te formuleren, moet ik ook die 228 pagina's doorbladeren...
Groetjes, Peter