📄 calibrationforhmc1052.c
字号:
#include "common.h"
void delaytimeforCBRT(void)
{
uchar n;
for(n=0;n<4;n++)
_delay_loop_2(60000);
}
void Sample_XandYaxis(void)
{
int ADC_Xaxis1,ADC_Yaxis1,ADC_Xaxis2,ADC_Yaxis2;
MAG_POWER_ON;
_delay_loop_2(60000);
MAG_RESET;
_delay_loop_2(60000);
ADMUX = 0x46; //AVCC reference channel 6
ADC_Xaxis1 = AdcConvert();
ADMUX = 0x47; //AVCC reference channel 7
ADC_Yaxis1 = AdcConvert();
MAG_SET;
_delay_loop_2(10000);
ADMUX = 0x46; //AVCC reference channel 6
ADC_Xaxis2 = AdcConvert();
ADMUX = 0x47; //AVCC reference channel 7
ADC_Yaxis2 = AdcConvert();
MAG_POWER_OFF;
ADC_Xaxis=ADC_Xaxis1-ADC_Xaxis2;
ADC_Yaxis=ADC_Yaxis1-ADC_Yaxis2;
}
void Calibration(void)
{
int FirstSample_X,FirstSample_Y,Temp_X,Temp_Y;
uchar Quadrant1,Quadrant2,n,NextQuadrant1isOK=0;
Xaxis_MAX=Xaxis_MIN=Yaxis_MAX=Yaxis_MIN=0;
delaytimeforCBRT();
Sample_XandYaxis();
FirstSample_X=ADC_Xaxis;
FirstSample_Y=ADC_Yaxis;
if(FirstSample_Y>0)
{if(FirstSample_X>=0) Quadrant1=1;}
else
{if(FirstSample_X>0) Quadrant1=4;}
if(FirstSample_Y>=0)
{if(FirstSample_X<0) Quadrant1=2;}
else
{if(FirstSample_X<=0) Quadrant1=3;}
while(1)
{
Sample_XandYaxis();
if(Xaxis_MAX<ADC_Xaxis)
{
Xaxis_MAX=ADC_Xaxis;
}
if(Xaxis_MIN>ADC_Xaxis)
{
Xaxis_MIN=ADC_Xaxis;
}
if(Yaxis_MAX<ADC_Yaxis)
{
Yaxis_MAX=ADC_Yaxis;
}
if(Yaxis_MIN>ADC_Yaxis)
{
Yaxis_MIN=ADC_Yaxis;
}
if(ADC_Yaxis>0)
{if(ADC_Xaxis>0) Quadrant2=1;}
else if(ADC_Yaxis<0)
{if(ADC_Xaxis>0) Quadrant2=4;}
if(ADC_Yaxis>0)
{if(ADC_Xaxis<0) Quadrant2=2;}
else if(ADC_Yaxis<0)
{if(ADC_Xaxis<0) Quadrant2=3;}
if((Quadrant2!=Quadrant1)&(!NextQuadrant1isOK))
{
Quadrant1=Quadrant2;
NextQuadrant1isOK=1;
}
if((Xaxis_MAX>0)&(Xaxis_MIN<0)&(Yaxis_MAX>0)&(Yaxis_MIN<0))
{
if(Quadrant2==Quadrant1) HMC1052CalibrationisOK=1;
}
if(HMC1052CalibrationisOK) break;
if(KeyValue)
{
_delay_loop_1(100);
if(KeyValue)
{
while(KeyValue);
break;
}
}
}
Xsf=(float)(Yaxis_MAX-Yaxis_MIN)/(Xaxis_MAX-Xaxis_MIN);
if(Xsf<1.0)
{
Ysf=1.0/Xsf;
Xsf=1.0;
}
else Ysf=1.0;
Xoff=((Xaxis_MAX+Xaxis_MIN)>>1)*Xsf;
Yoff=((Yaxis_MAX+Yaxis_MIN)>>1)*Ysf;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -