Pages: 1 ... 3 4 [5] 6   Go Down
Author Topic: chiarimenti sugli interrupt  (Read 3346 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

no l'ho collegato il sensore smiley-razz se lo scollego non legge niente proprio niente...
ma sono l'unico che ha sti problemi?  smiley-red

i pin sono giusti perchè l'arduino fa qualcosa, ma lo fa in modo diverso rispetto a quello che fa con lo stesso programma con gli INT0 e INT1
« Last Edit: April 10, 2012, 02:32:46 pm by er_like_no_other » Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

no l'ho collegato il sensore smiley-razz se lo scollego non legge niente proprio niente...
ma sono l'unico che ha sti problemi?  smiley-red
Non ti buttare giù, non sei l'unico. Però devi leggere il datasheet.

pag 113 di cosa? del datasheet del atmega2560?
No, del libro di cucina!  smiley-lol smiley-lol

Quote
io ho visto che sul reference dicevano che per il mega erano disponibili questi 4 INT in più ma non ho letto controindicazioni... boh adesso guardo un po' in giro... grazie comunque smiley-wink
Non devi "guardare in giro", devi studiare il datasheet. Se su di esso ci sono decine di pagine sugli interrupt, forse vuol dire che non sono proprio argomenti da bar, giusto?  smiley-wink
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok grazie mille smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho più guardato gli interrupt sul mega, ho troppe cose da fare e poco tempo per fare tutto smiley-sad

comunque ho ancora un dubbio sugli interrupt: io devo leggere un sensore e per leggere questo sensore devo usare pulseIn, se io voglio che l'interrupt non mi interrompa la lettura del sensore lo disattivo prima di effetuare la lettura e lo riattivo quando l'ho finita, giusto? ma se c'è il cambio di stato durante la lettura del sensore e l'interrupt è disattivato, quando lo riattivo non legge che è cambiato lo stato, o si?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Spero di aver capito. Tu l'interrupt non lo usi per leggere il sensore ma per altre cose. Giusto? Però pulseIn usa delay, che a sua volta è basato sul timer 0, che a sua volta usa un interrupt per gestire l'incremento del contatore su cui si basa delay. Se blocchi genericamente gli interrupt con un noInterrupts() (che equivale a sei() ), blocchi tutto e non esci più da pulseIn. Devi bloccare selettivamente solo l'interrupt che non deve disturbarti.
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mmmm no il problema non è pulseIn.... il problema è che se disattivo l'interrupt durante pulseIn e dopo quando pulseIn è finito lo riattivo, mi perdo eventuali cambi di stato sull'interrupt e quando riattivo l'interrupt non sa cosa è successo durante la pausa... o sbaglio?
grazie
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nono, se disattivi gli interrupt NON esci più da pulseIN..

comunque sì, se disattivi gli interrupt, tutti ciò che avrebbe provocato un interrupt viene perso.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

nono, se disattivi gli interrupt NON esci più da pulseIN..
a questo non ci avevo pensato... grazie mille per avermelo detto! smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

nono, se disattivi gli interrupt NON esci più da pulseIN..
a questo non ci avevo pensato... grazie mille per avermelo detto! smiley-wink
Ma te l'ho detto io 2 post qui sopra....  smiley-roll-blue
E ti ho anche spiegato che se disattivi gli interrupt globalmente (con noInterrupts()) blocchi tutto, ma se hai un interrupt attivato da te (ad esempio un interrupt sul cambio di stato di un pin oppure su un timer differente rispetto al timer 0), puoi disattivare selettivamente solo quello agendo sul relativo bit del registro interessato.
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si lo so ma ci ho pensato dopo smiley-sweat

si, infatti, prima ci ho ripensato ed è tutto apposto devo solo trovare il modo di non perdere quello che succede durante il pulseIn
grazie per l'aiuto! smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

dalla funzione di un interrupt posso fare una cosa tipo così?
Code:

void interrupt()
{
 loop();
}
perchè vorrei che quando termina la funzione dell'interrupt il programma ripartisse dall'inizio...
grazie in anticipo smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se lo fai ti frusto  smiley-twist

Puoi settare un flag all'interno della ISR e poi, nel codice, controllare se il flag è true. Se è vero dai un asm(jmp $0000) (equivale ad un reset)
Logged


0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dalla funzione di un interrupt posso fare una cosa tipo così?
Code:

void interrupt()
{
 loop();
}
perchè vorrei che quando termina la funzione dell'interrupt il programma ripartisse dall'inizio...
grazie in anticipo smiley-wink

se fai così fai eseguire un ciclo di loop ma mentre il micro è in stato interrupt. prendi fuoco. smiley-mr-green
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ahaha smiley-mr-green
va beh dopo provo a richiamare il loop da un interrupt, vediamo cosa succede, per ora l'ho solo pensato smiley-razz

Puoi settare un flag all'interno della ISR e poi, nel codice, controllare se il flag è true. Se è vero dai un asm(jmp $0000) (equivale ad un reset)
in un linguaggio un po' più comune? cosa intendi per "flag all'interno della ISR"?
grazie ancora smiley
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intendo una variabile globale.
La imposti a false all'inizio dello sketch. La ISR (Internet Service Routine, la routine che gestisce il segnale di interrupt) la imposta a true. Tu non devi far altro che dentro al tuo codice principale controllare se questo flag è stato messo a true.
Logged


Pages: 1 ... 3 4 [5] 6   Go Up
Jump to: