找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2354|回復(fù): 6
收起左側(cè)

使用ch552 ADC采集電壓,為什么沒有顯示ADC的數(shù)值

[復(fù)制鏈接]
ID:858009 發(fā)表于 2021-12-7 15:48 | 顯示全部樓層 |閱讀模式
本帖最后由 qwettyuio 于 2021-12-7 15:51 編輯

主函數(shù)
#include "CH554.H"                                                   
#include "Debug.H"
#include "GPIO.H"
#include "HT1621.H"
#include "ADC.H"
#include "stdio.h"
#include <string.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

uchar code tabe1[11] = {0xF0,0x00,0xD0,0x90,0x20,0xB0,0xF0,0x10,0xF0,0xB0};
uchar code tabe2[11] = {0xA0,0xA0,0x60,0xE0,0xE0,0xC0,0xC0,0xA0,0xE0,0xE0};

uchar a0,a1,a2,num;

/*******************************************************************************
* Function Name  : Show_Init()
* Description    : 顯示對應(yīng)的電壓
*******************************************************************************/
void Show_Init(uchar a0,uchar a1,uchar a2)
{
        Write_1621(15,tabe1[a0],4);
        Write_1621(16,tabe2[a0],4);
        Write_1621(17,tabe1[a1],4);
        Write_1621(18,tabe2[a1],4);
        Write_1621(19,tabe1[a2],4);
        Write_1621(20,tabe2[a2],4);
}void main( )
{
        UINT16 i;
        ADCInit(0);
        EA=1;              //開啟全局中斷
        Init_1621();       //初始化HT1621
        HT1621_all_off();  //清空LCD顯示
        while(1)
        {
                for(i=0;i<4;i++)
                {
                        ADC_ChannelSelect(3);         //ADC采樣電源開啟和通道設(shè)置,采樣通道AIN3
                        ADC_START = 1;                //開啟采樣,等待采樣完成進入中斷
                        while(ADC_START);             //采樣完成,ADC_START=0
                        num=ADC_DATA;
                        mDelaymS(100);                //等待,進入下通道采集數(shù)據(jù)
                }        
                a0=num/100;
                a1=num%100/10;
                a2=num%10;
                Show_Init(a0,a1,a2);
        }
}



代碼.rar

118.3 KB, 下載次數(shù): 3

代碼

回復(fù)

使用道具 舉報

ID:752974 發(fā)表于 2021-12-7 16:17 | 顯示全部樓層
這個需要從3個方面找原因:
1. 顯示功能是否正常;
2. ADC工作是否正常;
3. 采集的數(shù)據(jù)是否送到了LCD上。
   三個環(huán)節(jié)缺一不可。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-12-7 16:22 | 顯示全部樓層
以下幾點,核對一下:

ADC 采樣模式配置步驟:
(1)、設(shè)置 ADC_CFG 寄存器中的 ADC_EN 位為 1,開啟 ADC 模塊,設(shè)置 bADC_CLK 選擇頻率。
(2)、設(shè)置 ADC_CTRL 寄存器中的 ADC_CHAN1/0,選擇輸入通道。
(3)、可選的,清零中斷標(biāo)志 ADC_IF?蛇x的,如果使用中斷模式,還需要在此使能中斷。
(4)、設(shè)置 ADC_CTRL 寄存器中的 ADC_START,啟動一次 ADC 轉(zhuǎn)換。
(5)、等待 ADC_START 變?yōu)?0,或者 ADC_IF 被置 1(如果之前已清零),表示 ADC 轉(zhuǎn)換結(jié)束,可通過
ADC_DATA 讀取結(jié)果數(shù)據(jù)。該數(shù)據(jù)是輸入電壓相對于 VCC 電源電壓的 255 等份的值,例如,結(jié) 果數(shù)據(jù)是 47,說明輸入電壓接近 VCC 電壓的 47/255。如果 VCC 電源電壓也不確定,那么可以 另測一個確定的參考電壓值,再按比例計算出被測的輸入電壓值和 VCC 電源電壓值。
(6)、如果再次設(shè)置 ADC_START 則可啟動下一次 ADC 轉(zhuǎn)換。

另外,重點:
端口模式,必須設(shè)置為輸入并且處于輸出 1 的狀態(tài)(相當(dāng)于高阻輸入),Pn_DIR_PU[x]=0,并且建議關(guān)閉上拉電阻和下拉電阻。
回復(fù)

使用道具 舉報

ID:858009 發(fā)表于 2021-12-7 16:41 | 顯示全部樓層
188610329 發(fā)表于 2021-12-7 16:22
以下幾點,核對一下:

ADC 采樣模式配置步驟:

按照官方給的文件使用ADC,找不出問題錯在哪一步?這是調(diào)用的文件函數(shù),求指點一下

/********************************** (C) COPYRIGHT *******************************
* File Name          : ADC.C
* Author             : WCH
* Version            : V1.0
* Date               : 2019/07/22
* Description        : CH554 ADC采樣時鐘設(shè)置,ADC通道設(shè)置函數(shù),電壓比較模式設(shè)置
*******************************************************************************/

#include "..\Public\CH554.H"                                                         
#include "..\Public\Debug.H"
#include "ADC.H"
#include "stdio.h"

#pragma  NOAREGS

