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
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
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
Hallo Thaomas, anscheinend geht Deine email-addy nicht, sonst hättest den Code schon Gruss Gerd
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
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
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
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
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
...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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.