Doel:€250.00
Donaties:€85.00

Per saldo:€-165.00

Steun ons nu!

Laatst bijgewerkt
op 21-04-2020
Algemeen

De stichting

Recente berichten

Frans bietenbaantje in 009 (en parallel in 0e) door tothebeach
Vandaag om 09:54:13
Bouwen van modellen bestaande uit gips door cor_b
Vandaag om 09:52:21
1e modelspoorbaan door frederik19630
Vandaag om 09:52:20
Welke Duitse rangeerseinen bij eindstation door Wim Hesselink
Vandaag om 09:40:15
Gezocht, iemand die decoders in Märklin TEE 3071 wil inbouwen (Utrecht) door Martijn de Kuiper
Vandaag om 09:37:51
Roco Fccpps, overzicht van Roco-modellen. door Jamie
Vandaag om 09:11:08
Marklin H0 trein rijdt alleen maar achteruit door Pauldg
Vandaag om 08:54:47
Breedte nieuw op te zetten Fleischmann HO tafel afmeting door Boswachter Dirk
Vandaag om 08:54:10
Molendaal, h0-baan, Nederlands tintje, Periode III-heden. 2,6x1,4m door NS264
Vandaag om 08:52:23
Ombouw/Pimpen Bolle neuzen door bollen neus
Vandaag om 08:48:53
Toon hier je nieuwe (model-) spooraanwinst(en)... door Besselspoor
Vandaag om 08:35:28
NS modelbaan Hoekdam H0 door gtw6016
Vandaag om 08:31:36
Maïsveld n spoor maken, tips? door RemcoStarter
Vandaag om 08:22:14
Projekt 083-338 door Falkenberg
Vandaag om 07:54:24
Baanbouw Bosje77 door Frycio82
Vandaag om 07:38:11
Cubana door Lucien
Vandaag om 07:32:32
Mijn eerste H0-modeltreinbaan in aanbouw door Frank 123
Vandaag om 06:28:17
BMB 00-modulebaan, Beveiliging door nighttrain1
Vandaag om 00:43:33
Raadplaatje door spoorzeven
04 juni 2020, 23:20:30
De terugkeer van het Eiland Waan door RobK
04 juni 2020, 23:07:13
Märklin 60760 locdecoder instellen in iTrain. door PkAlfisti
04 juni 2020, 23:00:54
Welke rijtuigen achter NS 1100 door piet keppel
04 juni 2020, 22:46:42
Frans loodsje et cetera door Noordernet
04 juni 2020, 22:39:03
DR5000, problemen met hoge locomotiefadressen door Karst Drenth
04 juni 2020, 22:37:14
Initiatief Tramweg Stichting voor behoud SUN-tramstel (Ut) scoort eerste succes door martijn v m
04 juni 2020, 22:32:03
Waar koop je tegenwoordig 'betaalbare' sounddecoders? door dimo1_dimo1
04 juni 2020, 21:57:42
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door HuubvG
04 juni 2020, 21:52:38
BMB 00-modulebaan, Algemeen. door St00mboy
04 juni 2020, 21:22:32
Oersik etsplaat spoor 0 van Erwin, beginnersbouwverslag door Tulpendaal
04 juni 2020, 21:15:40
Modelspoorbaan Fleischmann door bosje77
04 juni 2020, 20:54:22
  

Auteur Topic: Zonder fouten een Arduino programmeren  (gelezen 3849 keer)

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
Re: Zonder fouten een Arduino programmeren
« Reactie #45 Gepost op: 20 maart 2020, 12:26:16 »
Leuk die Duff's device ;D

millis() komt inderdaad nog met wat overhead om het atomic te houden. En inderdaad, je kunt gewoon een cast doen als je af kunt met minder bytes ;D Al met al vind ik de kleine performanceoverhead het meer dan waard om gebruikersgemak (= code schrijven performance ;D) er voor terug te krijgen.

En let erop, de 8-bit Arduino's hebben geen DIV of MUL instructie. Vandaar dat ze normaal kostbaar zijn als het geen macht van 2 is. Vandaar mijn opmerking over de if(!(_1ms % 10). Maar goed, die kun je vervangen door if(_1ms == 10).


Timo
Verzonden vanaf mijn desktop met Firefox

meino

  • Offline Offline
  • Berichten: 727
