当前位置:网站首页>18.[stm32] read the ROM of DS18B20 temperature sensor and realize multi-point temperature measurement
18.[stm32] read the ROM of DS18B20 temperature sensor and realize multi-point temperature measurement
2022-07-05 15:48:00 【According to point_ DW】
Author's brief introduction : Hello, everyone , My name is DW, Share some of my new knowledge every day , Look forward to making progress with you
Series column :STM32
Small experimental target : Read 3 individual DS18B20 Of ROM And realize multi-point temperature measurement
If there is anything that is not well written, you are welcome to correctDevelopment board : The punctual atoms STM32F103Mini edition
Creation time :2022 year 6 month 6 Japan
obtain DS18B20ROM surface
Written before DS18B20 On the basis of the article , Modify slightly , You can measure each DS18B20 Of 64 position ROM Serial number .
One byte is 8 position , We need to read 8 byte ,8 Byte is 64 Bit data , We put 8 Bytes of data are stored in an array , Then print it out through serial port . On the basis of the previous article , Add a read DS18B20ROM Function of .
// Read ROM
void DS18B20_Read_Rom(void){
u8 rom[8];
DS18B20_Start_Signal();// Start signal
DS18B20_Write_Byte(0x33);// read ROM
for(u8 i=0;i<8;i++){
rom[i] = DS18B20_Read_Byte();// Read a byte
printf("%#.2x,",rom[i]);//%#x: Print hexadecimal results preceded by 0X
}
printf("\r\n");
}We use this function , You can read 8 Bytes of data , And print it out through the serial port , This experiment needs to use 3 individual DS18B20, Cannot read all at once 3 individual DS18B20 Of 64 position ROM Serial number , You need to read one by one , Read three times , get 64 position ROM After the serial number, they can be connected to a bus , Then read the temperature at the same time .
Here is what we got 3 individual DS18B20 Corresponding three groups ROM surface .

Single bus multipoint temperature measurement
obtain 3 Group 64 position ROM after , We created 3 An array , Store the read ROM, Only through 64 position ROM We can search the corresponding DS18B20, After through ROM matching , We can match the corresponding on the bus DS18B20, And then realize the conversion of temperature .
u8 rom1[]={0x28,0xd3,0xf6,0x48,0xf6,0xdd,0x3c,0xd5,}; //64 ROM
u8 rom2[]={0x28,0xa3,0xf9,0x96,0xf0,0x01,0x3c,0xf2,};
u8 rom3[]={0x28,0x18,0xa8,0x96,0xf0,0x01,0x3c,0x55,};matching ROM function
Because you need to call the array directly , In order to obtain more accurate data , So we need to set a pointer type variable rom,8 Bytes of ROM Need to write 8 Time , Write one byte at a time .
You need to send a start signal before writing each byte , Then send the match ROM Instructions 0X55, Finally, write a byte .
// matching ROM
void DS18B20_Match_Rom(u8 *rom){
DS18B20_Start_Signal();// Start signal
DS18B20_Write_Byte(0x55); // matching ROM
for(u8 i=0;i<8;i++){
DS18B20_Write_Byte(*rom++);// Write Bytes
}
}stay DS18B20 Based on the temperature conversion function , Modify slightly , Add the match just written ROM function , The modified function is as follows .
void DS18B20_Read_Temperature(u8 *rom,u16 *data){
u8 LSB = 0,MSB = 0;
u16 Temp = 0;
// Temperature conversion
DS18B20_Match_Rom(rom);// matching ROM
DS18B20_Write_Byte(0X44);// Temperature change
delay_ms(750);
//12 Bit accuracy 750ms The nixie tube itself has a time delay , So this delay can be removed
DS18B20_Match_Rom(rom);
DS18B20_Write_Byte(0XBE);// Read temporary storage
LSB = DS18B20_Read_Byte();
MSB = DS18B20_Read_Byte();
Temp = (MSB<<8) | LSB;// Merge data into 16 position
if((Temp&0XF800) == 0XF800){ // Negative temperature ;s=1 Positive temperature : s=0
*data =(((~Temp+0X01)* -0.0625)+0.5)*10.0;
}
else{
*data =((Temp*0.0625)+0.5)*10.0;
}
}Last , stay main Function to call the temperature conversion function and LCD1602 Just display the function .
#include "delay.h"
#include "lcd1602.h"
#include "DS18b20.h"
#include "usart.h"
u8 rom1[]={0x28,0xd3,0xf6,0x48,0xf6,0xdd,0x3c,0xd5,}; //64 ROM
u8 rom2[]={0x28,0xa3,0xf9,0x96,0xf0,0x01,0x3c,0xf2,};
u8 rom3[]={0x28,0x18,0xa8,0x96,0xf0,0x01,0x3c,0x55,};
int main(){
u16 Temp = 0;
delay_init();
LCD1602_UserConfig();
LCD1602_Init();
DS18B20_UserConfig();
uart_init(115200);
while(1){
DS18B20_Read_Rom();// measurement ROM
delay_ms(1000);
DS18B20_Read_Temperature(rom1,&Temp);
LCD1602_Number_Display(0XC0,Temp);
DS18B20_Read_Temperature(rom2,&Temp);
LCD1602_Number_Display(0XC6,Temp);
DS18B20_Read_Temperature(rom3,&Temp);
LCD1602_Number_Display(0XCC,Temp);
}
}
Okay , Let's take a look at the experimental renderings ! stay LCD1602 Displayed on the 3 A place DS18B20 Measured temperature , Realize multiple DS18B20 Operation connected to a bus .

