㈠ 如何將單片機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採集周期。你程序寫的太多餘了(個人覺得)