Pages: 1 ... 16 17 [18] 19 20 ... 120   Go Down
Author Topic: Official topic: multicotteri con arduino!  (Read 96641 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11996
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

[OT] @ Uwe, in qualità di Moderatore del Forum:
Suggerisco, dopo quasi 1600 visite e 260 contatti, che questo Topic venga stickato, ora che hai il potere di farlo.
Superlol ha avuto questa idea ed è riuscito nel suo intento di attivare un Topic specifico anche se non "ufficiale", visto che non è partito dagli amministratori.
Mi preme sottolineare che non ho alcun interesse personale su questo argomento, infatti non sono mai intervenuto; quindi il suggerimento è assolutamente disinteressato.
Buona continuazione a tutti.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

potresti fare la stessa prova ma facendo andare il WMP a 400.000kbit/s, modificando adeguatamente il twi.h, secondo le specifiche (e provato di persona) funziona.

Già fatto, a 400 kHz il WMP non funziona, ho quello originale Nintendo, però è strano perché in diversi siti dicono che funziona a 400 kHz, dovrò fare qualche verifica con il solo WMP e software dedicato.

Quote
Che codice stai usando?

L'ultima release del multiwii, la 1.7, ho solo modificato alcune define e l'ordine degli assi accelerometrici perché il posizionamento sulla breadbord non è quello previsto dal progetto.

Quote
edit: è ancora prematuro, ma per schiarirmi le idee: che magnetometro consigliate? quali specifiche e perchè deve avere per essere scelto? stessa cosa per il barometro.

Per il sensore di pressione il BMP085, già previsto in modo nativo da multiwii.
Come avevo già sottolineato qualche post fa il BMP085 è un sensore ottimo e molto preciso, costa pure meno degli altri normalmente usati, p.e. MPX4115, col vantaggio che integra un adc a 19 bit, indispensabile per poter discriminare il singolo metro di quota, e un sensore di temperatura che consente di compensare la misura senza doverne usare uno esterno.
Come magnetometro il multiwii prevede il HMC5843 o HMC5883, sulla carta il secondo sembra essere migliore del primo e costa pure di meno, però c'è un piccolo giallo da risolvere, il prezzo di sparkfun per la breakout board del 5843 è 19$, da Watterott costa 43.20 Euro (attualmente non disponibile).
Va bene che sul prezzo in $ tocca aggiungere iva e dazio, ma è un +25% e col cambio attuale il costo in Euro è meno di quello in dollari, 19 / 1.4  * 1.25 = 17 Euro, addirittura vende il solo sensore, ed è un case QFN, a ben 17.26 Euro, costa molto meno acquistarlo da Digikey dove il 5883 (a quanto pare il 5843 è un prodotto vecchio e sta per andare fuori produzione) costa 3.6 Euro ivati.
Questi sensori in specifico non li ho mai usati quindi non so dirti se sono realmente validi per questa applicazione, al prossimo ordine che faccio da Digikey (next week) ne prendo qualcuno per provarli.

Logged

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

[...]

Già fatto, a 400 kHz il WMP non funziona, ho quello originale Nintendo, però è strano perché in diversi siti dicono che funziona a 400 kHz, dovrò fare qualche verifica con il solo WMP e software dedicato.

[...]

L'ultima release del multiwii, la 1.7, ho solo modificato alcune define e l'ordine degli assi accelerometrici perché il posizionamento sulla breadbord non è quello previsto dal progetto.

[...]
a 400kHz il normale non funziona, solo alcuni cloni che hanno gli itg3200 o simili e diversi integrati di conversione riescono ad andare a 400kHz

noi che usiamo arduino potremmo anche provare del dev che sono le ultime uscite con nuove integrazioni. sono piene di bug ma potremmo dare una mano alla community (sono divise in più files quindi è più comodo verificarle e modificarle).

inoltre nelle dev è previsto il supporto anche a più sensori tra cui il supporto nativo alla nuova freeimu v0.3.5_MS che contiene giroscopi, accelerometri e magnetometro su 3 assi nonchè anche barometro di precisione.

Federico ne avrà sentito parlare visto che ora guarda anche sul forum del barone  smiley-lol
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dov'e' che e' specificato questo difetto? Non ho trovato il riferimento...

Ne viene fatto riferimento sia dove spiega perché usa un pin di Arduino per alimentare il WMP, con i due diodi in serie, e da qualche altra parte che non mi ricordo  smiley
In pratica sfrutta lo stato logico 1 di un pin come alimentazione, in caso di perdita della comunicazione con il WMP e il Nunchuk lo porta a 0 e poi nuovamente a 1 per resettare i due sensori e ripristinare la comunicazione.
Però in oltre due ore di funzionamento continuo non ho riscontrato nessun blocco del funzionamento.

Quote
Io possiedo un adxl335 che pero' non e' ne' i2c ne' figo come il tuo 345, secondo te c'e' modo di implementarlo come hai fatto tu?
Eee come mai hai una scheda del WMP? :-)

