Originariamente inviato da lol21
Visualizza il messaggio
annuncio
Comprimi
Ancora nessun annuncio.
MultiWii Quad! Alternativa ad Aeroquad/Baronpilot con sensori wii
Comprimi
X
-
lol21 .. non esattamente..
I pullup sono delle resistenze che vengono messe in un circuito logico (high o low, non analogici) per far si che di default il circuito assuma un livello logico stabilito quando i device nel circuito sono scollegati o in alta impedenza. Tutti i dettagli su Resistenza pull-up - Wikipedia
Facciamo un esempio:
Nella foto il pin Digital 2, impostandolo come input, viene messo in alta impedenza, cioe' se scollegato dal circuito, non assumera' un valore logico di per se ma solo in conseguenza a cio' a cui verra' collegato. Se venisse lasciato scollegato oscillerebbe tra HIGH e LOW in modo casuale, lavorando un po' tipo un'antenna.
Guardiamo l'esempio di sinistra. Quando lo switch e' aperto non vi e' passaggio di corrente tra positivo e negativo. Il pin Digital 2 avra' una debole connessione a 5V e quindi leggera' come valore HIGH. Quando chiudiamo lo switch c'e' una forte connessione a GND e quindi il pin Digital 2 leggera' LOW.
E' importante notare come in pratica non vi sia caduta di tensione sulla resistenza a pullup in quanto non vi e' un vero passaggio di corrente. In pratica, a switch aperto sul Digital 2 vedremo un 5V.
Ora, tornando ai nostri sensori..
Molte delle schede sensori attuali comunicano tramite I2C, un bus a due canali (un clock SCL e uno dati SDA) in cui i vari device vengono collegati in parallelo in modalita' open drain.. e vediamo che significa..
Potete vedere in questo disegno lo stesso schema un po' piu' complesso del pull'up dell'immagine sopra.. solo che qui i canali sono 2. Concentriamoci sul device in basso.. vedete che la connessione di un canale viene rimandata ad un input e ad un transistor. Con l'input il device puo' leggere il valore logico del canale e con il transistor puo' tirare giu' il valore logico del canale, proprio come faceva prima lo switch. In questo modo il device puo' sia trasmettere (chiudendo il transistor e abbassando a LOW il valore del canale) che ricevere leggendo il valore del canale sul suo input.
Questa architettura viene poi implementata in tutti i device. Vi e' poi un master (nel nostro caso Arduino) che si occupa di gestire la comunicazione coi vari altri device detti slave.
Ora abbiamo capito cosa sono i pullup e come vengono usati in I2C.. ora.. bisogna capire quando usare i pullup interni o esterni. Iniziamo dicendo che nel microcontrollore Arduino il pullup viene fatto al voltaggio a cui viene alimentato il microcontrollore.. Quindi negli Arduino a 16 Mhz e' 5V, mentre in quelli a 8 MHz a 3V. Quindi quando abilitiamo i pullup interni di un Arduino UNO (16 MHz, 5V) il pullup verra' proprio fatto a 5V.
Ora, purtroppo, il 90% dei vari sensori sono fatti per lavorare a 3V e non sono 5V tolleranti.. cosa succede quindi? Come detto prima, il voltaggio che va sull'input di un device I2C e' lo stesso su cui si fa pullup.. quindi praticamente se abilitiamo i pullup interni di Arduino i sensori riceveranno un voltaggio di 5V sulle loro porte di input che pero' non sono 5V tolleranti e possono quindi danneggiarsi, se non addirittura bruciarsi.
Quindi, l'abilitare o il disabilitare i pullup dipende dal tipo di sensori che utilizzate. Inoltre c'e' da dire che i pullup interni di Arduino sono molto grossi e quindi sono lenti nei cambiamenti di stato.. e quindi possono far peggiorare la qualita' della comunicazione. Consiglio la lettura di Effects of Varying I2C Pull-Up Resistors
Commenta
-
Originariamente inviato da fvaresano Visualizza il messaggiolol21 .. non esattamente..
I pullup sono delle resistenze che vengono messe in un circuito logico (high o low, non analogici) per far si che di default il circuito assuma un livello logico stabilito quando i device nel circuito sono scollegati o in alta impedenza. Tutti i dettagli su Resistenza pull-up - Wikipedia
Facciamo un esempio:
Nella foto il pin Digital 2, impostandolo come input, viene messo in alta impedenza, cioe' se scollegato dal circuito, non assumera' un valore logico di per se ma solo in conseguenza a cio' a cui verra' collegato. Se venisse lasciato scollegato oscillerebbe tra HIGH e LOW in modo casuale, lavorando un po' tipo un'antenna.
Guardiamo l'esempio di sinistra. Quando lo switch e' aperto non vi e' passaggio di corrente tra positivo e negativo. Il pin Digital 2 avra' una debole connessione a 5V e quindi leggera' come valore HIGH. Quando chiudiamo lo switch c'e' una forte connessione a GND e quindi il pin Digital 2 leggera' LOW.
E' importante notare come in pratica non vi sia caduta di tensione sulla resistenza a pullup in quanto non vi e' un vero passaggio di corrente. In pratica, a switch aperto sul Digital 2 vedremo un 5V.
Ora, tornando ai nostri sensori..
Molte delle schede sensori attuali comunicano tramite I2C, un bus a due canali (un clock SCL e uno dati SDA) in cui i vari device vengono collegati in parallelo in modalita' open drain.. e vediamo che significa..
Potete vedere in questo disegno lo stesso schema un po' piu' complesso del pull'up dell'immagine sopra.. solo che qui i canali sono 2. Concentriamoci sul device in basso.. vedete che la connessione di un canale viene rimandata ad un input e ad un transistor. Con l'input il device puo' leggere il valore logico del canale e con il transistor puo' tirare giu' il valore logico del canale, proprio come faceva prima lo switch. In questo modo il device puo' sia trasmettere (chiudendo il transistor e abbassando a LOW il valore del canale) che ricevere leggendo il valore del canale sul suo input.
Questa architettura viene poi implementata in tutti i device. Vi e' poi un master (nel nostro caso Arduino) che si occupa di gestire la comunicazione coi vari altri device detti slave.
Ora abbiamo capito cosa sono i pullup e come vengono usati in I2C.. ora.. bisogna capire quando usare i pullup interni o esterni. Iniziamo dicendo che nel microcontrollore Arduino il pullup viene fatto al voltaggio a cui viene alimentato il microcontrollore.. Quindi negli Arduino a 16 Mhz e' 5V, mentre in quelli a 8 MHz a 3V. Quindi quando abilitiamo i pullup interni di un Arduino UNO (16 MHz, 5V) il pullup verra' proprio fatto a 5V.
Ora, purtroppo, il 90% dei vari sensori sono fatti per lavorare a 3V e non sono 5V tolleranti.. cosa succede quindi? Come detto prima, il voltaggio che va sull'input di un device I2C e' lo stesso su cui si fa pullup.. quindi praticamente se abilitiamo i pullup interni di Arduino i sensori riceveranno un voltaggio di 5V sulle loro porte di input che pero' non sono 5V tolleranti e possono quindi danneggiarsi, se non addirittura bruciarsi.
Quindi, l'abilitare o il disabilitare i pullup dipende dal tipo di sensori che utilizzate. Inoltre c'e' da dire che i pullup interni di Arduino sono molto grossi e quindi sono lenti nei cambiamenti di stato.. e quindi possono far peggiorare la qualita' della comunicazione. Consiglio la lettura di Effects of Varying I2C Pull-Up Resistors
grazie fabio
Commenta
-
Originariamente inviato da pragamichele Visualizza il messaggioquesta spiegazione è da stampare!
grazie fabio
My MoS Thesis: Using Arduino for Tangible Human Computer Interaction | Varesano.net
Commenta
-
Originariamente inviato da fvaresano Visualizza il messaggiolol21 .. non esattamente..
I pullup sono delle resistenze che vengono messe in un circuito logico (high o low, non analogici) per far si che di default il circuito assuma un livello logico stabilito quando i device nel circuito sono scollegati o in alta impedenza. Tutti i dettagli su Resistenza pull-up - Wikipedia
Facciamo un esempio:
Nella foto il pin Digital 2, impostandolo come input, viene messo in alta impedenza, cioe' se scollegato dal circuito, non assumera' un valore logico di per se ma solo in conseguenza a cio' a cui verra' collegato. Se venisse lasciato scollegato oscillerebbe tra HIGH e LOW in modo casuale, lavorando un po' tipo un'antenna.
Guardiamo l'esempio di sinistra. Quando lo switch e' aperto non vi e' passaggio di corrente tra positivo e negativo. Il pin Digital 2 avra' una debole connessione a 5V e quindi leggera' come valore HIGH. Quando chiudiamo lo switch c'e' una forte connessione a GND e quindi il pin Digital 2 leggera' LOW.
E' importante notare come in pratica non vi sia caduta di tensione sulla resistenza a pullup in quanto non vi e' un vero passaggio di corrente. In pratica, a switch aperto sul Digital 2 vedremo un 5V.
Ora, tornando ai nostri sensori..
Molte delle schede sensori attuali comunicano tramite I2C, un bus a due canali (un clock SCL e uno dati SDA) in cui i vari device vengono collegati in parallelo in modalita' open drain.. e vediamo che significa..
Potete vedere in questo disegno lo stesso schema un po' piu' complesso del pull'up dell'immagine sopra.. solo che qui i canali sono 2. Concentriamoci sul device in basso.. vedete che la connessione di un canale viene rimandata ad un input e ad un transistor. Con l'input il device puo' leggere il valore logico del canale e con il transistor puo' tirare giu' il valore logico del canale, proprio come faceva prima lo switch. In questo modo il device puo' sia trasmettere (chiudendo il transistor e abbassando a LOW il valore del canale) che ricevere leggendo il valore del canale sul suo input.
Questa architettura viene poi implementata in tutti i device. Vi e' poi un master (nel nostro caso Arduino) che si occupa di gestire la comunicazione coi vari altri device detti slave.
Ora abbiamo capito cosa sono i pullup e come vengono usati in I2C.. ora.. bisogna capire quando usare i pullup interni o esterni. Iniziamo dicendo che nel microcontrollore Arduino il pullup viene fatto al voltaggio a cui viene alimentato il microcontrollore.. Quindi negli Arduino a 16 Mhz e' 5V, mentre in quelli a 8 MHz a 3V. Quindi quando abilitiamo i pullup interni di un Arduino UNO (16 MHz, 5V) il pullup verra' proprio fatto a 5V.
Ora, purtroppo, il 90% dei vari sensori sono fatti per lavorare a 3V e non sono 5V tolleranti.. cosa succede quindi? Come detto prima, il voltaggio che va sull'input di un device I2C e' lo stesso su cui si fa pullup.. quindi praticamente se abilitiamo i pullup interni di Arduino i sensori riceveranno un voltaggio di 5V sulle loro porte di input che pero' non sono 5V tolleranti e possono quindi danneggiarsi, se non addirittura bruciarsi.
Quindi, l'abilitare o il disabilitare i pullup dipende dal tipo di sensori che utilizzate. Inoltre c'e' da dire che i pullup interni di Arduino sono molto grossi e quindi sono lenti nei cambiamenti di stato.. e quindi possono far peggiorare la qualita' della comunicazione. Consiglio la lettura di Effects of Varying I2C Pull-Up Resistors
scusate se ho dato informazioni sbagliate, però io le resistenze di pullup e pulldown le usavo per limitare il rumore appunto nella lettura dei pulsanti
ciao
lol21http://www.electroit.tk/ - il sito sull'elettronica tutto italiano
Commenta
-
Originariamente inviato da fvaresano Visualizza il messaggioPer i collegamenti fai riferimento a http://www.varesano.net/files/FreeIM...onnections.pdf in pratica:
Arduino --> FreeIMU:
5V --> VIN
GND --> GND
A4 -->SDA
A5-->SCL
Ricordati di configurare MultiWii (ed ogni altro software tu voglia provare che usi i sensori) di modo che vengano disabilitati i pullup interni.
INTA, INTG, INTM sono i pin di interrupt rispettivamente dell'accelerometro, del giroscopio e del magnetometro. Se usi MultiWii, attualmente non ne viene fatto uso e quindi puoi lasciarli scollegati, ma in futuro si spera possano essere utilizzati per passare dalla modalita' di lettura polling attuale a quella basata su gli interrupt in modo da andare a leggere il sensore solo quando veramente necessario riducendo i tempi di ciclo e migliorando in generale il flusso del programma.
A che velocità va impostato il bus? E nel caso del software multiwii, dove vado ad agire nel codice?Ultima modifica di magnetron1; 16 luglio 11, 23:23.
Commenta
-
Puoi usare sia 100 che 400 KHz con la FreeIMU.. ovviamente meglio i 400 KHz perche' spendi meno tempo per leggere i sensori!
Tutte le configurazioni nelle ultime versioni del MultiWii le trovi sul file config.h che infatti e' quello dove trovi anche le voci:
codice://#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP #define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones
Commenta
-
volendo mettere un buzzer dove lo collego e come e come modifico il codice per dare ad esempio un lipo allarm?Soprattutto quale buzzer devo comprare?
grazieIl mio canale youtube
http://www.youtube.com/user/hurricanenzo
Commenta
-
Originariamente inviato da hurricane01 Visualizza il messaggiovolendo mettere un buzzer dove lo collego e come e come modifico il codice per dare ad esempio un lipo allarm?Soprattutto quale buzzer devo comprare?
grazie
Commenta
-
Originariamente inviato da fvaresano Visualizza il messaggioPuoi usare sia 100 che 400 KHz con la FreeIMU.. ovviamente meglio i 400 KHz perche' spendi meno tempo per leggere i sensori!
Tutte le configurazioni nelle ultime versioni del MultiWii le trovi sul file config.h che infatti e' quello dove trovi anche le voci:
codice://#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP #define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones
Devo rifare prima la scheda...
Poi proverò con l'ultima dev disponibile...
Commenta
-
Nella GUI in basso a destra dove ci sono: ROLL ___|___ e PITCH ---->
è normale che ROLL non sia perfettamente in piano?
Domani se riesco posto un filmato della GUI...FLYDRONE X4M - FLYDRONE X6M spyder -FLYDRONE mini
FLYDRONE AXN FPV
GOPRO HERO2 - FUTABA T9Z WC2 - FRSKY 2.4GHZ www.Flydrones.ch
Commenta
-
se ricalibri gli acceleromtri ti va in piano il grafico anche se hai il sensore e' a 45 gradi !!!!!
se non e' in piano significa che quando hai calibrato era in una posizione diversa da quella attuale.....
Da qualche parte ho letto : I PAZZI VANNO SEMPRE ASSECONDATI ; io mi esercito tutti i giorni con mia moglie !
Commenta
-
Originariamente inviato da fvaresano Visualizza il messaggioPuoi usare sia 100 che 400 KHz con la FreeIMU.. ovviamente meglio i 400 KHz perche' spendi meno tempo per leggere i sensori!
Tutte le configurazioni nelle ultime versioni del MultiWii le trovi sul file config.h che infatti e' quello dove trovi anche le voci:
codice://#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP #define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones
Commenta
-
Scusate se torno sull'argomento:
Originariamente inviato da magnetron1 Visualizza il messaggioHo provato ad usare il canale AUX1 per impostare il LEVEL quando lo switch che ho programmato dalla radio raggiunge il suo valore max. Guardando però nella GUI quando attivo quello switch (al quale ho connesso poi il canale della rx al pin 7 di Arduino, come da schema) vedo che anche AUX2 si attiva... perchè? Come posso sfruttare anche AUX2? Dove collego il canale AUX2 ad Arduino?
Commenta
-
Originariamente inviato da hurricane01 Visualizza il messaggiovolendo mettere un buzzer dove lo collego e come e come modifico il codice per dare ad esempio un lipo allarm?Soprattutto quale buzzer devo comprare?
grazie
oppure:
D8 -> Buzzer
A3 -> Partitore Resistivo -> positivo batteria.
T-REX 450 METAL - HDX450 FULL METAL - WALKERA 4#3B BL MAIN - WALKERA 4G6 MOD - SU-31 DEPRON - MULTIWII QUADX
Commenta
Commenta