Tijd om een case te verwerken

Alles wat niet past in bovenstaande onderwerpen
Berichten: 12
Geregistreerd: 24 Jun 2018, 19:11

Tijd om een case te verwerken

Berichtdoor Don75 » 01 Jun 2022, 20:09

Hallo allemaal,

Even een vraag. Waarschijnlijk een stomme... maar ik ben het even bijster...


Een master arduino krojgt een puls van een schakelaar vervolgens zendt deze een getal naar een slave bijvoorbeeld "100".
De slave ontvangt dit en voert, via een switch case statement, uit wat bij case "100" staat. Dit werk mooi .
Vervolgens ontvangt de slave weer een nieuw getal van de master.
Maar als de case nog niet volledig verwerkt is kapt hij deze af om aan de nieuwe te beginnen.

Hoe zou ik dit kunnen voorkomen?

Advertisement

Berichten: 68
Geregistreerd: 04 Sep 2021, 08:31

Re: Tijd om een case te verwerken

Berichtdoor RobGood » 02 Jun 2022, 07:15

Dat kan voorkomen als de afhandeling van de schakelaar met een interrupt wordt gedaan. De nieuwe invoer onderbreekt dan de uitvoer van de vorige die wel na het uitvoeren van de nieuwe wordt gedaan. Gevolg dat de nieuwe weer door de oude wordt overschreven eigenlijk wordt het gewoon een sooitje. Je moet evoor zorgen dat alles netjes in volgorde komt. Ik scan altijd de schakelaar acties, kan dat niet, gebruik dan de sei en cli instructies om de interrupts tijdens een interrupt efkens te interupteren. Maar vast is er nog veel meer te bedenken. Rob

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Tijd om een case te verwerken

Berichtdoor shooter » 02 Jun 2022, 08:12

als je met een case bezig gaat tyest je eerst even of de busyvlag aanstaat, zo nee ga je gang zet de busyvlag aan en aan het eind van de case zet je deze weer uit.
en dat kan dus ook zoals rob schrijft een interupt zijn. bedenk wel dat een schakelaar dendert en dus meerdere pulsen geeft.
paul deelen
shooter@home.nl

Berichten: 12
Geregistreerd: 24 Jun 2018, 19:11

Re: Tijd om een case te verwerken

Berichtdoor Don75 » 02 Jun 2022, 12:34

Dank je wel voor jullie reactie,

Een busvlag? dat ga ik eens zoeken. Sei en cli instructies ken ik ook niet. Heb inmiddels al diverse arduino boeken gelezen en doorgewerkt maar ben dat nog niet tegen gekomen.

Hebben jullie toevallig iets van een voorbeeld van wat je ermee bedoeld..
Of een misschien een hint waar ik dat kan vinden?

Voor het stukje schakelaars gebruik ik de Bounce librarie.. dat werkt prima, ook voor dender..

Ben nu al enige tijd bezig met een flipperkast. Een leuk project en krijg tot nu toe alles wel werkend. Met af en toe een duwtje in de goede richting via dit forum. Dus dank jullie wel

Groeten
Don

Berichten: 68
Geregistreerd: 04 Sep 2021, 08:31

Re: Tijd om een case te verwerken

Berichtdoor RobGood » 02 Jun 2022, 12:49

Ah... een flipperkast, dat lijkt me gaaf.
sei() is een ingebouwde functie set een bitje aan in het systeem register van de microcontroller zodat er interrupts worden uitgevoerd, Cli() vergelijkbare functie die dat zelfde bitje uitzet.
Gebruikelijk wordt in een ISR (interrupt service routine) dit gebruikt aan begin en einde van die functie om te voorkomen dat de interupt wordt geinteruppeert.... maar je gebruikt een library dus daar zal dat best wel goed worden afgehandeld dus daar zit je probleem niet...
Ik denk eerder dat je flipperkast te veel tijd nodig heeft om zo een opdracht uit te voeren... en dan komt de volgende alweer...
hmmm...denk eens aan het maken van buffers...
de actie en getal sturen laat je niet direct uitvoeren maar je slaat de actie op in een array van buffers.
Vervolgens laat je in de loop 1 voor 1 de buffers testen en uitvoeren en weer vrij geven...
Dat vangt dan de vertraging door de flipperkast op, wel is het nodig dat het af en toe wat minder snel gaat anders lopen de buffers allemaal vol en krijg je weer de zelfde problemen....
succes.....Rob

Berichten: 12
Geregistreerd: 24 Jun 2018, 19:11

Re: Tijd om een case te verwerken

Berichtdoor Don75 » 02 Jun 2022, 15:47

Ah okay... ik denk dat ik begrijp wat je bedoeld.. dan zal ik daar eens in duiken...

Mijn opzet is als het volgt..
Ik heb drie arduinos
De master vangt alle signalen op uit de kast.. dus alle schakelaars
Deze signalen verdeel ik..
1 naar een print met 6 74hc595 ic's zodat ik genoeg uitgangen heb voor verlichting hierachter zitten weer ulns om het vermogen te vergroten per uitgang.
Alles apart gevoed maar een gemeenschappelijke gnd

2 een slave arduino die een dotmatrix (zelfbouw)aanstuurt.. deze ontvangt de bytes maakt daar punten van en telt ze op of af..
Bij bonus endergelijke laat deze ook een tekst door het beeld scrollen
Dit werkt..

3 een tweede slave voor een licht effect.. boven in het veld heb ik een dotmatrix die letters vormen.. hier over loopt permanent een effect. Zodra de bal een bepaalde schakelaar maakt zal er een letter oplichten en een ander effect laten zien. Op de werkbank werkte dit.. nu eenmaal in de kast werkt ie ze niet af..

Maar buffers daar ga ik naar kijken.. dank je wel!

Ik weet niet of ik hier een foto of filmpje kan plaatsen...

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Tijd om een case te verwerken

Berichtdoor shooter » 02 Jun 2022, 16:42

Ja rob is goed bezig, en de array vul je dan binnen de interupt en die handel je dus in de loop langzaam af, dus je schrijft eerst heel snel een array met getallen, dus in de interupt en in de gewone loop kijk je of er iets in de array staat en handelt die rustig af. zoals een autorace eerst alle doorkomsten schrijven en pas daarna maak je een lijst met elke renner.
paul deelen
shooter@home.nl

Terug naar Theekransje

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten