avr adc部分求助 芯片使用的是atmega128a 得不到正确的结果
本帖最后由 424778940 于 2013-7-19 17:42 编辑如题,目前使用芯片是mega128a
adc部分第一次用,很多不了解,于是来请教
板子原理图见附件
不清楚的地方有一下几点
adc使用时候ddr和port要怎么配置?? ddr设为输入,port呢?
内部参考电压是否准确,受什么影响?
单通道和差分输入都要怎么接线??? 手册上有些部分说的太绕了,初次接触实在是看不明白
单片机工作在5v电压,万用表实测在4.9x,vref也是这个值,代码如下,使用为porta,单通道,adc0输入
串口hex输出三个char,格式为第一位0c是用来确定开头的,第二位是ADCL,第三位是ADCH
现在问题在于无论我怎么调试得到的都是 0C,00,00或者0C,01,00第二位有时候会小幅变化,无论我接gnd还是接3.3都是基本没变化
不提换算后的值,3.3v的电压差竟然没变化这肯定是不正确的,求解我到底哪里有问题?
volatile unsigned char adc_cache_h = 0x00,adc_cache_l = 0x00;
volatile unsigned int adc_vin = 0x0000;
ISR(ADC_vect,ISR_BLOCK)
{
adc_cache_l = ADCL;
adc_cache_h = ADCH;
adc_vin |= ( (adc_cache_l<<2) | (adc_cache_h<<0) );
usart_0_send_char(0x0c);//固定字节,用于确定开头位置
usart_0_send_char(adc_cache_l);
usart_0_send_char(adc_cache_h);
}
int main(void)
{
usart_0_init();
usart_0_send_char(0x0c);//清屏
sei();//使能全局中断
//adc port init
DDRA = 0x00;
PORTA = 0x00;
//adc reg init
ADMUX |= (1<<REFS0);//avcc,aref电源,其余默认
ADCSRA |= ( (1<<ADIE) | (1<<ADFR)) ;//adc中断使能,自动转换模式
ADCSRA |= ( (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) );//128分频
ADCSRA |= ( (1<<ADEN) | (1<<ADSC) );//adc使能且开始转换
while(1);
}
自顶,字数补丁 AVR的书籍很多,随便翻一本都有了啊 longfeix86 发表于 2013-7-19 18:39 static/image/common/back.gif
AVR的书籍很多,随便翻一本都有了啊
= =...翻完了就有我也就不来问了...
我按照手册正确配置了所有寄存器,外部电路也符合规范,但就是得不到正确的结果
页:
[1]