找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

求助STC89C52用ADC0809采集問(wèn)題,仿真可以但實(shí)物不行

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
50黑幣
請(qǐng)問(wèn),我用以下的仿真圖連接實(shí)物,為什么采不出真實(shí)的電壓值?仿真圖,可以采到差不多的電壓值。我的實(shí)物圖是沒(méi)有還提供采集通道的電壓呢,怎么就有電壓3.710出來(lái)了?有做個(gè)類(lèi)似的么?是不是仿真圖不能用實(shí)物連接的啊,需要個(gè)鎖存器么?請(qǐng)求幫助,謝謝了。


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

使用道具 舉報(bào)

沙發(fā)
ID:394367 發(fā)表于 2018-9-26 20:52 | 只看該作者

RE: 求助STC89C52用ADC0809采集問(wèn)題,仿真可以但實(shí)物不行

請(qǐng)問(wèn),我用以下的仿真圖連接實(shí)物,為什么采不出真實(shí)的電壓值?仿真圖,可以采到差不多的電壓值。我的實(shí)物圖是沒(méi)有還提供采集通道的電壓呢,怎么就有電壓3.710出來(lái)了?有做個(gè)類(lèi)似的么?是不是仿真圖不能用實(shí)物連接的啊,需要個(gè)鎖存器么?請(qǐng)求幫助,謝謝了。

11.jpg (269.56 KB, 下載次數(shù): 83)

11.jpg

10.jpg (166.52 KB, 下載次數(shù): 85)

10.jpg

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
perfect123 + 15 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:303383 發(fā)表于 2018-9-26 21:21 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

地板
ID:394367 發(fā)表于 2018-9-27 08:29 | 只看該作者
小貓貓愛(ài)吃魚(yú) 發(fā)表于 2018-9-26 21:21
你好!一般情況下,都是 0809 時(shí)鐘提供的不對(duì),發(fā)圖出來(lái)看看吧

我用是0.2ms中斷一次產(chǎn)生時(shí)鐘的,給你看看程序?qū)Σ粚?duì)
#include <reg52.h>                    //52系列單片機(jī)頭文件
#include <intrins.h>
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
sbit st=P2^2;                //定義AD的WR端口
sbit oe=P2^3;                //定義AD的RD端口
sbit eoc=P2^0;
sbit ale=P2^1;

sbit lcden=P2^6;        //液晶使能端
sbit lcdrs=P2^4;        //液晶數(shù)據(jù)命令選擇端

sbit ADDA=P2^5;                //定義A、B、C三條地址線
sbit ADDB=P3^6;
sbit ADDC=P3^7;
sbit CLK=P2^7;          //定義時(shí)鐘端口
uint a,num;
float OPA,OPB,AD;
uchar code table41[]="WELCOME!";


/*********
延遲函數(shù)
**********/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
/************
2002寫(xiě)命令
**************/
void write_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
/************
2002寫(xiě)數(shù)據(jù)
*************/
void write_data(uchar date)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
/****************
液晶初始化
*********************/
void init()
{
        lcden=0;
        write_com(0x38);//設(shè)置2002顯示,5X7點(diǎn)陣,8位數(shù)據(jù)接口
        write_com(0x0c);//設(shè)置開(kāi)顯示,不顯示光標(biāo)
        write_com(0x06);//寫(xiě)一個(gè)字符后地址指針加1
        write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
}
/********************
顯示程序
****************************/
void display(uint x,uint qian,uint bai,uint shi,uint ge)
{
        write_com(0x80+x);
        write_data(0x30+qian);
        write_data('.');
        write_data(0x30+bai);
        write_data(0x30+shi);
        write_data(0x30+ge);
}
/********************
   定時(shí)中斷初始化,為了產(chǎn)生AD芯片需要的時(shí)鐘信號(hào)
*********************/
void init_time0()
{
     TMOD = 0x02;
         TH0=(65536-200)/256;
         TL0=(65536-200)%256;
         IE   = 0x82;
         TR0  = 1;
}

