关于mega48 多通道AD转换的问题,转换结果相同

2019-03-24 20:21发布

/******************************************************************************/
/*                     多通道AD实验程序                                       */
/******************************************************************************/

#include <iom48v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
uint temp1=0,temp4=0;

uint ADC_Convert(uchar channel)
{
  ADMUX |= channel; //选择ADC通道为PA0
  ADCSRA|=(1<<ADSC);// 开始转换 
  while (!(ADCSRA&(1<<ADIF))); // 等待转换结束
  ADCSRA |=(1<<ADIF); // 清除转换结束标记
  return(ADCH);
}

void main(void)
{
  DDRD|=0x80;
  PORTD&=0x7F;
 
  DDRC&=0xEB;//ad通道输入设置
  ADCSRA=0x00;
  ADMUX |=0x60; //采用内部5参考电压,左对齐  
  ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
 
  while(1)
  {
    temp1=ADC_Convert(2);
if(temp1>40)
PORTD|=0x80;

temp4=ADC_Convert(4);
if(temp4<40)
PORTD&=0x7F;
  }

} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
qiangls90
2019-03-25 08:38
转换是需要时间的,估计是因为你的主函数切换通道那里,没有配合好AD转换的时间,导致还没转换完就换通道了,我是按照ATmega128的思想来说,没有用过你这款,我想大概是一样的吧,你自己看一下时序图,配合修一下程序

一周热门 更多>