新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于AVR的簡易示波器設計

        基于AVR的簡易示波器設計

        作者: 時間:2011-12-16 來源:網(wǎng)絡 收藏

        46.jpg

        本文引用地址:http://www.104case.com/article/172335.htm

        1.1、信號調(diào)理電路

        信號調(diào)理電路要完成的功能是:程控放大,疊加直流分量。程控放大的作用是:當輸入信號的幅度很小的時候就需要對輸入信號進行放大,使得被測信號可以在LCD上盡可能清楚的顯示出來。疊加直流分量的作用是:ATmega16自帶的A/D是單電源的,沒辦法輸入負壓而待測信號又往往有負壓。這時候就需要這樣一個電路,可以把負壓抬高到0電平以上。

        47.jpg

        R1,R2分別由一個模擬開關CD4051來連接不同的電阻,不同的R1,R2通過公式: 這樣就可以實現(xiàn)程控放大功能了??烧{(diào)電阻R9用來設置信號調(diào)理電路加入的直流分量的大小。放大后的信號和直流分量最后由U3模擬加法器疊加后輸出。

        輸入信號與輸出信號的關系: 只要R4、R6、R7的阻值相同,調(diào)理電路輸入與輸出的關系簡化為: 。

        Ux為U3的輸出電壓,輸出電壓的電壓值與可調(diào)電阻R9中間抽頭的電壓一至。

        1.2、主控芯片軟件

        這個系統(tǒng)的主控芯片選擇的是,Atmel公司的系列單片機ATmega16,最高可達到16MPIS指令速度。ATmega16有16K的flash, 1K 的SRAM, 512 B的EEPROM,單片機內(nèi)部自帶一個10 bits精度的逐次逼近型模數(shù)轉(zhuǎn)換器,內(nèi)建采樣/保持電路。ADC的時鐘是可編程的,在這個中為了太到最高的采樣頻率100KHz ADC的時鐘設置為2MHz。ADC的觸發(fā)源選擇為定時器/計數(shù)器0溢出,ATmega16的定時器的時鐘源也是可編程的。這樣就可以通過控制定時器/計數(shù)器0溢出中斷頻率來控制ADC的采樣頻率。

        48.jpg

        1.2.1、鍵盤功能

        在這個系統(tǒng)中設置了7個按鈕分別為:運行與停止,放大倍數(shù)增大,放大倍數(shù)減小,采樣頻率增大,采樣頻率減小,觸發(fā)電平上移,觸發(fā)電平下移。

        運行與停止鍵:是通過開啟和關閉ATmega16 ADC轉(zhuǎn)換完畢中斷的方式來實現(xiàn)的。

        放大倍數(shù)的增大與減?。菏峭ㄟ^ATmega16控制模擬開關CD4051來實現(xiàn)放大倍數(shù)的數(shù)字化控制。CD4051為8通道的模擬開關,所以程控放大器可以有8檔。

        采樣頻率的增大與減?。菏峭ㄟ^控制ATmega16的定時器0的時鐘源及定時器的初始值來實現(xiàn)系統(tǒng)所需要的各個采樣頻率。定時器0的中斷頻率就等于ADC的采樣頻率。

        觸發(fā)電平的上移與下移:是通過對采樣來的數(shù)據(jù)進行數(shù)字觸發(fā)時,當數(shù)據(jù)的二進制值在增加的過程中某個數(shù)據(jù)的大小剛好與數(shù)字觸發(fā)的二進制數(shù)值一樣,在此以后的波形數(shù)據(jù)才存入顯示RAM中。

        當這7個按鍵中的某一個被觸發(fā),都會置位相應的標志位,以便刷新LCD液晶屏上相應的顯示信息。

        1.2.3、數(shù)字觸發(fā)功能

        如何實現(xiàn)觸發(fā)呢?用硬件來完成的話又會增加系統(tǒng)硬件電路的復雜度,我就想了一個辦法,有軟件的方式來實現(xiàn)觸發(fā)的功能。實現(xiàn)的過程如下:
        for (ik=0;ik500;ik++){
        if (k0_ram){
        if (box_buff[ik] trigger) {
        kk_ram = 1 ;
        }
        if (kk_ram){
        if ((box_buff[ik] >= trigger) (ik 402)){
        en_ram = 1 ;
        k0_ram = 0 ;
        kk_ram = 0 ;
        }}}
        if (en_ram){
        boxing[adc_data]=box_buff[ik] ;
        adc_data++ ;
        if (adc_data > 96){
        adc_data = 0x00 ;
        en_ram = 0 ;
        }}}

        trigger的大小可以通過觸發(fā)電平上移與觸發(fā)電平下移按鍵來設置它的大小。

        1.2.3、還原波形

        GDM12864A是一個具有128點x 64點的點陣LCD。根據(jù)所選的LCD的特點,Y軸上只有64個點,所以能顯示的數(shù)據(jù)范圍為0到63而采樣得到的數(shù)據(jù)為8位的二進制數(shù)據(jù)為0到255。為了能在這個LCD上顯示只取8位數(shù)據(jù)的高6位。那么如何把這高6位的二進制數(shù)據(jù)轉(zhuǎn)換成在LCD上的Y軸座標和數(shù)據(jù)值呢?我想了這樣一個計算的方法:

        LCD的縱向分為8個地址從上到下依次為0~7,每個地址段有8個數(shù)據(jù)點。在某個數(shù)據(jù)段中如果想依次讓這些位從上到下點亮就需要依次向這個地址段送數(shù)據(jù)0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,送入0x00后這個地址段的8個數(shù)據(jù)點將不被點亮。實現(xiàn)的具體過程如圖4 所示。
        dat = dat>>2
        y = 7
        dat >= 8 ?
        dat = dat – 8; y--;
        y == 1 ?
        dat > 7 ?
        dat = 7 ;
        dat = 0x80 >> dat
        write_add(y,x) ;
        write_data(dat) ;


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 巴中市| 宜黄县| 内乡县| 台东市| 尖扎县| 海安县| 雷山县| 延庆县| 神农架林区| 库尔勒市| 北海市| 阜康市| 靖安县| 永丰县| 厦门市| 鄂伦春自治旗| 庆云县| 阳春市| 商城县| 阿拉善右旗| 龙海市| 开鲁县| 六盘水市| 齐河县| 沈阳市| 岗巴县| 九江市| 新闻| 萍乡市| 天全县| 克东县| 三穗县| 曲沃县| 巴中市| 泾源县| 顺义区| 东光县| 集安市| 呼伦贝尔市| 红河县| 海口市|