come leggere il duty cycle di un'onda quadra con Arduino (o con un pic)?

ho un sensore che mi da in uscita un'onda quadra a duty cycle variabile, tipo pwm, alla frequenza di 1kHz.... esiste una funzione per leggere il duty cycle di un segnale nell'arduino?? (oppure nei pic)??
altrimenti dovrei complicare il programma per questo :~
oppure dovrei mettere un integratore che mi porta il segnale in analogico e quindi leggerlo con un ingresso analogico... ma chiaramente la cosa migliore sarebbe gestire il segnale via software... suggerimenti?
forse non è il luogo più adatto per dire che vorrei farlo con un pic XD per poi mandarlo all'arduino in digitale, visto che all'arduino preferirei far fare il programma generale :slight_smile:

si, la pulseIn() fa al caso tuo. guarda nel reference e ci trovi tutte le info sulle funzioni di arduino.

mmmm si, si può fare :slight_smile: grazie!
sai anche se si può fare qualcosa di simile con un pic?

mai usati, ma fondamentalmente è un interrupt sul cambio di stato di un pin

si si inefetti non è niente di particolere... il mio problema è che ho 3 o 4 di questi sensori e dovrei confrontare i loro valori e decidere qual'è quello che mi interessa di questi 4... questo mi complica un po' le cose...

Devi leggerli contemporaneamente o cosa ? O.o
Perchè potresti usate 4 tiny 85 e spedire tramite I2C tutte le informazioni ad un Arduino normale... oppure provare con la pulsein su più prte ma non credo possa funzionare....

er_like_no_other:
si si inefetti non è niente di particolere... il mio problema è che ho 3 o 4 di questi sensori e dovrei confrontare i loro valori e decidere qual'è quello che mi interessa di questi 4... questo mi complica un po' le cose...

allora devi usare gli interrupt. con i registri puoi rendere tutti i pin sensibili algi interrupt.

si l'ideale sarebbe leggerli contemporaneamente... comunque ho pensato di usare dei pic, visto che non mi serve sapere il valore preciso del duty cycle ma mi basta sapere se è sopra una soglia, e quindi mando un paio di bit all'arduino che svolge il resto del programma... dovrebbe funzionare...