Themen / Index

onewire - Temperaturwert abholen

Content (automatic)

Testprogramm


Dieses Testprogramm dient dazu, einen DS1820 auszulesen  und die Unterprogramme vorzutesten.
Der Test der Unterprogramme ../lq/tsonewi.htm erfolgt durch tsonewir.htm.

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, PD6.
PC/LPT: geht nicht, war aber so gedacht: Der Sensor wird an ../../../etronik/s/pcpartwi.htm angeschlossen, an GND - SCL - +5V
Befehl 0 : Anzeige
0 - Setze 1
0:0: x-> 1 nach 8 Ticks 0.??????
0.1: 1->0 nach 11935 Ticks 0.????? FEHLER:0.1: trotz Ausgabe 0 kommt Rueckmeldung 1  Bits gelesen:0  stick0:00.??????
Ursache: Es gibt keine Rückmeldung D0 invert -> I4


Überprüfung:
Befehl 0 : muss schon ohne angeschlossenen Sensor anzeigen:
0 - Setze 1
0:0: x-> 1 nach 8 Ticks 0.??????
0.1: 1->0 nach 9 Ticks
....

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

 onewire 2014-06-28 17:23? - Hilfe anzeigen
z - Stackverwendung
i - Lese ROM
l - Lese von Scratchpad
r - Reize variabel und Lese
s - Schreibe in Scratchpad
p - Zeige PORTD / PIND
t - Temperatur holen
0 - Zeige Ausgabe-Eingang-Verzoegerung
1 - Spiele mit kom2 nach 0xCC
 
 onewire 2014-06-28 17:23


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.
durch i - holezeige8() werden 9 Bytes eingelesen, obwohl nur 8 Bytes gelesen werden dürfen. Deswegen wird als 9. Byte immer FF abgezeigt.

Mit dem DS1820 von TZ:

i - Lese ROM
Geholt wurde: 10 3F B0 98 01 08 00 5D FF  Bits gelesen:72  dtick0:100.000007s



qqcrc8 10 3F B0 98 01 08 00
zeigt, dass CRC5D 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>



Mit dem DS1820 in greuen LEGO-4er mit den 3 Löchern:
i - Lese ROM
Geholt wurde: 10 B0 92 C6 02 08 00 C1 FF  Bits gelesen:72  dtick0:159=0.000010s

Hierbei bedeutet laut (1), Seite 6:
10 : DS18S20 1-Wire familiy Code
1...6 : Seriennummer
C1; - Die CRC, kann auch mit qqcrc8 berechnet werden.
FF : gibt es gar nicht

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>



Siehe hierzu: ../qq/qqcrc8.htm und ../lq/crc8.htm

l - 8 Bytes vom "Scratchpad hereinlesen"


l - Lese von Scratchpad
Geholt wurde: 2F 00 4B 46 FF FF 05 10 F1  Bits gelesen:72  dtick0:100.000007s  reset_dt416 Ticks 0.000026 s  reset_dt2255 Ticks 0.000141 s



Hierbei is in Byte 0 und 1 die Temperatur, Einheit 1/2 grad C

r - 2 Bytes hinsenden und Antwort anzeigen

Es mag hilfreich sein, hier Kommandos vorzugeben:
cc b8

r - Reize und Lese
CC 33 - Ueberspringe ROM
BE 7D - Schmierspeicher holen
55 AA - Waehle ROM aus
48 12 - Schmierspeicher 2 und 3 sichern nach EEPROM
B8 1D - Schmierspeicher 2 und 3 von EEPROM wieder holen
4E 72 - Bytes 2 und 3 des Schmierspeichers veraendern
B4 2D - Spannungsversorgung abfragen
44 22 - Temperatur erfassen
F0 0F - Suche Geraet Vorkommando 1 ?cc  Vorkommando 2 ?be
Geholt wurde: 2F 00 4B 46 FF FF 05 10 F1  Bits gelesen:72  dtick0:100.000007s  reset_dt416 Ticks 0.000026 s  reset_dt2255 Ticks 0.000141 s



s - Schreibe 2 Bytes


Geht nicht, weil nur ein Byte abgefragt und geschrieben wird.

p - Zeige das Port D an

p - PIND=41 PORTD=40 DDRD=FF


t - Hole Temperatur


Erst eine Umwandlung starten,
Dann alle 9 Bytes holen.
Dann die Temperatur in °C anzeigen:
t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 2F 00 4B 46 FF FF 05 10 F1  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:23.5grdC


