Go Down

Topic: chiarimenti sugli interrupt (Read 5064 times) previous topic - next topic

ƎR

cosa intendi per "polling"?
il sensore è questo: http://www.robot-electronics.co.uk/htm/srf05tech.htm
comunque questo è un codice di prova dopo avrò 4 di questi sensori e tante altre cose...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

ƎR

allora, nuova questione :smiley-sweat: quel codice che ho postato prima funziona bene, devo sistemarlo ancora un po' ma per provare va bene... fin ora ho provato sugli INT0 e 1, ma avendo a disposizione altri 4 INT sul mega volevo usare anche quelli, il problema è che  lo stesso codice con le opportune modifice da risultati strani su questi altri 4 pin... sembra che rillevi dei cambiamenti che in realtà non ci sono e che sugli INT0 e 1 non erano presenti... cosa può essere? non mi sembra di aver sbagliato niente perchè il codice è lo stesso... :~
confido nel vostro aiuto! grazie in anticipo! ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Io continuo a non capire. Ma perché vuoi usare lo stesso pin per trasmettere il segnale e per leggerlo con un interrupt, essendo così costretto a disattivare l'interrupt per evitare letture errate?

1) attivi l'INT0
2) spedisci il treno di impulsi per attivare il sensore
3) l'ISR a questo punto legge le risposte del sensore e le "presenta" al codice principale
4) il codice gestisce le informazioni in ricezione e poi torna al punto 2)

ƎR

perchè il sensore usa lo stesso pin per fare queste due operazioni...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72


perchè il sensore usa lo stesso pin per fare queste due operazioni...

:smiley-sweat:

E quanto tempo passa dall'inizio dei segnali di attivazione alla risposta del sensore?
Ce la fai, cioè, a commutare lo stato del pin da OUTPUT ad INPUT in quel lasso di tempo?

PS:
per "polling" si intende la procedura di raccolta dati.

ƎR

Quote
This mode uses a single pin for both Trigger and Echo signals, and is designed to save valuable pins on embedded controllers. To use this mode, connect the mode pin to the 0v Ground pin. The echo signal will appear on the same pin as the trigger signal. The SRF05 will not raise the echo line until 700uS after the end of the trigger signal. You have that long to turn the trigger pin around and make it an input and to have your pulse measuring code ready. The PULSIN command found on many popular controllers does this automatically.

si ho 700us ce la faccio :) ho sempre fatto con pulseIn per vedere la durata dell'impulso, adesso volevo provare a fare con gli interrupt, con i pin 2 e 3 funziona (INT0 e INT1), ma con gli altri no e non capisco il perchè, il codice è uguale...  :~
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Però quel sensore funziona anche con pin separati.


con i pin 2 e 3 funziona (INT0 e INT1), ma con gli altri no e non capisco il perchè, il codice è uguale...  :~

I pin del Mega sono differenti.
http://arduino.cc/en/Hacking/PinMapping2560

L'INT0 e 1 non sono mappati sui pin 2 e 3 ma su 21 e 20, vedo dall'immagine.

ƎR

Quote
Però quel sensore funziona anche con pin separati.

si si lo so ma preferisco usarlo così che mi risparmio qualche pin...

Quote
I pin del Mega sono differenti.
http://arduino.cc/en/Hacking/PinMapping2560

L'INT0 e 1 non sono mappati sui pin 2 e 3 ma su 21 e 20, vedo dall'immagine.

mmmm non sono d'accordo, io ho letto così:
Quote
External Interrupts: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), and 21 (interrupt 2). These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details.

sugli INT0 (pin 2) e INT1 (pin 3) funziona bene, mentre sugli INT2, INT3, INT4 e INT5 no, non so il perchè :(
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

#53
Apr 10, 2012, 06:17 pm Last Edit: Apr 10, 2012, 06:20 pm by leo72 Reason: 1
Non ho una MEGA per poterti dire chi ha ragione e chi ha torto ma il datasheet, sulla cui autorevolezza non ci piove, conferma la mappatura di quell'immagine e non dello scritto che hai riportato. A questo punto andrebbe aperta la libreria che gestisce gli interrupt per vedere come mappa i pin ma è una cosa che non mi va di fare dato che non ho interesse a farla  ;)

EDIT:
difatti ho ragione io (ed il datasheet). Se vedi i pin 2 e 3 dell'immagine che ti ho postato, noti che su quei pin sono riportati gli INT4 e INT5! Quindi la mappatura fatta dalla libreria di Arduino "inganna" perché rigira i pin un po' come vuole. E c'è una priorità nell'esecuzione degli interrupt che questo stravolgimento non tiene conto. Quindi non so a cosa poi viene mappato l'INT4 se l'INT4 è venduto come INT0  ;)

ƎR

ma gli INT0 e INT1 funzionano, sono gli altri che rillevano cose strane... :~
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72


ma gli INT0 e INT1 funzionano, sono gli altri che rillevano cose strane... :~

Rileggi il mio edit precedente XD

ƎR

eh ecco grazie :) sarebbe interessante da capire perchè leggono cose strane...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Ti consiglio di studiarti il datasheet, dandogli una scorsa molto veloce ci sono alcune cose da tener conto nell'uso degli INT, che non so se il codice dell'Arduino esegue (es. pag. 113 in basso).

Buon divertimento.  :P

ƎR

pag 113 di cosa? del datasheet del atmega2560?
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 ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

un pin in input lasciato libero legge valori a caso.. molto utile per rilevare la presenza di esseri viventi nelle vicinanze :-)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up