打印
[技术问答]

N76E003的ADC采集问题

[复制链接]
6976|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ltwsq|  楼主 | 2017-2-21 13:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用开发板,运行官方例程,进行ADC采集,但在转换的过程当中,运行到
while(ADCF==0);时,一直死循环在这里,也就是说无法完成ADC采集,这是为什么啊?
沙发
zhuomuniao110| | 2017-2-21 18:57 | 只看该作者
应该没有启动成功那个ADC模块。

使用特权

评论回复
板凳
zhuomuniao110| | 2017-2-21 19:00 | 只看该作者

使用特权

评论回复
地板
zhuomuniao110| | 2017-2-21 19:01 | 只看该作者

使用特权

评论回复
5
zhuomuniao110| | 2017-2-21 19:02 | 只看该作者
注意这个跟其他的N76系列的ADC是不同的,这个是12BIT。

使用特权

评论回复
6
zhuomuniao110| | 2017-2-21 19:06 | 只看该作者
目前可恶的是,官方给了其他几个系列的例程序,没有给这个的,而且只有一个英文的手册,坑。

使用特权

评论回复
7
zhuomuniao110| | 2017-2-21 19:35 | 只看该作者
楼主对照那个图看看吧,哪个寄存器还没有配置呢。

使用特权

评论回复
8
玛尼玛尼哄| | 2017-2-21 21:53 | 只看该作者
没例程,没有板子,不好验证,你板子哪儿来的,问卖给你板子的人有没有例程,可能是官方有,没有上传嗯。

使用特权

评论回复
9
wuhuikai| | 2017-2-22 08:34 | 只看该作者
这个已经调通

void AdcInit(void){  //ADC初始化
  ADCCON0 &=0XF0;
  ADCCON0|=8;//1.通道
  ADCCON1|=BV(0);
  ADCF=0;
}

uint16_t AdValue(uint8_t ch){//通道CH电压值 10次和
  uint16_t AdTemp1=0,AdTemp2=0;
  uint8_t i=0;
  ADCCON0 &=0XF0;
  ADCCON0 |= ch;
  ADCS=1;
  while(ADCF==0);//除出上一次的结果
  ADCF=0;
  for(i=0;i<10;i++){
    ADCS = 1;           //使能adc
    while(ADCF==0);
    ADCF=0;
    AdTemp1=ADCRL;
    AdTemp1 += ADCRH<<4;
    AdTemp2 += AdTemp1;
  }
  return AdTemp2;
}

uint16_t VbatValue(uint8_t ch){  //通道ch电压
  return  ((uint32_t)1220*(uint32_t)AdValue(ch)/(uint32_t)AdValue(8));
}

使用特权

评论回复
10
rwbycc| | 2017-2-22 13:34 | 只看该作者
用ADC中断比较好

使用特权

评论回复
11
郑州海源| | 2017-5-5 11:59 | 只看该作者
遇到多通道切换采集的,才头疼。官方也没个例子参考,只能自己摸索了。

使用特权

评论回复
12
Harvard| | 2017-5-5 13:46 | 只看该作者
本身不难 .在查询完成标记的时候 关注一下 看门狗的情况

使用特权

评论回复
13
sun420410089| | 2017-5-5 17:14 | 只看该作者
mark,说不定哪天需要用这芯片的ADC功能了

使用特权

评论回复
14
wahahaheihei| | 2017-5-7 15:22 | 只看该作者
搞定了没,之前什么缘故?

使用特权

评论回复
15
xixi2017| | 2017-5-8 10:57 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2016
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E885 ADC demo code
//***********************************************************************************************************

#include <stdio.h>
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_Define.h"



