Arduino + cmps12 kalibrering (Hjälp med I2C och addressering)
Postat: 4 september 2020, 20:54:47
Hej, ny på forumet och någorlunda ny med arduino.
Jag håller på med en autopilot till båt som använder ett arduino nano och en cmps12 kompass via I2C.
länk till kompassens datablad: https://www.robot-electronics.co.uk/files/cmps12.pdf
Allting fungerar fint i båten förutom att kompassriktningen ibland ändras, båten kan svänga upp till ca 90grader ibland men kompassriktningen visar samma värde, den flyttar alltså värdet på kursen jag håller.
Jag tänkte försöka ge mig på att kalibrera kompassen men jag blir inte klok på hur jag ska addressera genom I2c för att komma åt att spara kalibreringen!
Har försökt med massa olika koder men har nu gett upp och insett att jag behöver hjälp!
Jag har kommit så långt att jag tror att jag kan läsa ut kalibreringsstatus då jag har sett enstaka nollor ändras till ettor när jag rör kompassen i vissa riktningar men för att vara säker på att jag kan spara kalibreringsvärdena så har jag även försökt radera kalibreringsvärdena med följande kod:
Vilket borde ge enbart nollor när jag sedan läser ut kalibreringsstatus men jag får bara ettor! jag har även provat utan att addressera "0" för varje gång. jag har provat att "maskera" adressen 0 som en byte då jag läste någonstans att wire.h kan ha en bugg som gör att nollor inte fungerar men jag lyckas inte ändå!
Jag skulle behöva en sorts I2C for dummies kurs då jag har läst allt jag kan hitta men ändå inte riktigt förstår hur jag kan läsa / skriva till enskilda register eller hur jag vet hur många bytes jag ska begära från en read?
Någon på detta forum som har tålamod att lära en bilmekaniker om I2c?
Jag håller på med en autopilot till båt som använder ett arduino nano och en cmps12 kompass via I2C.
länk till kompassens datablad: https://www.robot-electronics.co.uk/files/cmps12.pdf
Allting fungerar fint i båten förutom att kompassriktningen ibland ändras, båten kan svänga upp till ca 90grader ibland men kompassriktningen visar samma värde, den flyttar alltså värdet på kursen jag håller.
Jag tänkte försöka ge mig på att kalibrera kompassen men jag blir inte klok på hur jag ska addressera genom I2c för att komma åt att spara kalibreringen!
Har försökt med massa olika koder men har nu gett upp och insett att jag behöver hjälp!
Jag har kommit så långt att jag tror att jag kan läsa ut kalibreringsstatus då jag har sett enstaka nollor ändras till ettor när jag rör kompassen i vissa riktningar men för att vara säker på att jag kan spara kalibreringsvärdena så har jag även försökt radera kalibreringsvärdena med följande kod:
Kod: Markera allt
#include <Wire.h>
#define ADDRESS 0x60
void setup(){
Wire.begin();
Serial.begin(9600);
//while(!Serial);
calibrate();
}
void loop(){
}
void calibrate(){
Serial.println("Radera värden");
delay(1000); //1 second before starting
Serial.println("Start");
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF0);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF5);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF6);
Wire.endTransmission();
delay(20);
Serial.println("klar");
}
Jag skulle behöva en sorts I2C for dummies kurs då jag har läst allt jag kan hitta men ändå inte riktigt förstår hur jag kan läsa / skriva till enskilda register eller hur jag vet hur många bytes jag ska begära från en read?
Någon på detta forum som har tålamod att lära en bilmekaniker om I2c?
