mega128的AD始终没有反应??mega16就行?
我的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;
unsigned int adc_data,volage,time,adc_data_v;
// Timer 0 比较匹配中断服务,2ms定时
interruptvoid timer0_comp_isr(void)
{
if(time++>200)
{time=0;
PORTB.1=~PORTB.1;//可以闪烁
}
}
// ADC interrupt service routine
interrupt 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='v';
buff_line_ad='=';
buff_line_ad=volage/1000+48;
buff_line_ad=(volage/100)%10+48;
buff_line_ad=(volage/10)%10+48;
buff_line_ad=volage%10+48;
buff_line_ad='m';
buff_line_ad='v';
buff_line_ad='\0';
lcd_clear();
lcd_puts(buff_line_ad);
}
};
}
下面是熔丝位设置
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_472968.GIF
熔丝位 (原文件名:熔丝位.GIF) 终于找到原因了,原来MEGA16和128内部的有些寄存器不一样!还是要相信datasheet 我也遇到了同样的问题,ad程序在16上能用128上不能用,能不能透露下怎么搞定的。一直关注你的问题呢。我的qq:905592231 最原始的资料就是datasheet,使用那个片子,一定要看它的datasheet。不同型号的AVR,内部寄存器的定义以及某些功能是不同的。
就是照搬代码,也不要偷“看datasheet”的这个懒。 最近强迫自己看了一些datasheet,感觉还是很有用,之前听同学说只要照搬程序,改下头文件就可以在128里面用,遇到问题就怀疑刚拿到的板子,费了很多时间,不过后来才发现,是ADCSRA这个寄存器有变化。 "只要照搬程序,改下头文件"
永远都不会成为好的工程师 马老师说的是,我用128没有仔细阅读datasheet,以为和16一样,就直接套用以前编写的程序,没想到会浪费那么多时间,最后还是得花时间看datasheet,以后要踏实一点! 大家好啊 我的adc采样路数比较多 我就外接了两片4067模拟开关可是不知道使用avr来编程怎么来控制
图不好切进来我的4067的通道地址是A0A1 A2A3来控制的
而我的74373在cpld产生A0A1 A2A3 不过我的存储器也有A0A1 A2A3
页:
[1]