Komunikace kompas hmc5883l

Ahoj,
pracoval někdo s tímto kompasem? Zkouším komunikaci a pořád vyčítám XH = 0XFF.
přitom zapisuju při inicializaci 0x70.

Inicializace:

void iniKOMPAS() { I2c2_start; I2C2_write(0x3c); // write mode I2C2_write(0x00); // set pointer to CRA I2C2_write(0x70); // write 0x70 to CRA I2c2_stop(); delay_ms(100); I2c2_start(); I2C2_write(0x3c); // write mode I2C2_write(0x01); //set pointer to CRB I2C2_write(0xA0); //set gain=5 I2c2_stop(); delay_ms(100); I2c2_start(); I2C2_write(0x3c); // write mode I2C2_write(0x02); //set pointer to measurement mode I2C2_write(0x00); // I2c2_stop(); delay_ms(100); }

přečtení registru 0x00

I2c2_start(); I2C2_Write(0x3d); I2C2_Write(0x00); // listed in example, but causes hanging //I2C2_Restart(); XH = I2C2_Read(1); I2c2_stop(); delay_ms(100);

Pracoval. Ověřil sis, že Ti HW a I2C chodí tím, že by sis přečetl ID_REG A-C ? Jestli Ti to chodí, pak bys měl číst taky STATUS registr který říká kdy jsou platná data. A pak XH je na adrese 0x03 a mě se zdá, že to čteš z adresy 0x00.

[size=150]Ověřoval jsem si že mi komunikace chodí právě tím že jsem vyčítal právě reg. A který je na adrese 0x00.

Ale už jsem to vyřešil.
Špatně jsem zadával instrukci při vyčítání.

správně to je tedy takto s časovým zpožděním:[/size]

[size=20]I2C2_Start(); //Start komunikace I2C2_Write(0x3C); // zápis I2C2_Write(0x03); // adresa delay_ms(20); // zpoždění na převod na výstupu I2C2_Restart(); // restart I2C I2C2_Write(0x03D); // čtení XH=I2C2_Read(0); // vyčítání registrů XL=I2C2_Read(0); ZH=I2C2_Read(0); ZL=I2C2_Read(0); YH=I2C2_Read(0); YL=I2C2_Read(1); i2c2_stop(); // stop komunikace[/size]

ID_REG_A je na jiné adrese, ale pokud Ti to chodí, není co řešit…

JJ já vím že adresa je jinde. Ale mě jde o vyčítání hodnot velikosti mag. pole. Jen ještě mi připadá že když vazmeme například osu X
tak na adrese 0x03 je byte nemšího významu a na adrese 0x04 je byte většího významu. Dle manuálu by to ale mělo být naopak. Tak nevím?