Themen / Index

tsonewir - Demo für Unterprogramme lq/tsonewi - Temperaturwert von mehreren DS18S20 an einem Port abholen

Content (automatic)

Testprogramm

Ich habe 2 Test / Demoprogramme. Dieses (tsonewir.cpp) und onewire.cpp .
In onewire.cpp sind alle Unterprogramme enthalten.
tsonewir.cpp dient dazu, einen DS1820 auszulesen  und die Unterprogramme in lq/tsonewi.cpp vorzutesten.

Der Dialog läuft durch die serielle Schnittstelle RS232, 9600 Baud.

AVR: Dieses Programm läuft auf dem ../../../etronik/s/atm32b.htm. Der Sensor DS18S20 wird angeschlossen an PORTD, PD3.
PC/LPT: Der Sensor wird an ../../../etronik/s/pcpartwi.htm angeschlossen, an GND - SDL - +5V

Befehl i : darf nicht anzeigen: "Lese ROM FEHLER:Reset(): Leitung wird nicht Low  Bits gelesen:0  dtick0:0" - Das weist darauf hin, dass der Sensor nicht geantwortet hat.

? Hilfe anzeigen

Durch Taste ? wird die Hilfe angezeigt:

? - Hilfe anzeigen
z - Stackverwendung
i - Lese ROM vom einzigen DS1820
k - Kopiere ROMCode von Puffer i nach ...
e - Eingeben ROMCode in Puffer i
r - Zeige ROMCodes im Speicher
s - Schreibe ROMCode in EEPROM
l - Lese ROMCode von EEPROM
t - Temperatur holen
 
 onewire 2014-08-18


z - Stapelspeicherverwendung anzeigen

DIA: Stapel frei =39 verwendet =41 von =80

Also kann der Entwickler den Speicherplatzbedarf optimieren:

Anstatt
kann sein
#define NSTKDIA 80
#define NSTKDIA 45

Dann ist immer noch 4 Worte Reserve

i - ROM auslesen

Das geht nur, wenn nur ein Gerät angeschlossen ist.
Mit dem DS1820 von TZ:

i - Lese ROM
OK: Zahl in Puffer ist: 10 3F B0 98 01 08 00 5D


qqcrc8 10 3F B0 98 01 08 00
zeigt, dass CRC8=5D richtig ist:
D:\h\home\cc\qq>qqcrc8 10 3F B0 98 01 08 00

Daten HEX: 10 3F B0 98 01 08 00
crc8_ALGORITHMUS=1  initval=00H  res= 0x5D Zeit=1.54056us
D:\h\home\cc\qq>

Siehe hierzu: ../qq/qqcrc8.htm - Über das CRC-8-Berechnungsprogramm

Mit dem anderen DS1820 im grauen Legostein
i - Lese ROM
OK: Zahl in Puffer ist: 10 B0 92 C6 02 08 00 C1

Hierbei bedeutet Laut (1), Seite 6:
0=10 : DS18S20 1-Wire familiy Code, 10 sind Temperatursensoren
1...6 : Seriennummer

qqcrc8 10 B0 92 C6 02 08 00
zeigt
D:\h\home\cc\qq>qqcrc8 10 B0 92 C6 02 08 00

Daten HEX: 10 B0 92 C6 02 08 00
crc8_ALGORITHMUS=1  initval=00H  res= 0xC1 Zeit=1.50826us
D:\h\home\cc\qq>


Die Bedeutung jedes Bytes ist im Handbuch des DS1820 dokumentiert. - Siehe ../../../../etronik/sensor/DS18S20.pdf

k - Kopiere ROMCode von Puffer i nach ...

KJopiert einen durch Befehl i eingelesenen oder durch Befehl e eingetippten ROMCode in einen der 4 Speicher.
k Kopiere DS1820 Seriennummer nach Kanal (255=der einzige)?0  10 3F B0 98 01 08
00 5D


e - Eingeben des ROMCodes für Sensor n

e - Eingeben einer DS1820 Seriennummer 0  :?10  1  :?45  2  :?44  3  :?28  4  :?
12  5  :?43  6  :?24  7  :?22

Der eingegeben ROMCode kann dann durch den Befehl k in den ROMCode n gespeichert werden.

l - ROMCodes vom EEPROM zurücklesen

Liest die Seriennummern aus dem EEPROM zurück, die vorher mit Befehl k in das EEPROM gespeichert wurden.
l - ROMCodes aus dem EEPROM
Kanal0 10 3F B0 98 01 08 00 5D 10
Kanal1 10 B0 92 C6 02 08 00 C1 00
Kanal2 00 00 00 00 00 00 00 00 00
Kanal3 00 00 00 00 00 00 00 00 00



s - ROMCodes in das EEPROM speichern

Damit werden alle ROMCodes, die mit Befehl r angezeigt werden können, in das EEPROM dauerhaft gespeichert.
s - ROMCodes in das EEPROM

