Forum: Mikrocontroller und Digitale Elektronik SHT-15 Sensoren


von Stangl Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich beschäftige mich schon seit längerer Zeit mit einen SHT-15
Temperatur und Feuchtesensor und habe ein kleines Beispielprogramm in
Basic angehängt.

Ich hoffe, dass mir bei meinen Problem Jemand weiterhelfen kann, da ich
mit den Datenblatt und Googeln nicht weiterkomme.

Und zwar, wenn ich den Sht erwärme, gibt mir dieser auf einen Display
nur ruckartig z.B. die Temperatur aus ( das ist relativ normal, da er
nur in einen kurzen Moment misst ) aber wenn ich diesen wieder abkühlen
lasse, dann gibt er in den gleichen Sprüngen das Ergebnis aus.

Beispiel:
20.4 – 26.8 – 29.2 – 31.2 – 29.2 – 26.8
– 20.4
Ich kann mir nicht vorstellen, dass er zufällig genau bei den selben
Temperaturwerten
misst ,denn der SHT hat eine Auflösung von 0.01 Grad Celsius und eine
Genauigkeit von +/- 0.5 Grad.

kann sich Jemand vorstellen, woher dieses Problem kommen könnte?

Ich wäre für jeden Tipp dankbar

Gruß Thomas

von Gerd Vergin (Gast)


Lesenswert?

Hallo,

leider kann ich kein Basic, darum kann ich dazu nichts konkretes
sagen.
Ich setze den SHT11 ein, bei mir klappt das ganz gut.
Der Baustein misst alles recht ordentlich in der vorgebenen Toleranz.
Die Programmierung habe ich in Assembler gemacht und mich absolut an
das Timing vom Chip gehalten.
Wichtig sind nicht die Zeitabstände sondern die Einhaltung der Flanken
vom SCK zum Signal Data und vor allem die Datenrichtung.
Auch meine Anwendung wollte anfangs nicht so richtig, denn eine kleine
Gemeinheit habe ich in dem Timing übersehen: rechtzeitiges Umschalten
der Datenleitung von Output auf Input während dem ACK auf der
SCK-Leitung.

Gruss

Gerd

von Stangl Thomas (Gast)


Lesenswert?

Hallo,

gut zu wissen, das muss ich nochnal überdenken

Gruß Thomas

von Stangl Thomas (Gast)


Lesenswert?

Hallo,

ich bin das Programm nochnal durchgegangen und habe den Fehler nicht
gefunden.
hat vieleicht wer ein Assembler Programm zum vergeich für mich.

das könnte echt nützlich sein.

Gruß Thomas

von Gerd Vergin (Gast)


Lesenswert?

Hallo Thaomas,

anscheinend geht Deine email-addy nicht, sonst hättest den Code schon

Gruss

Gerd

von Addy (Gast)


Lesenswert?

Also, wenn du ja schon in der Main-Loop ne Sekunde Pause einlegst (Wait
1), ist das ja normal, dass die Ausgabe auch nur alle Sekunde
aktualisiert wird.

------------------------------------------------------------------
Measurement sequence (RH and T)
After issuing a measurement command ('00000101' for RH,
'00000011' for Temperature) the controller has to wait for the
measurement to complete. This takes approximately
11/55/210 ms for a 8/12/14bit measurement. The exact time
varies by up to ±15% with the speed of the internal oscillator.
To signal the completion of a measurement, the SHTxx pulls
down the data line. The controller must wait for this 'data
ready' signal before starting to toggle SCK again.
Two bytes of measurement data and one byte of CRC
checksum will then be transmitted. The uC must
acknowledge each byte by pulling the DATA line low. All
values are MSB first, right justified. (e.g. the 5th SCK is MSB
for a 12bit value, for a 8bit result the first byte is not used).
Communication terminates after the acknowledge bit of the
CRC data. If CRC-8 checksum is not used the controller may
terminate the communication after the measurement data
LSB by keeping ack high.
The device automatically returns to sleep mode after the
measurement and communication have ended.
------------------------------------------------------------------

Es müssen also bei 14bit durchschnittlich 210ms gewartet werden, bei
geringerer Auflösung eben weniger.
Und der SHT-15 zieht ja laut Datenblatt nach Beendigung des
Umwandlungsvorganges die 'Data Line' nach Low.

Berichtigt mich, wenn das was ich geschriebn hab nicht stimmt, hab
leider keine von den SHT Dingern. ;-)

greetz
Addy

von Stangl Thomas (Gast)


Lesenswert?

Hallo,

ich war leider verhindert.

