Pages: [1]   Go Down
Author Topic: Arduino due e i2C con giroscopio L3G4200d  (Read 677 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,
ho un giroscopio L3g4200d a tre assi, ho testato il codice sviluppato su questo sito http://bildr.org/2011/06/l3g4200d-arduino/ per la lettura dei dati dal giroscoio con arduino uno e tutto funziona perfettamente. Tuttavia avrei necessità di usare arduino due, ho collegato il giroscopio ai pin scl e sda di arduino due, che sono i pin 20 e 21, tuttavia con lo stesso codice i dati ricavati sono sbagliati. Per meglio dire sono corrotti. Infatti tra un valore e l' altro compaiono dei valori molto grandi. Le velocità che il giroscopio dovrebbe leggere sono tra 0 e 250 gradi al secondo ma ogni tanto compaiono valori pari a 4000 gradi al secondo e il problema peggiora se muovo il giroscopio. Non riesco a capire il problema, credo che sia un problema di comunicazione. So che arduino due ha due porte i2c (sda, scl e sda1 e scl1 ) vorrei provare ad usare l' altra porta per verificare se il problema è dovuto alla porta primaria ma non so come indicare nel codice l'altra porta.
Spero che qualcuno possa aiutarmi.
Grazie in anticipo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho trovato il modo di utilizzare la seconda porta i2c ma mi da lo stesso problema. Continua a ricevere ogni 5 o 6 valori corretti dei valori sballati senza una precisa cadenza. Con arduino uno invece continuo a non avere nessun problema. Non riesco proprio a venirne a capo.
Grazie
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Penso di aver capito qual'è il problema, però mi servirebbe una mano per risolverlo. Dipende da come la funzione di lettura da i2c di arduino due codifica i numeri negativi. Praticamente lo zero negativo viene codificato come 11111111 e a questo vengono sottratti i valori di velocità ricavati per questo avevo muovendo spesso dei valori enormi pari a 65535 (che è 1111111111111111 perchè il giro è a 16 bit) meno il valore di velocità.
Il codice che uso per leggere i registri del giroscopio è questo
 byte xMSB = readRegister(L3G4200D_Address, 0x29);
  byte xLSB = readRegister(L3G4200D_Address, 0x28);
  x = ((xMSB << smiley-cool | xLSB);

Sapete dirmi come correggerlo in modo da avere un valore corretto.
Grazie
Logged

Pages: [1]   Go Up
Jump to: