Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - DS1620 misst die Temperatur

Temperaturmessungen vor 30 Jahren wurden häufig noch mit Quecksilberthermometern durchgeführt.  Heute wird das mit hochsensiblen Temperatursensoren gemacht. Wie das geschieht, auf was man achten muss und wie solche kleinen elektronischen Helfer arbeiten, das erfahrt ihr hier.

2 - Synchrone serielle Datenübertragung

Wie der Titel bereits andeutet, besteht ein 3-Leiter Bus aus drei Datenleitungen:

  • Taktleitung (CLK)
  • Datenleitung (DQ)
  • Enableleitung. (RST)

Die serielle synchrone Datenübertragung über einen 3-Leiter Bus bedeutet, die Bits werden nacheinander durch eine Leitung geschoben ohne ein Protokoll. Dabei fungiert ein Master als Taktgeber und ein Empfänger als Slave.

 

Für unseren Versuchsaufbau wird die BASIC Stamp den Master geben, sie ist für den Takt zuständig und der DS1620 Baustein den Slave. Mit der ersten steigenden CLK-Flanke des Masters wird ein Bit auf die DATA-Leitung geschaltet und mit der zweiten liest der Slave dieses Bit in sein Schieberegister ein. Der Master synchronisiert den Slave.

 

Die Bits werden eines nach dem anderen übertragen, das niedrigwertigste oder höchstwertige Bit – je nach Voreinstellung – zuerst. Um ein Byte zu übertragen werden dann acht Bits nacheinander – eben seriell – übertragen; dazu sind 8 CLK Takte notwendig.

Ein Taktzyklus besteht aus einer fallenden und einer steigenden Flanke. Daten werden vom Sensor mit steigender Flanke übernommen, während die Ausgabe mit der fallenden bis hin zur steigenden Flanke erfolgt.

Ingenieure entnehmen das Zeitverhalten einer solchen seriellen synchronen Datenübertragung einem sogenannten Timing-Diagramm (Abb. 1). Auf das werden wir später noch etwas genauer eingehen.

Abbildung 1 - Timingdiagramm

Der Baustein DS1620

Das DS1620 IC ist in einem 8-Pin DIP Gehäuse untergebracht.

Anschlussbelegung

Aus dem Datenblatt des Bausteins ergeben sich die Anschlussdaten.

DQ                  3-Draht Datenein-/ausgang

CLK                3-Draht Clockeingang

RST                 3-Draht Reset Input

GND                Ground

TCOM             Triggerschwelle obere-untere Temperatur

TLOW             Triggerschwelle untere Temperatur

THIGH            Triggerschwelle obere Temperatur

VDD                Spannungsversorgung +3V … +5V

Abbildung 2 - Pinbelegung

3 - Beschreibung des DS1620

Das DS1620 ist ein Digitalthermometer, das Temperaturen mit 9-Bit im 2-er Komplement aufzeichnet. Die Einstellungen und das Auslesen der Temperaturwerte erfolgt über eine einfache 3-Draht Datenleitung (was ein 2-er Komplement ist, erfährst du im Internet unter genau diesem Begriff).

Die gemessene Temperatur entspricht der Temperatur des Bausteins. Zusätzlich kann er als Thermostat eingesetzt werden. Dazu verfügt er über zwei Alarmflags im Konfigurations-/Statusregister.

Abbildung 3 - Konfigurations-/Statusregister
  • THF   geht auf 1, sobald die vom DS1620 gemessene Temperatur über oder gleich der eingegebenen Vergleichstemperatur TH liegt.
  • TLF    geht auf 1, sobald die DS1620 Temperatur geringer oder gleich der eingegebenen Vergleichstemperatur TL ist.

Die Bedeutung der anderen Flags:

  • DONE   geht auf 1, wenn Umwandlung abgeschlossen und ist 0 während der Umwandlung.
  • NVB   (nonvolatile memory busy flag)  geht auf 0, wenn der nichtflüchtige Speicher nicht benutzt wird und auf 1, wenn auf ihn zugegriffen wird.
  • CPU   wenn auf 1 gesetzt, tauscht der DS1620 seine gemessenen Daten mit einer CPU aus, bei 0 nicht. Die Werkseinstellung ist 0.
  • 1SHOT  wenn auf 1 gesetzt, dann wird nur eine Temperaturmessung durchgeführt, sobald der Befehl Start Convert T (EEh oder 238d) gegeben wird; bei 0 wird die Temperatur ständig gemessen.

Die Thermostat-Vergleichstemperaturen werden in einem nicht flüchtigen Speicher abgelegt.

Wer es genauer wissen möchte, sollte unbedingt in das Datenblatt zum Baustein schauen. Dort sind alle notwendigen Informationen zum Betreiben des IC enthalten.

Für den DS1620 gibt es nach Abb. 3 vier unterschiedliche Betriebsarten:

  • 0 - ohne CPU, ständige Messungen.
  • 1 - ohne CPU, nur eine Messung und abwarten, bis neue Messung angefordert wird.
  • 2 - mit CPU, ständig messen.
  • 3 - mit CPU, nur eine Messung und abwarten, bis neue Messung angefordert wird.

Der DS1620 Baustein verfügt über die Register:

Registername Größe Speichertyp Registerinhalt

Temperature

read only

9 Bit SRAM gemessene Temperatur (als 2-er Komplement)

TH

read/write

9 Bit EEPROM

oberer Interventionswert (als 2-er Komplement)

Werkseinstellung: +15°C (0 0001 1110)

TL

read/write

9 Bit EEPROM

unterer Interventionswert (als 2-er Komplement)

Werkseinstellung: +10°C (0 0001 0100)

und die Befehle

Abbildung 4 - Befehle des DS1620

4 - 3-Draht Kommunikation

Ein 3-Draht Bus setzt sich aus drei Signalen zusammen.

  • RST (reset)
  • CLK (clock)  Taktzyklus
  • DQ (data)

 

Jede Kommunikation mit dem DS1620 muss mit einem Flankenanstieg von 0 auf 1 an RST eingeleitet werden und bleibt – solange die 1 anliegt - bestehen. Entsprechend wird die Kommunikation beendet, sobald RST von 1 auf 0 geht.

Ein Taktzyklus ist eine Sequenz von fallenden und steigenden Flanken. Bei Dateneingaben muss die Dateninformation während der steigenden Flanke eines Zyklus vorliegen.

 

Mit all diesem Wissen gehen wir jetzt daran, die im DS1620 gespeicherten Werte THF und TLF und das Konfigurations-/Statusregister auszulesen.

5 - Konfigurationswerte auslesen

Material

1x  IC DS1620

1x  Kondensator 0,1µF

1x  Widerstand 1kOhm

4x  Steckdraht
Aufgaben
  • Übertrage das Programm DS1620_1.bs2 in den BASIC Stamp Editor und speichere es ab.
  • Starte das Programm.

Schaltungsaufbau und Schaltungsskizze

Schaltungsaufbau mit DS1620 - Courtesy of Parallax Inc.

Programm ds1620_1.bs2

Abbildung 5 - Terminalausgabe des Konfigurations-/Statusregisters

Was passiert in dem Programm?

Zeile 3

Die Variable x vom Typ Byte wird angelegt.

 

Zeile 9

P13 ist mit dem RST-Eingang von DS1620 verbunden und wird auf 1 gesetzt. Die Kommunikation zwischen DS1620 und der BS beginnt.

 

 

Zeile 10

Ganz allgemein überträgt die Funktion SHIFTOUT Daten an ein synchrones serielles Gerät; hier im Speziellen von der BASIC Stamp an das IC DS1620.

 

Mit Hilfe des Befehls

SHIFTOUT Dpin, Cpin, Mode, [OutputData1(\Bits) (,OutputData2(\Bits)) …]

mit den Parametern

Dpin

Variable, Konstante, Ausdruck(0-15), definiert den I/O Pin, der mit dem synchronen seriellen Dateneingang eines Gerätes verbunden ist.

Cpin

Variable, Konstante, Ausdruck(0-15), definiert den I/O Pin, der mit dem synchronen seriellen CLK-Eingang eines Gerätes verbunden ist.