Tips :
This article selects two pieces 74HC595 drive LCD1602 liquid crystal , If you don't have this chip, you can see the previous fourth article , hold LCD1602 Part of the function can be replaced .
3 individual DS18B20 It is connected through a bus , Data pin PB0 All connected to DS18B20 On the data bus .
This chapter ends , I'll see you in the next chapter
Reference material :
1.STM32 Firmware library manual
2. The punctual atoms STM32 Incomplete manual _ Library function version
4.4.STM32F103-LCD1602 Show characters
5.17.[STM32] Use only three wires to drive you LCD1602 liquid crystal
Data uploaded , You need to take it yourself
边栏推荐
- Appium automation test foundation - appium basic operation API (I)
- I include of spring and Autumn
- I spring and autumn blasting-2
- Bugku's steganography
- Arduino控制微小的六足3D打印机器人
- Database learning - Database Security
- Bugku's eyes are not real
- Usage and usage instructions of JDBC connection pool
- 定义严苛标准,英特尔Evo 3.0正在加速PC产业升级
- Magic methods and usage in PHP (PHP interview theory questions)
猜你喜欢

Common MySQL interview questions
![18.[STM32]读取DS18B20温度传感器的ROM并实现多点测量温度](/img/e7/4f682814ae899917c8ee981c05edb8.jpg)
18.[STM32]读取DS18B20温度传感器的ROM并实现多点测量温度

MySQL giant pit: update updates should be judged with caution by affecting the number of rows!!!

Bugku easy_ nbt

SQL injection sqllabs (basic challenges) 1-10

Explanation report of the explosion

Talk about your understanding of microservices (PHP interview theory question)

Your childhood happiness was contracted by it

Information collection of penetration test

Nine hours, nine people, nine doors problem solving Report
随机推荐
18.[STM32]读取DS18B20温度传感器的ROM并实现多点测量温度
Data communication foundation - routing communication between VLANs
MySQL table field adjustment
16.[STM32]从原理开始带你了解DS18B20温度传感器-四位数码管显示温度
Surpass palm! Peking University Master proposed diverse to comprehensively refresh the NLP reasoning ranking
Array sorting num ranking merge in ascending order
wxml2canvas
How can the boss choose programmers to help me with development?
OceanBase社区版之OBD方式部署方式本地安装
数学建模之层次分析法(含MATLAB代码)
Creation and optimization of MySQL index
SQL injection sqllabs (basic challenges) 11-20
P1451 calculate the number of cells / 1329: [example 8.2] cells
I'm fat, huh
Where is the operation of convertible bond renewal? Is it safer and more reliable to open an account
episodic和batch的定义
SQL Server learning notes
I spring and autumn blasting-2
sql server char nchar varchar和nvarchar的区别
Advanced level of static and extern