標(biāo)題: PCF8591寫DA問題,請大佬指點下單片機程序 [打印本頁]

作者: byyw    時間: 2023-4-25 15:10
標(biāo)題: PCF8591寫DA問題,請大佬指點下單片機程序
主程序如下:
void        main()
{
        long date;
        initialize();//液晶初始化        
        while(1)
        {        
                date = Get_Voltage();      // 讀取 A/D 轉(zhuǎn)換結(jié)果
               
                write_byte(date);//啟動DA,將讀取結(jié)果重新賦給DA輸出
               
                date=date*450/255; // 將采樣結(jié)果轉(zhuǎn)換為電壓值
        
                show(1,1,0x30+date/100);
                show(1,2,'.');
                show(1,3,0x30+date%100/10);
                show(1,4,0x30+date%100%10);
                show(1,5,'V');  
        }
}

實現(xiàn)以下功能:(已經(jīng)實現(xiàn),就是存在小問題)
1.用AD模式讀出電位器當(dāng)前電壓,顯示在LCD1206上.(沒有問題)
2.然后把讀到的這個電壓寫進DA,用DA輸出控制LED亮度。(存在小問題)

當(dāng)前現(xiàn)象:
LED會一直微微閃爍,雖然閃的不明顯但是可以看出來。

分析原因:(純純根據(jù)自己理解分析,如果有錯誤,還望指出)
因為寫DA函數(shù)在大循環(huán)里,也就是說會無限循環(huán)寫入數(shù)據(jù)的,當(dāng)在寫入數(shù)據(jù)這個過程時,DA輸出會不穩(wěn)定,數(shù)據(jù)寫完后,DA輸出變穩(wěn)定,一直循環(huán)這個過程,所以LED亮度會看見微微閃爍。但是寫DA函數(shù)還必須在while循環(huán)里面。

目前想到解決辦法:
當(dāng)檢測到電位器電壓不變的時候,停止寫DA,當(dāng)檢測到電位器電壓重新開始變化的時候啟動寫DA。

想了好久沒想出來程序怎么實現(xiàn),還請高手指點下。





作者: byyw    時間: 2023-4-25 15:35
當(dāng)前程序DA輸出波形


作者: yzwzfyz    時間: 2023-4-26 16:53
方法一:
加個遲滯回線。
設(shè)計定一個Δ,
開始:
1、記錄一個采樣值X并送去顯示。
2、下個:當(dāng)新的采樣值在X±Δ之內(nèi),不改顯示。
3、當(dāng)新的采樣值在X±Δ之外,回到1、。
方法2:去頭去尾求平均。
采樣2M+N次(如M=4,N=8),去除最大的M次,去除最小的M次,余下的N次求平均后,再送出。
方法3,壓倉。
例:那個倉位,可存16個采樣值。每次采樣后,去掉最前面的第16個值,存入當(dāng)前值,再求16個值的平均值,取用。
方法多多,但有一點,顯示與硬件有關(guān),硬件上在DA未轉(zhuǎn)換穩(wěn)定前不應(yīng)該有輸出變化,即應(yīng)該有OE控制。
作者: byyw    時間: 2023-4-28 15:59
yzwzfyz 發(fā)表于 2023-4-26 16:53
方法一:
加個遲滯回線。
設(shè)計定一個Δ,

感謝指明方向,我再去試試。!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1