Re: Zonder fouten een Arduino programmeren
« Reactie #46 Gepost op: 20 maart 2020, 13:28:14 »
Duff's device, daar had ik inderdaad nog nooit van gehoord. Uit 1983, toen zat ik nog diep in mainframes (BAL,Cobol etc). Maar het is ook interessant wat er over de performance gezegd wordt. Destijds, in 1983, was de C compiler nog vrij simpel, alleen de K&R variant, later met GNU C en uitgekookte optimalisatie, werd dat anders. Bijvoorbeeld het gebruik van register voor variabelen. Uit de tijd dat ik met GNU C en performance bezig was, bleek uit de testen dat het gebruik van register niet nodig was en meestal contraproductief werkte, omdat je daarmee de mogelijkheden van de optimalisator beperkte.

Groet Meino
« Laatst bewerkt op: 20 maart 2020, 21:36:06 door meino »
A clean desk is a sign of an empty mind

Kranenberg

meino

  • Offline Offline
  • Berichten: 727
Re: Zonder fouten een Arduino programmeren
« Reactie #47 Gepost op: 20 maart 2020, 13:40:19 »
Nu we toch bezig zijn, hebben jullie dit wel eens gelezen: http://yosefk.com/c++fqa/defective.html

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
Re: Zonder fouten een Arduino programmeren
« Reactie #48 Gepost op: 20 maart 2020, 15:10:45 »

 ;D
Verzonden vanaf mijn desktop met Firefox

PaulRoman

  • Offline Offline
  • Berichten: 102
Re: Zonder fouten een Arduino programmeren
« Reactie #49 Gepost op: 20 maart 2020, 18:08:20 »
Mede hobbyist,
...
Ik heb voor zowel beginnende als gevorderde programmeurs een korte driedelige cursus geschreven in Nederlands (In Jip en Janneke taal) over het programmeren van een Arduino. De hoofddoelen van deze cursus zijn om jou te helpen in het voorkomen van fouten, je te helpen met het opzetten met ingewikkelde processen en om je te helpen om je code zowel netjes, simpel als leesbaar te houden.
...

Hallo heren,

Was dit draadje niet ooit begonnen voor de beginnende en de gevorderde programmeur ? Ik denk dat de beginnende inmiddels wel is afgehaakt !  ;D
Jammer voor Bas die zich zoveel moeite heeft getroost. (Al ben ik het met zijn zienswijze lang niet altijd eens).

Groet,

Paul
Schäßburg an der Kokel

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #50 Gepost op: 20 maart 2020, 19:17:23 »
Deel 3 komt nog, dat is pas de bom  (y)

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #51 Gepost op: 31 maart 2020, 14:46:19 »
Ik ben bijna klaar met deel 3 maar aanvullend op deel 2 heb ik een functionerende AHOB geprogrammeerd voor gebruik met (nu nog) 2 sporen. Het werkt natuurlijk ook met 1 spoor en je kan er ook zelf een AKI van maken, dat zou niet moeilijk moeten zijn.

https://github.com/bask185/ahob

Ik heb hem alleen getest met de seriele monitor en led pin 13 en met een draadje heb ik inputs getriggerd. Alles lijkt goed gaan, er is geen onvoorspelbaar gedrag.

Het programma reageerde in grote lijnen precies zoals verwacht. Er zat geen fout in de flow van de drie state-machines.

Ik had natuurlijk een paar kleine foutjes. De servo's stuurde ik verkeerd om aan (1 en 2 omgewisseld), ze bleven atlijd open. Ik was ergens een digitalRead vergeten dus ik tikte if(input == false) ipv if(digitalRead(input) == false; Ik kon met de teksten op de seriele montitor echter in no-time deze bugs opsporen. Maar er waren verder geen grote dealbreakers.

Het coderen heeft me denk ik net een uur gekost.

Treinen kunnen beide kanten op beide sporen rijden. Volgorde doet er niet toe. Het gaat ook goed als de bomen al openen en er komt een nieuwe trein binnen, dan gaan de bomen weer dicht vanaf het punt waar ze gebleven waren.

Ik zou zeggen: test het uit, bekijk de source code en met name de state machines (railCrossing.cpp, readTrack1.cpp en readTrack2.cpp) (en bouw een werkende AHOB in je modelbaan  :P).

Overzicht van de IO:
2 detector1 INPUT_PULLUP
3 detector2 INPUT_PULLUP
4 detector3 INPUT_PULLUP
5 detector4 INPUT_PULLUP
6 servoPin1 OUTPUT
7 servoPin2 OUTPUT
10 led1 OUTPUT
12 blinkLed1 OUTPUT
13 blinkLed2 OUTPUT

Als iemand vragen heeft, hoor ik het graag.

Mvg,

Bas


Martin Hornis

  • Offline Offline
  • Berichten: 1068
Re: Zonder fouten een Arduino programmeren
« Reactie #52 Gepost op: 31 maart 2020, 16:02:26 »
Is er een filmpje van?

