|
本帖最后由 424778940 于 2013-7-23 19:08 编辑
如题...第三贴了...
我真心认真读了一遍手册,也看了很多人的代码,而且adc也就那么几个寄存器,想搞错都难啊...(当然,也总觉得这问题一定是我什么地方搞错了...)
我直接把别人的代码完全搬进去,依旧不行,难道是芯片有问题么...型号是mega128A和mega1280,均做过测试,结果一样
现在的情况是,用自带内部通道(1.23v)测试没问题,内部gnd也没问题,数据都正常
可是只要使用adc0-adc7单通道来转换,就无法得到正确结果,无论我把通道接地还是接vcc,都是跟悬空时候一样的一个相对稳定的值
代码如下- /*
- * lib_adc.cpp
- *
- * Created: 2013/7/17 16:43:14
- * Author: Adam
- */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include "d:/works/avr/bzh_avr_lib/device/usart/lib_usart.h"
- #include "d:/works/avr/bzh_avr_lib/system/lib_delay.h"
- //vin = adc * vref /1024
- 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;
- usart_0_send_char(0xff);//固定字节,用于确定开头位置
- usart_0_send_char(adc_cache_l);
- usart_0_send_char(adc_cache_h);
- //adc_vin |= ( (adc_cache_h<<8) | (adc_cache_l<<8) );
- }
- int main(void)
- {
- usart_0_init();
-
- //ADC PORT DDR INIT
- DDRA = 0x00;
- PORTA = 0x00;
-
- //ADC REG INIT
- ADCSRA = 0x00;
- ADMUX = 0x00;
-
- ADCSRA |= ( (1<<ADIE) | (1<<ADEN) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) );
- ADMUX |= (1<<REFS0);
- //ADMUX |= ( (1<<REFS0) | (1<<MUX0) );
- //ADMUX |= ( (1<<REFS0) | (1<<ADLAR) );
-
- sei();
-
- while (1)
- {
- //usart_0_send_char(0xf0);
- delay_reduce(80000);
- ADCSRA |= (1<<ADSC);
- }
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|