//*****************  The Following is in define in Fucntion_define.h  ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
//#define Enable_ADC_AIN0                        ADCCON0&=0xF0;P17_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT0;ADCCON1|=SET_BIT0                                                                        //P17
//#define Enable_ADC_AIN1                        ADCCON0&=0xF0;ADCCON0|=0x01;P30_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT1;ADCCON1|=SET_BIT0                //P30
//#define Enable_ADC_AIN2                        ADCCON0&=0xF0;ADCCON0|=0x02;P07_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT2;ADCCON1|=SET_BIT0                //P07
//#define Enable_ADC_AIN3                        ADCCON0&=0xF0;ADCCON0|=0x03;P06_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT3;ADCCON1|=SET_BIT0                //P06
//#define Enable_ADC_AIN4                        ADCCON0&=0xF0;ADCCON0|=0x04;P05_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT4;ADCCON1|=SET_BIT0                //P05
//#define Enable_ADC_AIN5                        ADCCON0&=0xF0;ADCCON0|=0x05;P04_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT5;ADCCON1|=SET_BIT0                //P04
//#define Enable_ADC_AIN6                        ADCCON0&=0xF0;ADCCON0|=0x06;P03_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT6;ADCCON1|=SET_BIT0                //P03
//#define Enable_ADC_AIN7                        ADCCON0&=0xF0;ADCCON0|=0x07;P11_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT7;ADCCON1|=SET_BIT0                //P11
//#define Enable_ADC_BandGap        ADCCON0|=SET_BIT3;ADCCON0&=0xF8;                                                                                                                                                                                                                                                        //Band-gap 1.22V

//#define PWM0_FALLINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_FALLINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_FALLINGEDGE_TRIG_ADC                ADCCON0|=SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1&=~SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM0_RISINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM2_RISINGEDGE_TRIG_ADC                ADCCON0&=~SET_BIT5;ADCCON0|=SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1
//#define PWM4_RISINGEDGE_TRIG_ADC                ADCCON0|=SET_BIT5;ADCCON0&=~SET_BIT4;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1

//#define P04_FALLINGEDGE_TRIG_ADC                ADCCON0|=0x30;ADCCON1&=0xF3;ADCCON1|=SET_BIT1;ADCCON1&=~SET_BIT6
//#define P13_FALLINGEDGE_TRIG_ADC                ADCCON0|=0x30;ADCCON1&=0xF3;ADCCON1|=SET_BIT1;ADCCON1|=SET_BIT6
//#define P04_RISINGEDGE_TRIG_ADC                        ADCCON0|=0x30;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1;ADCCON1&=~SET_BIT6
//#define P13_RISINGEDGE_TRIG_ADC                        ADCCON0|=0x30;ADCCON1&=~SET_BIT3;ADCCON1|=SET_BIT2;ADCCON1|=SET_BIT1;ADCCON1|=SET_BIT6
#endif

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main (void)
{
    Set_All_GPIO_Quasi_Mode;
                InitialUART0_Timer1(115200);
          
/*-------------------------------------------
        ADC simply initial setting
--------------------------------------------*/
//                Enable_ADC_AIN3;                                                                                                                // Enable AIN0 P1.7 as ADC input
                Enable_ADC_BandGap;

                while(1)
    {
                        clr_ADCF;
                        set_ADCS;                                                                                                                                        // Each time ADC start trig signal
      while(ADCF == 0);
                        printf ("\n Value = 0x%bx",ADCRH);
                                printf ("\n Value = 0x%bx",ADCRL);
                        Timer0_Delay1ms(100);
    }
}

使用特权

评论回复
16
xixi2017| | 2017-5-8 10:57 | 只看该作者
上面的这个例程跑起来有问题?你用的是官方的那个开发板 吗?应该没问题啊

使用特权

评论回复
17
chen472015439| | 2017-8-4 11:45 | 只看该作者
mark一下,碰GPIO不够用又需要多个按键的时候,估计要用ADC做按键

使用特权

评论回复
18
smilefenfen| | 2018-4-28 11:20 | 只看该作者
wuhuikai 发表于 2017-2-22 08:34
这个已经调通

void AdcInit(void){  //ADC初始化

有点晕

使用特权

评论回复
19
jack5288| | 2018-7-23 11:07 | 只看该作者
我在调试时也发现这个问题,运行到while(ADCF==0);时,一直死循环在这里,现在找到原因了吗,是什么原因分享下你经验。

使用特权

评论回复
20
g562225639| | 2019-9-16 16:12 | 只看该作者
void ADC_Init(void)
{
        Enable_ADC_AIN5; //选择P0.4
        ADCMgr.AdcValue = 0;
}

/**
  * @brief  获取ADC
  * @param  NONE
  * @retval ADC Value
  */
void Get_ADCResult(void)
{
        u8 i;
        for(i=0; i<4; i++)
        {
                clr_ADCF;
                set_ADCS;         //启动ACD转换
                while(ADCF == 0)
                        ADCMgr.AdcValue += ((ADCRH<<4)|(ADCRL&0x0F));
        }
        ADCMgr.AdcValue  = ADCMgr.AdcValue>>2;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

14

帖子

1

粉丝