【从0到1搭建LoRa物联网】10、LoRa终端ASR6505 ADC采样

系列文章:
【从0到1搭建LoRa物联网】1、LoRa物联网的架构
【从0到1搭建LoRa物联网】2、终端设备开发方式
【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件
【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO
【从0到1搭建LoRa物联网】5、国产LoRa终端ASR6505驱动DHT11
【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
【从0到1搭建LoRa物联网】7、国产LoRa终端ASR6505驱动段式LCD例程
【从0到1搭建LoRa物联网】8、国产LoRa终端ASR6505 PingPong通信
【从0到1搭建LoRa物联网】9、国产LoRa终端ASR6505 PingPong通信OLED显示

1、前言

ADC的采样范围是0-VCC,因此加在输入通道的电压不能超过VCC。
ADC通道说明

2、ADC通道说明

只有1个ADC外设,预留了3个通道供使用,开发板中H3针脚正是引出的ADC通道。
在这里插入图片描述
与STM8L的对应如下:

ASR6505 STM8
IN0 PC2(ADC1_IN6)
IN1 PC3(ADC1_IN5) IN2 PC7(ADC1_IN3)

3、ADC参考电压

VREFP引脚:是ADC参考电压的输入引脚,即就是开发板上的P4跳线帽,插上P4跳线帽就表示用VCC当做参考电压。

芯片内部参考电压:
在这里插入图片描述
可以看出,典型值为1.224V,因此我们采样的时候就以这个为参考来校准其他通道的采样值。

4、实验设计

间隔5s读取ASR6505的ADC的内部参考电压通道以及通道0的值,并转化成电压值通过串口打印。分别把VCC和GND输入到通道0。

5、代码实现

periph_adc.h/c部分代码:

#define ASR6505_CH_IN0   ADC_Channel_6
#define ASR6505_CH_IN1   ADC_Channel_5
#define ASR6505_CH_IN2   ADC_Channel_3

#define ASR6505_PIN_IN0      PC_2
#define ASR6505_PIN_IN1      PC_3
#define ASR6505_PIN_IN2      PC_7
Gpio_t AdcIn0;

void ADC_PeriphInit(void)
{  
   GpioInit( &AdcIn0, ASR6505_PIN_IN0, PIN_INPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0);
    //初始化通道对应的io口
}

void ADC_ReadSensor(void)
{      
  uint16_t adc_ref = 0,adc_data=0;

  float value=0;

  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//使能时钟

  //初始化ADC
  ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_1);
  ADC_Cmd(ADC1, ENABLE);

  //ADC通道设置
  ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_192Cycles);
  ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_192Cycles);
      
  ADC_VrefintCmd(ENABLE); //使能内部参考电压
  ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);//使能通道
  
  ADC_SoftwareStartConv(ADC1); //开始转化
  while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待转化完成
      
  ADC_ClearFlag(ADC1 , ADC_FLAG_EOC);    //清除标志位
  adc_ref = ADC_GetConversionValue(ADC1);//读取转化结果

  ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, DISABLE);//失能通道

  ADC_ChannelCmd(ADC1, ASR6505_CH_IN0, ENABLE);

  ADC_SoftwareStartConv(ADC1);
  while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
  
  ADC_ClearFlag(ADC1 , ADC_FLAG_EOC);
  adc_data = ADC_GetConversionValue(ADC1);
      
  ADC_DeInit(ADC1);
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);
      
  value=(1.224*4096.0/adc_ref)*(adc_data/4096.0);
  printf("adc_ref=%d,adc_data=%d,value=%f\r\n",adc_ref,adc_data,value);
}

主函数部分代码:

int main( void )
{   
    BoardInitMcu( );
    BoardInitPeriph( );
    
    printf("ASR6505 ADC test!\r\n");
    ADC_PeriphInit();   
    
    while(1)
    {
      ADC_ReadSensor();
      printf("-------------------------------------------------- \r\n\r\n");

      Delay(5);
    }
}

6、实验现象

在这里插入图片描述

欢迎关注微信公众号【物联网思考】,回复关键字“ ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值