a) Bij gewoon dubbelspoor kun je met 4 detectors volstaan.
b) Maar bij dubbel enkelspoor heb je minimaal 6 detectors nodig.

Heb jij het systeem voor a) gemaakt?
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32; eigen treindetectiesysteem aangesloten op OC32; controleprogramma's voor iTrain en OC32.

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #53 Gepost op: 31 maart 2020, 17:04:54 »
Mijn implementatie: Elk spoor heeft 2 detectors. Een trein kan van beide kanten aankomen. Het maakt niet uit welke van de detector als eerst wordt getriggerd. De andere detector wordt dan gebruikt om te te bepalen of de trein er voorbij is. De trein moet eerst naar deze detector toe rijden, vanaf dat punt moet de detector minimaal 10 seconde vrij zijn geweest om het blok weer vrij te geven. Deze tijd kan je natuurlijk aanpassen.

Dit heeft misschien het nadelige effect dat de bomen relatief laat open gaan. Die 10 seconde zit er meer tussen voor als de detector kleiner is dan de grootste as-afstanden. De tijd kan ook makkelijk naar 0 toe.

Wat je zou ook kunnen doen, en ik denk dat jij dit ook bedoelt, je kan op de overgang zelf een detector maken. Dan kan je de buitenste 2 detectors parallel aansluiten op 1 van de 2 arduino ingangen en dan doe je de middelste aansluiten op de andere ingang. Dat zou ook moeten werken en het maakt niet hoe je ze op de ingangen aansluit. Maar bijwerking: als de middelste sensor dus 10 seconde verbroken is, en de trein is nog net aan in contact met een van de buitenste sensors dan zouden de bomen weer dicht gaan. Je kan die 10 seconde ophogen tot max 255 om er zeker van te zijn dat je trein er voorbij is

De 2 sporen hebben geen afhankelijkheden van elkaar. Zolang 1 van de sporen zegt, 'ik ben nu bezet' dan sluit de overgang. Als beide sporen zeggen: 'ik ben niet meer bezet' dan gaan de bomen weer open. De overgang zelf en de bezetmeldingen zijn 3 parallele processen.

Als je (of iemand anders) nog een verzoeknummer heb, kunnen we altijd wat regelen. Ik kan de software sws ook geschikt maken voor een AKI.

Overigens de sluit/open tijd van de bomen instelbaar in config.h. De open en sluit posities van de servo's zijn ook daar instelbaar. De servo's delen alleen nog wel dezelfde posities op het moment. Als servo 1 van 10 naar 100 graden draait dan doet servo 2 dat ook.

Mvg,

Bas

PS.
Ik zelf nog geen overgang gebouwd. De software stuurt serieel feedback over alles wat het doet. Zo kon ik bevestigen dat het goed werkt desondanks ik nog geen servo daadwerkelijk heb aangestuurd. Ik kan eventueel een filmpje maken van de seriele monitor, maar je kan ook zelf het programma in een arduino stoppen en de detectors nabootsen met een draadje.
« Laatst bewerkt op: 31 maart 2020, 17:07:20 door bask185 »

Martin Hornis

  • Offline Offline
  • Berichten: 1068
Re: Zonder fouten een Arduino programmeren
« Reactie #54 Gepost op: 01 april 2020, 00:19:58 »
Een overwegschakeling voor dubbel enkelspoor behoort er uit te zien zoals in de bijlage staat. De uitgangen 300 en 302 stellen de overweg in werking. De geheugenschakelingen 301 en 303 "onthouden" dat de trein op de overweg (contacten 01 en 04) is geweest. Uitgang 10 is het overwegsignaal dat de lampen, bellen en slagbomen aanstuurt.
« Laatst bewerkt op: 01 april 2020, 00:21:32 door Martin Hornis »
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32; eigen treindetectiesysteem aangesloten op OC32; controleprogramma's voor iTrain en OC32.

Eric B

  • Offline Offline
  • Berichten: 3753
  • NS tijdperk III b/c
    • Obdam in H0 op Facebook
Re: Zonder fouten een Arduino programmeren
« Reactie #55 Gepost op: 01 april 2020, 08:30:43 »
Wow krijg ik me daar even een flashback naar de TI PM550 met program terminal ... Bedankt Martin  ;D
Fotodijk(je)
Obdam
Als alles meeloopt hebben we morgen een optocht.

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #56 Gepost op: 01 april 2020, 10:36:12 »
Dit is zo verwarrend  ??? Van alle talen in de wereld (NL, Chinees, C, assembly, arabisch) krijg ik net de enige taal voor me die ik niet kan behappen, Logic Ladder Diagram. Chinees kan ik tenminste nog in Google translate gooien  ;D

