打印

pic16f873a A/D转换的问题???

[复制链接]
2729|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
teng_wang|  楼主 | 2010-11-9 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
给位好!我看到书上有个测试电压的例子,用的是CCS的编译器,再处理读出的结果的时候用data =(data*0.5)/1204; 哪位大侠能否帮我解释一下呀!谢谢!!

下面是源程序:
#include <16f873.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
////////////////////////////////////////////////////////////
//HS:High speed OSC(>4Mhz for PCM/PCH)(>10mhz for PCD)    //
//NOWDT:No Watch Dog Timer                                //
//Noprotect:Code not protected from reading               //
//PUT: Power up timer                                     //
//Brownout:Reset when brownout delected                   //
////////////////////////////////////////////////////////////
#device ADC=10    //where ADC = 10 is the number of bits READ_ADC() should return.
#use delay(CLOCK=20000000)
#use fast_io(B)
//////液晶显示库函数使用设置
#define mode    0
#define input_x   input_B
#define output_x   output_B
#define set_tris_x set_tris_B
#define stb        PIN_B3
#define rs         PIN_B2
#include<lcd_lib.c>
void main()
{
    float data;
    setup_adc_ports(RA0_RA1_RA3_ANALOG);
    setup_adc(ADC_CLOCK_DIV_32);     //fosc/32最高速度
    set_tris_b(0);
    output_B(0);
    /////液晶显示器初始化信息
    lcd_init();
    lcd_clear();
    printf(lcd_data,"start!!");
    //////测量显示循环
    while(1)
    {
       /*
       set_adc_channel(0);                                 //选择通道0
       delay(us(50);                                       //采集等待
       data = read_adc();                                  //A/D转换数据10位读入
       data = (data*50.0)/1024;                            //温度数据刻度转换
       lcd_cmd(0xc0);                                      //移动到第二行行首
       printf(lcd_data,"ondo=%2.1f DegC",data);
      
       */
      //////电压测量
      set_adc_channel(1);                                 //选择通道1
      delay_us(50);                                       //采集等待
      data=read_adc();                                    //以10位读入
      data =(data*0.5)/1204;                              //以0.5伏特满量程转换
      lcd_cmd(0xc0);
      //lcd_cmd(0x94);                                      //移动到第三行前面
      printf(lcd_data,"volt=%1.3f V",data);               
      delay_ms(500);
    }
}
沙发
teng_wang|  楼主 | 2010-11-9 17:14 | 只看该作者
2的10次方是1024,是不是意思就是分辨率是1/1024.设定的满量程是0.5,就是当我输入的电压是0.5V的时候,表示data就是1024.
不知这样理解对不对。
但是程式当中是1204,应该是不对的。因为PIC16F873a的AD是10位的。
晚上回去改为1024试下。

使用特权

评论回复
板凳
zhaoyu2005| | 2010-11-10 11:30 | 只看该作者
你代个数计算下不就知道了,1204估计是个误会,应该是1024

使用特权

评论回复
地板
XIEYUANBIN| | 2010-11-13 15:21 | 只看该作者
你凭什么满量程是0.5V?你参考电压是多少?
仔细看看数据手册。

使用特权

评论回复
5
草样人生| | 2010-11-18 20:59 | 只看该作者
要是真解决不了的话 就找我 我是微芯的代理 QQ577885695

使用特权

评论回复
6
草样人生| | 2010-11-18 21:04 | 只看该作者
有需要 直接联系我

使用特权

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

本版积分规则

7

主题

39

帖子

0

粉丝