打印
[Atmel]

用Atmega88进行单通道AD采集,一秒钟采集一次数据,程序怎...

[复制链接]
819|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fff321|  楼主 | 2015-2-6 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
liujie14565| | 2015-2-6 16:10 | 只看该作者
楼主,这个就要根据你的MCU的手册来写啊

使用特权

评论回复
板凳
airwill| | 2015-2-6 20:25 | 只看该作者
如果精度要求不是很高的话,内部晶振还是可以的。据称有1%的精度,本人用下来,也确实可以。
时间我不知道怎么设置? 那只是分频而已

使用特权

评论回复
地板
ddllxxrr| | 2015-2-7 09:34 | 只看该作者
本帖最后由 ddllxxrr 于 2015-2-7 09:35 编辑

给你个Atmega128做参考吧


/***************************************************************************/
/*ADC测试程序                                          */
/*目标器件:ATmega128                                  */
/*晶振:RC 1MHZ                                       */
/*编译环境:ICCAVR 6.31A                                 */
/*E-Mail:number007cool@163.com                                             */
/*时间:2010年11月13日                                                     */
/*用发光二极管显示AD转换的结果              */
/***************************************************************************/
/*********************************包含头文件********************************/
#include <iom128v.h>
#include <macros.h>
/********************************数码管段码表*******************************/
extern const unsigned char tab[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                                  0x7F,0x6F};

/*********************************全局变量**********************************/
unsigned int adc_rel=0;
/****************************************************************************
函数功能:ADC初始化函数
入口参数:
出口参数:
****************************************************************************/
void adc_init(void)
{
DDRF&=0XFE;      //PORTF0设置为输入,即作为ADC0口输入模拟电压
PORTF&=0XFE;  //PORTF0设置为输入低电平
ADCSRA=0x00;  //关ADC
ADMUX = 0X00;       //采用Aref作为参考电压,ADC0单端输入,右对齐
ACSR=(1<<ACD);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
//ADEN,启动ADC;ADSC,ADC开始转换;ADIE,ADC中断使能;ADPSx,设置分频因子64
}
/****************************************************************************
函数功能:ADC中断函数
入口参数:
出口参数:
****************************************************************************/
#pragma interrupt_handler adc_isr:iv_ADC
void adc_isr(void)
{
   //int data_h,data_l;
  //data_l=ADCL;
  //data_h=ADCH;
  ADCSRA = 0x00;  
  ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE);
  adc_rel=ADC;
  /*
  if(adc_rel>0x1ff)
  {
     PORTA|=1<<2;
  }
  else
      PORTA&=~(1<<2);
   */
}

/****************************************************************************
函数功能:延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(void)
{
   int i;
    for(i=0;i<1800;i++);
}
/****************************************************************************
函数功能:显示子程序
入口参数:k
出口参数:
****************************************************************************/
void display(unsigned int k)//发光二极管显示初始化
{
  DDRE|=1<<2;
PORTE|=1<<2;
DDRA=0XFF;
PORTA=k;
}

/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main(void)
{
  adc_init();
  SEI();//开全局中断变量
  display(0);
  while(1)
  {
    delay();
   display(adc_rel);
  }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

39

帖子

0

粉丝