Mode

Variable, Konstante, Ausdruck(0-1) oder einer von zwei vordefinierten Schlüsselwörtern (LSBFIRST, MSBFIRST), die festlegen, ob die Daten mit dem LSB (least significant bit) oder dem MSB (most significant bit) beginnend übertragen werden.

OutputData

Variable, Konstante, Ausdruck, enthält die Daten, die übertragen werden sollen.

Bits

Optionale Variable, Konstante, Ausdruck(1-16), die festlegt, wie viele Bits mit SHIFTOUT übertragen werden. Ohne Vorgabe werden immer 8 Bit übertragen.

überträgt die BASIC Stamp das Byte 172 (ACh) an den IC-Baustein DS1620.

 

Im Datenblatt des Herstellers ist das der Code für den Befehl

  • Read Config (Abb. 4)
    

Nach Aufruf dieses Befehls werden in 8 Taktzyklen die Werte des Registers ausgelesen.

 

Zeile 11

Der Befehl

SHIFTIN  Dpin, Cpin, Mode, [Variable {\Bit}{, Variable {\Bit}...}]

mit den Parametern

Dpin

Variable, Konstante, Ausdruck (0 - 15), verbunden mit dem Ausgang des Gerätes. Der Pin wird auf Eingang gesetzt.

Cpin

Variable, Konstante, Ausdruck (0 -15), verbunden mit dem CLK-Eingang des Gerätes. Der Pin wird als Ausgang gesetzt.

Mode

Variable, Konstante, Ausdruck (0 - 3) oder einer von vier vorgegebenen Ausdrücken, der festlegt, in welcher Reihenfolge die Datenbits verschoben werden.

  • MSBPRE 0   Data im MSB-first Modus, sample-bit vor CLK-Puls
    LSBPRE 1   Data im LSB-first Modus, sample-bit vor CLK Puls
    MSBPOST 2  Data im MSB-first Modus, sample-bit nach CLK Puls
    LSBPOST 3  Date im LSB-first Modus, sample-bit nach CLK Puls
    

Variable

Variable, in der einlaufende Datenbits gespeichert werden.

Bit

Optionale Variable, Konstante, Ausdruck (1 - 16), die festleg, wie viele Bits SHIFTIN einlesen soll. Wird kein Wert angegeben, werden 8 Bit eingelesen.

sorgt dafür, dass die Daten an ein synchrones serielles Gerät, die BASIC Stamp, übertragen und dort im Speicher x abgelegt werden.

 

Zeile 12

Der CLK-Eingang des DS1620 wird auf 0 gesetzt und die Kommunikation mit der BS beendet.

Die Belegung des Konfigurations-/Statusregisters in Abb. 5 zeigt, dass das 8., 4. und 2. Bit auf 1 gesetzt sind. Das heißt, die Flags

  • DONE
  • 1
  • CPU

sind auf 1 gesetzt. Da keine Umwandlung erfolgt, ist DONE auf 1, Bit 3 ist immer auf 1 gesetzt und CPU ist 0, da kein Datenaustausch mit der CPU (der BASIC Stamp) erfolgt. Dies ist die  Werkseinstellung.

Wie man einen Wert setzt oder zurücksetzt sehen wir in der folgenden Übung.

6 - Einen Konfigurationswert setzen

In der folgenden Übung wird der DS1620 Sensor so eingestellt, dass er permanent Temperaturwerte misst und bereitstellt. Nach Abb. 3 gibt es vier unterschiedliche Einstellungsmöglichkeiten für die Messaufnahme.

Einstellung 2 schaltet den Sensor in einen Modus, in dem er permanent Temperaturwerte misst und bei entsprechendem Befehl übermittelt er diese an die CPU. Bit1 (CPU) im Konfigurations-/ Steuerregister muss dazu auf 1 gesetzt werden.

Wir gehen wieder so vor wie in Übung 1. Die Kommunikation mit dem Baustein erfolgt in drei Schritten:

  • Setze den RST-Eingang (P13) auf HIGH.
  • Mit dem SHIFTOUT-Befehl werden die Daten automatisiert an den DS1620 übertragen.
  • Setze den RST-Eingang zurück auf LOW.

