你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【年中粉丝节】+18B20温度传感器

[复制链接]
jundao721 发布时间:2021-6-15 18:08
18B20温度传感器用的比较多,最近公司搬迁,其他的传感器都还在包装里。本来想用F030nucleo板,忙糊涂了,SWD引脚接错了,不能下载程序,然后找到很久之前买的红牛板,接18B20传感器。图1所示:
2 ]) V$ Z" B5 Y" C. S
18B20的引脚定义如图2所示:

' J" K# X  E& t- i# Y) V! w
直接进入正题,这款温度传感器是一根总线的连接方式,所以使用起来也比较方便。数据引脚需要一个上拉电阻4.7K。手头暂时都是贴片电阻,直插的只有2K的功率电阻,临时使用一下。
工作流程是:初始化,ROM操作指令,存储器操作指令,数据传输。其时序如图3,图4所示:
; d/ z9 J2 N8 D3 E
数据转换及读取主程序如下所示:
  1. u8 DS18b20_read_byte(void) //读字节
    ; A5 X5 F& [7 k* s* L+ ?4 _# e/ r
  2. {7 g0 R# R& x0 x/ z& d
  3.          u8 i;
    ' m4 v( @$ z  t% i
  4.          u8 data=0;: m% r4 l2 m  G7 L0 A' ?( `
  5.          for(i=0;i<8;i++); ^1 c8 h! B, F- {3 C" K
  6.          {
    ! Z0 u$ e! Y. j' \9 S9 k
  7.                  data >>=1;: X) ^" A2 H( c( I# _" r" \5 L
  8.                  GPIO_ConfigurationOUT();/ t: |0 v# ?. d) d. I2 G
  9.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);: t: ^# X* C! T4 b! |
  10.                  Delay_nms(15);
    - A/ q- T7 b) g' P+ T6 s/ k% t
  11.                  GPIO_ConfigurationIN();9 z. I0 r; S& D% P# R! k# R7 W
  12.                  Delay_nms(50);& p8 ^* Y' l0 E' E
  13.                  if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14))7 Y; B  t/ V- |4 r' l& Y9 ~. X
  14.                          data=data|0x80;: U; a. g, B" `2 t3 M+ ~
  15.                  else
    0 S% L9 h. p* g; B& s% f
  16.                          data&=0x7f;9 z2 B% D- g6 G/ O
  17.                  Delay_nms(600);
      I9 z" S3 g7 Y4 p# S: f0 L3 x, C
  18.                  0 z2 x; y9 T: [7 \9 j1 L  J+ p
  19.          }/ f  t* R! k9 N# `8 `
  20.          return data;: N" x; c/ o+ F7 b. `2 h3 h6 b) t4 A3 q
  21.          9 y: ^# k# `. f0 F1 d* S( j
  22. }7 o0 d. Z. ?; l$ A: o

  23. 1 w2 Z% {7 U0 k# Q0 ]# O! a' |
  24. void DS18b20_write_byte(u8 dat) //写字节
    & j) t! G) F2 {+ }1 W( g. I
  25. {# s; l: a2 L+ J/ ?  ^9 C
  26.          u8 i;
    ) r2 Z% j& v$ T$ h5 t9 d
  27.          u8 one_bit;
    4 l, i$ I: V( d" T) R0 ~
  28.          for(i=0;i<8;i++)" a3 p. T( ~- T: o
  29.          {5 s6 l: f# b* W. V/ K* r1 K! A8 ~0 ]
  30.                  one_bit = dat&0x01;
    $ t" M' {6 h. J$ J, p3 A; g
  31.                  dat = dat>>1;5 U7 n* |1 e$ Y, i. @
  32.                  GPIO_ConfigurationOUT();( W; Z& b1 ]5 u+ |7 y
  33.                  GPIO_ResetBits(GPIOB,GPIO_Pin_14);' G/ K, C, t: n) s5 ?
  34.                  Delay_nms(125);
    % _6 F& ^# P' ?
  35.                  if(one_bit)
    4 ~8 s$ F4 N; S( s1 r0 J
  36.                  {" q0 P! V$ X' z
  37.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);% X. @( ~1 O1 j3 z" p. V9 Y
  38.                          Delay_nms(300);+ l" m# H+ }/ e% [( x- l! A$ O
  39.                  }% c- a! B% v. y+ x# M
  40.                  else
    7 M9 C, M! a. s3 ~' _! a% k+ N- r
  41.                  {
    + ^" h2 Z  K; U% b7 q+ `
  42.                          Delay_nms(300);
    * ?0 m. Z3 ^4 _" O0 @- Q
  43.                          GPIO_SetBits(GPIOB,GPIO_Pin_14);
    % T) X2 g4 |1 r! @4 {
  44. //                          GPIO_ResetBits(GPIOC,GPIO_Pin_13);0 ~/ V- j  ]% W3 m# Q" I6 l
  45.                  }" A1 a, h6 K1 g4 b+ a* ~8 Q$ d# M
  46.                  Delay_nms(80);5 j- |( G! Z. _. D, A' |/ J
  47.          }
    ! |' t- z3 G5 b" ?7 W( f& n
  48. }
      J& H6 t$ T* [  t# X, R

  49. 4 S: f: C: K, i- z! `8 _
  50. u16 get_temperature(void) //得到温度数据1 N2 K8 n% z2 ~+ u) v8 Y0 n
  51. {
    8 Z" u! r6 O  k1 L
  52.          u8 a,b;6 l- d3 Q) j! z, ?6 o' I$ {
  53.          u16 temp;2 ^1 P; R2 K5 g1 u2 n( d
  54. 3 v- b3 G' o, y4 S, N* X% M. }5 c
  55.    DS18b20_reset();
    9 g9 S$ V% j) T) i# c, I
  56.          DS18b20_write_byte(0xCC);3 N2 u9 |4 M: u. L. r
  57.          DS18b20_write_byte(0xBE);2 A8 `; F" X! M2 C3 _- y
  58.          ) A# d, [: M/ i4 o4 S. e
  59.          a = DS18b20_read_byte();
    - A! o$ D" y' F  h  Q
  60.          b = DS18b20_read_byte();$ f  n+ v1 t% d1 h# j' m
  61.          temp = (u16)b<<8 |a;
    ; I$ n* z# a; S0 v
  62.          return temp;
    % v  K5 d( ~) B. C% U- Q
  63.          
    : `0 p. j# e% n8 ?1 X
  64. }7 E, e8 }$ {$ I% g( @
  65. void temperature_convert(void) 4 k/ L% T2 h3 u' U1 k4 D5 z
  66. {
    8 m0 M' t: I: E$ m7 K7 ]
  67.          DS18b20_reset();) I* n( G, A- t( o
  68.          DS18b20_write_byte(0xCC);
    ) @! |$ a5 K& U3 q$ J, W* U# Y
  69.          DS18b20_write_byte(0x44);
    4 c% b% U9 {; h0 [3 H; x# E
  70. }
    7 J$ V4 `3 j7 z$ i
  71. void init_18b20(void) //初始化
    ; F( e; X! r4 e% L* r+ S7 g6 F/ y
  72. {  z7 T5 s, b0 g0 S1 S# _) q3 X
  73.         u16 temp;* n; P3 o/ ]( j% D. o9 O0 P
  74. do# R, t  U0 q$ v5 J( E
  75. {
    7 k7 v+ D+ r7 ^: j+ q4 h
  76.         temperature_convert();
    0 h0 S2 z( }4 D
  77.         Delay_ms(20000);; c4 y/ x9 `0 b2 z# v9 R) [! o) v
  78.         temp = get_temperature();
    3 S$ |1 ]- t, O8 j
  79. }          while(temp==85); 0 K1 i( a& N" G# _" m
  80. temperature_convert();
    7 \9 |0 _  |  n; t8 M
  81. }9 f5 `& n( A6 `* L8 p# N2 @3 k
  82. 8 t  E! x3 X! \
  83. //u16 showdataT;
    , D0 Q/ t& m" q! ?. P+ u
  84. void tem_process(void) //计算温度
    , t" A8 _7 t- h' {  s) i  Z, @1 p
  85. {
    " |* u, R2 c7 L4 u, k! W
  86.          u16 showdata;
    . Q! [) L5 G1 L) X3 j: j1 }
  87. //   u8 Tbuf[2];
    * F. n5 D$ f9 N* W: S! Q2 t
  88.         temperature_convert();- M7 R$ o; Y+ H& h1 g0 }& |
  89.    Delay_nnms(0xAFFFF);
    ( ?  `* X7 a( m) K0 h  \9 \- S
  90.          Delay_nnms(0xAFFFF);6 Q( m  O8 w- A% y$ n+ L) q
  91.   showdata = get_temperature();
    + I5 F; H# ~" p: G7 F9 }* j
  92.         showdataT = showdata*0.0625*10+0.5-10; //计算温度
    6 m8 m+ O, f0 U, g
  93. }
复制代码

. i1 N3 o9 m% S
本程序通过定时器定时200mS读一次温度,数据显示如图5所示:
; v) N$ n/ s3 I( E* g
27.1度符合室内温度,是用手按住,温度会上升,符合预期。
主程序部分根据芯片定义好要使用的引脚,main函数按照传统定义即可。
$ w* H- z) X8 q& e

图1

图1

图2

图2

图3

图3
读写时序.JPG
显示.JPG
收藏 评论0 发布时间:2021-6-15 18:08

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版