Ik heb misschien elektrotechniek gestudeerd maar van logic ladder diagrammen snap ik echt niks. Ik vind het echt heel knap dat mensen er ook maar iets mee kunnen maken.

Ik kan opmaken dat je 6 detectors heb 00 t/m 05 en dat 01 en 04 de middelste zijn? Maar hoe het nu precies werkt, is me echt een mysterie? Betekent |/| hier 'niet'

Ik kan ook niet helemaal opmaken of je nu wel of niet hebt begrepen wat ik bedoelde ??? Ik dacht dat ik het vrij duidelijk uitlegde ???

Mvg,

Bas

EDIT:

Ik heb de state-diagrams toegevoegd waarmee ik de code grotendeels gegenereerd heb. Werkt zoals in de beschrijving van mn vorige post. als in wacht positie eerst sw1 gemaakt is, dan wordt sw2 in de gaten gehouden. Als sw2 gemaakt is, wordt er gewacht totdat deze niet meer gemaakt is. De trein is er dan voorbij. Sw3 en Sw4 werken hetzelfde. Beide blokken vertellen de overweg met 2 globale variabelen of er een trein is of niet.
« Laatst bewerkt op: 01 april 2020, 10:47:55 door bask185 »

Martin Hornis

  • Offline Offline
  • Berichten: 1068
Re: Zonder fouten een Arduino programmeren
« Reactie #57 Gepost op: 01 april 2020, 12:49:19 »

Citaat
Betekent |/| hier 'niet'
Ja: een verbreekcontact.
Komt een waarheidstabel je bekend voor?

Nu ik er even over nadenk, besef ik dat dit schema voor volledige detectie geldt -> zoals het Märklin-systeem.
« Laatst bewerkt op: 01 april 2020, 14:04:56 door Martin Hornis. Reden: aanvulling »
Märklin K-rails met boogstralen > 500 mm; NS-lichtseinen met cijferbak: 4, 6 en 8 in één bak; iTrain; Intellibox I; OC32; eigen treindetectiesysteem aangesloten op OC32; controleprogramma's voor iTrain en OC32.

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4670
Re: Zonder fouten een Arduino programmeren
« Reactie #58 Gepost op: 01 april 2020, 13:03:56 »
Op zich zijn ladder diagrammen niet zo lastig. Je moet het vooral vergelijken met een schema met echte schakelaars en gloeilampen/relais (tri-state/float/zweven bestaat niet, ofwel iets niet aansturen betekend uit). Echt 1 op 1 de relais techniek die het verving. Links heb je de voedingsrail en rechts GND (of andere voedingsrail). Vervolgens ga je er van boven naar beneden per circuitje doorheen.

-| |- is een NO knop (of relais) contact
-|/|- is een NC knop (of relais) contact
-( )- is de lamp/relais

In de basis dus erg simpel. Alleen als het complex wordt dan wordt het snel minder overzichtelijk.

@Martin Hornis Het lijkt me alleen een beetje complex voor wat het doet... Waarom niet direct 300 en 302 als geheugen gebruiken? Maar komt misschien vooral dat ik even mis wat de andere 2 ingangen (per helft) doen.


Timo
Verzonden vanaf mijn desktop met Firefox

bask185

  • Offline Offline
  • Berichten: 566
Re: Zonder fouten een Arduino programmeren
« Reactie #59 Gepost op: 01 april 2020, 13:35:47 »
Ja die ken ik van digitale techniek. OR en AND poorten, pulsentellers, flip-flops dat vond ik wel leuk om te doen. Ik heb ooit een digitale wekker er mee ontworpen, kreeg er een 9.6 voor met natuurkunde  (y)

Ik snap het hele punt niet meer van die LLD behalve om mij te laten zien hoe volgens jou de ahob zou moeten werken. Het voelt voor mij ook een beetje als mosterd na de maaltijd. Ik ben er al klaar mee, ik heb in details uitgelegd hoe mijn implementatie werkt omdat je het schijnbaar niet helemaal snapt, dat kan, niks mis mee. En vervolgens krijg ik een LLD voor m'n neus van een of ander programma dat waarschijnlijk hetzelfde doet als de mijne??? Je geeft ook niet echt concreet antwoord op de vraag of je m'n implementatie nu wel of niet snapt? Ik vermoed van wel, maar we lopen hier dus helemaal langs elkaar heen.

Ik heb slechts een Arduino programma gepost die een ahob met servomotors en met ledjes kan aansturen en ik heb uitgelegd hoe die werkt. Mijn voornaamste reden is om mijn programmastructuur en werkwijze te demonstreren. De 2e reden is om andere mensen simpelweg een werkend ahob programma kado te geven. Dat zijn mijn bedoelingen.

Mvg,

Bas