Siehe 002F = 47, 47 / 2 = 23.5, 
Hinweis: DIe Auflösung könnte durch Byte 6 und 7 (hier 05 und 10, also 5 und 16) vergrößert werden: etwa T = T + 0.5 * b6/(b7+1) oder  T = T + 0.5 * (b7-b6)/(b7+1) oder   T = T + 0.5 * (b7-b6)/b7 (Siehe Datenblatt)

t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 34 00 4B 46 FF FF 0D 10 3C  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:26.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 34 00 4B 46 FF FF 0E 10 69  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:26.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 34 00 4B 46 FF FF 0F 10 AD  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:26.0grdC

CRC-test mit qqcrc8 34 00 4B 46 FF FF 0F 10  berechnet AD

t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 02 10 F4  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


CRC-test mit qqcrc8 33 00 4B 46 FF FF 02 10  berechnet F4

t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 02 10 F4  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 04 10 5E  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 06 10 CF  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 07 10 0B  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 33 00 4B 46 FF FF 08 10 13  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0A 10 C1  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0B 10 05  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0C 10 6B  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0C 10 6B  Bits gelesen:72  dtick0:100.000007s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0C 10 6B  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0D 10 AF  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 0E 10 FA  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 32 00 4B 46 FF FF 10 10 CA  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:25.0grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 31 00 4B 46 FF FF 01 10 27  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:24.5grdC


t - Temperatur
Geholt wurde: 00 00 00 00 00 00 00 00 00  Bits gelesen:72  dtick0:159=0.000010s
Geholt wurde: 31 00 4B 46 FF FF 03 10 B6  Bits gelesen:72  dtick0:159=0.000010s
Temperatur:24.5grdC



Siehe: Register 6 kann die Anzeige um 3 Bits erweitern:
T = int(T) - r6/r7
CRC-test mit qqcrc8 34 00 4B 46 FF FF 0F 10  berechnet AD

Entwicklungsproblematik 2014-06-28


Nur CC 64 liefert FE FF FF FF FF FF FF FF FF, alle anderen Reizungen liefern FF FF FF FF FF FF FF FF FF.
Ursache Master sendet beim Abfragen zu lange 0 aus,
Fehlerhaft
besser

delaytick( sectotick( 0.000008 ) );    // 1...unendlich
SETZE0 ;        // Sendeaufforderung
delaytick( sectotick( 0.000002 ) );    // 2  us

PASSIV ;
delaytick( sectotick( 0.000015 ) );    // 15...60 us


delaytick( sectotick( 0.000008 ) );    // 1...unendlich
SETZE0 ;        // Sendeaufforderung
delaytick( sectotick( 0.000002 ) );    // 2 us

PASSIV ;
delaytick( sectotick( 0.000003 ) );    // 3 us




Fehlermeldungen und Ursachen



FEHLER:Reset(): Leitung am Ende bleibt low
Der Pull-Up-Widerstand fehlt
reset_dt52 Ticks 0.000026 s  reset_dt282 Ticks 0.000141 s



Versionen

Speicherbedarf (suche nach _etext: in der .map-Datei)

Hinweis: Atmega32 ROMmax = 32K = 0x8000 RAMmax= 2048 = 0x800
Hinweis: ATMega8 oder ATMega8535 ROMmax = 8K = 0x2000
Hinweis: AT90S2313 ROMmax = 2KB = 0x0800 RAMmax=128B
Hinweis: ATMega48 ROMmax = 4KB = 0x1000 RAMmax=512B
Hinweis: ATMega88 ROMmax = 8KB = 0x2000 RAMmax=1024B
Hinweis: ATMega168 ROMmax = 16KB = 0x4000 RAMmax=1024B
Version
Prog
Neu in dieser Version
20150616
ROM: 8372 (20B4H), RAM: 302 (12EH)
gcc4.7.2 auf HJH2011

Siehe auch

../../../../etronik/sensor/DS18S20.pdf -
../../../etronik/s/atm32b.htm -
onewire2.htm - onewire2 - Temperaturwert abholen (von Peter Dannegger)
tsonewir.htm - So ähnlich, verwendet aber die Unterprogramme in lq/tsonewi.cpp
../sf/modone_n.htm - 8 mal DS1820 auslesen mit MODBUS-Schnittstelle.

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