#define ADC_INTERRUPT  1
UINT16 UserData;
/*******************************************************************************
* Function Name  : ADCInit(UINT8 div)
* Description    : ADC采樣時鐘設(shè)置,模塊開啟,中斷開啟
* Input          : UINT8 div 時鐘設(shè)置
                   1 慢  384個Fosc                                                                                  
                   0 快  96個Fosc                                                                         
* Output         : None
* Return         : None
*******************************************************************************/
void ADCInit(UINT8 div)
{
    ADC_CFG &= ~bADC_CLK | div;
    ADC_CFG |= bADC_EN;                                                        //ADC電源使能
#if ADC_INTERRUPT
    ADC_IF = 0;                                                                //清空中斷
    IE_ADC = 1;                                                                //使能ADC中斷
#endif
}

/*******************************************************************************
* Function Name  : ADC_ChannelSelect(UINT8 ch)
* Description    : ADC采樣啟用
* Input          : UINT8 ch 采用通道
* Output         : None
* Return         : 成功 SUCCESS
                   失敗 FAIL
*******************************************************************************/
UINT8 ADC_ChannelSelect(UINT8 ch)
{
    if(ch == 0){ADC_CHAN1 =0;ADC_CHAN0=0;P1_DIR_PU &= ~bAIN0;}                 //AIN0
    else if(ch == 1){ADC_CHAN1 =0;ADC_CHAN0=1;P1_DIR_PU &= ~bAIN1;}            //AIN1
    else if(ch == 2){ADC_CHAN1 =1;ADC_CHAN0=0;P1_DIR_PU &= ~bAIN2;}            //AIN2
    else if(ch == 3){ADC_CHAN1 =1;ADC_CHAN0=1;P3_DIR_PU &= ~bAIN3;}            //AIN3
    else return FAIL;
    return SUCCESS;
}

/*******************************************************************************
* Function Name  : VoltageCMPModeInit()
* Description    : 電壓比較器模式初始化
* Input          : UINT8 fo 正向端口 0\1\2\3
                   UINT8 re 反向端口 1\3
* Output         : None
* Return         : 成功 SUCCESS
                   失敗 FAIL
*******************************************************************************/
UINT8 VoltageCMPModeInit(UINT8 fo,UINT8 re)
{
    ADC_CFG |= bCMP_EN;                                                        //電平比較電源使能
    if(re == 1){
      if(fo == 0) {ADC_CHAN1 =0;ADC_CHAN0=0;CMP_CHAN =0;}                      //AIN0和AIN1
      else if(fo == 2) {ADC_CHAN1 =1;ADC_CHAN0=0;CMP_CHAN =0;}                 //AIN2和AIN1
      else if(fo == 3) {ADC_CHAN1 =1;ADC_CHAN0=1;CMP_CHAN =0; }                //AIN3和AIN1                       
      else return FAIL;
    }                             
    else if(re == 3){
      if(fo == 0) {ADC_CHAN1 =0;ADC_CHAN0=0;CMP_CHAN =0;}                      //AIN0和AIN1
      else if(fo == 1) {ADC_CHAN1 =0;ADC_CHAN0=1;CMP_CHAN =0;}                 //AIN1和AIN1
      else if(fo == 2) {ADC_CHAN1 =1;ADC_CHAN0=0;CMP_CHAN =0;}                 //AIN2和AIN1                       
      else return FAIL;
    }
    else return FAIL;
#if ADC_INTERRUPT
    CMP_IF = 0;                                                                //清空中斷
    IE_ADC = 1;                                                                //使能ADC中斷
#endif

     return SUCCESS;
}

#if ADC_INTERRUPT
/*******************************************************************************
* Function Name  : ADCInterrupt(void)
* Description    : ADC 中斷服務(wù)程序
*******************************************************************************/
void        ADCInterrupt( void ) interrupt INT_NO_ADC using 1                       //ADC中斷服務(wù)程序,使用寄存器組1
{
    if(ADC_IF ==  1)                                                          //ADC完成中斷
    {
      UserData = ADC_DATA;                                                    //取走ADC采樣數(shù)據(jù)
      ADC_IF = 0;                                                                          //清空ADC中斷標(biāo)志
          printf(" %d ",UserData);
    }
    if(CMP_IF ==  1)                                                          //電壓比較完成中斷
    {       
//       UserData = ADC_CTRL&0x80 >> 7);                                                //保存比較器結(jié)果               
      CMP_IF = 0;                                                                          //清空比較器完成中斷
    }
}
#endif
回復(fù)

使用道具 舉報

ID:858009 發(fā)表于 2021-12-7 17:20 | 顯示全部樓層
188610329 發(fā)表于 2021-12-7 16:22
以下幾點,核對一下:

ADC 采樣模式配置步驟:

按照這個步驟寫的,文件里有完整的代碼,希望大佬可以指點一下解決
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-12-7 17:25 | 顯示全部樓層
qwettyuio 發(fā)表于 2021-12-7 17:20
按照這個步驟寫的,文件里有完整的代碼,希望大佬可以指點一下解決

如果完全按照這個流程,也設(shè)置了端口方向,硬件連線也正確的話, 采集不可能有問題的,你采集出來的結(jié)果是什么? 有用串口回傳電腦的串口助手么?
回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2021-12-9 17:51 | 顯示全部樓層
你先將ADC轉(zhuǎn)換結(jié)果通過串口發(fā)送出去,沒問題了再加LCD的程序。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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