找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6975|回复: 10
打印 上一主题 下一主题
收起左侧

关于传感器与单片机的一些问题

[复制链接]
跳转到指定楼层
楼主
ID:162935 发表于 2017-2-2 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么有的传感器可以直接与单片机连接就能显示读数比如18b20,有的却要在传感器与单片机之间加入AD转换芯片 比如fc-28湿度传感器
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:149451 发表于 2017-2-3 11:13 | 只看该作者
从18b20资料看,其输出是数字信号,当然可以直接与单片机I/O口接;fc-28没查到资料,但你既然说需加AD转换再接单片机,那只能说明它是个模拟器件,输出模拟量,单片机要识别的它的信息,必须转换成数字量---这就是AD的功能。综上所述:有的传感器是数字器件,而有的是模拟器件。
回复

使用道具 举报

板凳
ID:123289 发表于 2017-2-4 09:43 | 只看该作者
不是所有的菜买回家都可以生吃的。
回复

使用道具 举报

地板
ID:153041 发表于 2017-2-4 10:16 | 只看该作者
传感器种类特别多,有脉冲计数式的,有模拟量的(电压或电流的高低表示温度、湿度、压力、速度的大小);模拟量的信号要输入单片机必须转换成数字信号,有些传感器自带AD和编码电路,比如18b20;有些传感器则不带,就需要设计者自己考虑AD的问题。建议在使用具体传感器之前一定要仔细研究一下它的数据手册(技术手册),这样才能彻底。不能靠猜

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:155507 发表于 2017-2-4 19:24 | 只看该作者
一般传感器比如fc-28湿度传感器,一般输出是模拟信号,要输入到单片机就需要经过模数(AD)转换,可以考虑加AD转换芯片,当然有些单片机本身是有模拟输入口的,由内部进行AD转换。 也有数字温度传感器比如18b20,那就可以直接连接到单片机的普通IO口进行处理了。

数字温度传感器采集信号,传输到数字芯片,由数字芯片将信号处理成单片机可以接受的信号方式,最后通过单片机实现输出显示、存储、发出报警信号等功能

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

6#
ID:7485 发表于 2017-2-4 19:46 | 只看该作者
凡是输出的是数字信号的传感器内部都有类似CPU的运算芯片。
回复

使用道具 举报

7#
ID:162935 发表于 2017-2-15 13:33 | 只看该作者
angmall 发表于 2017-2-4 19:24
一般传感器比如fc-28湿度传感器,一般输出是模拟信号,要输入到单片机就需要经过模数(AD)转换,可以考虑加AD ...

你好啊 我最近在用FC-28湿度传感器检测湿度 发现湿度值一直都大于50 最高为65  我不知道是不是程序错了 还是传感器啊
下面附上程序 希望你能为我看一下 困扰我好久了=;=
#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint adc_finished,n;
float a,c;
uchar shi,ge,bai,num;
int b;
sfr ADC_CONTR=0xBC;//adc控制寄存器,不可位寻址,用或运算来设置
sfr ADC_RES=0xBD;//转换结果寄存器,高八位
sfr ADC_LOW2=0xBE;//转换结果寄存器,低两位
sfr P1ASF=0x9d;//设置p1的那一口为输入口,不可位寻址.
/*以下都是控制寄存器的各位地址*/
#define ADC_POWER 0x80;//adc电源,第7位
#define ADC_FLAG 0x10;//转换结束标志位,第4位
#define ADC_START 0x08;//转换开始,第3位
#define ADC_SPEEDLL 0x00;//速度位,第5,6位
#define ADC_SPEEDL 0x20;
#define ADC_SPEEDH 0x40;
#define ADC_SPEEDHH 0x60;
#define ADC_CHS 0x00;//输入通道为第p1.0,1,2,3三位可设置p10-p17
//位定义完成
void Delay(uint n)
{
    uchar x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}
void adcinit()       //adc初始化函数
{         


P1ASF=0x01;          //设置p10 为ad转换输入口
ADC_CONTR=0xe0;      //打开电源,设最高速度
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
ADC_CONTR|=ADC_CHS;  //设置频道
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();_nop_();
}
float  huqushuju()                //adc转换函数,数据得到
{
adcinit();
ADC_RES=0;
ADC_LOW2=0;
ADC_CONTR|=ADC_START;//启动ad转换,置1为起动,转换结束后自动置0
_nop_();
_nop_();                        
_nop_();                  
_nop_();

adc_finished=0;
while(adc_finished==0)
{
adc_finished=ADC_CONTR&ADC_FLAG;//检测是否转换结束,没结束一直等
}

_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_(); _nop_();
a=ADC_RES*4+ADC_LOW2;
a=100-100*a/1023;
a=a*10;


ADC_CONTR=0;
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
return a;
}

void display(uchar bai,uchar shi,uchar ge)
{
          uint i,t;
        for(i=0;i<3;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0;P0=table[ge]; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; P0=table1[shi];break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0;P0=table[bai]; break;//显示第2位
                                          
                }
                  t=1000;
                  while(t--);
        }
}


void main()
{  
  while(1)
  {
   huqushuju();
     b=(int)a;
     ge=b%10;
         shi=b/10%10;
         bai=b/100;
         display(bai, shi,ge);
        }
           
}
回复

使用道具 举报

8#
ID:162935 发表于 2017-2-18 10:12 | 只看该作者
angmall 发表于 2017-2-4 19:24
一般传感器比如fc-28湿度传感器,一般输出是模拟信号,要输入到单片机就需要经过模数(AD)转换,可以考虑加AD ...

请问你用过FC28湿度传感器?
它的湿度对应的一个电阻值是多少啊
回复

使用道具 举报

9#
ID:162242 发表于 2017-2-20 13:01 | 只看该作者
传感器可以直接传感器可以直接
回复

使用道具 举报

10#
ID:162242 发表于 2017-2-20 13:02 | 只看该作者
有的传感器是数字器件
回复

使用道具 举报

11#
ID:165525 发表于 2017-2-20 13:49 | 只看该作者
额。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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