L'ADXL335 è pure meglio per questa applicazione, per contro ha l'uscita analogica e devi usare tre canali ADC per leggerlo e sul ATmega hai solo 10 bit di risoluzione, puoi fare un leggero oversampling e portarli a 12 bit.
Il multiwii prevede l'uso di un accelerometro con i tre assi analogici su ADC, #define ADCACC, tocca un attimo vedere come tratta i valori ed eventualmente ritoccare la relativa funzione per adattarla al 335.
Ho preso il WMP Lunedì mentre ero da Unieuro alla ricerca di un televisore di piccole dimensioni, l'ho visto e l'ho preso, il resto è venuto da solo  smiley
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

a 400kHz il normale non funziona, solo alcuni cloni che hanno gli itg3200 o simili e diversi integrati di conversione riescono ad andare da 400kHz

Sul WMP originale i due giroscopi, uno a due assi e uno a singolo asse, sono con uscite analogiche, quindi non hanno nulla a che vedere con la velocità della I2C, poi c'è un micro che legge gli assi con ADC a 14 bit, sicuramente fa anche qualche operazione di filtro, e invia i dati sulla I2C, inoltre c'è un secondo bus I2C indipendente al quale è possibile collegare altri device wii.
Da notare che il WII mote dialoga sulla I2C a 400 kHz, l'avevo verificato a suo tempo e comunque lo trovi confermato qui che è la fonte primaria di informazioni sull'hardware wii, quindi non vedo nessun motivo per cui il WMP originale non deve funzionare a 400 kHz, salvo problemi del multiwii a tale frequenza.
Comunque in giornata avrò la risposta definitiva perché provo a dialogare con il WMP in diretta scrivendo io uno sketch dedicato così diamo subito la risposta a questo mistero.
Logged

Milano, Italy
Offline Offline
Faraday Member
**
Karma: 10
Posts: 3085
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Federico ne avrà sentito parlare visto che ora guarda anche sul forum del barone  smiley-lol
Dietro tuo consiglio :-) Mi hai scoperto! Ho letto cosi' tanti topic che gia' non capisco piu' niente :-) Pero' mi pare gente molto competente e sto trovando molte cose interessanti... Se non mi sbaglio, ad occhio e croce c'e' pure un utente redfox74 che aveva scritto a lungo sul nostro forum
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Risolto il "mistero" del WMP a 400 kHz, la colpa è delle resistenze di pull up, se sono troppo alte il segnale viene fortemente distorto e diventa illeggibile.
Quando ho montato il tutto sulla breadboard come pull up ho messo 5.6k, un valore abbastanza alto, per risparmiare un pochino di corrente sul 3.3V, con l'ADXL 345 non ci sono problemi, lavora benissimo e il segnale è ottimo, mettendo sullo stesso bus il WMP il segnale degrada notevolmente a 400 kHz.
Il motivo è legato alle specifiche della I2C che non stabiliscono una distanza massima, il limite è dato dalla capacità complessiva della linea, cavi e device, che non deve superare i 400 pf, inoltre la corrente minima che deve scorrere sulle resistenze di pull up è stabilita a 3 mA, se poi ci si vuole attenere alle specifiche I2C con carico di linea fino a 200 pf vanno bene le pull up, tra 200 e 400 pf andrebbe usato un generatore di corrente a 3 mA.
Con la tensione di 3.3V e 5.6 k scorrono solo 3.3/5.6k = 590 uA, molto meno di quello previsto normalmente per il bus I2C, va bene lo stesso a patto che la capacità complessiva della linea  non sia tale da produrre una costante di tempo (RpullIp * Clinea) che rallenta eccessivamente i fronti di salita e discesa del segnale.
Nel caso del WMP + ADXL345 + cavi + breadboard a quanto pare la capacità complessiva è decisamente alta e l'I2C non funziona, mettendo come pull up delle 3.3k il tutto ha iniziato a funzionare, al controllo strumentale il fronte di salita dei segnali è ancora molto lento, ma nei limiti di funzionamento, con 1.5 k ( = 2.2 mA a 3.3 V) i segnali sono buoni.
Credo che i problemi di sgancio del WMP citati dall'autore siano dovuti pure a questo problema, cosa ancora più strana è che nelle indicazioni di collegamento tra il WMP e Arduino, nel suo caso la versione nano, non ci sono proprio le pull up, e senza non può funzionare.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse l'autore usa le pull-up interne all'Atmega, presenti su entrambe le linee SDA e SCL.
Logged


Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse l'autore usa le pull-up interne all'Atmega, presenti su entrambe le linee SDA e SCL.
si ma all'inizio file nei "define di configurazione" puoi disabilitarli
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse l'autore usa le pull-up interne all'Atmega, presenti su entrambe le linee SDA e SCL.