ich habe den Code nicht erhaten- aber meine E-mail Adresse müsste
eigentlich funktionieren!?

zu Addys Antwort:

das mit der 1 Sekunde stimmt, da man laut Datenblatt max. 3 Messungen
wegen der eigenerwährmung machen sollte und mit eigenlich 1 Messung pro
sek. reicht.
das mit den 210 ms und der Datenleitung auf Low stimmt auch
dies wird mit der folgenden Anweisungen erreicht:

Bitwait Pinb.1 , Reset

Ich hab auch schon Versucht zwischen den Sck und Daten eine Zeit von
1uS einzubauen aber ohne erfolg

Gruß Thomas

von F. Wolf (Gast)


Lesenswert?

Ich hatte das gleiche Problem mit dem SHT-11.

Bei mir war es der Pull-UP auf der Platine- seit ich den Abstand zum
Prozessor verkürzt habe und den Ausgang ohne externes Bauteil als
Tristate nutze geht es!

Zur Diagnose solltest du den CRC berechnen dann weisst du ob es am
Sensor oder an der Schaltung liegt...

Viel Erfolg, F. Wolf

von Stangl Thomas (Gast)


Lesenswert?

Hallo,
ich glaub ich hab nicht alle Informationen.
wie kann ich die CRC berechnen?

was hast du für einen Pull Up drin? ich hab 4,7k

und was meinst du mit "den Ausgang ohne externes Bauteil als
Tristate" ?

Gruß Thomas

von F. Wolf (Gast)


Lesenswert?

Hmmm (wie erklären ?) ok... also:
du hast einen 8515... gut...

;***********************************************************

also zuerst mal den 4,7 k weg (das ist das problem), den sensor in <20
cm abstand (zum testen)...

mit DDRB kannst du die Datenrichtung (raus oder rein) setzen.
mit PORTB bestimmst du bei:
DDRB = OUTPUT ob der Ausgang High oder LOW ist
DDRB = INPUT ob der Eingang ohne Pullup (0) oder
mit Pullup (1) betrieben wird...

also wenn du z.b.:
_setport  DDRB,    0b00000000
_setport  PORTB,    0b00000011
dann sind die B0 und B1 = Tristate (mit pullup)
die anderen nicht ...

beim SHT sieht das dann im reset z.b. so aus
(jaja ich weiss ist asm (ich kann nix anderes schreiben)):

DSReset:
sbi    DDRD,DSBus      ;DDRB bit 2 = 1 = output
cbi    PORTD,DSBus     ;set 1-wire bus low
ldi    Delay1,    249
rcall  dsdly1            ;Wait 500 us
cbi    DDRD,DSBus      ;Switch DS bus bit to input (pulled up high)
sbi    PORTD,DSBus     ;turn on pullup    <--- HIER HIER HIER
ldi    Delay1,    50
rcall  dsdly1
clc                    ;exit with carry clear if no device
sbis   PIND,DSBus      ;skip next if port B bit 2=1
sec                    ;bit was clear (=0) so set carry flag
ldi    Delay1,    249
rcall  dsdly1
ret

ich hoffe das ist verständlich gewesen ;)

;***********************************************************

nun zum CRC... unter:
http://www.driesen-kern.de/downloads/dbsht7xdeutschdk0602.pdf

bekommst du das Datenblatt... da steht drin wie du an den crc kommst...
ist aber warscheinlich nicht das problem sondern der widerstand...

ach noch was... versuch doch erst die temperatur zu lesen und dann die
feuchte --> du weisst ob dein abschluss zwischen den befehlen tut...


Viel Erfolg, F. Wolf

von Stangl Thomas (Gast)


Lesenswert?

...also ich gaub, ich habs schon fast.

das ruckelnde Messergebniss beträgt genau 2.56 Grad.

zum Verständniss:

wenn ich zwei Werte oder Verknüpfe z.B. 1100 und 11 = 1111.
wenn dies falsch ist dann bitte ich um korrettur.

ich lese in meinen Programm zuerst das MSB Byte aus und speichere das
in der Variable "Datavalue"
...dann lese ich das LSB aus
...dann Datavalue um 8 Bits nach links schieben

jetzt kommt der Befehl

Datavalue = Datavalue or Databyte ' und der glaube ich hackt

ich habe mir die Werte auf mein LCD schreiben lassen und festgestellt,
dass bei den meisten Werten das gesamte LSB Byte fehlt,
entweder die óder Verküpfung funktioniert nicht oder der liest das LSB
erst gar nicht aus.

in Asm kann man doch mit den Befehl "or" zwei Register oder
Verknüpfen - oder?


Gruß Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.