ATY_LIB V2_102_230218
ATY_LIB for general devices or ALGO
 
Loading...
Searching...
No Matches
DS18B20_ATY.c File Reference

Familiar functions of DS18B20 for all embedded device. More...

#include "DS18B20_ATY.h"
#include "DS18B20.h"
#include "delay.h"
#include "usart.h"

Go to the source code of this file.

Macros

#define __DS18B20_ATY_C
 

Functions

void DS18B20_Init (void)
 Initialize DS18B20.
 
void DS18B20_SendRestSingle (void)
 
u8 DS18B20_CheckReadySingle (void)
 
u8 DS18B20_CheckDevice (void)
 
u8 BS18B20_WriteByte (u8 cmd)
 
u8 DS18B20_ReadByte (void)
 Read one byte from DS18B20.
 
u16 DS18B20_GetTemperature (void)
 
 BS18B20_WriteByte (0xCC)
 功能:从DS18B20读取温度值,多点测温‍/
 
u8 DS18B20_ReadRomInfo (void)
 
u8 DS18B20_MatchROM (void)
 

Variables

u8 ROM_ID [8]
 
u8 Refresh_OLED_Data = 0
 
 temp = temp * 0.0625
 
 value = temp * 100 + (value > 0 ? 0.5 : -0.5)
 
 intT = temp >> 4
 
 decT = temp & 0xF
 

Detailed Description

Familiar functions of DS18B20 for all embedded device.

Parameters
ProjectDEVICE_GENERAL_ATY_LIB
Author
ATY
Version
  • 1_01_220927 > ATY
    1. Preliminary version, first Release
  • Undone

Definition in file DS18B20_ATY.c.

Macro Definition Documentation

◆ __DS18B20_ATY_C

#define __DS18B20_ATY_C

Definition at line 29 of file DS18B20_ATY.c.

Function Documentation

◆ BS18B20_WriteByte() [1/2]

BS18B20_WriteByte ( 0xCC  )

功能:从DS18B20读取温度值,多点测温‍/

◆ BS18B20_WriteByte() [2/2]

u8 BS18B20_WriteByte ( u8  cmd)

Definition at line 125 of file DS18B20_ATY.c.

126{
127 u8 i = 0;
129 for(i = 0; i < 8; i++)
130 {
131 DS18B20_OUT = 0;
132 DelayUs(2); //主机拉低总线写数据时间隙2us
133 DS18B20_OUT = cmd & 0x01; //如果该写入位为1,必须在15us之内把总线拉高,为0 保持60us即可。
134 DelayUs(60); //确保DS18B20已经成功读取到该位数据
135 DS18B20_OUT = 1; //一位发送完成
136 cmd >>= 1;
137 DelayUs(2); //位间隙2us
138 }
139 return 0;
140}
#define DS18B20_OUT
Definition: DS18B20_ATY.h:53
#define DS18B20_OutPut_Mode()
Definition: DS18B20_ATY.h:49
void DelayUs(uint32_t us)
uint8_t __XDATA i

◆ DS18B20_CheckDevice()

u8 DS18B20_CheckDevice ( void  )

Definition at line 118 of file DS18B20_ATY.c.

119{
120 DS18B20_SendRestSingle();/*1.主机发送复位信号*/
121 return DS18B20_CheckReadySingle();/*2.检测存在脉冲*/
122}
void DS18B20_SendRestSingle(void)
Definition: DS18B20_ATY.c:71
u8 DS18B20_CheckReadySingle(void)
Definition: DS18B20_ATY.c:88

◆ DS18B20_CheckReadySingle()

u8 DS18B20_CheckReadySingle ( void  )

Definition at line 88 of file DS18B20_ATY.c.

89{
90 u8 cnt = 0;
91 /*1.检测存在脉冲*/
93 while(DS18B20_IN && cnt < 240) //等待DS18B20 拉低总线 (60~240 us 响应复位信号)
94 {
95 DelayUs(1);
96 cnt++;
97 }
98 if(cnt > 240) return 1;
99 /*2.检测DS18B20是否释放总线*/
100 cnt = 0;
102 while((!DS18B20_IN) && cnt < 240) //判断DS18B20是否释放总线(60~240 us 响应复位信号之后会释放总线)
103 {
104 DelayUs(1);
105 cnt++;
106 }
107 if(cnt > 240) return 2;
108 else return 0;
109}
#define DS18B20_InPut_Mode()
Definition: DS18B20_ATY.h:50
#define DS18B20_IN
Definition: DS18B20_ATY.h:52

◆ DS18B20_GetTemperature()

u16 DS18B20_GetTemperature ( void  )

Definition at line 167 of file DS18B20_ATY.c.

