Mega versus Due
14 berichten
• Pagina 2 van 2 • 1, 2
Re: Mega versus Due
Nicoverduin,
de pinchangeint werkt inderdaad op andere ingangen. Heb het uitgetest op poort A1 en de pulsen worden geteld. Alleen, alles wordt nu wel dubbel geteld. Ik gebruik dit om de pulsen van de waterteller te meten. Als ik het reedcontact in de teller schuif en ik maak gebruik van de "gewone" interrupt op pin 3 (int0) dan worden er 1 puls per halve liter gemeten. Met de aansluiting op pin A1 en voor de rest niets gewijzigd in het programma (buiten de wijziging van pin3 naar pin A1) worden er nu 2 pulsen per halve liter geteld.
Op zich geen probleem, deel ik gewoon het aantal pulsen door 4 om 1 liter te bekomen. Maar ik heb geen idee waarom die nu plots dubbel telt.
Dit is de command line
PCintPort::attachInterrupt(A1, debounceInterrupt,RISING);
Daar doe ik een debounce en heb de tijd al verhoogd van 15 naar 30 ms
long debouncing_time = 30; //Debouncing Time in Milliseconds 15 default
void debounceInterrupt() {
if((long)(micros() - last_micros) >= debouncing_time * 1000) {
waterpulsInterrupt(); // in routine wordt teller met 1 verhoogd
last_micros = micros();
}
Heb jij, (of iemand anders) een idee waarom dit nu dubbel geteld wordt?
Dank u
Herman
de pinchangeint werkt inderdaad op andere ingangen. Heb het uitgetest op poort A1 en de pulsen worden geteld. Alleen, alles wordt nu wel dubbel geteld. Ik gebruik dit om de pulsen van de waterteller te meten. Als ik het reedcontact in de teller schuif en ik maak gebruik van de "gewone" interrupt op pin 3 (int0) dan worden er 1 puls per halve liter gemeten. Met de aansluiting op pin A1 en voor de rest niets gewijzigd in het programma (buiten de wijziging van pin3 naar pin A1) worden er nu 2 pulsen per halve liter geteld.
Op zich geen probleem, deel ik gewoon het aantal pulsen door 4 om 1 liter te bekomen. Maar ik heb geen idee waarom die nu plots dubbel telt.
Dit is de command line
PCintPort::attachInterrupt(A1, debounceInterrupt,RISING);
Daar doe ik een debounce en heb de tijd al verhoogd van 15 naar 30 ms
long debouncing_time = 30; //Debouncing Time in Milliseconds 15 default
void debounceInterrupt() {
if((long)(micros() - last_micros) >= debouncing_time * 1000) {
waterpulsInterrupt(); // in routine wordt teller met 1 verhoogd
last_micros = micros();
}
Heb jij, (of iemand anders) een idee waarom dit nu dubbel geteld wordt?
Dank u
Herman
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Mega versus Due
Yep,
Het is Pin Change = bij verandering van level = das van HOOG->LAAG en LAAG->HOOG. Resultaat gewoon door 2 delen en opgelost.
Ik vraag me wel of of debounce nodig is. Mogelijk is het handiger op een 100nF condensatortje over de switch te zetten. 't is maar een idee.
Verder doe je een casting over micros(). Dat is eigenlijk niet nodig. micros() geeft al een long terug.
Het is Pin Change = bij verandering van level = das van HOOG->LAAG en LAAG->HOOG. Resultaat gewoon door 2 delen en opgelost.
Ik vraag me wel of of debounce nodig is. Mogelijk is het handiger op een 100nF condensatortje over de switch te zetten. 't is maar een idee.
Verder doe je een casting over micros(). Dat is eigenlijk niet nodig. micros() geeft al een long terug.
Re: Mega versus Due
Dank u, inderdaad als het "pin change" is verklaart dit alles.
De debounce routine heb ik zo van het arduino forum geplukt.
Dankt voor de hulp.
Herman
De debounce routine heb ik zo van het arduino forum geplukt.
Dankt voor de hulp.
Herman
Re: Mega versus Due
ja de diodes heb je nodig als je meer interupts wil afhandelen dan de interupt pinnen die je hebt.
Is een heel oude techniek, om op de Z80 meerdere IC aan te sluiten, zo gauw er iets veranderde op een 8255 dan zet je die intpin aan (laag want is open collector) en dat had weer te maken met dat je meerdfere 8255 aan elkaar kon hangen.
Je moet ervan uit gaan dat als een interupt is afgehandeld de uitgang laag is.
dus zolang je een interupt ergens hebt, dan moet je dus blijven pollen, tot de pin laag is.
Is een heel oude techniek, om op de Z80 meerdere IC aan te sluiten, zo gauw er iets veranderde op een 8255 dan zet je die intpin aan (laag want is open collector) en dat had weer te maken met dat je meerdfere 8255 aan elkaar kon hangen.
Je moet ervan uit gaan dat als een interupt is afgehandeld de uitgang laag is.
dus zolang je een interupt ergens hebt, dan moet je dus blijven pollen, tot de pin laag is.
paul deelen
shooter@home.nl
shooter@home.nl
14 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 45 gasten