Come misurare impulsi da ricevitore RC - PPM

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

Come misurare impulsi da ricevitore RC - PPM

Postby ulisse21 » 08 Jan 2015, 20:04

ciao a tutti e buon anno anche se con assoluto ritardo :?
sono qui per chiedervi una cosa :roll:
ho per le mani un radio comando RC come quelli per gli aeromodelli.
Le uscite del ricevitore pilotano dei servo rc.
Ora al posto dei servi voglio mettere altri attuatori e motori + potenti per comandare un robot che sto costruendo.
Ho la necessità di decodificare gli impulsi PPM in uscita dal ricevitore e generare segnali PWM per comandare i motori.
Utilizzando un atmega328 e bascom come faccio a misurare la loro durata?
Esiste una istruzione diretta o devo strumentarmi qualcosa di complicato?

grazie per l'aiuto e ancora buone feste a tutti :)
ulisse21
 
Posts: 49
Joined: 10 Nov 2012, 14:36

Re: Come misurare impulsi da ricevitore RC - PPM

Postby pier » 09 Jan 2015, 10:56

Credo ti basti usare l'interrupt (INT0 o INT1) configurato come change (CONFIG INTx = CHANGE) che manda ad una routine di gestione ad ogni transizione (UP o DOWN) del pin associato e nella routine di gestione usare un timer (eventualmente gestito mediante prescaler) o anche un counter per misurare il tempo trascorso tra 2 transizioni del pin associato. Questo ti consente di misurare sia la durata dei tempi bassi che quella dei tempi alti degli impulsi di ingresso. Se invece usi gli stessi INT configurati come 1 o 0 misuri un periodo completo (1 alto + 1 basso o viceversa).
Se invece ti basta misurare solo la larghezza di un impulso alto o basso puoi usare PULSEIN (vedi file di help) il quale non utilizza timer hardware ma, nella configurazione standard della libreria, ha una risoluzione di 10 usec che non so se sufficiente. Modificare la libreria è possibile ma dovresti chiedere al nostro guru Deluca :D

Ciao
pier
 
Posts: 115
Joined: 11 Aug 2013, 22:05

Re: Come misurare impulsi da ricevitore RC - PPM

Postby ulisse21 » 09 Jan 2015, 16:01

pier
intanto grazie per la disponibilità nel darmi qualche suggerimento. gestire con gli int mi sembra un pò difficoltoso, così
provo a vedere con pulsein se riesco a misurare la durata dell'impulso alto.
vorrei avere una risoluzione migliore dei 10usec anche se alla fine avrei circa 8bit di risoluzione visto che
2500/10=250. devo vedere. boh! :shock: :)
ulisse21
 
Posts: 49
Joined: 10 Nov 2012, 14:36

Re: Come misurare impulsi da ricevitore RC - PPM

Postby deluca » 09 Jan 2015, 21:13

@ulisse,
per questo scopo PULSEIN potrebbe essere utilizzato.
Se hai necesità di migliorarne la risoluzione, come ti ha accennato già pier, bisogna modificare la libreria mcs.lib
che trovi sotto LIB, cercare la stringa "[_PULSE_IN]" e nella routine, un pò di righe più in basso, troverai "@genus(9)".
Con un valore di 9 la risoluzione sarà di circa 10uSec, anche se questo valore dipende dal quarzo usato.
Abbassa questo valore portandolo a zero o a valori inferiori a nove, ricompila il codice e ne vedrai subito l'effetto.

Se invece non vuoi modificare la libreria mcs.lib inserisci queste righe nel tuo codice:

Code: Select all
$lib "pulsein.lib"
const cpulsein_timeout = 50000
dim bpulsein_delay as byte : bpulsein_delay = 10


il compilatore userà la libreria pulsein.lib a cui verrà passata la variabile bpulsein_delay che determinerà il tempo di delay e quindi la risoluzione.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Come misurare impulsi da ricevitore RC - PPM

Postby ulisse21 » 10 Jan 2015, 14:39

grazie deluca e pier per l'aiuto,
@deluca, ho adottato la tua seconda soluzione e sembra andar bene.
regolando opportunamente il delay adesso riesco a leggere il valore da 500 a 2500
praticamente voglio comandare il dutycycle del pwm con il valore letto dal ppm.

ancora grazie e alla prossima.
ulisse21
 
Posts: 49
Joined: 10 Nov 2012, 14:36


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 2 guests

cron