1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include "wiring_private.h"
unsigned char x[1500];//緩存數組 int i; uint8_t pin; void setup() { Serial.begin(2000000);//波特率2M(據說最高115200,但我設到 2 000 000 並沒有什麼問題) pin=A0-14; ADMUX = (DEFAULT << 6) | (pin & 0x07);//這是用analogWrite()精簡出來的幾句,考慮到 //函數調用需要一定時間,所以乾脆把其中用到的 //語句直接搬了過來,並把定義變量放到了外面 sbi(ADMUX,ADLAR); cbi(ADCSRA,ADPS2); // ADC時鐘設爲1/4主時鐘,再小就轉換不了了,一直輸出0xff sbi(ADCSRA,ADPS1); // cbi(ADCSRA,ADPS0); // } //int analogRead1(uint8_t pin); void loop() { for(i=0;i<</span>1500;i++) { sbi(ADCSRA, ADSC);//這也是用analogWrite()精簡出來的 while (bit_is_set(ADCSRA, ADSC));//這也是用analogWrite()精簡出來的 x[i]= ADCH;//這也是用analogWrite()精簡出來的 } for(i=0;i<</span>1500;i++) { Serial.write(x[i]);// 串口輸出數組 } } // bit_is_set() 、 sbi() 在頭文件中是用 #define 定義的, //編譯時侯會被換掉,也就沒手動拿過來 |
提高arduino的ADC速率的一些思路/arduino示波器
這幾天在做arduino(ATmega328)的示波器,上次做的採樣率不高。百度偶然得知居然有人把帶寬做到1.5M?
怎麼能不試一下呢。
程序用英文一搜就有,但有一些小錯誤,我陸陸續續折騰了兩天弄懂了程序並改正。試了一下,帶寬並沒有所謂的1.5M,沒具體算,估計0.xM吧。
之後結合大神的程序,自己寫了一個更精簡的出來,如果有還能繼續精簡的,還望指點。
C++ Code
這個程序AD轉換一次的時間大約5.6us,應該算是比較快的了。效果圖:(觀察用arduino(ATmega328)的analogWrite(127)產生的方波)
*********************轉載請註明出處************************
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.