Apro questo thread per verificare quanti sono interessati a scrivere codice in C per la suddette schede al fine di creare un multirotore.
Coridium Corporation - Technical Support
Multirotore che io ho creato in BASIC con l'armmite pro.
Per iniziare posto il mio codice basic "base" per leggere i canali da ricevente ppm seriale.
Mentre in basic sono presenti le istruzioni ON e INTERRUPT SUB in C le routine interrupt bisogna sciversele.
Per leggere i canali in sostanza attivo l'interrupt in fail edge e conto il tempo tra un edge ed un altro e lo assegno ai canali.
Il canale 1 viene determinato dopo aver trovato il gap tra uno stream e l'altro. In questo modo si possono leggere tutti i canali che arrivano dalla Tx, nel codice ne leggo 8 perche uso una tx ad 8 canali.
Con questo sistema appena un canale viene letto l'interrupt si chiude e in sostanza viene assegnato subito, pronto per essere elaborato prima che si attivi il nuovo interrupt per il canale successivo. Niente attesa che lo stream sia completato.
Coridium Corporation - Technical Support
Multirotore che io ho creato in BASIC con l'armmite pro.
Per iniziare posto il mio codice basic "base" per leggere i canali da ricevente ppm seriale.
Mentre in basic sono presenti le istruzioni ON e INTERRUPT SUB in C le routine interrupt bisogna sciversele.
Per leggere i canali in sostanza attivo l'interrupt in fail edge e conto il tempo tra un edge ed un altro e lo assegno ai canali.
Il canale 1 viene determinato dopo aver trovato il gap tra uno stream e l'altro. In questo modo si possono leggere tutti i canali che arrivano dalla Tx, nel codice ne leggo 8 perche uso una tx ad 8 canali.
Con questo sistema appena un canale viene letto l'interrupt si chiude e in sostanza viene assegnato subito, pronto per essere elaborato prima che si attivi il nuovo interrupt per il canale successivo. Niente attesa che lo stream sia completato.
codice:
' ARMQUAD ' Quadricottero basato su ARM ' Primo volo: 23/04/10 ' ' ARMMITE PRO ' ' ' ***QUAD*** *** Y6 *** ' ' ' M1,CW >M1,CW pwm1(IO0)----------- >M2,CWpwm2(IO1) ' | <M4,CCWpwm4(IO5)-----+----- <M5,CCWpwm5(IO14) ' | | ' M3,CCW----+----M2,CCW | ' | | ' | <M3,CCWpwm3(IO8) ' M4,CW >M6,CWpwm6 (IO10) ' INT IO9 eint0 ' test batteria AD0 ' out batt allarm IO11 MAIN: ON EINT0 fall MisuraRadio ' FAIL EDGE interrupt DO 'Misura esecuzione Loop in microsecondi CicloLoop = Timer ValoreLoop = CicloLoop - CicloLoopPrecedente CicloLoopPrecedente = CicloLoop Call Radio Call InizESC Call Gyro Call Acc Call Pid Call Mixer Call Motori Call Batteria LOOP
codice:
'-------- MISURARADIO ------- Sub MisuraRadio ' Segnale PPM seriale dim EdgeAttuale as integer dim EdgePrecedente as integer EdgeAttuale = Timer Impulso = EdgeAttuale - EdgePrecedente ' Calcola il valore del canale in microsecondi EdgePrecedente = EdgeAttuale ' pronto per il prossimo edge if Impulso > 4000 and impulso < 21000 then ' Cerca lo spazio tra 2 stream per la sicronizzazione sync = 1 ' Spazio sincro trovato contcanale = 0 ' prossimo canale e' il numero 1 end if if sync = 1 then canale(contcanale) = impulso contcanale = contcanale + 1 end if if contcanale > 8 then sync = 0 end sub Sub Radio '------------- R A D I O ----------------- '--Filto Rumore canali radio-- For CFiltro = 1 To 4 CentroCan(CFiltro) = CentroCan(CFiltro) * 3 CentroCan(CFiltro) = CentroCan(CFiltro) + Canale(CFiltro) ' Filtro passaBasso Centrocan(CFiltro) = CentroCan(CFiltro) >> 2 ' diviso 4 Next CFiltro ' Assegnazione canali MX16S con Modulo Jeti 2.4 GHZ ' -100 + 100 ---> -100 = 1100 microsecondi 0 = 1500 us +100 = 1900 us Gas = abs(centrocan(1)) ' Gas DeSi = abs(centrocan(2)) ' Roll AvDi = abs(centrocan(3)) ' Pitch Yaw = abs(centrocan(4)) ' Yaw Can5 = abs(canale(5)) Can6 = abs(canale(6)) Can7 = abs(canale(7)) Can8 = abs(canale(8)) 'ARMATURA if can5 > 1300 and can5 < 1900 and gas < 1150 and gas > 1000 then flagon = 1 'DISARMATURA if can5 < 1300 then flagon = 0 if Gas > 2010 then flagon = 0 end Sub
Commenta