I trying to use a new sensor the KMX63 with a Arduino Uno board, my sensor is on a evaluation board made by kionix.For the connexion il linked as follows:
| Pin Uno | Pin evaluation board |
| A5 | 5 |
| A4 | 7 |
| 3.3 | 1 |
| GND | 8 |
Here the schematic of the evaluation board:
I found a technical note from the constructor that advice to do some steps after the power up of the sensor to insure it's well functioning I wrote a code following it:
#include <Wire.h>#include "KMX62.h"void setup(){ Serial.begin(9600); Wire.begin(); Serial.println(F("Starting")); byte error=7; byte id=0; byte command=0; delay(60); Wire.beginTransmission(KMX62_I2C_ADD_2); Wire.write(0x7F); Serial.println(F("Write 0x7F")); Wire.write(0x00); Serial.println(F("Write 0x00")); delay(100); error=Wire.endTransmission(); Serial.print(F("retour 1 : ")); Serial.println(error); if( error==0 ){ Wire.beginTransmission(KMX62_I2C_ADD_2); Wire.write(CNTL2); Wire.write(0x00); error=Wire.endTransmission(); if( error==0 ){ Wire.beginTransmission(KMX62_I2C_ADD_2); Wire.write(CNTL1); Wire.write(0x80); error=Wire.endTransmission(); if(error==0){ delay(5); Wire.beginTransmission(KMX62_I2C_ADD_2); Wire.write(WHO_AM_I); Wire.endTransmission(false); Wire.requestFrom(KMX62_I2C_ADD_2,1); id=Wire.read(); error=Wire.endTransmission(); if(id==0x18||id==0x2D){ Wire.beginTransmission(KMX62_I2C_ADD_2); Wire.write(COTR); Wire.endTransmission(false); Wire.requestFrom(KMX62_I2C_ADD_2,1); command=Wire.read(); error=Wire.endTransmission(); if(command==0x55){ Serial.println(F("device ok")); }else{ Serial.println(F("Issue with the sensor step e : need to be rebooted")); } }else{ Serial.println(F("Issue with the sensor step d id=wrong : need to be rebooted")); } }else{ if(error==2||error==3){ Serial.println(F("Issue with the sensor step c : need to be rebooted")); } } }else{ if(error==2||error==3){ Serial.println(F("Issue with the sensor step b : need to be rebooted")); } } }}void loop(){}but i have an issue the steps , the program seem to freeze when i try to write into the register 0x7F.
I don't get any trace that i should have after the wire.endtransmission().
Here the trace i obtain :
09:56:35.477 -> Starting09:56:35.511 -> Write 0x7F09:56:35.511 -> Write 0x00i have use the I2C scanner to check if the sensor appear, i had to modify the scanner to add a delay before Wire.beginTransmission and the Wire.endTransmission to avoid the scanner to be freeze too at the first address tried. After the modification i did saw the sensor at the address it was mean to be.here the trace for the I2C scanner :
Scanning...I2C device found at address 0x0F !doneAnyone have an idea of why i can't write anything to my sensor without making my program freeze indefinitely each time ?
PS : After the advice of chrisl i rerunned all my programs on a arduino mini pro on 3.3V / 8Mhz and got the same result.
- 1Can you explain the "delay(100)" before "Wire.endTransmission()"? You know that the "endTransmission" is actually the start of transmission.Mikael Patel– Mikael Patel2019-08-09 09:24:24 +00:00CommentedAug 9, 2019 at 9:24
- Does the evaluation board run on 3.3V?chrisl– chrisl2019-08-09 09:37:14 +00:00CommentedAug 9, 2019 at 9:37
- i didn't had understood that the transmission started only after the endTransmission. I have added the delay() because into the I2C scanner i had to add a delay(100) between the beginTransmission and endTransmission or the scanner was blocking at the address tryedMaxence Ginet– Maxence Ginet2019-08-09 09:55:21 +00:00CommentedAug 9, 2019 at 9:55
- @chrisl i tryed with the both alimentation pin of the Uno the 3.3 and the 5V and got the same resultMaxence Ginet– Maxence Ginet2019-08-09 10:01:15 +00:00CommentedAug 9, 2019 at 10:01
- But the Uno will try to raise SDA and SCL to 5V, while the evaluation board would only raise it to 3.3V. So there will be a cross current. If you want to connect a 5V and a 3.3V device via I2C, you definitely need a level shifter.chrisl– chrisl2019-08-09 10:07:09 +00:00CommentedAug 9, 2019 at 10:07
1 Answer1
I finally found where the problem was, i had made a error on the reading of the schematic of the evaluation board. I thought that the pin J1-9 was already wired in intern but it was wrong. I wired it to the VCC output of my board and it work perfectly now.
Explore related questions
See similar questions with these tags.