HMC5883L.txt

Embed Size (px)

Citation preview

#include #include #include #include #include #pragma config OSC =HS#pragma config PWRT = ON#pragma config BOREN = ON#pragma config BORV = 0#pragma config WDT = OFF#pragma config LVP = OFF#pragma config PBADEN = OFFunsigned char dado,i;void falha(){IdleI2C();StopI2C();while(SSPCON2bits.PEN);PORTD = 0X01;while(1);}unsigned char ler(unsigned char address){IdleI2C();StartI2C();while(SSPCON2bits.SEN);IdleI2C();WriteI2C(0xA0);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(address);IdleI2C();RestartI2C();while(SSPCON2bits.SEN);IdleI2C();WriteI2C(0xA1);IdleI2C();dado = getcI2C();IdleI2C();StopI2C();while(SSPCON2bits.PEN);Delay10KTCYx(5);return dado;}void escreve(unsigned char address, unsigned char dado){IdleI2C();StartI2C();while(SSPCON2bits.SEN);IdleI2C();WriteI2C(0b10100000);IdleI2C();WriteI2C(address);IdleI2C();WriteI2C(dado);IdleI2C();StopI2C();while(SSPCON2bits.PEN);Delay10KTCYx(5);}void main(){char xl, xh, yl, yh, zl, zh;int x, y, z;TRISD = 0X00;TRISC = 0XFF;PORTD = 0X00;OpenI2C(MASTER, SLEW_OFF);SSPADD = 49;//escreve(0,1);//escreve(1,2);//escreve(2,10);//escreve(3,15);//Delay10KTCYx(250);//Delay10KTCYx(250);IdleI2C();// Aguarda modo idleStartI2C();//inicia a comunicaowhile(SSPCON2bits.SEN);IdleI2C();//aguarda modo idleWriteI2C(0x3C);// comunica com o HMC5883LIdleI2C();if(SSPCON2bits.ACKSTAT==1)// testa se houve falha na comunicaofalha();// para a comunicao se houver falhaWriteI2C(0x00);// seleciona o Registro AIdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x70);// IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x3C);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x01);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0xA0);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x3C);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x02);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();WriteI2C(0x00);IdleI2C();if(SSPCON2bits.ACKSTAT==1)falha();Delay10KTCYx(3);StopI2C();while(SSPCON2bits.SEN);IdleI2C();for(i=0;i