㈠ 如何将单片机AD采集的采集次数连续采集30次并将采集到的AD值存放在ADRESULT[]数组中
改改
for(i=0;i++;i<30)//30个数据 还是i<=30?31个数据
{
ADC_RESULT1[i]=ADC0;//ADC0的意思是 Get_ADC_Data(); 取得的返回
// 值吧
Delay();//延时时间根据ADC的采样速率决定,以便采样到准确值
}
㈡ 单片机里有A/D芯片的那种吗采样5M。输入模拟电压AC1V我要采集1M的正玄波,两个周期采集一次。
有 好像 5mbps的比较少见 一般200-500kps 8-12bit
而且ad 一般最大值 多为5v 3.3v
c8051f320 自己去看看吧
㈢ 51单片机如何同时使用定时器和计数器采集数据
这是我根据频率计程序修的
//用定时计数器1作为脉冲计数器(P3.5引脚正是输入功能),定时器0作为定时器用,定时50ms产生中断
//中断4次后(即0.2s)读计数器1的数据
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性
//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa;//计中断次数
uint bb,cc,dd;//保存计数器的值
void Delay1ms(unsigned int i) //1ms延时程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置
{
TMOD=0x51;//定时器1作为计数器,定时器0作为定时器用
TH1=0;//计数器清0
TL1=0;
EA=1;//开总中断
ET0=1;//允许定时器0中断
TH0=0x4c;
TL0=0x5c;
TR1=1;//启动计数器
TR0=1;//启动定时器
aa=0;
}
void write_com(uchar com)//向液晶屏写命令
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏写数据
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
rw=0;
write_com(0x38);//显示模式16字*2行,5*7点阵,数据口8位
Delay1ms(10*12);
write_com(0x0f);//开显示,显示光标,光标闪烁
Delay1ms(10*12);
write_com(0x06);//写完数据后数据指针和光标位置自动加1
Delay1ms(10*12);
write_com(0x01);//屏幕清除
Delay1ms(10*12);
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分离出十万,万,千,百,十,个
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;
write_com(0x80);//第1个数据的位置设定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//写数据
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.2S的计数值
display4(dd);//显示
Delay1ms(100); //延时
}
}
void timer0()interrupt 1//注意:定时器0的中断序号为1
{
aa++;
TH0=0x4c;
TL0=0x5c;
if(aa==4)//中断4次,共0.2S
{
TR1=0;//暂停计数
aa=0;
bb=TH1;//读出计数器数据
cc=TL1;
TL1=0;//计数器清0
TH1=0;
TR1=1;//重新启动计数器
}
}
㈣ 求助单片机每20ms采样一次的程序
用定时器做一个20ms的定时。把采集程序放在定时器中断里。
㈤ AVR单片机一次采样需要时间是大概多少8兆晶振
AVR单片机的机器周期就是晶振的周期,8兆晶振时,机器周期为0.125uS。
至于采样周期,取决于AD的最高转换速率及程序的执行效率,假设AD转换速率可以足够高,再没有中断服务程序的前提下,最快大概可实现1uS左右的采样周期。也就是说完成一次采样大概可用8条指令。可以完成16位AD的读取和数据转存或串行发送。
若采用中断服务程序,由于响应中断和退出中断都需要时间,大约可实现2uS左右的采样周期。
㈥ 我想要用单片机采集显示屏上的显示的数据,一个小时采集一次,想问可以吗
可以,我就采集过跑步机的
㈦ STM32F4单片机采样50HZ的正弦信号,一个周期采样24个点,请大神们指教以下两种方法哪种更精确!
“一个周期采样24个点”
你应该是需要在一个正弦周期内均匀采样24个点吧,那么每83.3ms采集一次数据即可,单次采集的数据根本都不需要踢DMA啊。
你列的第一种方法我甚至都怀疑ADC的时钟频率能不能降到这么低。
㈧ PIC18单片机的AD采样频率是怎么计算的(要具体)
AD的采样总时间为采集时间+转换时间:
每位的A/D转换时间定义为TAD。
最小采集时间TACQ为1.4us,但与你在ADCON2中的ACQT2:ACQT0有关:
ACQT2:ACQT0
111=20个TAD
110=16个TAD
101=12个TAD
100=8个TAD
011=6个TAD
010=4个TAD
001=2个TAD
000=0个TAD,这个是手动采样,
TAD的最小时间为0.7us,TAD由ADCON2的ADCS2:ADCS0设置:
ADCS2:ADCS0:A/D转换时钟选择位
111=FRC(时钟来自A/D模块RC振荡器)
110=FOSC/64
101=FOSC/16
100=FOSC/4
011=FRC(时钟来自A/D模块RC振荡器)
010=FOSC/32
001=FOSC/8
000=FOSC/2
这个还是有点复杂,用一个图来说明采样的时间过程,图中假设采集时间TACQ=4TAD
㈨ 自学单片机有好处和必要吗
其实你们专业课就有单片机,但如果你觉得很无聊,想学点这些来充实自己,对你以后的学习来说也是有意义的。
首先,你要明确一点,单片机是自动控制领域一个比较重要的控制芯片,它是用来控制系统电路的运行的。有的时候没它不行,但它也不是单单只做单片机。所以电子技术你要知道,比如设计模拟电路,数字电路。在程序方面,虽然很多人都喜欢用C编写程序,但汇编指令也是学单片机必须要掌握的,因为有的时候,涉及最底层的芯片操作时候,C语言不一定能完全胜任。不要怕麻烦,不要觉得汇编指令枯燥就不管它。
接下来说说怎么学,先问问你的学长你们学校开什么厂家的单片机的教程,一般中国的大学单片机课程都是教51系列单片机,但也有教其他单片机的。还有就是问问你们的老师有没有组织什么兴趣组或参加电子比赛的。你可以先混进去跟老师和学长们学习。就算是旁观也比你闷着头自己学容易上手。
然后买本单片机教材,先把原理看一下,然后自己买个对应的单片机学习板(要跟你学的单片机种类相同哦),自己把书本上的程序都写一次,烧写进单片机里看看结果如何。然后把书本后的上机操作习题都写出程序烧进单片机试试。
如果你们学校有参加电子比赛的,而老师也乐意让你跟着学长后面学的,那是最好不过的,因为学校有资源,不用自己额外花钱。
有什么成果!首先是能在你上单片机课之前就了解了这门课,如果学得快这时候你能根据自己的理解来尝试做一个小小的自控系统了。以前我的学弟就是,还没开课,就能跟我做数据采集系统了。他们那届上完单片机课之后(大三上学期),他的毕业设计都做完了,并且把作品拿去参赛。这成为了他就业的资本了,因为要做电子方面的研发工作,一般都要求有经验。应届毕业生没工作经验怎么办,参加过比赛的学生一般比啥都没作过的更有机会,参加过比赛作过东西出来的就是经验。
㈩ PIC单片机ADC采集频率怎么算啊
很简单,AD采集一次的时间,当ADGO=1时,timer开始计数,当ADC标志位置1时,停止计数,这时timer的值就是你所需要的AD采集周期。你程序写的太多余了(个人觉得)