‘壹’ AD芯片与51单片机通讯
你直接用AD0804进行信号采集,将会得到8位数字输出信号,将这八位用线连接到51单片机的8个输入端口上就可以了。单路采集的话,AD0804就可以了,AD0809是8路采集的。
‘贰’ 51单片机,采用4路AD采集数据,AD采集完成后,这4个数据如何保存
AD小于等于16位精度;
unsigned int AD_vale[4];
AD_vale[0]=AD1; //第一路的ad值;
AD_vale[1]=AD2;
AD_vale[2]=AD3;
AD_vale[3]=AD4;
如果精度大于16位,就把unsigned int 改成unisgned long int
‘叁’ 51单片机如何做到准确采样电压
普通的51单片机不能采集电压,带AD功能的单 片机可采集电压,但受分辨率限制,采集电压不是很准确。要想准确采集电压,可以用专门的AD芯片,精度要12位以上,并且要保证基准电压准确和稳定,做好输入滤波,还可以多次采集求平均值。
‘肆’ C51单片机的AD采集可以采用的子程序是中断、延时、还有什么是DMA吗,不太清楚
用c51单片机做AD转换,只要用一个简单的延时就可以,没必要动用定时器这么高级的东西,DMA就更别提了,我写了很多程序,还真没有人能用C51实现DMA,DMA一般在arm系列和FPGA等的高级嵌入式里面才会用到的。
‘伍’ 51单片机AD采集
程序可以直接相除,但只保留整数部分,所以如果你要得到小数两位,就先乘以100再除,显示的时候知道最低两位实际是小数点后两位就行了。
‘陆’ 51单片机怎样做AD电压采集
总共才120个数据,就算是双字节的数据,才240个字节!
在8052系列单片机的内部RAM空间,大小已经足够,不必外接任何器件。
‘柒’ 请教stc自带ad的51单片机的使用方法
STC单项片机说明文档里有例子
下面是我的采集程序,采三次,求平均值:
void adchange()//AD采集程序,采集3路
{
uchar temp7,temp8,temp9,temp10,temp11,temp12;
uint tempa,tempb,tempc,tempd;
ADC_CONTR=ADC_CONTR|0X80; //10000000 开启转换电源
Delay1ms(1); //延时,等待内部电源稳定
//P1M0=P1M0|0X07; //设置p1.0 P1.1和 p1.3所在通道为开/漏模式
//P1M1=P1M1|0X07;
ADC_CONTR=0xe0; //11100000 开启P1.0通道开始转换
Delay25us(10); //延时一端时间,使输入电压达到稳定
ADC_DATA =0x00; //清A/D转换结果寄存器
ADC_LOW2 =0x00;
ADC_CONTR |= 0x08; //ADC_START=1,开始转换
while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束
temp7=ADC_DATA; //读取转换结果
temp8=ADC_LOW2;
ADC_DATA =0x00; //清A/D转换结果寄存器
ADC_LOW2 =0x00;
ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零
Delay25us(1);
ADC_CONTR |= 0x08; //ADC_START=1,开始转换
while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束
temp9=ADC_DATA; //读取转换结果
temp10=ADC_LOW2;
ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零
Delay25us(1);
ADC_DATA =0x00; //清A/D转换结果寄存器
ADC_LOW2 =0x00;
ADC_CONTR |= 0x08; //ADC_START=1,开始转换
while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束
temp11=ADC_DATA; //读取转换结果
temp12=ADC_LOW2;
ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零
Delay25us(1);
ADC_DATA =0x00; //清A/D转换结果寄存器
ADC_LOW2 =0x00;
tempa=(temp7*4+temp8);//真烦人,但必须这么算,一次算会出错
tempb=(temp9*4+temp10);
tempc=(temp11*4+temp12);
tempd=tempa+tempb+tempc;
temp1=(tempd+1)/3;
。。。。。。其它两路略
//P1M0=P1M0&0X00; //设置P1口为普通I/O模式,以便用P1口显示数据。
//P1M1=P1M1&0X00;
}
‘捌’ 用51单片机控制AD采集正弦波信号,并把其频率计算出来的程序。
51好久没弄过了,给你个思路吧,因为51对浮点型运算较慢,不适合使用傅里叶变换,可以这样
定义一个数组v[3]={0};
每次采集一个电压放到数组的最后一位;然后判断当v[0]<v[1]<v[2]时启动计时器进行
计时,否则{v[0]=v[1];v[1]=v[2];}
重复这个过程。
当又一次v[0]<v[1]<v[2]时停止计时器,读取时间差,这个时间就是周期T,频率就是1/T。
可以多读几个周期T取平均值。
‘玖’ 需要用51单片机做一个数据采集系统,但是要求采样频率达到至少每秒2000次以上,请问51单片机可以做到么
肯定要速度快的单片机,比如带ADC的STC12单片机,用定时器设置好每秒中断2000次,每次启动ADC转换一次,这样就得到数据了。
当然要存储2000个数据还是问题,如果是8bit的结果,那需要2000字节,12bit结果要4000字节。所以要求单片机本身有很大的RAM或者要扩展RAM才行。但STC12内部才1024字节的RAM,肯定不够用,所以这时要用STC90C58AD了,4096字节的RAM。
如果用C8051F单片机,那更简单。比如C8051F的ADC0是100ksps,就是说连续转换时每秒能采样100000个数据,转换2000个是小菜一碟,只要设置好定时器以0.5毫秒触发一次ADC转换,再设置好ADC中断,这样1秒采集2000个数据没问题。