DS18B20 Temperaturfühler Sonde und Kabel
Einführung in den Temperaturfühler DS18B20:
DS18B20 ist ein digitaler Temperaturfühler mit einem breiten Anwendung spektrum. Es gibt digitale Signale aus und zeichnet sich durch geringe Größe, geringen Hardware-Ressourcenverbrauch, starke Entstörungsfähigkeit und hohe Präzision aus.
Merkmale des Temperaturfühler DS18B20:
1. Übernehmen Sie die Eindraht-Schnittstellenmethode: Der Temperaturfühler DS18B20 benötigt nur einen Draht, um eine bidirektionale Kommunikation mit dem Mikroprozessor zu erreichen.
2. Temperaturmessbereich: Der Temperaturmessbereich des Temperatursensors DS18B20 kann -55℃~+125℃ erreichen, und der Fehler beträgt ±0,4° im Bereich von -10℃ bis +85℃.
3. Unterstützung der Mehrpunkt-Netzwerkfunktion: Mehrere DS18B20-Temperatursensoren können parallel an eine Datenleitung angeschlossen werden, bis zu 8 können parallel angeschlossen werden, um eine Mehrpunkt-Temperaturmessung zu erreichen.
4. Arbeits stromversorgung: 3,0 ~ 5,5 V/DC. Der Temperatursensor DS18B20 kann über eine externe unabhängige Stromversorgung oder eine parasitäre CF stromversorgung mit Strom versorgt werden.
5. Der Temperatursensor DS18B20 benötigt während der Anwendung keine externen Komponenten.
6. Die vom Temperatursensor DS18B20 gemessene Temperatur wird seriell in einem 9- bis 12-Bit-Digitalformat übertragen.
7. Abschalt schutzfunktion. Der Temperatursensor DS18B20 enthält im Inneren ein EEPROM. Die Genauigkeit der digitalen Umwandlung und die Alarmtemperatur können über das Konfigurationsregister eingestellt werden. Die Einstellungen für Auflösung und Alarmtemperatur können auch nach dem Ausschalten des DS18B20-Temperatursensors gespeichert werden.
8. Der DS18B20-Temperatursensor gibt eine 16-Bit-Binärzahl zurück, die den in diesem Moment erfassten Temperaturwert darstellt, und die oberen fünf Ziffern stehen für positiv und negativ. Wenn die oberen fünf Bits alle 1 sind, bedeutet dies, dass der zurückgegebene Temperaturwert ein negativer Wert ist. Wenn die oberen fünf Bits alle 0 sind, bedeutet dies, dass der zurückgegebene Temperaturwert ein positiver Wert ist. Die folgenden 11 Datenbits stellen den absoluten Wert der Temperatur dar. Nachdem Sie ihn in einen Dezimalwert umgewandelt haben, multiplizieren Sie ihn mit 0,0625, um den Temperaturwert zu diesem Zeitpunkt zu erhalten.
Beschreibung des Temperatursensor stifts DS18B20
Parasitärer Stromversorgung modus des Temperatursensors DS18B20:
Der parasitäre Stromversorgung modus des DS18B20-Temperatursensors ist in der folgenden Abbildung dargestellt. Im parasitären Stromversorgung modus bezieht der Temperatursensor DS18B20 Strom aus der Signalleitung: Wenn die Signalleitung hoch ist, wird die elektrische Energie im internen Kondensator gespeichert. Wenn die Signalleitung einen niedrigen Pegel hat, wird die Leistung des Kondensators verbraucht und der Kondensator (parasitäre Stromversorgung) wird aufgeladen, bis die Signalleitung einen hohen Pegel erreicht.
Vorteile der parasitären Stromversorgung:
1. Es ist keine lokale Stromversorgung erforderlich und eine Fernmessung der Temperatur ist möglich.
2. Die Temperaturmessung kann mit nur einer Signalleitung erreicht werden, was die Schaltung vereinfacht.
Nachteile der parasitären Stromversorgung:
Damit der Temperatursensor DS18B20 eine genaue Temperatur umwandlung durchführen kann, muss die Signalleitung sicherstellen, dass während der Temperatur umwandlung ausreichend Energie bereitgestellt wird. Wenn jedoch mehrere DS18B20-Temperatursensoren an derselben Signalleitung angeschlossen sind, kann der Pull-up-Widerstand allein nicht genügend Strom liefern, was dazu führt, dass der DS18B20-Temperatursensor die Temperatur nicht messen kann oder einen großen Fehler aufweist.
Daher ist die Methode der parasitären Stromversorgung nur für die Temperaturmessung mit einem einzelnen DS18B20-Temperatursensor geeignet.
DS18B20 Temperatursensor, parasitäre Stromversorgung, starker Pull-up-Stromversorgung modus:
Der starke Pull-up-Stromversorgung modus der parasitären Stromversorgung des DS18B20-Temperatursensors ist in der folgenden Abbildung dargestellt. Damit der DS18B20-Temperatursensor während des Temperaturmessvorgangs ausreichend Strom erhält, verwenden Sie einen MOSFET, um die Signalleitung direkt an VCC zu ziehen, um ausreichend Strom bereitzustellen. (Wenn es um das Kopieren oder Starten eines Temperatur umwandlung befehls geht, muss die Signalleitung innerhalb von maximal 10 μS in einen starken Pull-up-Zustand umgewandelt werden), um das Problem der unzureichenden Stromversorgung zu lösen. Der starke Pull-up-Stromversorgung modus der parasitären Stromversorgung des DS18B20-Temperatursensors eignet sich für Mehrpunkt-Temperaturmess anwendungen, erfordert jedoch eine weitere E/A-Leitung für starke Pull-up-Schaltung.
Externer Stromversorgung modus des DS18B20-Temperatursensors:
Im externen Stromversorgung modus wird die Arbeits stromversorgung des DS18B20-Temperatursensors an den VDD-Pin angeschlossen. Es besteht kein Problem eines unzureichenden Stromversorgung stroms und die Konvertierung genauigkeit kann garantiert werden. Gleichzeitig können mehrere DS18B20-Temperatursensoren an den Bus angeschlossen werden, um ein Mehrpunkt-Temperaturmesssystem zu bilden. Die externe Stromversorgung methode ist die beste Stromversorgung methode für den DS18B20-Temperatursensor: Sie arbeitet stabil und zuverlässig, verfügt über eine starke Entstörungsfähigkeit und die Schaltung ist relativ einfach.
Interner Aufbau des Temperatursensors DS18B20:
Das Innere des DS18B20-Temperatursensors besteht aus 64-Bit-ROM, Cache-Speicher, CRC-Generator, temperatur empfindlichem Gerät, Hoch- und Tieftemperatur-Trigger und Konfigurationsregister.
1. 64-Bit-ROM des DS18B20-Temperatursensors
Im DS18B20-Temperatursensor befindet sich ein 64-Bit-ROM, und die ROM-Aushärtung hat bestimmte Inhalte. Die unteren acht Bits (fest auf 28H) sind die Produkttyp-Identifikationsnummer, die nächsten 48 Bits sind die Seriennummer und die oberen acht Bits sind die vorherigen 56 Bits des zyklischen Redundanzprüfcodes.
2. Speicherzuordnung des DS18B20-Temperatursensors
Der DS18B20-Temperatursensor verfügt über 9-Byte-Cache-Speichereinheiten, wie in der folgenden Abbildung dargestellt.
3. Konfigurationsregister des DS18B20-Temperatursensors
Das höchste Bit BIT7 des Konfigurationsregisterbytes des DS18B20-Temperatursensors ist das Testmodusbit. Bei Auslieferung ab Werk ist es 0 und muss vom Benutzer nicht geändert werden. Mit BIT6 und BIT5 wird die Konvertierungsauflösung des Temperatursensors DS18B20 eingestellt. Es gibt vier Auflösungsoptionen: 9, 10, 11 und 12 Bit. Die entsprechenden Wandlungszeiten betragen: 93,73 ms, 187,5 ms, 375 ms bzw. 750 ms. Die restlichen 5 unteren Bits sind reservierte Bits (alle 1).
Die Standardeinstellungen für R0 und R1 des Temperatursensors DS18B20 sind 11. Das ist eine 12-Bit-Auflösung, d. h. 1 Bit entspricht 0,0625 Grad Celsius.
Lesen und Schreiben des Temperatursensors DS18B20
Anweisung
Der vom Temperatursensor DS18B20 umgewandelte Temperaturwert wird im 0. und 1. Byte des Hochgeschwindigkeits-Zwischenspeichers in Zwei-Byte-Komplement form gespeichert. Wenn wir also einfach nur den Temperaturwert lesen möchten, müssen wir nur das 0. und 1. Byte im temporären Register lesen.
Die einfachen Schritte zum Ablesen des Temperaturwerts sind wie folgt:
1. ROM-Vorgang überspringen.
2. Befehl zur Temperaturumrechnung senden.
3. ROM-Vorgang überspringen.
4. Senden Sie den Befehl zum Lesen der Temperatur.
5. Lesen Sie den Temperaturwert ab.
Initialisierung des Temperatursensors DS18B20
Das Master-Gerät sendet zunächst einen Low-Pegel-Impuls von 480–960 Mikrosekunden, gibt dann den Bus auf High-Pegel frei und erkennt den Bus innerhalb der folgenden 480 Mikrosekunden. Liegt ein Low-Pegel vor, bedeutet dies, dass am Bus ein DS18B20-Temperatursensor angesprochen hat. Liegt kein Low-Pegel vor, bedeutet dies, dass der Temperatursensor DS18B20 am Bus nicht reagiert.
Als Slave-Gerät erkennt der DS18B20-Temperatursensor bereits beim Einschalten 480–960 Mikrosekunden lang, ob auf dem Bus ein niedriger Pegel vorliegt. Wenn ja, warten Sie 15–60 Mikrosekunden, nachdem der Bus auf High wechselt, und ziehen Sie dann den Buspegel für 60–240 Mikrosekunden auf Low, um mit einem Impuls zu reagieren und dem Host mitzuteilen, dass das Gerät bereit ist. Wenn es nicht erkannt wird, wird es weiterhin prüfen und warten.
Schreibvorgang des Temperatursensors DS18B20:
Der Schreibzyklus beträgt mindestens 60 Mikrosekunden und maximal 120 Mikrosekunden.
Zu Beginn des Schreibzyklus zieht das Master-Gerät den Bus zunächst für 1 Mikrosekunde auf Low, um den Beginn des Schreibzyklus anzuzeigen. Wenn der Master dann eine 0 schreiben möchte, setzt er den Bus auf Low. Wenn der Master 1 schreiben möchte, setzt er den Bus für mindestens 60 Mikrosekunden bis zum Ende des Schreibzyklus auf High und gibt ihn dann für mindestens 1 Mikrosekunde auf High, damit sich der Bus erholen kann. Der DS18B20-Temperatursensor wartet 15 Mikrosekunden, nachdem er erkannt hat, dass der Bus heruntergezogen wurde, und beginnt dann mit der Abtastung des Busses von 15us auf 45us. Er ist 1, wenn der Bus während der Abtastperiode einen hohen Pegel hat, und 0, wenn der Bus während der Abtastperiode einen niedrigen Pegel hat.
Lesevorgang des Temperatursensors DS18B20:
Das Timing des Lesedatenvorgangs ist ebenfalls in zwei Prozesse unterteilt: das Timing des Lesens 0 und das Timing des Lesens 1.
Beim Lesezyklus zieht das Master-Gerät den Einzelbus für 1 Mikrosekunde auf Low und gibt dann den Einzelbus auf einen High-Pegel frei, damit der DS18B20-Temperatursensor Daten an den Einzelbus übertragen kann. Als Slave-DS18B20-Temperatursensor beginnt er mit dem Senden von Daten, nachdem er erkannt hat, dass der Bus 1 Mikrosekunde lang auf Low gezogen ist. Wenn Sie 0 senden möchten, ziehen Sie den Bus bis zum Ende des Lesezyklus auf Low. Wenn Sie 1 senden möchten, geben Sie den Bus auf High-Pegel frei.
Das Master-Gerät zieht den Bus zunächst für 1 Mikrosekunde auf Low, gibt dann den Bus frei und schließt dann die Abtastung und Erkennung des Busses innerhalb von 15 Mikrosekunden ab, einschließlich der letzten 1 Mikrosekunde, in der der Buspegel auf Low gezogen wurde. Wenn der Bus während der Abtastperiode einen niedrigen Pegel hat, wird er als 0 bestätigt. Wenn der Bus während des Abtastzeitraums hoch ist, wird er als 1 bestätigt. Es dauert mindestens 60 Mikrosekunden, um einen Lese-Timing-Vorgang abzuschließen.
DS18B20 Temperatursensor-Anwendung schaltung
Einzelne DS18B20-Verdrahtung methode: VDD ist mit der Stromversorgung verbunden, DQ ist mit dem Mikrocontroller-Pin verbunden, ein Pull-up-Widerstand ist hinzugefügt und GND ist mit Masse verbunden. Beachten Sie, dass dieser Pull-up-Widerstand erforderlich ist, d. h. der DQ-Pin muss über einen Pull-up-Widerstand verfügen.
Eine Routine für den Temperatursensor DS18B20
/******************DS18B20 misst die Temperatur******************
*MCU-Modell: STC89C52RC
*Entwicklungsumgebung: KEIL
*Funktion: DS18B20 misst die Temperatur und zeigt sie in der digitalen Röhre an
***************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS = P2^2;
sbit LE1 = P2^6;
sbit LE2 = P2^7;
uint temp;
uchar flag1;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
Void-Verzögerung (uint count)
{
uint i;
while(count)
{
ich=200;
while(i>0)
ich--;
zählen--;
}
}
void dsreset(void)
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
Bit tmpreadbit(void)
{
uint i;
Bit dat;
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
Rückkehr (dat);
}
uchar tmread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmpwritebyte(uchar dat)
{
uint i;
uchar j;
Bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //schreibe 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
anders
{
DS=0;
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void tmpchange(void)
{
dsreset();
Verzögerung(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}
uinttmp()
{
float tt;
uchar a,b;
dsreset();
Verzögerung(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmread();
b=tmread();
temp=b;
temp<<=8;
temp=temp|a;
tt=temp*0,0625;
temp=tt*10+0,5;
Rücklauftemperatur;
}
Leere Anzeige (uint temp)
{
uchar A1,A2,A2t,A3;
A1=Temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
LE1=0;
P0=table[A1]; // Hunderterstellen anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfe;
LE2=1;
LE2=0;
Verzögerung(1);
LE1=0;
P0=table1[A2]; //Zehnerstelle anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfd;
LE2=1;
LE2=0;
Verzögerung(1);
LE1=0;
P0=table[A3]; //Einheitenziffer anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfb;
LE2=1;
LE2=0;
Verzögerung(1);
}
void main()
{
uchar a;
Tun
{
tmpchange();
for(a=10;a>0;a--)
{
display(tmp());
}
} while(1);
}
DS18B20 ist ein digitaler Temperaturfühler mit einem breiten Anwendung spektrum. Es gibt digitale Signale aus und zeichnet sich durch geringe Größe, geringen Hardware-Ressourcenverbrauch, starke Entstörungsfähigkeit und hohe Präzision aus.
1. Übernehmen Sie die Eindraht-Schnittstellenmethode: Der Temperaturfühler DS18B20 benötigt nur einen Draht, um eine bidirektionale Kommunikation mit dem Mikroprozessor zu erreichen.
2. Temperaturmessbereich: Der Temperaturmessbereich des Temperatursensors DS18B20 kann -55℃~+125℃ erreichen, und der Fehler beträgt ±0,4° im Bereich von -10℃ bis +85℃.
3. Unterstützung der Mehrpunkt-Netzwerkfunktion: Mehrere DS18B20-Temperatursensoren können parallel an eine Datenleitung angeschlossen werden, bis zu 8 können parallel angeschlossen werden, um eine Mehrpunkt-Temperaturmessung zu erreichen.
4. Arbeits stromversorgung: 3,0 ~ 5,5 V/DC. Der Temperatursensor DS18B20 kann über eine externe unabhängige Stromversorgung oder eine parasitäre CF stromversorgung mit Strom versorgt werden.
5. Der Temperatursensor DS18B20 benötigt während der Anwendung keine externen Komponenten.
6. Die vom Temperatursensor DS18B20 gemessene Temperatur wird seriell in einem 9- bis 12-Bit-Digitalformat übertragen.
7. Abschalt schutzfunktion. Der Temperatursensor DS18B20 enthält im Inneren ein EEPROM. Die Genauigkeit der digitalen Umwandlung und die Alarmtemperatur können über das Konfigurationsregister eingestellt werden. Die Einstellungen für Auflösung und Alarmtemperatur können auch nach dem Ausschalten des DS18B20-Temperatursensors gespeichert werden.
8. Der DS18B20-Temperatursensor gibt eine 16-Bit-Binärzahl zurück, die den in diesem Moment erfassten Temperaturwert darstellt, und die oberen fünf Ziffern stehen für positiv und negativ. Wenn die oberen fünf Bits alle 1 sind, bedeutet dies, dass der zurückgegebene Temperaturwert ein negativer Wert ist. Wenn die oberen fünf Bits alle 0 sind, bedeutet dies, dass der zurückgegebene Temperaturwert ein positiver Wert ist. Die folgenden 11 Datenbits stellen den absoluten Wert der Temperatur dar. Nachdem Sie ihn in einen Dezimalwert umgewandelt haben, multiplizieren Sie ihn mit 0,0625, um den Temperaturwert zu diesem Zeitpunkt zu erhalten.
Beschreibung des Temperatursensor stifts DS18B20
Parasitärer Stromversorgung modus des Temperatursensors DS18B20:
Der parasitäre Stromversorgung modus des DS18B20-Temperatursensors ist in der folgenden Abbildung dargestellt. Im parasitären Stromversorgung modus bezieht der Temperatursensor DS18B20 Strom aus der Signalleitung: Wenn die Signalleitung hoch ist, wird die elektrische Energie im internen Kondensator gespeichert. Wenn die Signalleitung einen niedrigen Pegel hat, wird die Leistung des Kondensators verbraucht und der Kondensator (parasitäre Stromversorgung) wird aufgeladen, bis die Signalleitung einen hohen Pegel erreicht.
Vorteile der parasitären Stromversorgung:
1. Es ist keine lokale Stromversorgung erforderlich und eine Fernmessung der Temperatur ist möglich.
2. Die Temperaturmessung kann mit nur einer Signalleitung erreicht werden, was die Schaltung vereinfacht.
Nachteile der parasitären Stromversorgung:
Damit der Temperatursensor DS18B20 eine genaue Temperatur umwandlung durchführen kann, muss die Signalleitung sicherstellen, dass während der Temperatur umwandlung ausreichend Energie bereitgestellt wird. Wenn jedoch mehrere DS18B20-Temperatursensoren an derselben Signalleitung angeschlossen sind, kann der Pull-up-Widerstand allein nicht genügend Strom liefern, was dazu führt, dass der DS18B20-Temperatursensor die Temperatur nicht messen kann oder einen großen Fehler aufweist.
Daher ist die Methode der parasitären Stromversorgung nur für die Temperaturmessung mit einem einzelnen DS18B20-Temperatursensor geeignet.
DS18B20 Temperatursensor, parasitäre Stromversorgung, starker Pull-up-Stromversorgung modus:
Der starke Pull-up-Stromversorgung modus der parasitären Stromversorgung des DS18B20-Temperatursensors ist in der folgenden Abbildung dargestellt. Damit der DS18B20-Temperatursensor während des Temperaturmessvorgangs ausreichend Strom erhält, verwenden Sie einen MOSFET, um die Signalleitung direkt an VCC zu ziehen, um ausreichend Strom bereitzustellen. (Wenn es um das Kopieren oder Starten eines Temperatur umwandlung befehls geht, muss die Signalleitung innerhalb von maximal 10 μS in einen starken Pull-up-Zustand umgewandelt werden), um das Problem der unzureichenden Stromversorgung zu lösen. Der starke Pull-up-Stromversorgung modus der parasitären Stromversorgung des DS18B20-Temperatursensors eignet sich für Mehrpunkt-Temperaturmess anwendungen, erfordert jedoch eine weitere E/A-Leitung für starke Pull-up-Schaltung.
Externer Stromversorgung modus des DS18B20-Temperatursensors:
Im externen Stromversorgung modus wird die Arbeits stromversorgung des DS18B20-Temperatursensors an den VDD-Pin angeschlossen. Es besteht kein Problem eines unzureichenden Stromversorgung stroms und die Konvertierung genauigkeit kann garantiert werden. Gleichzeitig können mehrere DS18B20-Temperatursensoren an den Bus angeschlossen werden, um ein Mehrpunkt-Temperaturmesssystem zu bilden. Die externe Stromversorgung methode ist die beste Stromversorgung methode für den DS18B20-Temperatursensor: Sie arbeitet stabil und zuverlässig, verfügt über eine starke Entstörungsfähigkeit und die Schaltung ist relativ einfach.
Interner Aufbau des Temperatursensors DS18B20:
Das Innere des DS18B20-Temperatursensors besteht aus 64-Bit-ROM, Cache-Speicher, CRC-Generator, temperatur empfindlichem Gerät, Hoch- und Tieftemperatur-Trigger und Konfigurationsregister.
1. 64-Bit-ROM des DS18B20-Temperatursensors
Im DS18B20-Temperatursensor befindet sich ein 64-Bit-ROM, und die ROM-Aushärtung hat bestimmte Inhalte. Die unteren acht Bits (fest auf 28H) sind die Produkttyp-Identifikationsnummer, die nächsten 48 Bits sind die Seriennummer und die oberen acht Bits sind die vorherigen 56 Bits des zyklischen Redundanzprüfcodes.
2. Speicherzuordnung des DS18B20-Temperatursensors
Der DS18B20-Temperatursensor verfügt über 9-Byte-Cache-Speichereinheiten, wie in der folgenden Abbildung dargestellt.
3. Konfigurationsregister des DS18B20-Temperatursensors
Das höchste Bit BIT7 des Konfigurationsregisterbytes des DS18B20-Temperatursensors ist das Testmodusbit. Bei Auslieferung ab Werk ist es 0 und muss vom Benutzer nicht geändert werden. Mit BIT6 und BIT5 wird die Konvertierungsauflösung des Temperatursensors DS18B20 eingestellt. Es gibt vier Auflösungsoptionen: 9, 10, 11 und 12 Bit. Die entsprechenden Wandlungszeiten betragen: 93,73 ms, 187,5 ms, 375 ms bzw. 750 ms. Die restlichen 5 unteren Bits sind reservierte Bits (alle 1).
Die Standardeinstellungen für R0 und R1 des Temperatursensors DS18B20 sind 11. Das ist eine 12-Bit-Auflösung, d. h. 1 Bit entspricht 0,0625 Grad Celsius.
Lesen und Schreiben des Temperatursensors DS18B20
Anweisung
Der vom Temperatursensor DS18B20 umgewandelte Temperaturwert wird im 0. und 1. Byte des Hochgeschwindigkeits-Zwischenspeichers in Zwei-Byte-Komplement form gespeichert. Wenn wir also einfach nur den Temperaturwert lesen möchten, müssen wir nur das 0. und 1. Byte im temporären Register lesen.
Die einfachen Schritte zum Ablesen des Temperaturwerts sind wie folgt:
1. ROM-Vorgang überspringen.
2. Befehl zur Temperaturumrechnung senden.
3. ROM-Vorgang überspringen.
4. Senden Sie den Befehl zum Lesen der Temperatur.
5. Lesen Sie den Temperaturwert ab.
Initialisierung des Temperatursensors DS18B20
Das Master-Gerät sendet zunächst einen Low-Pegel-Impuls von 480–960 Mikrosekunden, gibt dann den Bus auf High-Pegel frei und erkennt den Bus innerhalb der folgenden 480 Mikrosekunden. Liegt ein Low-Pegel vor, bedeutet dies, dass am Bus ein DS18B20-Temperatursensor angesprochen hat. Liegt kein Low-Pegel vor, bedeutet dies, dass der Temperatursensor DS18B20 am Bus nicht reagiert.
Als Slave-Gerät erkennt der DS18B20-Temperatursensor bereits beim Einschalten 480–960 Mikrosekunden lang, ob auf dem Bus ein niedriger Pegel vorliegt. Wenn ja, warten Sie 15–60 Mikrosekunden, nachdem der Bus auf High wechselt, und ziehen Sie dann den Buspegel für 60–240 Mikrosekunden auf Low, um mit einem Impuls zu reagieren und dem Host mitzuteilen, dass das Gerät bereit ist. Wenn es nicht erkannt wird, wird es weiterhin prüfen und warten.
Schreibvorgang des Temperatursensors DS18B20:
Der Schreibzyklus beträgt mindestens 60 Mikrosekunden und maximal 120 Mikrosekunden.
Zu Beginn des Schreibzyklus zieht das Master-Gerät den Bus zunächst für 1 Mikrosekunde auf Low, um den Beginn des Schreibzyklus anzuzeigen. Wenn der Master dann eine 0 schreiben möchte, setzt er den Bus auf Low. Wenn der Master 1 schreiben möchte, setzt er den Bus für mindestens 60 Mikrosekunden bis zum Ende des Schreibzyklus auf High und gibt ihn dann für mindestens 1 Mikrosekunde auf High, damit sich der Bus erholen kann. Der DS18B20-Temperatursensor wartet 15 Mikrosekunden, nachdem er erkannt hat, dass der Bus heruntergezogen wurde, und beginnt dann mit der Abtastung des Busses von 15us auf 45us. Er ist 1, wenn der Bus während der Abtastperiode einen hohen Pegel hat, und 0, wenn der Bus während der Abtastperiode einen niedrigen Pegel hat.
Das Timing des Lesedatenvorgangs ist ebenfalls in zwei Prozesse unterteilt: das Timing des Lesens 0 und das Timing des Lesens 1.
Beim Lesezyklus zieht das Master-Gerät den Einzelbus für 1 Mikrosekunde auf Low und gibt dann den Einzelbus auf einen High-Pegel frei, damit der DS18B20-Temperatursensor Daten an den Einzelbus übertragen kann. Als Slave-DS18B20-Temperatursensor beginnt er mit dem Senden von Daten, nachdem er erkannt hat, dass der Bus 1 Mikrosekunde lang auf Low gezogen ist. Wenn Sie 0 senden möchten, ziehen Sie den Bus bis zum Ende des Lesezyklus auf Low. Wenn Sie 1 senden möchten, geben Sie den Bus auf High-Pegel frei.
Das Master-Gerät zieht den Bus zunächst für 1 Mikrosekunde auf Low, gibt dann den Bus frei und schließt dann die Abtastung und Erkennung des Busses innerhalb von 15 Mikrosekunden ab, einschließlich der letzten 1 Mikrosekunde, in der der Buspegel auf Low gezogen wurde. Wenn der Bus während der Abtastperiode einen niedrigen Pegel hat, wird er als 0 bestätigt. Wenn der Bus während des Abtastzeitraums hoch ist, wird er als 1 bestätigt. Es dauert mindestens 60 Mikrosekunden, um einen Lese-Timing-Vorgang abzuschließen.
DS18B20 Temperatursensor-Anwendung schaltung
Einzelne DS18B20-Verdrahtung methode: VDD ist mit der Stromversorgung verbunden, DQ ist mit dem Mikrocontroller-Pin verbunden, ein Pull-up-Widerstand ist hinzugefügt und GND ist mit Masse verbunden. Beachten Sie, dass dieser Pull-up-Widerstand erforderlich ist, d. h. der DQ-Pin muss über einen Pull-up-Widerstand verfügen.
Eine Routine für den Temperatursensor DS18B20
/******************DS18B20 misst die Temperatur******************
*MCU-Modell: STC89C52RC
*Entwicklungsumgebung: KEIL
*Funktion: DS18B20 misst die Temperatur und zeigt sie in der digitalen Röhre an
***************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS = P2^2;
sbit LE1 = P2^6;
sbit LE2 = P2^7;
uint temp;
uchar flag1;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
Void-Verzögerung (uint count)
{
uint i;
while(count)
{
ich=200;
while(i>0)
ich--;
zählen--;
}
}
void dsreset(void)
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
Bit tmpreadbit(void)
{
uint i;
Bit dat;
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
Rückkehr (dat);
}
uchar tmread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmpwritebyte(uchar dat)
{
uint i;
uchar j;
Bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //schreibe 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
anders
{
DS=0;
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void tmpchange(void)
{
dsreset();
Verzögerung(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}
uinttmp()
{
float tt;
uchar a,b;
dsreset();
Verzögerung(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmread();
b=tmread();
temp=b;
temp<<=8;
temp=temp|a;
tt=temp*0,0625;
temp=tt*10+0,5;
Rücklauftemperatur;
}
Leere Anzeige (uint temp)
{
uchar A1,A2,A2t,A3;
A1=Temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
LE1=0;
P0=table[A1]; // Hunderterstellen anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfe;
LE2=1;
LE2=0;
Verzögerung(1);
LE1=0;
P0=table1[A2]; //Zehnerstelle anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfd;
LE2=1;
LE2=0;
Verzögerung(1);
LE1=0;
P0=table[A3]; //Einheitenziffer anzeigen
LE1=1;
LE1=0;
LE2=0;
P0=0xfb;
LE2=1;
LE2=0;
Verzögerung(1);
}
void main()
{
uchar a;
Tun
{
tmpchange();
for(a=10;a>0;a--)
{
display(tmp());
}
} while(1);
}