Pages: 1 [2]   Go Down
Author Topic: I2C questo sconosciuto  (Read 1870 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

@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?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

* prova.pde (5.09 KB - downloaded 4 times.)
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
 * 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
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: May 27, 2012, 01:30:07 pm by micky861 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: May 27, 2012, 01:14:41 pm by micky861 » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21241
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
byte end_address = 100;

in
Code:
byte end_address = 127;

e trovi tutti gli indirizzi.

Ciao Uwe
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quale codice? postalo che vediamo dove si può sforbiciare
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dimenticanza

* prova.pde (5.09 KB - downloaded 6 times.)
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: 1 [2]   Go Up
Jump to: