3931|1

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TM4C123G [复制链接]

我写了三路ADC采样的程序,设置成了ADC模式,但引脚还是有电压输出,是怎么回事?
//*****************************************************************************
//
//
//
//
//*****************************************************************************
#include
#include
#include
#include
#include

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "inc/hw_gpio.h"
#include "inc/hw_sysctl.h"
#include "inc/hw_adc.h"
#include "driverlib/adc.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "hw_types.h"

#include "utils/uartstdio.h"
#include "driverlib/ssi.h"
#include "uc1701.h"
#include "inc/hw_types.h"

//*****************************************************************************
//Attention
//TM4C123 NMI unlock - To those who want to use PF0 and PD7, be reminded that these pins defaults as NMI ! ! !
//
//*****************************************************************************

//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif


//*****************************************************************************
//
// Global variables
//
//
//
//*****************************************************************************
unsigned char flag=0;
int value[3]={0,0,0};
char TempValue0[7],TempValue1[7],TempValue2[7];

        //
    // This array is used for storing the data read from the ADC FIFO. It
    // must be as large as the FIFO for the sequencer in use.  This example
    // uses sequence 3 which has a FIFO depth of 1.  If another sequence
    // was used with a deeper FIFO, then the array size must be changed.
    //
uint32_t pui32ADC0Value[8];
//


void ADC0Sequence0Handler(void)  
{
  //uint16_t i;
        //
        // Clear the ADC interrupt flag.
        //
        ADCIntClear(ADC0_BASE, 0);

        //
        // Read ADC Value.
        //
        ADCSequenceDataGet(ADC0_BASE, 0, pui32ADC0Value);
      
                value[0]= pui32ADC0Value[4]*3300/4096;
        value[1]= pui32ADC0Value[2]*3300/4096;
              value[2]= pui32ADC0Value[1]*3300/4096;
            flag=1;
                    SysCtlDelay(1);        
}

//*****************************************************************************

void Spread_Bit(int ADC_Value0,int ADC_Value1,int ADC_Value2)
{
    unsigned char A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12;
   
  A1=ADC_Value0/1000;                        //分出千,百,十,和个位
  A2=ADC_Value0%1000/100;
  A3=ADC_Value0%100/10;
  A4=ADC_Value0%10;
   
    TempValue0[0]=A1+0x30;
  TempValue0[1]='.';
  TempValue0[2]=A2+0x30;
  TempValue0[3]=A3+0x30;
  TempValue0[4]=A4+0x30;
  TempValue0[5]='V';
  TempValue0[6]='\0';
   
    A5=ADC_Value1/1000;                        //分出千,百,十,和个位
  A6=ADC_Value1%1000/100;
  A7=ADC_Value1%100/10;
  A8=ADC_Value1%10;
   
    TempValue1[0]=A5+0x30;
  TempValue1[1]='.';
  TempValue1[2]=A6+0x30;
  TempValue1[3]=A7+0x30;
  TempValue1[4]=A8+0x30;
  TempValue1[5]='V';
  TempValue1[6]='\0';
   
    A9=ADC_Value2/1000;                        //分出千,百,十,和个位
  A10=ADC_Value2%1000/100;
  A11=ADC_Value2%100/10;
  A12=ADC_Value2%10;
   
    TempValue2[0]=A9+0x30;
  TempValue2[1]='.';
  TempValue2[2]=A10+0x30;
  TempValue2[3]=A11+0x30;
  TempValue2[4]=A12+0x30;
  TempValue2[5]='V';
  TempValue2[6]='\0';
   

}




//*****************************************************************************
//
// The main application.
//
//*****************************************************************************
int
main(void)
{
      flag=1;
    //
    // Set the system clock to run at 200/5=40MHz using the PLL.  When
    // using the ADC, you must either use the PLL or supply a 16 MHz clock
    // source.
     SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
   
    UC1701Init(60000);
    UC1701Clear();
    //
    // The ADC0 peripheral must be enabled for use.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    //
    // example ADC0 is used with AIN3 on port E0.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
     //GPIODirModeSet(BUTTONS_GPIO_BASE, ALL_BUTTONS, GPIO_DIR_MODE_IN);
    //
    // Select the analog ADC function for these pins.
    //
    GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        

//

    //
// Configure step 0 on sequence 3. Sample channel 0 (ADC_CTL_CH0) in
// single-ended mode (default) and configure the interrupt flag
// (ADC_CTL_IE) to be set when the sample is done. Tell the ADC logic
// that this is the last conversion on sequence 3 (ADC_CTL_END). Sequence
// 3 has only one programmable step. Sequence 1 and 2 have 4 steps, and
// sequence 0 has 8 programmable steps. Since we are only doing a single
// conversion using sequence 3 we will only configure step 0. For more
// information on the ADC sequences and steps, reference the datasheet.

    ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);

    //
        ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0 );//PE3
        ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1 );//PE2
        ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2 );//PE1
        ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3 );//PE0
        ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH4 );//PD3
        ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH5 );//PD2
        ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH6 );//PD1
        ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH7 | ADC_CTL_IE |ADC_CTL_END);//PD0
  
    //
    // enable ADC0 sequence 0 interrupt
    //
    ADCIntEnable(ADC0_BASE, 0);
    IntEnable(INT_ADC0SS0);

    //
    // Since sample sequence 3 is now configured, it must be enabled.
    //
    ADCSequenceEnable(ADC0_BASE, 0);
        
    //
    // Clear the interrupt status flag.  This is done to make sure the
    // interrupt flag is cleared before we sample.
    //
    ADCIntClear(ADC0_BASE, 0);

    //
    // Sample the temperature sensor forever.  Display the value on the
    // console.
    //
    while(1)
    {
        //
        // Trigger the ADC conversion.
        //
        ADCProcessorTrigger(ADC0_BASE, 0);


        if(flag==1)
                {
        //ADCSequenceDataGet(ADC0_BASE, 0, pui32ADC0Value);
        UC1701CharDispaly(0, 0, "Vadc1:");
        Spread_Bit(value[0],value[1],value[2]);   
        UC1701CharDispaly(0, 6,TempValue0 );        
                    UC1701CharDispaly(1, 0,"Vadc2:" );   
    UC1701CharDispaly(1, 6,TempValue1 );        
                    UC1701CharDispaly(2, 0,"Vadc3:" );   
    UC1701CharDispaly(2, 6,TempValue2 );        
                    
    //UC1701DisplayN(1, 1, value);
   
    SysCtlDelay(1000000);
            
                  flag=0;
                    
                }

                //
                //sample delay
                //
        SysCtlDelay(10000);               
    }
   
}


此帖出自电子竞赛论坛

最新回复

确定硬件没有问题的话,那就从最简单的一路 ADC 采样开始检查程序  详情 回复 发表于 2016-7-26 10:50
点赞 关注(1)
 
 

回复
举报

918

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
确定硬件没有问题的话,那就从最简单的一路 ADC 采样开始检查程序
此帖出自电子竞赛论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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