关于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条回答
lewise88
1楼-- · 2019-03-25 03:32
 精彩回答 2  元偷偷看……
你猜
2楼-- · 2019-03-25 08:26
遇到了同样的问题,帮顶同求助!
qiangls90
3楼-- · 2019-03-25 08:38
转换是需要时间的,估计是因为你的主函数切换通道那里,没有配合好AD转换的时间,导致还没转换完就换通道了,我是按照ATmega128的思想来说,没有用过你这款,我想大概是一样的吧,你自己看一下时序图,配合修一下程序
qiangls90
4楼-- · 2019-03-25 08:57
建议你切换通道的处理放在定时中断里面处理,先看时序图,搞一个比转换时间稍微大一点的定时,定义一个变量来记录你通道的切换,这样也许能解决你的问题,至于你AD转换的时间,自己看一下DATASHEET
cj033
5楼-- · 2019-03-25 13:47
你的ADCSRB 寄存器跑到哪里去了,好好看看手册吧,别只懂得copy程序

一周热门 更多>