/********************
A通道OPA光電壓采集
***********************/
void OPA_1()
{
   
             ADDA=1;           //選擇通道1
             ADDB=0;
             ADDC=0;
             oe=0;                //關(guān)閉輸出允許位
             st=0;
             st=1;
             st=0;                //以上三句,開(kāi)ADC0809
             delay(1);        //延遲1ms
             while(!eoc);//等待轉(zhuǎn)化結(jié)束
             P1=0xff;
             oe=1;                //開(kāi)啟輸出允許位
             a=P1;                //將轉(zhuǎn)化出的數(shù)字存放至a
             a=a*19.53125;          //  a=a*5/256*1000
             OPA=a*0.001;  
}
/********************
主函數(shù):
*******************/
void main()
{       
     uint a1,a2,a3,a4;

     init_time0();
         init();
         write_com(0x80+0x07);
     for(num=0;num<8;num++)
     {
                  write_data(table41[num]);
                  delay(150);
         }
         delay(1000);
     while(1)
     {                              
               
                 OPA_1();//A路光電壓采集                                
                 a1=a/1000;
             a2=a/100%10;
             a3=a/10%10;
             a4=a%10;
             display(0x48,a1,a2,a3,a4);                      
         }                  
}
void Timer0_INT() interrupt 1        //用定時(shí)中斷產(chǎn)生ADC芯片時(shí)鐘信號(hào)
{

        TH0=(65536-200)/256;
        TL0=(65536-200)%256;
        CLK = !CLK;
}  
回復(fù)

使用道具 舉報(bào)

5#
ID:394367 發(fā)表于 2018-9-27 09:09 | 只看該作者
有沒(méi)人給我看看,是不是AD芯片時(shí)鐘信號(hào)給的不對(duì)?下面是程序
#include <reg52.h>                    //52系列單片機(jī)頭文件
#include <intrins.h>
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
sbit st=P2^2;                //定義AD的WR端口
sbit oe=P2^3;                //定義AD的RD端口
sbit eoc=P2^0;
sbit ale=P2^1;

sbit lcden=P2^6;        //液晶使能端
sbit lcdrs=P2^4;        //液晶數(shù)據(jù)命令選擇端

sbit ADDA=P2^5;                //定義A、B、C三條地址線
sbit ADDB=P3^6;
sbit ADDC=P3^7;
sbit CLK=P2^7;          //定義時(shí)鐘端口
uint a,num;
float OPA,OPB,AD;
uchar code table41[]="WELCOME!";


/*********
延遲函數(shù)
**********/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
/************
2002寫(xiě)命令
**************/
void write_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
/************
2002寫(xiě)數(shù)據(jù)
*************/
void write_data(uchar date)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
/****************
液晶初始化
*********************/
void init()
{
        lcden=0;
        write_com(0x38);//設(shè)置2002顯示,5X7點(diǎn)陣,8位數(shù)據(jù)接口
        write_com(0x0c);//設(shè)置開(kāi)顯示,不顯示光標(biāo)
        write_com(0x06);//寫(xiě)一個(gè)字符后地址指針加1
        write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
}
/********************
顯示程序
****************************/
void display(uint x,uint qian,uint bai,uint shi,uint ge)
{
        write_com(0x80+x);
        write_data(0x30+qian);
        write_data('.');
        write_data(0x30+bai);
        write_data(0x30+shi);
        write_data(0x30+ge);
}
/********************
   定時(shí)中斷初始化,為了產(chǎn)生AD芯片需要的時(shí)鐘信號(hào)
*********************/
void init_time0()
{
     TMOD = 0x02;
         TH0=(65536-100)/256;
         TL0=(65536-100)%256;
         IE   = 0x82;
         TR0  = 1;
}