Der Schaltungsaufbau aus Übung 1 wird übernommen.

Aufgaben
  • Übertrage das Programm DS1620_2.bs2 in den Editor und speichere es ab.
  • Starte das Programm und überzeuge dich, dass Bit1 jetzt auf 1 gesetzt ist.
Programm DS1620_2.bs2 mit Terminalausgabe

Wie arbeitet das Programm DS1620_2.bs2?

Das Zeitdiagramm aus Abb. 1 - hier noch einmal dargestellt - zeigt alle wesentlichen Abläufe:

  • P13 (RST) startet den Datenaustausch mit einem Sprung von LOW (0V) auf HIGH (5V). Er endet, wenn P13 von 5V zurück auf 0V fällt (siehe Abb.).
  • P14 ist der Taktgeber; er gibt insgesamt 16 Taktimpulse zu je 8 Takten pro Gruppe aus.
  • P15 ist der Datenlieferant von Nullen und Einsen, die mit dem Taktgeber synchronisiert sind. In der ersten Gruppe wird die Zahl 12 (binär: 00001100), in der zweiten die Zahl 2 übertragen.

Das Argument LSBFIRST im Befehl SHIFTOUT besagt, dass das niedrigwertigste Bit zuerst übertragen wird. Die gesamte Transaktion von 16 Taktimpulsen dauert nur etwa eine Millisekunde oder 0,001s und sie läuft vollautomatisch unter dem Befehl SHIFTOUT ab.

 

Da die Datenübertragung synchronisiert ist mit dem BASIC Stamp Taktgeber, nennt man diesen Vorgang auch synchrone serielle Datenübertragung. Dabei agiert die BASIC Stamp als sogenannter  Master, der den Takt und die Befehle vorgibt und das IC DS1620 als Slave. 

Jetzt haben wir alles zusammen, um uns endlich an eine Temperaturmessung heranzuwagen.

7 - Raumtemperatur messen

Der Schaltungsaufbau aus Übung 1 wird übernommen.

Aufgaben
  • Übertrage das Programm DS1620_3.bs2 in den Editor und speichere es ab.
  • Starte das Programm und überzeuge dich, dass die Temperaturwerte alle 5s im Debug Terminal ausgegeben werden.
  • Halte deinen Finger oben auf das Gehäuse des DS1620. Die Temperatur sollte steigen.
  • Halte das Board in die Sonne oder direkt unter eine Lampe und beobachte über einen Zeitraum von 5 Minuten, wie sich die Temperatur mit der Zeit verändert. Notiere alle 15s den Messwert.
  • Stelle das Board in den Schatten und beobachte die langsam fallenden Temperaturwerte. Notiere auch hier im Abstand von 15s die Messwerte.
  • Messe die Temperatur zwischen Tür und Rahmen einer wenig geöffneten Tür. Halte das Board zunächst ganz oben in den Rahmen, notiere den Wert.
  • Halte das Board ganz unten in den Rahmen, notiere den Wert.
  • Bestimme weitere Temperaturen nach eigener Wahl und notiere die Werte. Schreibe vorher auf, wo und wie du die Temperatur misst.

Das Programm DS1620_3.bs2

Programm DS1620_3.bs2 - Temperaturmessung
Terminalausgabe der Temperaturmessung

Wie arbeitet das Programm DS1620_3.bs2?

Zeilen 9 und 11

Die Verbindung des Mikrocontrollers zu seiner Außenwelt besteht über die Pins, die entweder als Eingang oder als Ausgang geschaltet sein können. Ausgänge wiederum können HIGH oder LOW sein. Die Befehle OUT und DIR kennen wir bereits aus den ersten Übungen mit PBASIC.

Die OUTS und DIRS Befehle sprechen gleichzeitig alle 16 I/O Pins P0 … P15 einer BASIC Stamp an.

Es ist guter Programmierstil, zu Beginn eines Programms alle Pins in einen bestimmten definierten Zustand zu bringen. Nach einem Reset oder Anlegen der Betriebsspannung sind alle per Werkseinstellung auf Eingang geschaltet.

