Interrupt di Arduino

Ciao a tutti, volevo chiedere, visto che delay e millis, se non ho capito male, con l'interrupt non funzionano, come si fa per contare un tempo fra un interrupt e l'altro?

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden
Loading thread data ...

Il 28/08/19 23:22, Drizzt do'Urden ha scritto:

Al primo interrupt salvi il valore di 'millis'. Al secondo calcoli quanto e` trascorso. (NOTA: invece di 'millis' puoi anche salvare il valore di 'micros' che ha una risoluzione mille volte maggiore).

Visto che tutti gli interrupt sono uguali, come distingui il "primo" dal "secondo", o il secondo dai successivi? Con una variabile, magari chiamata 'primo_giro', che vale inizialmente 1 (o true). La volta che vale 1 (accade solo al primo giro) salvi il tempo e la commuti a 0 (o false). Quando vale 0 calcoli il trascorso.

volatile unsigned long inizio; volatile unsigned long trascorso = 0; volatile boolean primo_giro = true;

void isr() { unsigned long adesso = micros(); if (primo_giro) { primo_giro = false; inizio = adesso; } else { trascorso = adesso - inizio; inizio = adesso; } }

Reply to
Claudio_F

Il 29/08/2019 00:51, Claudio_F ha scritto:

Quindi confermate che la funzione millis non blocca il tempo durante l'intervento dell'interrupt? Scusate se chiedo ma sul manuale diche che le funzioni delay e millis non incrementano il tempo durante l'interrupt, oppure ho capito male io?

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 29/08/2019 13:12, alfio ha scritto:

un interrupt e l'altro al massimo passeranno 5 mS ma possono anche passare 1000 mS.

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 29/08/2019 14:51, alfio ha scritto:

Giusto, vedo se riesco a farlo, grazie :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 29/08/2019 16:36, Drizzt do'Urden ha scritto:

Scusate se mi intrometto Ma col debug del codice, come fate? Nel senso, usate l'ide Arduino (che non lo consente) o altro?

Reply to
RobertoA

Il 29/8/19 16.51, RobertoA ha scritto:

collegata tramite la sua connessione seriale tramite USB (io uso la scheda Arduino Uno solo per fare le prove; poi monto un microcontrollore su millefori con il resto che serve), oppure togliendo righe sospette di fare danni o scrivendo sul display, se presente, qualche valore.

--
Canale YouTube: http://goo.gl/522kv4
Reply to
LAB

Racal-Dana 1991 che ho acquistato usato:

c'era stato inserito un prescaler artigianale da 1,3GHz che divideva per

1000, ma il primo divisore divideva per 64, poi c'era un circuito che, per 2 volte, prendeva 4 impulsi e scartava il quinto, ottenendo una divisione complessiva di 64 x 5/4 x 5/4 = 100. Un divisore per 10, poi, otteneva la divisione per 1000. Il problema era che il segnale in uscita non era esattamente periodico: un frequenzimetro comune, misurando gli impulsi in un secondo, non avrebbe avuto problemi, ma il 1991 conta il periodo in nanosecondi e la lettura non era stabile!

Per risolvere il problema ho mantenuto solo il primo divisore per 64, impostando automaticamente una divisione per 0,015625 dal tastierino numerico tramite dei fotoaccoppiatori.

impostare i pin come uscite, avevo fatto un for a cui avevo messo un punto e virgola prima delle graffe! Allora ho cominciato a fare prove, un'uscita per volta, poi ho impostato i pin come uscite senza il for e

Ho scritto sul forum di Arduino per chiedere aiuto... ed era solo il punto e virgola! :)

--
Canale YouTube: http://goo.gl/522kv4
Reply to
LAB

Perfetto, grazie per la dritta, ho scritto un piccolo sketch per leggere gli impulsi dell'anemometro e trasformarli in m/S e funziona, il mio primo sketch, che emozione :-D

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 04/09/2019 12:07, alfio ha scritto:

contare il tempo fra due stessi stati del pin, in pratica il sensore di hall viene interessato dalla calamita una volta al giro quindi devo vedere i due punti alti o bassi che indicano il giro, pulsein mi darebbe il tempo fra l'inizio del passaggio della calamita e la fine che

--
Saluti da Drizzt. 


www.agidone.altervista.org 
http://www.tappezzeriagraziella.com/ 
MAI PIU' OPEL IN VITA MIA!!!!
Reply to
Drizzt do'Urden

Il 04/09/2019 23:00, alfio ha scritto:

4 impulsi che sono negativi in quanti il sensore hall manda a massa il segnale al pin impostato in pullup. Per usare pulseIn devo calcolare esattamente il tempo che passa fra le

nono, va benissimo, ogni suggerimento lo analizzo (per quanto possibile con le mie conoscenze :-) ) e lo valuto, inoltre devo imparare e ogni consiglio va bene.

Reply to
Drizzt do'Urden

Il 04/09/2019 23:00, alfio ha scritto:

chiusura come quelli degli alzavetri dell'auto, se premo veloce manda la tenda a fine corsa, mentre se tengo premuto si muove fino a quando non mollo, la funzione pulseIn() tornerebbe utile, devo fare qualche prova.

Reply to
Drizzt do'Urden

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.