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

[复制链接]
1782|3
 楼主| masterqqq 发表于 2020-8-13 21:43 | 显示全部楼层 |阅读模式

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

  7. volatile uint8_t switchPressInterruptFlag;
  8. volatile uint8_t pitInterruptFlag;

  9. volatile int16_t adcVal;
  10. static void PORT_init(void);
  11. static void VREF0_init(void);
  12. static void ADC0_init(void);
  13. static void ADC0_start(void);
  14. static bool ADC0_conversionDone(void);
  15. static int16_t ADC0_read(void);
  16. static void SYSTEM_init(void);


  17. static void PORT_init(void)
  18. {
  19.     /* Disable interrupt and digital input buffer on PD3 */
  20.     PORTD.PIN3CTRL &= ~PORT_ISC_gm;
  21.     PORTD.PIN3CTRL |= PORT_ISC_INPUT_DISABLE_gc;
  22.     /* Disable interrupt and digital input buffer on PD4 */
  23.     PORTD.PIN4CTRL &= ~PORT_ISC_gm;
  24.     PORTD.PIN4CTRL |= PORT_ISC_INPUT_DISABLE_gc;
  25.    
  26.     /* Disable pull-up resistor */
  27.     PORTD.PIN3CTRL &= ~PORT_PULLUPEN_bm;
  28.     PORTD.PIN4CTRL &= ~PORT_PULLUPEN_bm;
  29. }

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

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

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

  49. static void ADC0_start(void)
  50. {
  51.     /* Start conversion */
  52.     ADC0.COMMAND = ADC_STCONV_bm;
  53. }

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

  59. static void SYSTEM_init(void)
  60. {
  61.     PORT_init();
  62.     VREF0_init();
  63.     ADC0_init();
  64. }


  65. int main(void)
  66. {
  67.         /* Initializes MCU, drivers and middleware */
  68.         atmel_start_init();
  69.     SYSTEM_init();
  70.     ADC0_start();
  71.    
  72.    
  73.         while (1) {
  74.         if(ADC0_conversionDone()){
  75.          adcVal = ADC0_read();
  76.          printf("%d \r\n",adcVal);
  77.          _delay_ms(1000);
  78.         }
  79.         }
  80. }



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

帖子

146

粉丝
快速回复 在线客服 返回列表 返回顶部