Nimm eine normale I2C Routine die Adressen und befehle stehen sicher im Kompassmodul Datenblatt.
mfg
Nimm eine normale I2C Routine die Adressen und befehle stehen sicher im Kompassmodul Datenblatt.
mfg
The future is closer then you think!
Gib mir mal deine Mail in meine Post, dann schicke ich dir einen Schwung Win-Avr-c-Programme. Die funktionieren Alle. Vom Compass über I2c-EEProm bis zur UART und LCD. Musst nur das Make-File selber erstellen und natürlich bei einigen die ASM.S-programme mit anbinden inder Make.
Castle
Hallo, ich hab mir nun aus verschiedenen Qullen etwas zusammen gebastelt und benutze die twimaster.c (eingebunden über Makefile)
also so sieht nun meine Methode zum lesen des CMPS03 über I2C aus:
so weit so gut, doch ich bekomme immer den wert "193", ich weiß aber leider nicht warum !!!Code:int read_compass() { int data; i2c_start(0xc0); // start the I2C bus i2c_write(0xc1); // device address of the compass i2c_write(1); // memory address first part i2c_start(0xc0); // restart i2c_write(0xc1); // device address, reading in this case data=i2c_readAck(); // read 1 byte i2c_stop(); // stopp return data; // return the number of direction }
Kann mir jemand helfen ?
Danke
Nach dem zweiten Start, bei dem du die Addresse 0xc1 statt 0xc0 verwenden musst, da du lesen willst und nicht schreiben, musst du gleich lesen und nicht erst nochmal was schreiben. Generell kann es nicht funktionieren, dass man ohne restart zwischen Senden und Empfangen wechselt.
Und der Wert, den du erhältst(193) entspricht genau den 0xc1, die du vor dem lesen sendest. Daher steht der Wert noch im Register TWDR, das du dann nach dem Senden wieder ausliest.
so und hier noch mal die Methode aber jetzt funktioniert es :
Vielen Dank an Pascal !!!Code:int read_compass() { int data; i2c_start(0xc0); // start the I2C bus i2c_write(0xc1); // device address of the compass i2c_write(1); // memory address first part i2c_stop(); i2c_start(0xc1); // restart data = i2c_readAck(); // read 1 byte data += i2c_readNak(); // read 1 byte i2c_stop(); // stopp return data; // return the number of direction }
ich Suche noch nach einer routine für das cmps03modul.
wie sieht deine programmsammlung aus für dieses ausgabe.
castle
Was sucht du denn genau ???
eine routine (programm)von winavr-c um das compassmodul cmps03 auszulesen.
Castle
Hallo, um den Kompass auszulesen benutze ich folgenden Code:
Der war ja schon weiter oben zu sehen, und damit das ganze noch funktioniert, musst du die TWI.h (avr/include) und die twi_cmps.h/.c einbinden. (googlen oder mal ne Mail an mich, hab den Link leider nicht mehr)... so und dann sollte es funktionieren ....Code:int read_compass() { int data; i2c_start(0xc0); // start the I2C bus i2c_write(0xc1); // device address of the compass i2c_write(1); // memory address first part i2c_stop(); i2c_start(0xc1); // restart data = i2c_readAck(); // read 1 byte data += i2c_readNak(); // read 1 byte i2c_stop(); // stopp return data; // return the number of direction }
Viel Erfolg!!!
Lesezeichen