打印

【CuriosityNano测试报告】+ ADC测量差值输入

[复制链接]
1548|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

ADC测量差值输入模式:
#include <atmel_start.h>
#include <util/delay.h>
#include <stdio.h>
#include <avr/io.h>
#include <stdbool.h>
#include <string.h>

volatile uint8_t switchPressInterruptFlag;
volatile uint8_t pitInterruptFlag;

volatile int16_t adcVal;
static void PORT_init(void);
static void VREF0_init(void);
static void ADC0_init(void);
static void ADC0_start(void);
static bool ADC0_conversionDone(void);
static int16_t ADC0_read(void);
static void SYSTEM_init(void);


static void PORT_init(void)
{
    /* Disable interrupt and digital input buffer on PD3 */
    PORTD.PIN3CTRL &= ~PORT_ISC_gm;
    PORTD.PIN3CTRL |= PORT_ISC_INPUT_DISABLE_gc;
    /* Disable interrupt and digital input buffer on PD4 */
    PORTD.PIN4CTRL &= ~PORT_ISC_gm;
    PORTD.PIN4CTRL |= PORT_ISC_INPUT_DISABLE_gc;
   
    /* Disable pull-up resistor */
    PORTD.PIN3CTRL &= ~PORT_PULLUPEN_bm;
    PORTD.PIN4CTRL &= ~PORT_PULLUPEN_bm;
}

static void VREF0_init(void)
{
    VREF.ADC0REF = VREF_REFSEL_2V048_gc;  /* Internal 2.048V reference */
}

static void ADC0_init(void)
{
    ADC0.CTRLC = ADC_PRESC_DIV4_gc;       /* CLK_PER divided by 4 */
    ADC0.CTRLA = ADC_ENABLE_bm            /* ADC Enable: enabled */
               | ADC_RESSEL_12BIT_gc      /* 12-bit mode */
               | ADC_CONVMODE_bm          /* Differential Conversion */
               | ADC_FREERUN_bm;          /* Enable Free-Run mode */
    ADC0.MUXPOS = ADC_MUXPOS_AIN3_gc;     /* Select ADC channel AIN3 <-> PD3 */
    ADC0.MUXNEG = ADC_MUXNEG_AIN4_gc;     /* Select ADC channel AIN4 <-> PD4 */
}

static int16_t ADC0_read(void)
{
    /* Clear the interrupt flag by reading the result */
    return ADC0.RES;
}

static void ADC0_start(void)
{
    /* Start conversion */
    ADC0.COMMAND = ADC_STCONV_bm;
}

static bool ADC0_conversionDone(void)
{
    /* Check if the conversion is done  */
    return (ADC0.INTFLAGS & ADC_RESRDY_bm);
}

static void SYSTEM_init(void)
{
    PORT_init();
    VREF0_init();
    ADC0_init();
}


int main(void)
{
        /* Initializes MCU, drivers and middleware */
        atmel_start_init();
    SYSTEM_init();
    ADC0_start();
   
   
        while (1) {
        if(ADC0_conversionDone()){
         adcVal = ADC0_read();
         printf("%d \r\n",adcVal);
         _delay_ms(1000);
        }
        }
}

avr128da48-adc_chazhi_usart-studio.rar (197.19 KB)

PD3悬空 PD4接地时:


显示变化值
PD3接VDD PD4接地时:



参考电压最高2.048 显示最大值2047

使用特权

评论回复
沙发
zeshoufx| | 2020-8-14 08:40 | 只看该作者
谢谢分享【ADC测量差值输入】

使用特权

评论回复
板凳
xinghe280| | 2020-8-22 09:42 | 只看该作者
谢谢分享

使用特权

评论回复
地板
lcczg| | 2020-8-24 08:54 | 只看该作者
好例子

使用特权

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

本版积分规则

个人签名:32MCU单片机查询网 http://www.32mcu.com MCU选型,嵌入式设计辅助,选择最适合的MCU

35

主题

173

帖子

143

粉丝