/********************
A通道OPA光電壓采集
***********************/
void OPA_1()
{
   
             ADDA=1;           //選擇通道1
             ADDB=0;
             ADDC=0;
             oe=0;                //關(guān)閉輸出允許位
             st=0;
             st=1;
             st=0;                //以上三句,開(kāi)ADC0809
             delay(1);        //延遲1ms
             while(!eoc);//等待轉(zhuǎn)化結(jié)束
             P1=0xff;
             oe=1;                //開(kāi)啟輸出允許位
             a=P1;                //將轉(zhuǎn)化出的數(shù)字存放至a
             a=a*19.53125;          //  a=a*5/256*1000
             OPA=a*0.001;  
}
/********************
主函數(shù):
*******************/
void main()
{       
     uint a1,a2,a3,a4;

     init_time0();
         init();
         write_com(0x80+0x07);
     for(num=0;num<8;num++)
     {
                  write_data(table41[num]);
                  delay(150);
         }
         delay(1000);
     while(1)
     {                              
               
                 OPA_1();//A路光電壓采集                                
                 a1=a/1000;
             a2=a/100%10;
             a3=a/10%10;
             a4=a%10;
             display(0x48,a1,a2,a3,a4);                      
         }                  
}
void Timer0_INT() interrupt 1        //用定時(shí)中斷產(chǎn)生ADC芯片時(shí)鐘信號(hào)
{

        TH0=(65536-100)/256;
        TL0=(65536-100)%256;
        CLK = ~CLK;
}  
回復(fù)

使用道具 舉報(bào)

6#
ID:403018 發(fā)表于 2018-9-27 10:19 | 只看該作者
看下ADC0809這個(gè)芯片手冊(cè)提供的時(shí)序,然后看看你程序是不是一致,如果大致沒(méi)問(wèn)題,可以嘗試微調(diào)下延時(shí)的時(shí)間,如有需求可以加Q:1327360970
回復(fù)

使用道具 舉報(bào)

7#
ID:303383 發(fā)表于 2018-9-27 10:59 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

8#
ID:388197 發(fā)表于 2018-9-27 11:01 | 只看該作者
8位重載模式,定時(shí)計(jì)數(shù)器高8位和低8位應(yīng)該值相等才對(duì).
并且不需要在中斷函數(shù)里面對(duì)TH0 TL0進(jìn)行設(shè)置.
void Init_T0()              //12M晶振12分頻
{
  TMOD |=0x02;
  TH0 = 0x9c;
  TL0 = 0x9c;
  ET0 = 1;
  TR0 = 1;
  EA = 1;
}

中斷服務(wù)函數(shù)
void Timer0_ISR () interrupt 1
{
    CLK = ~CLK;
}
如果沒(méi)有示波器,你可以接個(gè)LED到CLK口,然后用中斷寫(xiě)個(gè)1秒閃一次的程序看看LED會(huì)不會(huì)閃就知道了,如果閃,把頻率改高就行.
用AD直接用12系列以上的51現(xiàn)在新出的芯片片上都集成了12位的ADC,只需要1個(gè)IO口作為模擬輸入口就行,ADC0809這種過(guò)時(shí)的芯片,除了在過(guò)時(shí)的書(shū)上面,實(shí)際運(yùn)用中根本不會(huì)用到.
回復(fù)

使用道具 舉報(bào)

9#
ID:394367 發(fā)表于 2018-9-27 11:40 | 只看該作者
yk910127 發(fā)表于 2018-9-27 10:19
看下ADC0809這個(gè)芯片手冊(cè)提供的時(shí)序,然后看看你程序是不是一致,如果大致沒(méi)問(wèn)題,可以嘗試微調(diào)下延時(shí)的時(shí) ...

好的,我試試,謝謝了
回復(fù)

使用道具 舉報(bào)

10#
ID:394367 發(fā)表于 2018-9-27 15:27 | 只看該作者
看來(lái),直接用89C52直接產(chǎn)生不了AD芯片需要的時(shí)鐘信號(hào)(500-640KHZ),實(shí)物上沒(méi)有產(chǎn)生clk這個(gè)時(shí)鐘信號(hào)。
回復(fù)

使用道具 舉報(bào)

11#
ID:394367 發(fā)表于 2018-9-27 16:54 | 只看該作者
cjm82 發(fā)表于 2018-9-27 11:01
8位重載模式,定時(shí)計(jì)數(shù)器高8位和低8位應(yīng)該值相等才對(duì).
并且不需要在中斷函數(shù)里面對(duì)TH0 TL0進(jìn)行設(shè)置.
void  ...