168{
169 u16 temp = 0;
170 u8 temp_H, temp_L;
171 int intT, decT;
172 DS18B20_CheckDevice(); //发送复位脉冲、检测存在脉冲
173 BS18B20_WriteByte(0xCC); //跳过ROM序列检测
174 BS18B20_WriteByte(0x44); //启动一次温度转换
175
176 //等待温度转换完成
177 while(DS18B20_ReadByte() != 0xFF){}
178
179 DS18B20_CheckDevice(); //发送复位脉冲、检测存在脉冲
180 BS18B20_WriteByte(0xCC); //跳过ROM序列检测
181 BS18B20_WriteByte(0xBE); //读取温度
182
183 temp_L = DS18B20_ReadByte(); //读取的温度低位数据
184 temp_H = DS18B20_ReadByte(); //读取的温度高位数据
185 temp = temp_L | (temp_H << 8); //合成温度
186 intT = temp >> 4; /*合成实际温度整数部分****精度相对上面的更高*/
187 decT = temp & 0xF; /*合成实际温度小数部分*/
188 printf("温度:%d.%d ℃ \n", intT, decT);
189 return temp;
190}
u8 DS18B20_ReadByte(void)
Read one byte from DS18B20.
Definition: DS18B20_ATY.c:143
decT
Definition: DS18B20_ATY.c:219
temp
Definition: DS18B20_ATY.c:215
u8 DS18B20_CheckDevice(void)
Definition: DS18B20_ATY.c:118
u8 BS18B20_WriteByte(u8 cmd)
Definition: DS18B20_ATY.c:125
intT
Definition: DS18B20_ATY.c:218
__WEAK_ATY void printf(uint8_t *,...)

◆ DS18B20_Init()

void DS18B20_Init ( void  )

Initialize DS18B20.

Definition at line 53 of file DS18B20_ATY.c.

54{
55 /*1.GPIOC口初始化*/
56 RCC->APB2ENR |= 1 << 3;
57 GPIOB->CRL &= 0x0FFFFFFF;
58 GPIOB->CRL |= 0x30000000;
59 GPIOB->ODR |= 1 << 7;
60
61 /*2.检测DS18B20设备是否正常*/
62 switch(DS18B20_CheckDevice())
63 {
64 case 0: printf("DS18B20_Init OK!\n"); break;
65 case 1: printf("DS18B20设备响应复位信号失败!\n"); break;
66 case 2: printf("DS18B20设备释放总线失败!\n"); break;
67 }
68}

◆ DS18B20_MatchROM()

u8 DS18B20_MatchROM ( void  )

Definition at line 253 of file DS18B20_ATY.c.

254{
255 u8 i = 0;
256 BS18B20_WriteByte(0x55); /*4.匹配64位 ROM 信息*/
257 for(i = 0; i < 8; i++)
258 {
260 }
261 return 0;
262}
u8 ROM_ID[8]
Definition: DS18B20_ATY.c:41

◆ DS18B20_ReadByte()

u8 DS18B20_ReadByte ( void  )

Read one byte from DS18B20.

Returns
byte value

Definition at line 143 of file DS18B20_ATY.c.

144{
145 u8 i, data = 0;
146 for(i = 0; i < 8; i++)
147 {
148 DS18B20_OutPut_Mode();//初始化为输出模式
149 DS18B20_OUT = 0;
150 DelayUs(2); //主机拉低总线读数据时间隙2us
151 DS18B20_OUT = 1; //释放总线,准备读取位数据
152 DS18B20_InPut_Mode(); //初始化为输入模式
153 DelayUs(10); //等待DS18B20的数据输出
154 data >>= 1; //高位补0,默认以0为准
155 if(DS18B20_IN) data |= 0x80;
156 DelayUs(60); //延时确保DS18B20采样周期已经过去(非常重要)
157 DS18B20_OUT = 1; //释放总线准备读取下一位位数据
158 }
159 return data;
160}

◆ DS18B20_ReadRomInfo()

u8 DS18B20_ReadRomInfo ( void  )
  • crc = x^8 + x^5 + x^4 + 1*‍/

Definition at line 224 of file DS18B20_ATY.c.

225{
226 u8 i = 0;
227 BS18B20_WriteByte(0x33); /*4.启动读取ROM*/
228 for(i = 0; i < 8; i++)
229 {
231 }
232 printf("ROM_ID= ");
233 for(i = 0; i < 8; i++)
234 {
235 printf("%X", ROM_ID[i]);
236 if(i == 7) printf("\n");
237 else printf("-");
238 }
239 return 0;
240}

◆ DS18B20_SendRestSingle()

void DS18B20_SendRestSingle ( void  )

Definition at line 71 of file DS18B20_ATY.c.

72{
73 /*主机发送复位信号*/
75 DS18B20_OUT = 0; //拉低总线480~960 us ,对 DS18B20 芯片进行复位
76 DelayUs(750);
77 DS18B20_OUT = 1;
78 DelayUs(15); //释放总线15~60 us
79}

Variable Documentation

◆ decT

decT = temp & 0xF

Definition at line 219 of file DS18B20_ATY.c.

◆ intT

intT = temp >> 4

Definition at line 218 of file DS18B20_ATY.c.

◆ Refresh_OLED_Data

u8 Refresh_OLED_Data = 0

Definition at line 43 of file DS18B20_ATY.c.

◆ ROM_ID

u8 ROM_ID[8]

Definition at line 41 of file DS18B20_ATY.c.

◆ temp

temp = temp * 0.0625

Definition at line 215 of file DS18B20_ATY.c.

◆ value

value = temp * 100 + (value > 0 ? 0.5 : -0.5)

Definition at line 216 of file DS18B20_ATY.c.