中颖 SH79F166A 单片机 AD 和定时器问题
有没有哪位大侠,用过中颖 SH79F166A 单片机 的!我是个新手,刚用这款单片机,用它的AD,AD值总是在乱跳,定时器的时间也不对!请各位大侠,给个例程,学习下,谢谢!! 内部晶振还是外部晶振、是否分频?
看门狗是否开启??
AD乱跳是什么概念?跳了多少数,模拟信号接的什么信号?可以接一个恒定的信号,再看看还跳不跳。 wallelectronics 发表于 2012-8-17 08:18 static/image/common/back.gif
内部晶振还是外部晶振、是否分频?
看门狗是否开启??
AD乱跳是什么概念?跳了多少数,模拟信号接的什么信 ...
用的是 内部晶振,没分频!
看门狗 没开!
AD 跳的范围很大,有几十的误差, 我是直接用精密滑动电阻器分压来做的,信号应该是很稳的,以前用STC的单片机这种方法没有问题!
我想应该是 单片机不熟悉,哪里设置不清楚,所以会有这样的结果!我把相关代码 贴上去,望大侠指教,谢谢!
AD相关代码
//-------AD define--------
#define AN0 0x00
#define AN1 0x02
#define AN2 0x04
#define AN3 0x06
#define AN4 0x08
#define AN5 0x0a
#define AN6 0x0c
#define AN7 0x0e
//*****************系统初始化**********************//
void system_int()
{
P1CR=0xff;
P1PCR=0xff;
P1=0X00;
P2CR=0xff;
P2PCR=0xff;
P2=0X00;
P3CR=0xff;
P3PCR=0xff;
P3=0X00;
P4CR=0x0f; //设置p4.0为输入
P4PCR=0x0f; //关上拉电阻
P4=0X00;
P5CR=0xff;
P5PCR=0xff;
P5=0X00;
}
//***************AD 采集****************//
uint get_adc(uchar ch)
{
// int i,adc;
ADCON = 0x80; //允许ADC模块
ADT = 0x20; //DC时钟为系统时钟的32分频
ADCH = 0x01; //选择AD输入通道
ADCON |=ch; //选择CH1通道
for(i=0;i<250;i++);
ADCON |=0x01; //开始ADC转换
while(ADCON&0x01);
adc = ADDH;
adc<<=2;
adc = adc + ADDL;
return adc;
}
//********************AD 求平均******************//
void AD_COUNT()
{
AD1=get_adc(AN0);//ADchange(AN0);//
AD_zhong=AD_zhong+AD1;
c++;
if(c==50)
{
AD_jun=AD_zhong/50 ;
AD_zhong=0;
c=0;
}
}
定时器相关代码
//*****************系统初始化**********************//
void system_int()
{
P1CR=0xff;
P1PCR=0xff;
P1=0X00;
P2CR=0xff;
P2PCR=0xff;
P2=0X00;
P3CR=0xff;
P3PCR=0xff;
P3=0X00;
P4CR=0x0f; //设置p4.0为输入
P4PCR=0x0f; //关上拉电阻
P4=0X00;
P5CR=0xff;
P5PCR=0xff;
P5=0X00;
}
//*****************定时器 初始化********************//
void time_int()
{
CLKCON = 0x00;
T2CON=0X00; //定时器2 控制寄存器 16位自动重载方式
T2MOD=0x00;//
RCAP2H = 0xff;
RCAP2L = 0xad;
TH2 = 0xff;
TL2 = 0xad;
IEN0 = 0xa0;
TR2=1;
TF2=0;
ET2=1;//使能T2中断
EA=1;//开总中断
}
void Time2(void) interrupt 5
{
TF2=0;
aa++;
}
hengjng_t 发表于 2012-8-17 09:51 static/image/common/back.gif
用的是 内部晶振,没分频!
看门狗 没开!
AD 跳的范围很大,有几十的误差, 我是直接用精密滑动电阻器分 ...
我没用过这个片子,用的是165,有几个小建议:
1.不用每次读数据都配置AD吧,初始化一次就够了……,配置AD后有个建立时间;
2.adc = adc + ADDL; ADDL只有低两位有效,把高六位清零后再和adc相加吧;
3.先别平均,光看看读出来的数据,虽然平均很简单,但也有可能出错,不要引入那么多不确定的因素。 wallelectronics 发表于 2012-8-17 10:02 static/image/common/back.gif
我没用过这个片子,用的是165,有几个小建议:
1.不用每次读数据都配置AD吧,初始化一次就够了……,配置 ...
好的,谢谢指教!!我再调调看!! 想问一下解决问题了吗 也是马上要开始用中颖的芯片了。 解决了吗?? 这个片子我还真用过,没觉得AD有什么问题。参照4楼的建议,同时考虑ADC的时钟是不是太快,或输入阻抗太大了。 在用166A的ADC,暂时没有发现什么问题
页:
[1]