久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2235|回復: 6
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:858009 發表于 2021-12-7 15:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 qwettyuio 于 2021-12-7 15:51 編輯

主函數
#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    : 顯示對應的電壓
*******************************************************************************/
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采樣電源開啟和通道設置,采樣通道AIN3
                        ADC_START = 1;                //開啟采樣,等待采樣完成進入中斷
                        while(ADC_START);             //采樣完成,ADC_START=0
                        num=ADC_DATA;
                        mDelaymS(100);                //等待,進入下通道采集數據
                }        
                a0=num/100;
                a1=num%100/10;
                a2=num%10;
                Show_Init(a0,a1,a2);
        }
}



代碼.rar

118.3 KB, 下載次數: 3

代碼

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

使用道具 舉報

沙發
ID:752974 發表于 2021-12-7 16:17 | 只看該作者
這個需要從3個方面找原因:
1. 顯示功能是否正常;
2. ADC工作是否正常;
3. 采集的數據是否送到了LCD上。
   三個環節缺一不可。
回復

使用道具 舉報

板凳
ID:624769 發表于 2021-12-7 16:22 | 只看該作者
以下幾點,核對一下:

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

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

使用道具 舉報

地板
ID:858009 發表于 2021-12-7 16:41 | 只看該作者
188610329 發表于 2021-12-7 16:22
以下幾點,核對一下:

ADC 采樣模式配置步驟:

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

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

#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采樣時鐘設置,模塊開啟,中斷開啟
* Input          : UINT8 div 時鐘設置
                   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 中斷服務程序
*******************************************************************************/
void        ADCInterrupt( void ) interrupt INT_NO_ADC using 1                       //ADC中斷服務程序,使用寄存器組1
{
    if(ADC_IF ==  1)                                                          //ADC完成中斷
    {
      UserData = ADC_DATA;                                                    //取走ADC采樣數據
      ADC_IF = 0;                                                                          //清空ADC中斷標志
          printf(" %d ",UserData);
    }
    if(CMP_IF ==  1)                                                          //電壓比較完成中斷
    {       
//       UserData = ADC_CTRL&0x80 >> 7);                                                //保存比較器結果               
      CMP_IF = 0;                                                                          //清空比較器完成中斷
    }
}
#endif
回復

使用道具 舉報

5#
ID:858009 發表于 2021-12-7 17:20 | 只看該作者
188610329 發表于 2021-12-7 16:22
以下幾點,核對一下:

ADC 采樣模式配置步驟:

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

使用道具 舉報

6#
ID:624769 發表于 2021-12-7 17:25 | 只看該作者
qwettyuio 發表于 2021-12-7 17:20
按照這個步驟寫的,文件里有完整的代碼,希望大佬可以指點一下解決

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

使用道具 舉報

7#
ID:57657 發表于 2021-12-9 17:51 | 只看該作者
你先將ADC轉換結果通過串口發送出去,沒問題了再加LCD的程序。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 午夜精品久久久久久 | 久久久久久久97 | 国产精品高清一区二区 | 久久午夜精品福利一区二区 | 日韩高清黄色 | 亚洲国产成人在线 | 罗宾被扒开腿做同人网站 | 欧美性极品xxxx做受 | 久久久亚洲| 99在线免费观看视频 | 国产激情精品 | 少妇一级淫片免费放播放 | 国内精品一区二区 | 99视频网站 | 久久久久一区二区三区四区 | 亚洲欧美日韩电影 | 亚洲国产一区视频 | 日韩欧美视频免费在线观看 | 亚洲精品一区二区三区丝袜 | 欧美日韩电影一区二区 | 九九久久久久久 | 国产乱码精品一区二三赶尸艳谈 | 精品一区二区在线观看 | 九色www| 亚洲精品99999 | 亚洲成人一级 | 成人毛片一区二区三区 | 日本福利视频 | 日韩一区欧美一区 | 久久大| 国产一区亚洲二区三区 | 婷婷久久网 | 中文字幕亚洲精品 | 日韩成人一区二区 | 欧州一区二区 | 午夜精品久久久久久久久久久久久 | 亚洲日本三级 | 男女羞羞免费视频 | 国产精品一区二区欧美黑人喷潮水 | 欧美日韩亚洲系列 |