|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
初学AVR,大家帮我看看ADC的问题 |
作者:sunhorse 栏目:单片机 |
第一次接触AVR,做一个AD采样的小程序。程序如下。 程序是在双龙程序的基础上写的,采样采用查询方式。 我看了几遍程序,感觉应该没有问题。 问题 有一次运行程序,采了几次电压,发现ADC的转换结果随着电压的变化而成比例的变化。 但是过了一会,采样结果就不变了,不管外部电压怎么变化,采样的结果都不变化。 另外,我选择内部振荡器,8M. // 在此处包含所有通用头文件 #include "iom8v.h" #define uCHAR unsigned CHAR #define uint unsigned int #define uLONG unsigned LONG #define ADC_ChANEL 5 uint adc_rel; //ADC初始化 void adc_init(void) { //PortC 配成 输入/上拉无效===========三态(高阻) //PORTC 用做ADC的输入口 DDRC=0x00; PORTC=0x00; //初始化ADC控制和状态寄存器 //ADEN=0,ADC is disable //ADSC=0,ADC start is disable //ADFR=0 ADC Free Running is disable //ADIF=0 ADC Interrupt flag is clear //ADIE=0 ADC interrupt enable is disable //APS2 APS1 APS0 are clear,and SELECT OSC/2 ADCSR = 0x00; //初始化ADC多路复用器选择寄存器 //REFS1 REFS0 =01 Slect AVCC as reference voltage //ADC_CHANEL the channel is SELECT //ADLAR=1 Left adjust ADMUX =(1<<REFS0)|(ADC_ChANEL&0x0f)|(1<<ADLAR); //关闭模拟比较器 ACSR =(1<<ACD); //配置ADC控制和状态寄存器 //ADEN=1 ADC is enable //ADPS2 ADPS1 ADPS0 is 110 OSC/64 ADCSR=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1) ; } //设置延时时间 void Delay() { uLONG TEMP; TEMP=10000; while(TEMP--) { ; } } /* ********************************************** void AD_Read() 读取模拟数字转换器 ********************************************** */ void AD_Read() { //启动ADC ADCSR|=(1<<ADSC); //等待转换结束 //when ADC is busy ADSC is 1,When finish,ADSC is 0 while( (ADCSR&0x40)==0x40 ) { ; } //读取转换结果 adc_rel=ADC&0x3ff; //初始化ADC多路复用器选择寄存器 //REFS1 REFS0 =01 Slect AVCC as reference voltage //ADLAR=1 Left adjust //ADC_CHANEL the channel is SELECT ADMUX=(1<<REFS0)|( ADC_ChANEL &0x0f)|(1<<ADLAR);//选择内部AVCC为基准 } /* ********************************************** void Disp_Out() 显示数据到数码管 ********************************************** */ main() { SP=0x45f; OSCCAL=0x7d; adc_init(); while(1) { Delay(); AD_Read(); } } |
2楼: | >>参与讨论 |
作者: kkyou 于 2004/11/15 10:12:00 发布:
我也遇到过这个问题,加了看门狗就好了! 我也遇到过这个问题,加了看门狗就好了! 我想可能是那个程序本身有问题,老是死掉 |
3楼: | >>参与讨论 |
作者: tangqin 于 2004/11/16 21:24:00 发布:
有道理 你应该不断刷新显示,看看是不是死在哪 里了 |
4楼: | >>参与讨论 |
作者: kkyou 于 2004/11/17 10:52:00 发布:
看看这个也许有帮助 看看这个也许有帮助 http://61.144.28.248/ouravr/bbs/bbs_content.jsp? bbs_sn=87842&bbs_page_no=1&bbs_id=1000 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |