China Sensor Hersteller

China Temperature Sensor & Thermistor manufacturer

Mikrocontroller·DS18B20 Temperatursensor

Eigenschaften des Temperaturfühler DS18B20:
1. Digitaler Temperatursensor „One-Line-Bus“. (Es ist relativ einfach, das Timing in der ersten Zeile zu beherrschen);
2. 3~5V großer Spannungs betriebsbereich;
3. Auflösung 9-12 Ziffern einstellbar;
Sonde mit M8-Gewindekopf für digitalen Temperatursensor DS18B20 Digitaler Temperatursensor mit USB-Schnittstelle, Kabel länge 1 Meter
Sonde mit M8-Gewindekopf für digitalen Temperatursensor DS18B20 Digitaler Temperatursensor mit USB-Schnittstelle, Kabel länge 1 Meter

2. Korrekte Verkabelung des DS18B20
Mit Blick auf die flache Seite ist die linke Seite negativ und die rechte Seite positiv. Bei umgekehrtem Anschluss kann es zu Verbrennungen kommen, was auch der Grund dafür ist, dass die Temperatur 85 °C anzeigt.
Und es gibt nur eine E/A-Leitung. Achten Sie daher auf das Lese- und Schreib-Timing.

3. Einführung in das DS18B20-Timing
1) Zurücksetzen
eingeben
Zeit t0-t1: Reset-Impuls 480-960us;
Zeit t1-t2: Bus freigeben 15-60us;
Erkennung
Zeit t2-t3: Der gestrichelte Teil wird von DS18B20 gesteuert. Ein niedriger Pegel von 60-240us zeigt einen erfolgreichen Reset an, andernfalls schlägt er fehl;
Zeitpunkt t3-t4: Bus freigeben

2) Schreibvorgang
Schreiben Sie 0 Timing
eingeben
t0-15us: Low-Pegel halten, Eingang 0;
Erkennung
15-60us: Erkennen Sie, ob die E/A einen niedrigen Pegel hat.
Eingabeintervall>1us
Schreiben Sie 1 Timing
eingeben
t0-15us: High-Pegel ziehen, Eingang 1;
Erkennung
15-60us: Erkennen Sie, ob die E/A einen hohen Pegel hat
Eingabeintervall>1us

3) Lesevorgang
t0-t1: Pegel für 4us niedrig halten
t1-15us: DS18B20 oder Pull-up-Widerstand funktioniert, Low-Pegel oder High-Pegel wird ausgelesen
15us-60us: Den Bus freigeben
3. Temperatur von DS18B20
1. Temperaturformattabelle von DS18B20
Insgesamt gibt es 16 Bits. Wir verwenden die ersten 5 Bits zur Darstellung des Vorzeichen bits und die letzten 11 Bits zur Darstellung des Werts.

2. Temperatur datentabelle von DS18B20
125℃/2000 = 0,0625
Wenn das Vorzeichenbit 0 ist, stellt es eine positive Zahl dar und 0,0625 * Hex erhält den Temperaturwert.
Wenn das Vorzeichenbit 1 ist, stellt es eine negative Zahl dar und der erhaltene Wert (Umkehrwert + 1) * 0,0625 wird erhalten, um den Temperaturwert zu erhalten;

4. Vorgehensweise
1. Temperaturumrechnung starten
1) DS18B20 zurücksetzen;
2) Geben Sie den Skip Rom-Befehl (CCH) aus [gilt nur für nur einen DS18B20];
3) Geben Sie den Konvertierungsbefehl aus (44H).
2. Lesen Sie die Temperatur ab
1) DS18B20 zurücksetzen;
2) Erteilen Sie den Skip Rom-Befehl (CCH).
3) Geben Sie den Konvertierungsbefehl (BEH) aus.
4) 2 Bytes Temperatur lesen;
5) Konvertierung des Temperatur formats;
Programm
main.h
# ifndef _MAIN_H_
# _MAIN_H_ definieren
#enthalten
#enthalten
sbit DQ = P3^2;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^5;
sbit BUSY = P0^7;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef int int16;
#define nops() {_nop_();_nop_();_nop_();_nop_();}
#endif
Haupt c
#include „main.h“
Void-Verzögerung (uint16 n)
{
while(n--);
}
void DB18B20_reset(void)
{
Bit Flag = 1; //Das Programm wurde geändert
while(flag)
{
DQ = 1;
nops();
DQ = 0;
Verzögerung(50);
DQ = 1;
Verzögerung(5);
Flag = DQ;
Verzögerung(20);
}
DQ = 1;
Verzögerung(20);
}
void write_byte(uint8 byte)
{
uint8 i ;
for(i=0; i<8; i++)
{
DQ = 1;
_nop_() ;
DQ = 0;
nops();
DQ = Byte&0x01;
Verzögerung(6);
Byte>>=1;
}
DQ = 1;
_nop_() ; // Eine kurze Verzögerung sollte ausreichen.
}
uint8 read_byte(void)
{
uint8 i, dat =0;
for(i=0; i<8; i++)
{
DQ = 1;
_nop_() ;
DQ = 0;
nops();
DQ = 1;
nops();
dat>>=1;
if(DQ)
dat |= 0x80 ;
Verzögerung(6);
}
DQ = 1;
_nop_() ;
Rückgabedatum;
}
void start_temp_sensor(void)
{
DB18B20_reset();
write_byte(0xcc);
write_byte(0x44);
}
int16 read_temp(void)
{
uint8 tempdata[2];
int16 temp; // Das Vorzeichenbit der Daten hängt davon ab, ob die Ausgabe ein Vorzeichen erfordert.
DB18B20_reset();
write_byte(0xcc);
write_byte(0xBE);
tempdata[0] = read_byte();
tempdata[1] = read_byte();
temp = tempdata[1];
temp<<=8;
temp |= tempdata[0]; //In Dezimalcode konvertieren. Ich verstehe es nicht. Bitte helfen Sie mir.
temp>>=4;
Rücklauftemperatur;
}
void warte(void)
{
P0 = 0xFF;
Tun
{
RS = 0;
RW = 1;
EN = 0;
EN = 1;
}while (BUSY == 1);
EN = 0;
}
void w_dat(uint8 dat)
{
Warten();
EN = 0;
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
EN = 0;
}
void w_cmd(uint8 cmd)
{
Warten();
EN = 0;
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
EN = 0;
}
void w_hexnum(uint16 dat)
{
w_dat(dat/10 + 0);
w_dat(dat + 0);
w_dat(0xDF);
w_dat(C);
}
void Init_LCD1602(void)
{
w_cmd(0x38); // 16*2-Anzeige, 5*7-Punktmatrix, 8-Bit-Datenschnittstelle
w_cmd(0x0C); //Die Anzeige ist eingeschaltet, der Cursor ist eingeschaltet und der Cursor darf blinken.
w_cmd(0x06); //Der Text bewegt sich nicht und der Cursor bewegt sich automatisch nach rechts
w_cmd(0x01); // Bildschirm löschen
}
void main(void)
{
int16 ans;
Init_LCD1602();
while(1)
{
start_temp_sensor(); //Warum hier eine Verzögerung benötigt wird;
ans = read_temp();
w_cmd(0x80);
w_hexnum(ans);
}
}
PREV:So Funktioniert der Intelligente Sensor DS18B20
NEXT:Anwendung des Digitalen Temperatursensors 1 wire DS18B20

RELATED POSTS




Skype

WhatsApp

WangWang

QQ
Email me

Mail to us