Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #60 on: April 10, 2012, 12:12:44 pm » |
no l'ho collegato il sensore  se lo scollego non legge niente proprio niente... ma sono l'unico che ha sti problemi?  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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16470
Don't know what I do
|
 |
« Reply #61 on: April 11, 2012, 01:23:10 am » |
no l'ho collegato il sensore  se lo scollego non legge niente proprio niente... ma sono l'unico che ha sti problemi?  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!  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  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? 
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #62 on: April 11, 2012, 11:45:03 am » |
ok grazie mille 
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #63 on: May 07, 2012, 10:19:57 am » |
non ho più guardato gli interrupt sul mega, ho troppe cose da fare e poco tempo per fare tutto  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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16470
Don't know what I do
|
 |
« Reply #64 on: May 07, 2012, 10:26:45 am » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #65 on: May 07, 2012, 10:33:09 am » |
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
|
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8232
:(){:|:&};:
|
 |
« Reply #66 on: May 07, 2012, 10:35:35 am » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #67 on: May 07, 2012, 10:37:13 am » |
nono, se disattivi gli interrupt NON esci più da pulseIN.. a questo non ci avevo pensato... grazie mille per avermelo detto! 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16470
Don't know what I do
|
 |
« Reply #68 on: May 07, 2012, 03:02:48 pm » |
nono, se disattivi gli interrupt NON esci più da pulseIN.. a questo non ci avevo pensato... grazie mille per avermelo detto!  Ma te l'ho detto io 2 post qui sopra....  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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #69 on: May 07, 2012, 03:06:31 pm » |
si lo so ma ci ho pensato dopo  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! 
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #70 on: May 08, 2012, 10:22:42 am » |
dalla funzione di un interrupt posso fare una cosa tipo così? void interrupt() { loop(); } perchè vorrei che quando termina la funzione dell'interrupt il programma ripartisse dall'inizio... grazie in anticipo 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16470
Don't know what I do
|
 |
« Reply #71 on: May 08, 2012, 10:33:16 am » |
Se lo fai ti frusto  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
Tesla Member
Karma: 82
Posts: 8232
:(){:|:&};:
|
 |
« Reply #72 on: May 08, 2012, 10:41:46 am » |
dalla funzione di un interrupt posso fare una cosa tipo così? void interrupt() { loop(); } perchè vorrei che quando termina la funzione dell'interrupt il programma ripartisse dall'inizio... grazie in anticipo  se fai così fai eseguire un ciclo di loop ma mentre il micro è in stato interrupt. prendi fuoco. 
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 836
ƎR like no other.
|
 |
« Reply #73 on: May 08, 2012, 10:47:36 am » |
ahaha  va beh dopo provo a richiamare il loop da un interrupt, vediamo cosa succede, per ora l'ho solo pensato  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 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16470
Don't know what I do
|
 |
« Reply #74 on: May 08, 2012, 10:49:17 am » |
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
|
|
|
|
|
|