打印
[新手园地]

ddllxxrr笔记八 单通ADC

[复制链接]
3035|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ADC, UART, ST, se, AC
ADC功能特性:
1、12bitADC转换结果。
2、范围最大5V
3、选择电压3.0V-5.5V参考电压2.5V-VADD
4、8通道输入4个差动输入。
5、800KHZ的采样频率1.25US的时间。
6、最高20MHZADC工作频率。
7、三种模式:单模式,单循环模式,连扫描模式。
8、ADC启动:可以通过软件写ADST寄存器或者外部STADC
9、转换结果:每一个通道转换结果在每个通道存着。
10、转换结果可以同特别值比较,若相等可以产生中断。
11、有自检模式可以减少误差。
12、支持三个转换源:外部模拟电压、内部电压、内部温度传感器。

ADC分频器原理


ADC的模块框图


单次转换原理:


执行效果图



下以程序是用单次ADC,把助学板的AD1就是可调电压转换过来,然后通过串口发出结果

#include <stdio.h>
#include "NUC1xx.h"
#include "..\Driver\DrvGPIO.h"
#include "..\Driver\DrvI2C.h"
#include "..\Driver\DrvSYS.h"
#include "..\Driver\DrvUART.h"
void InitUART(void)
{
    STR_UART_T sParam;
    /* Set UART0 Pin */
    DrvGPIO_InitFunction(E_FUNC_UART0);
    /* UART Setting */
    sParam.u32BaudRate   = 9600;
    sParam.u8cDataBits   = DRVUART_DATABITS_8;
    sParam.u8cStopBits   = DRVUART_STOPBITS_1;
    sParam.u8cParity   = DRVUART_PARITY_NONE;
    sParam.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES;
    /* Select UART Clock Source From 12Mhz*/
    DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);
    /* Set UART0 Configuration */
    DrvUART_Open(UART_PORT0, &sParam);
}
void InitADC(void)
{

/* Step 1. GPIO initial */
GPIOA->OFFD|=0x00020000;  //the no.2 Disable digital input path
SYS->GPAMFP.ADC1_AD12=1;  //Set ADC function
   
/* Step 2. Enable and Select ADC clock source, and then enable ADC module */         
SYSCLK->CLKSEL1.ADC_S = 2; //Select 22Mhz for ADC
SYSCLK->CLKDIV.ADC_N = 1; //ADC clock source = 22Mhz/2 =11Mhz;
SYSCLK->APBCLK.ADC_EN = 1; //Enable clock source
ADC->ADCR.ADEN = 1;   //Enable ADC module
/* Step 3. Select Operation mode */
ADC->ADCR.DIFFEN = 0;      //single end input
ADC->ADCR.ADMD   = 0;      //single mode
  
/* Step 4. Select ADC channel */
ADC->ADCHER.CHEN = 0x02;

/* Step 5. Enable ADC interrupt */
ADC->ADSR.ADF =1;       //clear the A/D interrupt flags for safe
ADC->ADCR.ADIE = 1;
// NVIC_EnableIRQ(ADC_IRQn);

/* Step 6. Enable WDT module */
ADC->ADCR.ADST=1;
}
void Delay(int count)
{
while(count--)
{
//  __NOP;
  }
}

/*---------------------------------------------------------------------------------------------------------*/
/*MAIN Function*/
/*---------------------------------------------------------------------------------------------------------*/
int main (void)
{

//uint32_t u32HCLK;
char adc_value[15]="ADC Value:";
UNLOCKREG();
SYSCLK->PWRCON.XTL12M_EN = 1;
SYSCLK->CLKSEL0.HCLK_S = 0;
//u32HCLK = DrvSYS_GetHCLKFreq() * 1000;
LOCKREG();
InitADC();
InitUART();

         
      
while(1)
{
  //printf(adc_value);
  while(ADC->ADSR.ADF==0);
  ADC->ADSR.ADF=1;
  printf(adc_value);
  printf("%d\n",ADC->ADDR[1].RSLT);
  Delay(20000);
  //printf(adc_value);
  ADC->ADCR.ADST=1;
}
}

NUC testADC.rar (1.43 MB)

相关帖子

沙发
wangjia2000| | 2011-9-30 09:07 | 只看该作者
希望把 这两种    单循环模式,连扫描模式    的也写一下,十分感谢

使用特权

评论回复
板凳
wangjia2000| | 2011-9-30 09:33 | 只看该作者
????

使用特权

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