Der Anwender und Programmierer, also du selbst, bist verantwortlich, dass die einzelnen Pins entsprechend ihrer Aufgabenstellung geschaltet werden. Bleibt ein Pin unbelegt, dann sollte er nicht als Eingang geschaltet sein, da dies den Controller instabil reagieren lässt und es Energie zehrend ist.

Die Befehle in Zeile 9 und 11 setzen alle Pins prinzipiell erst einmal auf Ausgang mit Pegel 0, wenn es nicht anders verlangt wird.

Zeile 13 bis 15

Gestartet wird mit einem HIGH Pegel an P13, gefolgt von einem SHIFTOUT Befehl. Über ihn wird das Byte 238 an den DS1620 gesandt und anschließend P13 wieder auf LOW gesetzt.

238 ist ein Steuerbefehl (Abb. 4) an das IC, mit der Umwandlung des Temperaturwertes in einen digitalen Code zu beginnen.

 

Zeilen 17 bis 26

Dies ist der Hauptteil des Programms. Die Temperatur wird vom DS1620 ausgelesen; dies geschieht mit HIGH Pegel an P13 und dem nachfolgenden Befehl 170 (liest Temperturwert aus Register) und überträgt ihn an die BASIC Stamp. In diesem Moment steuert der DS1620 die Datenübertragung und die BASIC Stamp führt als nächstes den SHIFTIN Befehl aus.

  • SHIFTIN 15, 14, LSBPRE, [x]
    

Die Argumente dieses Befehls sind

  • P15, über den die Datenbytes eingelesen werden
    
  • P14, ist bei der BASIC Stamp der CLK Ausgang
    
  • LSBPRE, die Bytes werden mit dem niedrigwertigsten Bit (lsb) eingelesen.
    
  • [x], Name der Variablen, in der die Daten abgelegt werden.
    

P15 ist in diesem Befehl als Eingang geschaltet; beim SHIFTOUT Befehl war er noch Ausgang. Die BASIC Stamp ist damit bereit vom DS1620 Modul Daten zu empfangen. Dies lässt sich auch im folgenden Zeitdiagramm ablesen. Die BS2 bleibt der Master und das DS1620 der Slave.

Zeitdiagramm für den SHIFTIN Befehl

Zeilen 23 bis 25

Bei einer Temperatur von 25°C überträgt das DS1620 Modul einen Wert von 50, oder binär 00110010. Das Temperaturmodul gibt immer einen Wert, der doppelt so groß wie die gemessene Temperatur ist, aus. Damit wird klar, dass jeder Temperaturschritt des DS1620 0,5°C entspricht. Das ist die höchste Auflösung, die dieses Temperaturmodul bieten kann. Mit

  • grdC = x / 2
    

wird der Rohwert in einen Temperaturwert umgewandelt und anschließend im Terminal ausgegeben. Die BASIC Stamp benutzt hier eine integer-Arithmetik, dass heißt, dass keinen Kommazahlen ausgegeben werden. Alle Stellen hinter dem Komma werden ohne Rundung gelöscht.

Aufgabe
  • Ändere das bestehende Programm so ab, dass alle Temperaturwerte, also auch die halbzahligen Werte, im Terminal angezeigt werden.
  • Nach den Daten aus dem Datenblatt des DS1620 können Temperaturen bis -55°C gemessen werden. Mit dem vorliegenden Programm lassen sich negative Temperaturen leider nicht anzeigen; der Messbereich ist softwaremäßig auf positive Temperaturen eingeschränkt, einschließlich 0°C.
    Bei einer Temperatur von -1°C, wird im Terminal 127 angezeigt. Will man auch negative Temperaturen anzeigen lassen, muss das 9. Bit untersucht werden. Ist es 1, liegen negative Temperaturwerte vor, ist es 0 entsprechend positive. Schreibe ein Programm, dass auch negative Temperaturwerte im Terminal anzeigt. Nimm auch das Datenblatt als Informationsquelle zu Hilfe.
Druckversion | Sitemap
© Reinhard Rahner - Gettorf