r - Anzeige der ROMCodes (Seriennummern)

Es werden die ROMCodes jedes Sensors angezeigt. Diese wurden mal mit dem Befehl i ausgelesen und durch Befehl k in einen der EEPROM-Speicher für Seriennummern gespeichert.

r - Zeige ROMCode im Speicher
Kanal0 10 3F B0 98 01 08 00 5D 10
Kanal1 10 B0 92 C6 02 08 00 C1 00
Kanal2 00 00 00 00 00 00 00 00 00
Kanal3 00 00 00 00 00 00 00 00 00


t - Hole Temperatur

Nach dem Befehl t muss die Kanalnummer eingegeben werden (0...3) und mit Enter abgeschlossen werden.
Danach wird das Unterprogramm TSOneWire::Temperatur(i); aufgerufen, das die Temperatur einliest.
Wenn nur ein einziger DS1820 angeschlossen ist, dann kann als Kanalnummer 255 eingegeben werden. Dann ist die Seriennummer egal.

t - Temperatur  Kanal (255=der einzige)?0
Temperatur:23.0grdC


t - Temperatur  Kanal (255=der einzige)?1
Temperatur:33.5grdC



Einrichten von 2 (oder mehreren) Sensoren

Ersten Sensor, Sensor 0 anstecken.
Eingeben i - Damit wird der ROMCode eingelesen
Eingeben k0 - Speichern nach 0
Ersten Sensor, Sensor 0 abziehen.
Ersten Sensor, Sensor 1 anstecken.
Eingeben i - Damit wird der ROMCode eingelesen
Eingeben k1 - Speichern nach 1
Eingeben s - Dauerhaft im EEPROM speichern

Anzeige:

i - Lese ROM
OK: Zahl in Puffer ist: 10 3F B0 98 01 08 00 5D FF

k Kopiere DS1820 Seriennummer nach Kanal (255=der einzige)?0  10 3F B0 98 01 08
00 5D

i - Lese ROM
OK: Zahl in Puffer ist: 10 B0 92 C6 02 08 00 C1 FF

k Kopiere DS1820 Seriennummer nach Kanal (255=der einzige)?1  10 B0 92 C6 02 08
00 C1

s - ROMCodes in das EEPROM


Auslesen von 2 Aufnehmern

Hierzu muss im ROMCode-Speicher, der mit dem Befehl r angezeigt werden kann, die Seriennummern von bis zu 4 Sensoren gespeichert sein. Etwa durch Befehl l laden vom EEPROM in den Arbeitsspeicher.

 onewire 2014-06-28 17:23
l - ROMCodes aus dem EEPROM
Kanal0 10 3F B0 98 01 08 00 5D 10
Kanal1 10 B0 92 C6 02 08 00 C1 00
Kanal2 00 00 00 00 00 00 00 00 00
Kanal3 00 00 00 00 00 00 00 00 00

t - Temperatur  Kanal (255=der einzige)?0
Temperatur:22.5grdC


t - Temperatur  Kanal (255=der einzige)?1
Temperatur:30.0grdC

 

Fehlermeldungen und Ursachen

t - Temperatur  Kanal (255=der einzige)?0  TSOneWire::fehler:Reset(): Leitung wird nicht Low
Gar kein Sensor ist angeschlossen
i - Lese ROM TSOnewire::fehler:Reset(): Leitung am Ende bleibt Low
Der 4.7 kOhm Pull-Up-Widerstand fehlt.

Siehe auch

../lq/tsonewi.htm - Die Unterprogramme / die Klasse
../lq/tsonewi.htm#fehler - Fehlermeldungen und Abhilfe
../../doxygen/ts/html/tsonewir_8cpp.html - DOXYGEN
../../../../etronik/sensor/DS18S20.pdf - Datenblatt des Sensors
../../../../etronik/sensor/ds18S20.htm - Meine Notizen zum Sensor
../../../etronik/s/atm32b.htm -
../sf/modone_n.htm - 8 mal DS1820 auslesen mit MODBUS-Schnittstelle

Ähnliche Programme

onewire.htm - Demoprogramm mit eingebauten Treibern
onewire2.htm - onewire2 - Temperaturwert abholen (von Peter Dannegger)
../sf/tsonew_n.htm - Hauptprogramm : Abfrage von 8 Sensoren
tsonew_n.htm -

WWW

http://github.com/smurfix/owslave - Das ist ein Slave !
http://www.tm3d.de/index.php/1-wire-barometerm - Noch ein Slave - für Barometer
http://milesburton.com/Dallas_Temperature_Control_Library -
http://tushev.org/articles/arduino/item/52-how-it-works-ds18b20-and-arduino - Messen dauert bis zu 750 ms

Google

quelle one wire C

1-Wire DS18S20