我想請(qǐng)問(wèn)下,用STC12系列的單片機(jī)是不是采集電壓直接連IO口就可以了,不用其他外圍電路了吧。你有類(lèi)似的電路么
回復(fù)

使用道具 舉報(bào)

12#
ID:249808 發(fā)表于 2018-9-28 09:34 | 只看該作者
有時(shí)候不要光想著軟件問(wèn)題,有可能是硬件問(wèn)題呢?之前我弄了一個(gè)搞了半天,結(jié)果是硬件的問(wèn)題,你查一下基準(zhǔn)電壓,還有電阻的阻值!這些有偏差也會(huì)導(dǎo)致電壓不準(zhǔn)的!
回復(fù)

使用道具 舉報(bào)

13#
ID:388197 發(fā)表于 2018-9-28 09:56 | 只看該作者
FJ2018 發(fā)表于 2018-9-27 16:54
我想請(qǐng)問(wèn)下,用STC12系列的單片機(jī)是不是采集電壓直接連IO口就可以了,不用其他外圍電路了吧。你有類(lèi)似的 ...

一般應(yīng)用直接接帶有ADC功能的IO口,設(shè)置相關(guān)寄存器就行,怎么設(shè)置手冊(cè)里有詳細(xì)的介紹,12系列ADC是10位的,最新的8系列IO口是12位的.QFP64封裝的有單獨(dú)的ADC電源和參考電壓引腳,適合接基準(zhǔn)源精度較高的場(chǎng)合.相關(guān)電路手冊(cè)里也有,下圖是從手冊(cè)里截的,最常用的接法

QQ圖片20180928094823.png (42.8 KB, 下載次數(shù): 60)

QQ圖片20180928094823.png
回復(fù)

使用道具 舉報(bào)

14#
ID:394367 發(fā)表于 2018-9-28 17:30 | 只看該作者
cjm82 發(fā)表于 2018-9-28 09:56
一般應(yīng)用直接接帶有ADC功能的IO口,設(shè)置相關(guān)寄存器就行,怎么設(shè)置手冊(cè)里有詳細(xì)的介紹,12系列ADC是10位的,最 ...

我今天用12系列的做出來(lái)了,也采到了電壓。謝謝你們了。
回復(fù)

使用道具 舉報(bào)

15#
ID:230313 發(fā)表于 2018-11-7 22:12 | 只看該作者
樓主,我的也遇到相同問(wèn)題能加下你,問(wèn)下么
回復(fù)

使用道具 舉報(bào)

16#
ID:388197 發(fā)表于 2018-11-7 23:01 | 只看該作者
不要在AD0808之類(lèi)的過(guò)時(shí)芯片上浪費(fèi)時(shí)間了,0808占用IO口超多,還需提供時(shí)鐘,并且只有8位.現(xiàn)在的單片機(jī)基本都集成了ADC功能,分辨率也完爆0808,要求不高的話,模擬電壓量直接接到IO剩下的工作就是敲鍵盤(pán)而已.寄存器設(shè)置參考手冊(cè)上的例程即可,非常簡(jiǎn)單.可以說(shuō)0808已經(jīng)沒(méi)有任何使用價(jià)值,這完全是教材跟不上時(shí)代的原因.(沒(méi)記錯(cuò)的話0808的價(jià)錢(qián)還比片上集成12位ADC的51價(jià)格還貴)個(gè)人覺(jué)得學(xué)51最好的教材就是參考手冊(cè)
回復(fù)

使用道具 舉報(bào)

17#
ID:394367 發(fā)表于 2019-3-29 14:39 | 只看該作者
xuanshao 發(fā)表于 2018-11-7 22:12
樓主,我的也遇到相同問(wèn)題能加下你,問(wèn)下么

建議還是用帶ADC的單片機(jī)采集AD吧
回復(fù)

使用道具 舉報(bào)

18#
ID:481641 發(fā)表于 2019-4-3 16:32 | 只看該作者
仿真不準(zhǔn)正常
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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