دوستان سلام ، من میخوام قطب نمای ماژول gy 87 را راه اندازی کنم ،(که قظب نماش HMC5883l هست) ولی خروجی ثابت به من میده
تا حالا چندتا برنامه هم روش تست کردم ولی فرقی نکرد
این کد برنامه :
x , y , z را به من (1-) میده ، با جابجایی ماژول هم تغییر نمیکنه ، مشکل از کجاست؟؟؟
تا حالا چندتا برنامه هم روش تست کردم ولی فرقی نکرد
این کد برنامه :
کد:
#include <mega16a.h>
#include <delay.h>
#include <i2c.h>
#include <math.h>
#include <alcd.h>
#include <stdlib.h>
#include <stdio.h>
// Declare your global variables here
int xh; int xo; int xl;
int yh; int yl; int yo;
int zh; int zl; int zo;
unsigned char buffer [60];
void main(void)
{
i2c_init();
lcd_init(20);
while (1)
{
i2c_start();
delay_ms(10);
i2c_write(0x3C); //write to HMC
delay_ms(10);
i2c_write(0x02); //mode register
delay_ms(10);
i2c_write(0x00); //continuous measurement mode
delay_ms(10);
i2c_stop();
//===================================================================================
//must read all six registers plus one to move the pointer back to 0x03
i2c_start();
delay_ms(10);
i2c_write(0x3D); //read from HMC
delay_ms(10);
xh = i2c_read(1); //x high byte
delay_ms(10);
xl = i2c_read(1); //x low byte
delay_ms(10);
xo = xl|(xh << 8);
sprintf(buffer,"xo : %d ", xo);
lcd_gotoxy(0,0);lcd_puts(buffer);
//================================
yh = i2c_read(1); //y high byte
delay_ms(10);
yl = i2c_read(1); //y low byte
delay_ms(10);
yo = yl|(xh << 8);
sprintf(buffer,"xo : %d ", xo);
lcd_gotoxy(0,1);lcd_puts(buffer);
//==================================
zh = i2c_read(1); //z high byte
delay_ms(10);
zl = i2c_read(1); //z low byte
delay_ms(10);
zo = zl|(zh << 8);
sprintf(buffer,"zo : %d ", zo);
lcd_gotoxy(0,2);lcd_puts(buffer);
i2c_write(0x3D); //must reach 0x09 to go back to 0x03
i2c_stop();
delay_ms(500);
}
}

