3220|5

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ADC问题求助 [复制链接]

/*
* main.c
*/
#include
#include
#include
#include
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_adc.h"
#include "inc/hw_lcd.h"
#include "inc/hw_sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "grlib/grlib.h"

uint32_t Buffer[1];

//延时函数

void delay_Nms(int n)
{
    int k = 0;
    for(k = n;k > 0;k--)
    SysCtlDelay(SysCtlClockGet() / 3000);
}


void InitADC()
{
//    ADCSequenceDisable(ADC0_BASE,3);delay_Nms(1);
    // Enable the second sample sequencer to capture the value of channel 3 when
    // the processor trigger occurs.
    ADCSequenceConfigure(ADC1_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
    ADCSequenceStepConfigure(ADC1_BASE, 3, 0, ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
    ADCSequenceEnable(ADC1_BASE,3);
    //Set reference voltage
    ADCReferenceSet(ADC1_BASE, ADC_REF_INT);delay_Nms(1);

    //Interrupt set
//    ADCIntRegister(ADC0_BASE, 3, ADC_IntHandler);delay_Nms(1);
    ADCIntEnable(ADC1_BASE,3);delay_Nms(1);
//    IntEnable(INT_ADC0SS3_TM4C123);delay_Nms(1);
    ADCIntClear(ADC1_BASE,3);
}

int main(void) {
    SysCtlClockSet(SYSCTL_SYSDIV_10    |SYSCTL_USE_PLL        |SYSCTL_OSC_MAIN    | SYSCTL_XTAL_16MHZ);delay_Nms(1);
                                                                                                //20MHz
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);delay_Nms(1);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);delay_Nms(1);
    GPIOPinTypeADC(GPIO_PORTD_BASE,GPIO_PIN_2);delay_Nms(1);                                                    //E2 as analog input

    InitADC();delay_Nms(1);
   
    while(1)
    {
        ADCProcessorTrigger(ADC1_BASE, 3);
        while(!ADCIntStatus(ADC1_BASE, 3, false))
        {
        }
        ADCIntClear(ADC1_BASE, 3);
        ADCSequenceDataGet(ADC1_BASE, 3, Buffer);
    }
}

我把直流电压加在PD2和GND上,单步调试,发现无论我加不加电压,FIFO的值都差不多,基本在300左右(十进制),感觉就像模拟电压信号没有加入一样,
并且执行了ADCSequenceDataGet之后Buffer的值不会随FIFO改变.
是我的初始化程序有问题吗?我完全是按照例程写的呀,现在感觉一头雾水.

最新回复

你这是AVR单片机吧,这个我不会,估计就是你的adc没有工作,查看一下你的延时程序,不同的电容,影响转换速率的,其他的我也不清楚啦,好好想想,很快就会想通的!  详情 回复 发表于 2014-7-19 19:46
 
点赞 关注(1)

回复
举报

23

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
ADC的模拟信号无法输入,请问这可能会是因为什么造成的?
 
 

回复

474

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
本帖最后由 zgbkdlm 于 2014-7-19 17:36 编辑

= =;;;我也不清楚了..

点评

调试的时候信道3的UnderFlow标志始终是1,可是明明是有输入的呀,而且FIFO的确可以得到一个数值(虽然这个数值看起来像是一个噪声...),为什么会显示UnderFlow呢...我完全凌乱了...  详情 回复 发表于 2014-7-19 18:40
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

4
 
zgbkdlm 发表于 2014-7-19 17:32
= =;;;我也不清楚了..

调试的时候信道3的UnderFlow标志始终是1,可是明明是有输入的呀,而且FIFO的确可以得到一个数值(虽然这个数值看起来像是一个噪声...),为什么会显示UnderFlow呢...我完全凌乱了...
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

5
 
你这是AVR单片机吧,这个我不会,估计就是你的adc没有工作,查看一下你的延时程序,不同的电容,影响转换速率的,其他的我也不清楚啦,好好想想,很快就会想通的!

点评

希望如此...  详情 回复 发表于 2014-7-19 21:24
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

6
 
liufengjing9 发表于 2014-7-19 19:46
你这是AVR单片机吧,这个我不会,估计就是你的adc没有工作,查看一下你的延时程序,不同的电容,影响转换速 ...

希望如此...
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表