Go Down

Topic: I2C questo sconosciuto (Read 2102 times) previous topic - next topic

lesto

paolo, attento a non confondere le inizializzazioni necessarie a far funzionare il sensore con le inizializzazioni di scale di lettura, numero di sample, modalità di funzionamento etc...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

@Micky:
tu dici che leggi -1 -1 -1 -1...
ma:

Inoltre un tipo byte non può essere negativo, che tipo stai usando? Char o int?


Inoltre compili su 1.0. E su 0022/0023 hai provato?

micky861

allora ho provato a caricare il codice suggeritomi da PaoloP dopo averlo confrontato con il datasheet.devo dire che alcune cose le ho interpretate altre funzioni no comunque ho voluto testare il codice cosi com'è con IDE 0023 e per ora l'unica cosa che ho cambiato è l'indirizzo dell bma180 da 0x40 a 0x64:

Codice allegato...

ora non capisco perchè mi da un errore nel serial monitor:

Id = 104
PROBLEM..... Result code is 2
X:



i collegamenti sono

IMU            Arduino
SDA           pin4
SCL           pin5
+5v           5v
GND          gnd

poi ho messo una resistenza da 4.7KOhm tra SDA e 5v e un altra tra SLC e 5v.

PaoloP

L'IDE 1.0 attiva di default le pull-up interne. Non so se devi diminuire il valore di quelle esterne o disattivare le interne.
Per quanto riguarda l'errore, esso deriva dalla funzione twi_writeTo che è richiamata da Wire.EndTrasmission().
Code: [Select]
/*
* Function twi_writeTo
* Desc     attempts to become twi bus master and write a
*          series of bytes to a device on the bus
* Input    address: 7bit i2c device address
*          data: pointer to byte array
*          length: number of bytes in array
*          wait: boolean indicating to wait for write or not
* Output   0 .. success
*          1 .. length to long for buffer
*          2 .. address send, NACK received
*          3 .. data send, NACK received
*          4 .. other twi error (lost bus arbitration, bus error, ..)
*/

Il codice 2 si riferisce ad una mancata risposta: o hai sbagliato Address oppure ci sono problemi di comunicazione.
Per gli indirizzi c'era uno sketch per elencare tutte le periferiche presenti sul bus. Non trovo il link però.  :smiley-roll-blue:

micky861

#19
May 27, 2012, 08:06 pm Last Edit: May 27, 2012, 08:30 pm by micky861 Reason: 1
ho trovato questo :
http://todbot.com/arduino/sketches/I2CScanner/I2CScanner.pde

il risultato è questo:

I2CScanner ready!
starting scanning of I2C bus from 1 to 100...
addr: 1          addr: 2          addr: 3          addr: 4       
addr: 5          addr: 6          addr: 7          addr: 8       
addr: 9          addr: 10          addr: 11          addr: 12       
addr: 13          addr: 14          addr: 15          addr: 16       
addr: 17          addr: 18          addr: 19          addr: 20       
addr: 21          addr: 22          addr: 23          addr: 24       
addr: 25          addr: 26          addr: 27          addr: 28       
addr: 29          addr: 30 found!   addr: 31          addr: 32       
addr: 33          addr: 34          addr: 35          addr: 36       
addr: 37          addr: 38          addr: 39          addr: 40       
addr: 41          addr: 42          addr: 43          addr: 44       
addr: 45          addr: 46          addr: 47          addr: 48       
addr: 49          addr: 50          addr: 51          addr: 52       
addr: 53          addr: 54          addr: 55          addr: 56       
addr: 57          addr: 58          addr: 59          addr: 60       
addr: 61          addr: 62          addr: 63          addr: 64 found!
addr: 65          addr: 66          addr: 67          addr: 68       
addr: 69          addr: 70          addr: 71          addr: 72       
addr: 73          addr: 74          addr: 75          addr: 76       
addr: 77          addr: 78          addr: 79          addr: 80       
addr: 81          addr: 82          addr: 83          addr: 84       
addr: 85          addr: 86          addr: 87          addr: 88       
addr: 89          addr: 90          addr: 91          addr: 92       
addr: 93          addr: 94          addr: 95          addr: 96       
addr: 97          addr: 98          addr: 99          addr: 100       

done
come mai trova 2 indirizzi? 0x30 e 0x64?

edit: l'indirizzo 30 è un altro sensore sulla IMU dovevano essere 4 ma dato che fa la scansione fino al 100 gli altri due non li vede il 105 e il 119.

micky861

#20
May 27, 2012, 08:10 pm Last Edit: May 27, 2012, 08:14 pm by micky861 Reason: 1
allora ho cambiato #define address 0x64 in #define address 64e ora sembrerebbe funzionare,è un pò lento ad aggiornare le letture.

edit:ho abbassato il delay da 1000 a 100 ora è più veloce.
ma ho bisogno di tutto il codice per avere letture sull' asse X?

uwefed


ho trovato questo :
http://todbot.com/arduino/sketches/I2CScanner/I2CScanner.pde
...
edit: l'indirizzo 30 è un altro sensore sulla IMU dovevano essere 4 ma dato che fa la scansione fino al 100 gli altri due non li vede il 105 e il 119.

Non so perché quel sketch fa la scansione solo fino al indirizzo 100 e non fino al indirizzo massimo possibile ( 127).

modifica la riga
Code: [Select]
byte end_address = 100;

in
Code: [Select]
byte end_address = 127;

e trovi tutti gli indirizzi.

Ciao Uwe

lesto


allora ho cambiato #define address 0x64 in #define address 64e ora sembrerebbe funzionare,è un pò lento ad aggiornare le letture.

edit:ho abbassato il delay da 1000 a 100 ora è più veloce.
ma ho bisogno di tutto il codice per avere letture sull' asse X?


se hai un delay ci credo che le letture son lente :-)

se vuoi leggere solo l'asse X, allora ti posizioni sul suo indirizzo di partenza e poi leggi tanti byte quanti sono i registri che compongono il valore asse X
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

micky861

Scuate forse non sono stato molto chiaro, volevo dire se è possibile snellire il codice dato che mi serve solo un valore di esso. ho questo dubbio perchè non ho ancora ben capito tutto il suo funzionamento e vorrei eliminare le parti che non mi interessano per la lettura dell'asse X senza peròprovocare dei "danni" al codice..

lesto

quale codice? postalo che vediamo dove si può sforbiciare
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

micky861

come vedrai ho gia disabilitato con */ ---/* stampa sulla seriale dei valori Y Z,ma è la metà finale che non sò se si può eliminare qualcosa.
per questo codice uso IDE 0023 che poi tra l'altro volevo importarlo nell IDE 1.0.

micky861

dimenticanza

PaoloP

Le funzioni readAccel e readAccel2 non vengono richiamate quindi puoi eliminarle.

Go Up