|
本帖最后由 xwkm 于 2013-1-2 23:08 编辑
编写了一个小程序:- #include "RaysRTOS.h"
- #include <stdio.h>
- #define ADC_CHANNEL 0
- #define VREF_VCC 1
- #define VREF_1V5 2
- #define ADC_GND 26
- #define ADC_1V5 25
- #define BAUDRATE 9600 //9600bps
- /* ADC转换 */
- volatile INT16U ADC_Convert(INT8U vref,INT8U channel)
- {
- INT16U retval;
- ADMUX = ((vref << 6) | channel);
- ADCSRA |= (1 << ADEN); //使能 ADC
- //RAYS_TimeDelay(1);
- retval=0;
- ADCSRA |= (1 << ADSC); //开始转换
-
- while(!(ADCSRA & (1 << ADIF)));
- ADCSRA |= (1 << ADIF); //清除ADC中断标志
- for(retval=0;retval<1000;retval++);
- retval = ADC;
- return retval;
- }
- void ADC_Init()
- {//启动ADC
- DIDR0=0xFF;//启动端口的模拟功能
- ADCSRA = 0x07; //32分频
- }
- void Serial_Init()
- {//串口初始化,8MHz,9600bps
- UCSR0A=0x00;
- UBRR0H=0x00;
- UBRR0L=0x33; //9600bps
- UCSR0B = 0x18; //0b00011000 允许:发送、接收
- UCSR0C = 0x0E; //0b00001110 数据帧格式:8,N,1
- }
- void _putchar(char c)
- {
- while((UCSR0A & (1 << UDRE0)) == 0);
- UDR0 = c;
- }
- void putstr(unsigned char* buf)
- {
- while (*buf)
- {
- _putchar(*buf);
- buf++;
- }
- }
- /*
- +---------------------------------------------------------------------------------------+
- |函数名称: IdleTask |
- |---------------------------------------------------------------------------------------|
- |函数原型: void IdleTask(void) |
- | |
- |函数功能: 电源电压检测&充电管理 |
- | |
- |有关说明: 空闲任务必须永远处于就绪状态 |
- +---------------------------------------------------------------------------------------+
- */
- void Task1(void)
- {
- volatile unsigned int voltage,t1,t2;
- char buff[30];
- asm("nop");
- ADC_Init();
- Serial_Init();
- sprintf(buff,"%s from Idle Process\n","Hello world!");
- putstr((void *)buff);
- while(1)
- {//每隔1s检测一次电源电压
- /*putstr((void *)buff);*/
-
- t1=ADC_Convert(VREF_VCC,ADC_CHANNEL);
- t2=0x00;
- volatile t2=ADC_Convert(VREF_VCC,ADC_1V5);
- //voltage=(1500/t2*t1)/10;
- //voltage=(1250/t2*t1)/10;
- sprintf(buff,"t1 %d,t2 %d,PA0 voltage:%d\n",t1,t2,voltage);
- putstr((void *)buff);
- RAYS_TimeDelay(100);
- }
- }
复制代码 用了RaysOS。论坛网友的一个小操作系统。我开了ICE跟踪。ADC值没有传错。
测试结果如下,PA0直接接VCC。但是程序算出来PA0的电压却是3.06V,不知道怎么解释!万用表测得3.32V
---------------不好意思我搞错了,内置的应该是1.25V的…… |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|