Visualizza messaggio singolo
Vecchio 18 aprile 12, 10:52   #61 (permalink)  Top
gawain
User
 
L'avatar di gawain
 
Data registr.: 18-04-2008
Residenza: milano
Messaggi: 405
Citazione:
Originalmente inviato da faustog_2 Visualizza messaggio
credo di aver capito.... ....dammi un feedback

quindi il controllo
if (TIFR1 & (1<<ICF1))
serve per capire se il timer è arrivato a fondo scala ?

PPM.h lascia scorrere il timer 1 .. e si regola facendo differenze matetmatiche.. lo zero diventa il punto di partenza.. X, poi da esso si sviluppa il treno di PPM..

quindi non lo azzera.. anche perchè appena arriva in fondo a 65.000 scala e ricomincia da zero..

..ho realizzato tempo fa un sistema su Pic che fa lo stesso lavoro, un gruppo di registri li utilizzo , uno per ogni canale, gestito con FSR, il tmr0 quando scadeva in modo naturale, 16 mS , ricominciava.. finchè non scadevano i 16 mS leggevo la seriale & il sensore infrarosso.. appena scaduti i 16 mS allora eseguiva il treno di impulsi secondo quello che trovava nel buffer.. precedentemente riempito durante l'attesa.. quindi non c'erano tempi morti..

In pratica la libreria Servo è una cosa relativamente affidabile! però è strano perchè nei sorgenti di ARDUPILOT si fa uso della libreria Servo.. magari loro raggirano il problema ..chi sa in che modo.. devo studiare tanto.. ancora sono un principiante!
no, l bit ICF1 va a 1 quando l'input cambia stato, l'ICR1 memorizza il valore di TCNT1
al cambio di stato.
il test if (TIFR1 & (1<<ICF1))
serve quindi a vedere se c'è un nuovo valore memorizzato su ICR1
gawain non è collegato   Rispondi citando