Impossibile perché sono 20k come minimo, l'I2C non funziona proprio con questi valori e poi sono collegate al +5V e non al +3.3 come deve essere.
In effetti nel software prevede una abilitazione delle pull up interne se viene usato l'ATmega, però anche in questo caso il valore minimo è 20k e sul data sheet, tabella 30-5 (pag. 373) relativa al 2-wire bus requirements, dice chiaramente che le r di pullup vanno calcolate in funzione della tensione per far scorrere 3 mA, che è il valore previsto dalle specifiche se si vuole collegare molti device sullo stesso bus o usare cavi lunghi.
Logged

Torino, Italy
Offline Offline
Sr. Member
****
Karma: 2
Posts: 312
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In realta' I2C puo' funzionare con i pullup interni.. il problema e' il tempo di salita del segnale che e' troppo lento e quindi limita la frequenza effettiva con cui si riesce a dialogare sul bus. Avevo scritto un post dettagliato sul problema dei pullup. Consiglio inoltre la lettura di http://www.dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors.html che contiene esempi pratici sul dimensionamento dei pullup.

Personalmente, in tutti i miei design non salgo oltre i 2K2, anzi la FreeIMU v0.3.5_MS montera' pullup da 1K5. E nei miei test sono riuscito ad overcloccarle fino ad 800 KHz.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La mia esperienza conterà zero ma io uso pullup da 1K5 e mi trovo bene anche con più dispositivi collegati (Atmega, RTC, EEPROM, ecc...). Ovviamente il tutto relazionato ai 5V ed a piccole distanze dei componenti.
Logged


Milano, Italy
Offline Offline
Faraday Member
**
Karma: 10
Posts: 3085
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Visto che tutti dicono la loro  smiley-cool io uso in maniera standard le 3.3k, visto che ne ho una paccata e hanno sempre funzionato bene sull'i2c...
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In realta' I2C puo' funzionare con i pullup interni.. il problema e' il tempo di salita del segnale che e' troppo lento e quindi limita la frequenza effettiva con cui si riesce a dialogare sul bus

Con i 20k minimi delle pull up interne non riesci a dialogare nemmeno a 100 kHz, ovviamente dipende molto dalla capacità in ingresso dei device, da quanti sono, dalla distanza che devono percorrere i collegamenti e se sono piste di pcb oppure cavi.
Rimane comunque il punto principale della questione, come mai nelle istruzioni di collegamento per il multiwii non sono citate le resistenze di pull up ?
L'autore usa Arduino nano e il suo software prevede, tramite define, l'uso delle pull up interne solo con la mega, altro mistero, e comunque con 20k e tutti quei sensori collegati non può funzionare in nessun modo.
Comunque l'importante è aver risolto il "mistero" del WMP originale che non funzionava a 400 kHz come invece deve fare.

Quote
FreeIMU v0.3.5_MS

Ho visto che come sensori di pressione usi gli MS5611, sembrano essere meglio dei BMP085, dove li prendi e quanto costano ?
Non li ho trovati a catalogo ne da Digikey ne da Mouser, il che è insolito visto che hanno praticamente tutto.
Logged

Torino, Italy
Offline Offline
Sr. Member
****
Karma: 2
Posts: 312
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@federico attenzione, il funzionare bene, cioe' non darti problemi nella tua applicazione, puo' non voler dire funzionare correttamente. Controlla sempre su un oscilloscopio la qualita' dei segnali e la loro frequenza effettiva.

@astrobeed gli MS5611 sono una figata! Li trovi su amsys.de ma gli devi scrivere, non lo trovi sul sito web. Il sensore grezzo costa 12 euro + spedizione.
Logged

Pages: 1 ... 16 17 [18] 19 20 ... 120   Go Up
Jump to: