📄 ad.c
字号:
#include <avr/io.h>
#include <stdint.h>
void ad_init(void);
uint16_t ad_sample(uint8_t channel,uint16_t num,uint16_t ad_ref,uint8_t vol);
uint16_t ad_val;
uint32_t ad_tmp;
void ad_init(void)
{
DDRA=0x00;
PORTA=0x00;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0);
ADMUX=(1<<REFS1)|(1<<REFS0);
ADCSRA|=(1<<ADSC);
while(ADCSRA&(1<<ADSC));
ad_val=ADCL;
ad_val|=(uint16_t)(ADCH<<8);
}
uint16_t ad_sample(uint8_t channel,uint16_t num,uint16_t ad_ref,uint8_t vol)
{
uint16_t i;
ad_val=0;
ad_tmp=0;
if(channel<0x20)
{
ADMUX&=0xe0;
ADMUX|=channel;
}
for(i=0;i<=num;i++)
{
ADCSRA|=(1<<ADSC);
ad_tmp+=ad_val;
while(ADCSRA&(1<<ADSC));
ad_val=ADCL;
ad_val|=(uint16_t)(ADCH<<8);
}
i=10;
if(vol<=4) i=1;
ad_tmp=(ad_tmp*vol*ad_ref)/(1024*i);
if(num) ad_tmp=ad_tmp/num;
ad_val=(uint16_t)(ad_tmp);
return ad_val;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -