找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3091|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

請教C8051F020單片機的AD轉(zhuǎn)換問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:33455 發(fā)表于 2020-11-18 16:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
PT100通過op07c芯片接到C8051F020芯片,用網(wǎng)上找的例程改的測到的溫度室溫只有8度,而且顯示25以上就又稱0了,大神們幫我看看是程序哪里不對
萬分感謝
程序如下

#include <stdio.h>
#include <INTRINS.H>

#define uchar unsigned char
#define uint unsigned int


sfr16 ADC0= 0xbe;                 // ADC0 data
sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
sfr16 DAC0= 0xd2;                 // DAC0 data
sfr16 DAC1= 0xd5;                 // DAC1 data


//#define SYSCLK       22118400          // SYSCLK frequency in Hz
//#define SAMPLE_RATE  50000             // Sample frequency in Hz
//#define        AMX0SL_AIN   0                                   // 0=AIN0....7=AIN7,8=TEMP





uint ADCdata;
bit   ADCflag;
uchar volarray[3];         //讀到的數(shù)值緩存
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// ADC0配置,ADC0BUSY為轉(zhuǎn)換啟動源, 并在轉(zhuǎn)換完成時產(chǎn)生中斷
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
    AMX0CF = 0x60;                           // AMUX Configuration Register
        AMX0SL = 0;                   // 第0個通道
        ADC0CF = (22118400/50000)<< 3;     // ADC conversion clock = .5MHz
        ADC0CN = 0x80;                           // ADC Control Register
    REF0CN = 0x03;                     // 啟用內(nèi)部基準(zhǔn)源
    EIE2 |= 0x02;                       // 啟用 ADC 中斷
}

//-----------------------------------------------------------------------------
// 顯示子程序
//-----------------------------------------------------------------------------
void ADZH()
{

        float Voltage;
   int   Vol;
   uint temp;
  if (ADCflag)
                        {
             ADCflag=0;
                    Voltage=(ADCdata*2.4)/4096;
                         Vol=Voltage*100;
             volarray[0]=Vol/100;  //數(shù)碼管第一位
             temp=Vol%100;
             volarray[1]=temp/10;  //數(shù)碼管第二位        
                         volarray[2]=temp%10;  //數(shù)碼管第三位
                     AD0BUSY=1;         
                                                
                        }

}


//-----------------------------------------------------------------------------
void ADCSH ()
{

   ADC0_Init();                       // init ADC
   AD0BUSY=1;            

}


//-----------------------------------------------------------------------------
// ADC0采樣中斷
//-----------------------------------------------------------------------------
void ADC0_ISR (void) interrupt  15
{                 
   AD0INT = 0;                                        // 清 ADC 中斷標(biāo)志位
   ADCdata= ADC0;               // ADC采樣數(shù)據(jù)
   ADCflag=1;

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:33455 發(fā)表于 2020-11-19 11:03 | 只看該作者
有沒有大佬幫忙給看看 萬分感謝
回復(fù)

使用道具 舉報

板凳
ID:33455 發(fā)表于 2020-11-19 15:04 | 只看該作者
有沒有師傅指點一下
回復(fù)

使用道具 舉報

地板
ID:587208 發(fā)表于 2020-11-20 14:41 | 只看該作者
Voltage=(ADCdata*2.4)/4096;
你的這個算法,c8051f單片機AD是多少位的AD?12位的AD就對了,2.4是你采樣的AD最高電壓嗎?如果對,這條語句就沒有問題了。
回復(fù)

使用道具 舉報

5#
ID:33455 發(fā)表于 2020-11-21 16:00 來自手機 | 只看該作者
studylyl 發(fā)表于 2020-11-20 14:41
Voltage=(ADCdata*2.4)/4096;
你的這個算法,c8051f單片機AD是多少位的AD?12位的AD就對了,2.4是你采樣 ...

這樣算下來的值是實際單片機ad輸入的電壓值,我用萬用表檢測了一下基本沒有誤差,但是這個電壓值怎么就算成溫度值,溫度范圍為負(fù)10度到130度,單片機ad電壓范圍為0-2.5伏
回復(fù)

使用道具 舉報

6#
ID:213173 發(fā)表于 2020-11-21 20:53 | 只看該作者
yanfeng082 發(fā)表于 2020-11-21 16:00
這樣算下來的值是實際單片機ad輸入的電壓值,我用萬用表檢測了一下基本沒有誤差,但是這個電壓值怎么就算 ...


沒有用過PT100,印象中其溫阻特性曲線的線性比較好。按樓主說法溫度范圍為負(fù)10度到130度對應(yīng)單片機ad電壓范圍為0-2.5V,也就是0~2500mV;舅惴ǎ簻囟菴=mV/17.86-10。
回復(fù)

使用道具 舉報

7#
ID:33455 發(fā)表于 2020-11-22 12:02 | 只看該作者
wulin 發(fā)表于 2020-11-21 20:53
沒有用過PT100,印象中其溫阻特性曲線的線性比較好。按樓主說法溫度范圍為負(fù)10度到130度對應(yīng)單片機ad電 ...

感謝樓上的回答,萬分感謝,我想知道你至個公式是怎么得來的,怎么推算出來的,我代入程序中和實際溫度差異還是很大,下面附上電路圖 我現(xiàn)在想知道怎么通過AD采集的電壓值計算PT100的電阻值,得到電阻值可以通過查表得到溫度,下面付電路圖C:\Users\Administrator\Desktop\QQ截圖20201122104949
回復(fù)

使用道具 舉報

8#
ID:33455 發(fā)表于 2020-11-22 12:03 | 只看該作者
運放電路如圖,怎么通過運放輸出的電壓計算出PT100的電阻值

51hei截圖20201122104949.png (8.26 KB, 下載次數(shù): 111)

51hei截圖20201122104949.png
回復(fù)

使用道具 舉報

9#
ID:213173 發(fā)表于 2020-11-22 15:01 | 只看該作者
yanfeng082 發(fā)表于 2020-11-22 12:02
感謝樓上的回答,萬分感謝,我想知道你至個公式是怎么得來的,怎么推算出來的,我代入程序中和實際溫度差 ...

要在高級模式里才能發(fā)圖片和其它附件。給你一個示例,用單片機自帶10位ADC和普通10K B3950 NTC熱敏電阻制作偽12位ADC溫度表,經(jīng)測試20~100°C范圍誤差不超0.5°C。外電路極其簡單。

10K B3950 NTC溫阻電壓編碼表 上偏電阻2.4K.zip (33.83 KB, 下載次數(shù): 7) -30~150度數(shù)碼管溫度計(對分查表).zip (31.07 KB, 下載次數(shù): 5)


回復(fù)

使用道具 舉報

10#
ID:213173 發(fā)表于 2020-11-23 08:40 | 只看該作者
yanfeng082 發(fā)表于 2020-11-22 12:02
感謝樓上的回答,萬分感謝,我想知道你至個公式是怎么得來的,怎么推算出來的,我代入程序中和實際溫度差 ...

按照你提供的數(shù)據(jù):溫度范圍為負(fù)10度到130度,單片機ad電壓范圍為0-2.5伏計算。
電壓mV=ADC轉(zhuǎn)換結(jié)果*參考電壓*放大1000/4096
系數(shù)=2500/140=17.85714285714286
溫度=電壓*系數(shù)-溫度基點
C=mV/17.86-10
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表