本壇FoieDEEEE_仲敬 同學(xué)用arduino做的示波器是一個創(chuàng)新,,對我很有啟發(fā),仔細(xì)學(xué)習(xí)和研究了他的程序,,發(fā)現(xiàn)有一缺陷:采集一個數(shù)據(jù),,就把數(shù)組所有數(shù)左移一下,并把整個屏幕刷新一次,,這樣兩次采集數(shù)據(jù)之間的時間很長,,所以速度很慢,只能顯示幾Hz的信號,。因此我決定自己寫一下代碼,,我采用先把所有一屏所需數(shù)據(jù)全采集好再作處理的方法,明顯提高了工作速度,最簡潔的代碼如下:
#include <U8glib.h> //聲明庫 U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 聲明液晶屏 13=SCLK, 12=SID, 11=CS int x,y; int Buffer[128];// void setup( ) { } void loop( ) { for(x = 0;x < 128;x++) //信號采樣 Buffer[x] = 63-(analogRead(A0)>>4); u8g.firstPage(); //清屏 do //顯示 { for(x = 0;x < 127;x++) u8g.drawLine(x,Buffer[x],x,Buffer[x+1]); //畫相鄰兩點連線 } while(u8g.nextPage( )); }
用arduino代碼,,完成一次AD轉(zhuǎn)換約需112微秒,,這樣顯示頻率在1500Hz以下的輸入信號的波形,。
如果想在程序上加坐標(biāo)軸和邊框,,代碼如下:
#include <U8glib.h> //聲明庫 U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 聲明液晶屏 13=SCLK, 12=SID, 11=CS int x,y; int Buffer[128]; void setup( ) { analogReference(INTERNAL); //ADC使用單片機(jī)內(nèi)部1.1V基準(zhǔn) } void loop( ) { for(x = 0;x < 128;x++) //信號采樣 Buffer[x] = 63-(analogRead(A0)>>4); u8g.firstPage(); //清屏 do //顯示 { for(x = 0;x < 127;x++) u8g.drawLine(x,Buffer[x],x,Buffer[x+1]); //畫相鄰兩點連線 u8g.drawLine(64,0,64,63); // 畫坐標(biāo)軸 u8g.drawLine(0,32,128,32); for(x=0;x<128;x+=8) //畫坐標(biāo)軸刻度 u8g.drawLine(x,31,x,33); for(x=0;x<64;x+=8) u8g.drawLine(63,x,65,x); u8g.drawFrame(0,0,128,64); //畫邊框 } while( u8g.nextPage( )); }
下載后顯示的波形:
可在此基礎(chǔ)上對程序不斷進(jìn)行完善,增加其它功能,。
最近版本的功能如下圖:
接線圖:
|