搜索
bottom↓
回复: 7

mega128的AD始终没有反应??mega16就行?

[复制链接]

出0入0汤圆

发表于 2009-8-20 19:39:52 | 显示全部楼层 |阅读模式
我的mega128的熔丝位全是合理设置的,也没有设置与103兼容,程序是自动生成的,但为什么我的AD不运行啊?更奇怪的是我把#include <mega128.h>改成#include <mega16.>在mega16上就可以运行,可以进行AD转化!?


/****************************************************

Chip type           : ATmega128L
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 1024
*****************************************************/

#include <mega128.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

#include <delay.h>


unsigned char buff_line_ad[10];
unsigned int adc_data,volage,time,adc_data_v;
// Timer 0 比较匹配中断服务,2ms定时
interrupt[TIM0_COMP]void timer0_comp_isr(void)
{
   if(time++>200)
   {time=0;
    PORTB.1=~PORTB.1;//可以闪烁
    }
}
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{

// Read the AD conversion result
adc_data=ADCW;
PORTB.2=~PORTB.2; //不可以闪烁

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

PORTA=0x00;
DDRA=0x01;

PORTB=0x00;
DDRB=0x06;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

PORTE=0x00;
DDRE=0x00;

PORTF=0x00;
DDRF=0x00;

PORTG=0x01;
DDRG=0xff;


ACSR=0x80;
SFIOR&=0x1F;
SFIOR|=0x60;

// ADC initialization
// ADC Clock frequency: 62.500 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=0x47;
ADCSRA=0xAD;
// T/C0 初始化
TCCR0=0x0B;                // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
TCNT0=0x00;
OCR0=0x7C;                // OCR0 = 0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02;                // 允许T/C0比较匹配中断
// LCD module initialization
lcd_init(16);
volage=1000;       //我都赋初值为1000,上电也理应为1000啊,结果却是“v=0000mv"???????
adc_data_v=110;
// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
    adc_data_v=(unsigned long)adc_data*5140/1024;    //换算成电压值
    if(adc_data_v!=volage)
    {
    volage=adc_data_v;
    buff_line_ad[0]='v';
    buff_line_ad[1]='=';
    buff_line_ad[2]=volage/1000+48;
    buff_line_ad[3]=(volage/100)%10+48;
    buff_line_ad[4]=(volage/10)%10+48;
    buff_line_ad[5]=volage%10+48;
    buff_line_ad[6]='m';
    buff_line_ad[7]='v';
    buff_line_ad[8]='\0';
    lcd_clear();
    lcd_puts(buff_line_ad);
    }
      };
}

下面是熔丝位设置

熔丝位 (原文件名:熔丝位.GIF)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-8-21 18:16:11 | 显示全部楼层
终于找到原因了,原来MEGA16和128内部的有些寄存器不一样!还是要相信datasheet

出0入0汤圆

发表于 2009-8-21 19:35:03 | 显示全部楼层
我也遇到了同样的问题,ad程序在16上能用128上不能用,能不能透露下怎么搞定的。一直关注你的问题呢。我的qq:905592231

出0入0汤圆

发表于 2009-8-22 09:59:12 | 显示全部楼层
最原始的资料就是datasheet,使用那个片子,一定要看它的datasheet。不同型号的AVR,内部寄存器的定义以及某些功能是不同的。

就是照搬代码,也不要偷“看datasheet”的这个懒。

出0入0汤圆

 楼主| 发表于 2009-8-22 10:20:42 | 显示全部楼层
最近强迫自己看了一些datasheet,感觉还是很有用,之前听同学说只要照搬程序,改下头文件就可以在128里面用,遇到问题就怀疑刚拿到的板子,费了很多时间,不过后来才发现,是ADCSRA这个寄存器有变化。

出0入0汤圆

发表于 2009-8-22 10:32:33 | 显示全部楼层
"只要照搬程序,改下头文件"

永远都不会成为好的工程师

出0入0汤圆

 楼主| 发表于 2009-8-22 18:13:44 | 显示全部楼层
马老师说的是,我用128没有仔细阅读datasheet,以为和16一样,就直接套用以前编写的程序,没想到会浪费那么多时间,最后还是得花时间看datasheet,以后要踏实一点!

出0入0汤圆

发表于 2009-9-1 10:56:55 | 显示全部楼层
大家好啊    我的adc采样路数比较多 我就外接了两片4067模拟开关  可是不知道使用avr来编程  怎么来控制
图不好切进来  我的4067的通道地址是A0  A1 A2  A3  来控制的

而我的74373  在cpld  产生A0  A1 A2  A3    不过我的存储器也有A0  A1 A2  A3
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 12:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表