打印
[Atmel]

固定时间间隔ADC采集数据问题求指导

[复制链接]
1182|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qazq123|  楼主 | 2015-10-13 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qazq123 于 2015-10-13 15:40 编辑
//ADC初始化
void adc_init(void)
{

ADCSRA = 0x00;
ADMUX =0x46;//选择内部AVCC为基准
ACSR  =(1<<ACD);//关闭模拟比较器
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
}
//定时器0初始化,定时625微妙,64分频
void timer0_init(void)
{
TCCR0A = 0x00;   //正常端口操作,普通工作模式
TCCR0B = 0x00;   //T/C不工作
TCNT0 = 0xB2;    //TCNT0=178,即256-625/(1/(8/64))=178
TIMSK0=0x01;     //T/C0中断屏蔽寄存器,T/C0溢出中断使能
TCCR0B=0x03;       //64分频
}
//ADC完成中断
#pragma interrupt_handler adc_isr:iv_ADC     
void adc_isr(void)
{
temp=ADC&0x3ff;
ADMUX =0x46;//选择内部AVCC为基准
ADCSRA|=(1<<ADSC);//启动AD转换
}
#pragma interrupt_handler timer0_ovf:17
void timer0_ovf(void)
{
TCNT0 = 0xB2;  //重装计数初值
ADCSRA|=(1<<ADSC);//启动AD转换
flag++;   //625微妙,标志位加1
temp=(unsigned int)(((unsigned long)((unsigned long)temp*750*Vref))/0x3ff);
temp_sum += temp;
}
//把计算出来的平均数给显示数组
void shuju(void)
{
unsigned char i;
for(i=0;i<4;i++)
  {
   
   led_buff[i]=duan[temp_ave%10];
   temp_ave=temp_ave/10;
   }
  led_buff[1]&=0x7f;
}
  //主函数里的循环
while(1)
{
  //采集1600个点,进行数据平均数的计算
  if(flag==1600)
  {
   temp_ave=(unsigned int)(temp_sum/1600);
   flag = 0;
   temp_sum = 0;
  }
   shuju();
   for(j=0;j<20;j++)
   {
           display();
   }
   }

主芯片是mega48,求指导,没办法采集,本意的功能是:定时625微妙采集一次,1S采集1600个点,做平均数计算然后给显示数组。 但是不知道是定时器问题还是什么问题.求指导

相关帖子

沙发
ddllxxrr| | 2015-10-14 21:00 | 只看该作者
定时器只是初使化了,那么在哪里开始工作的????

使用特权

评论回复
板凳
qazq123|  楼主 | 2015-10-15 09:05 | 只看该作者
ddllxxrr 发表于 2015-10-14 21:00
定时器只是初使化了,那么在哪里开始工作的????

time0_ovf不是工作吗- - 初始化在上面的time0_init吧

使用特权

评论回复
地板
ddllxxrr| | 2015-10-15 10:57 | 只看该作者
void timer0_init(void)
{
TCCR0A = 0x00;   //正常端口操作,普通工作模式
TCCR0B = 0x00;   //T/C不工作
TCNT0 = 0xB2;    //TCNT0=178,即256-625/(1/(8/64))=178
TIMSK0=0x01;     //T/C0中断屏蔽寄存器,T/C0溢出中断使能
TCCR0B=0x03;       //64分频
}

这里哪个是启动定时器了?????

使用特权

评论回复
5
qazq123|  楼主 | 2015-10-15 11:10 | 只看该作者
ddllxxrr 发表于 2015-10-15 10:57
void timer0_init(void)
{
TCCR0A = 0x00;   //正常端口操作,普通工作模式

#pragma interrupt_handler timer0_ovf:17
这个。 那个是初始化。我重新整理了一下,弄了另外一个帖子https://bbs.21ic.com/icview-1171768-1-1.html,你再看看。

使用特权

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

本版积分规则

25

主题

163

帖子

0

粉丝