Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« on: October 20, 2011, 03:06:11 pm » |
sto usando la funzione pulseIn per vedere la durata degli impulsi a livello alto di un'onda quadra a duty cycle variabile, il mio problema è che se il duty cycle è al 100% la funzione conta all'infinito e non si ferma più rallentandomi tutto il resto del programma, c'è un modo per dire che dopo un tot la funzione pulseIn è iniziata finisca senza aspettare la fine dell'impulso?? (la funzione pulseIn potrei usarla anche sui ATtiny84 o no??) grazie
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #1 on: October 20, 2011, 03:33:42 pm » |
Puoi usare un timeout: http://www.arduino.cc/en/Reference/PulseInDovresti poterla usare anche con i Tiny tramite il core Tiny, vedi a proposito la mia guida su come usare i Tiny85: va bene anche per i Tiny84. Dico "dovresti" perché personalmente non l'ho usata.
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #2 on: October 20, 2011, 03:41:41 pm » |
eh appunto... è questo che non capisco, perchè dice: "timeout (optional): the number of microseconds to wait for the pulse to start; default is one second (unsigned long)" cioè che aspetta per partire giusto? ma dopo che è partito come posso fermarlo? si la tua guida me l'avevi già linkata  ma mi era rimasto il dubbio per il pulseIn con i tiny e visto che devo ancora comprarli volevo essere sicuro prima...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #3 on: October 20, 2011, 03:46:43 pm » |
Non posso darti conferme al 100%, non ho mai usato la funzione.
Cmq leggo anche: Returns the length of the pulse (in microseconds) or 0 if no pulse started before the timeout (unsigned long)
Quindi se entro un tot di tempo non arriva nulla, la funzione esce per conto suo. Inoltre il max segnale che può misurare è 3 minuti, per cui anche se hai una tale frequenza, più di 3 minuti non duri. Per uscire prima dovresti modificare la funzione.
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #4 on: October 20, 2011, 03:57:05 pm » |
si è che avrei bisogno di perdere il meno tempo possibile visto che che ho 8 segnali così da leggere e poi dovrei confrontarli tutti insieme... comunque il segnale è a 1,2 kHz quindi potrei anche accontentarmi...
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16132
+39 349 2158303
|
 |
« Reply #5 on: October 20, 2011, 04:07:36 pm » |
Il Tuo segnal da 1,2kHz ha un periodo di 0,833 mSec. usa durata = pulseIn(pin, HIGH, 1000); Aspetta 1 milli-secondo e poi se non arriva nel fratempo un impulso restituisce un 0. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #6 on: October 21, 2011, 06:44:17 am » |
ok grazie provo 
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #7 on: October 21, 2011, 09:10:12 am » |
si confermo che mettendo il timeout funziona bene  grazie!
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #8 on: April 01, 2012, 03:51:05 am » |
scusate ma c'è un modo per fare ciò che fa la funzione pulseIn ma senza bloccare il codice? cioè magari utilizzando millis() e vedere quando l'impulso inizia e quando finisce, ma ho paura che così facendo rischio di perdere in precisione... avete qualcosa da consigliarmi? qualche esempio? grazie a tutti in anticipo! 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #9 on: April 01, 2012, 04:46:25 am » |
Se i tempi che devi misurare non sono troppo rapidi potresti provare un approccio "tutto codice". Una cosa semplice: 1) leggo il pin 2) è cambiato lo stato? 3) No: vai al punto 1) 4) Sì: conteggio della durata 5) E' terminato l'impulso? 6) No: vai al punto 4) 7) Sì: stampo la durata e torno al punto 1)
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #10 on: April 01, 2012, 02:37:32 pm » |
eh si dovrei fare così, è che ho 5 sensori su cui fare questo lavoro e in mezzo a questo codice volevo che l'arduino facesse dell'altro tipo leggere degli altri sensori, sperando di non arrivare "tardi" sul cambio di stato dell'impulso... usando degli interrupt potrei risolvere questo problema secondo voi? grazie 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #11 on: April 01, 2012, 02:49:43 pm » |
Sì ma a questo punto ti servono i PCINT, cioè gli interrupt sul cambio di stato di un pin, non puoi farlo con gli INT, perché sono solo 2. http://www.arduino.cc/playground/Main/PcInt
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #12 on: April 01, 2012, 03:02:16 pm » |
avevo postato proprio la settimana scorsa una domanda sugli interrupt  non li ho mai provati fino ad adesso...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16996
Don't know what I do
|
 |
« Reply #13 on: April 01, 2012, 03:07:37 pm » |
Vedili come programmi che girano in background, eseguendo i compiti a loro assegnati senza apparentemente interrompere il flusso del codice principale. In realtà lo interrompono eccome, difatti si suggerisce sempre di inserire nella routine di gestione dell'interrupt un codice che blocchi il meno possibile il micro, però lo fanno in automatico per cui il tuo sketch ha la convinzione di avere la CPU a sua completa ed esclusiva disposizione.
|
|
|
|
|
Logged
|
|
|
|
|
Camisano Vicentino (VI), Italy
Offline
God Member
Karma: 4
Posts: 850
ƎR like no other.
|
 |
« Reply #14 on: April 01, 2012, 03:13:01 pm » |
si si ho capito come funzionano grazie, devo capire un po' il codice per gestirli, tipo sto guardando la pagina del playground che mi hai linkato ma non capisco la parte iniziale non capisco cos'è  sembra il codice che di solito si vede nelle librerie, io non sono ancora a quel livello da capirne il significato 
|
|
|
|
|
Logged
|
|
|
|
|
|