ad的应用:趋光小车的问题想请教大家
小弟最近在做个mege16的趋光小车...想用avr上面的自带ad采集光敏电阻两端的电势差...然后通过比较两路ad读取数据的大小判断出光强....再通过293控制直流电机向光强的地方跑....感光模块大致是这样的:光敏电阻一段连在vcc上一段连5k欧的电阻....ad就接在光敏电阻和电阻之间....
我一共用了2个感光模块...分别接在avr的PA0和PA1口...
电机接在PD口...运行了程序以后PD0输出高电平PD1输出低电平,其余PD口均为低...
趋光模块试过了没有问题...电机驱动和电机试过了没有问题...因为买的最小系统板...所以没有数码管来让我显示到底ad有没有采集到数据....
可不可以请大家看下问题大概出在哪里...谢谢...
下面是程序:
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag;
void delay(uint z)
{uint x;
for(;z!=0;z--)
{
for(x=0;x<1000;x++);
}
}
uint light()
{ uint addata;
//********************读取每一个ad数值并返回******************
if(flag==0)
{ADMUX=0X20;
ADCSR=0XE3;
while(!(ADCSRA&BIT(ADIF)))
addata=ADCL;
addata=addata+ADCH*256;
return addata;
}
//**************************************************
if(flag==1)
{ADMUX=0X21;
ADCSR=0XE3;
while(!(ADCSRA&BIT(ADIF)))
addata=ADCL;
addata=addata+ADCH*256;
return addata;
}
}
//***************************************************
void main()
{ uint a;
uint b;
DDRD=0XFF;
PORTD=0X00;
DDRA=0X00;
PORTA=0X00;
while(1)
{
a=light1();
b=light2();
if(a>b)
{
PORTD=0X0A;
delay(100);
}
if(a<b)
{
PORTD=0X02;
delay(100);
}
}
} 啊啊啊....大家帮帮忙吧....我真的很想做这个车....这是我第一次用avr做东西....可能有些问题有点BC....还请大家多指教.... 没有数码管也可以用串口,用电脑来显示 airbox 发表于 2012-9-9 17:32 static/image/common/back.gif
没有数码管也可以用串口,用电脑来显示
额....但是也没有串口线啊..... 没人看吗......求助...... 楼主说:“趋光模块试过了没有问题...电机驱动和电机试过了没有问题...”
然后又说:“请大家看下问题大概出在哪里”
是想让大家猜吗?
ight1()和ight2()函数在哪?
ADC改变通道后要多测一次,以第二次的结果为准。 lcw_swust 发表于 2012-9-10 09:57 static/image/common/back.gif
楼主说:“趋光模块试过了没有问题...电机驱动和电机试过了没有问题...”
然后又说:“请大家看下问题大概 ...
额.....前几天没注意到现在才回不好意思哈....
因为我觉得很可能问题出在程序上所以这么说嘛.....我试下看测两次的方法....
页:
[1]