424778940 发表于 2013-7-23 19:00:48

求助ADC相关问题....死活调不通....

本帖最后由 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);
      }
}

424778940 发表于 2013-7-24 14:38:14

话说...马老师呢?

424778940 发表于 2013-7-25 12:13:20

= =....人都那里去了.,...

machao 发表于 2013-7-25 19:54:55

现在放假,每天都会来看的。已经几天了,没有人给你帮助。这个问题应该属于基本的基础类错误,我也不愿意作更多的解释。按我的性格,希望你从最基本的开始,一步一步的、扎扎实实的进步。
我认为我的教程中的例子应该可以解决你的这个问题。你买本吧,认真研读肯定有收获的,如果你准备作这个行当5年。

424778940 发表于 2013-7-26 12:38:13

machao 发表于 2013-7-25 19:54 static/image/common/back.gif
现在放假,每天都会来看的。已经几天了,没有人给你帮助。这个问题应该属于基本的基础类错误,我也不愿意作 ...

谢谢马老师,不过问题已经解决了,确实是个低级错误= =...
程序和硬件都没有任何问题,只是我有根线接错了= =...
avr的adc相关寄存器都叫ADxxxx,于是我把porta的AD0-AD7当成adc了,换到portf就好了

wguodong08 发表于 2013-7-26 16:49:49

现在也在搞mega128,
mega128和mega16还是有些地方不一样的。。。
页: [1]
查看完整版本: 求助ADC相关问题....死活调不通....