Forum: Mikrocontroller und Digitale Elektronik SHT75 Sensor an langer Leitung


von Daniel Buergin (Gast)


Lesenswert?

Hallo

Brauche als Nichtelektroniker mal wieder etwas Hilfe in Hardware.

Ich möchte mehrere Temp/Feuchte Sensoren (SHT75) im Haus verteilen,
und einen ausser Haus. Der direkte Anschluss (5-10cm) an verschiedene
Controller (ATmega128, BasicStamp, Propeller) klappt ohne
Probleme. Aber sobald ich die Leitung länger mache, klappt's nicht mehr.
Die Elektroniker werden jetzt sagen, ja klar, steht ja im Datenblatt und
wurde (glaube ich) auch schon disskutiert.

Ich habe mal angefangen die Leitungen länger zu machen.
Immer ein CAT-5 Kabel (verdrillt und doppelt abgeschirmt, mit der
Abschirmung auf Masse auf der Controller Seite). Dabei ist folgendes
heraus gekommen:

- 50cm funktioniert seit 3 Tagen ohne Probleme
- 5m hat etwa 3 Stunden funktioniert, dannach habe ich mich schon
  gefreut und wollte das Kabel fertig konfektionieren, hab's aber
  noch einmal eingesteckt und es ging nie mehr ;-(

Meine Frage ist nun, war das Zufall, dass das geklappt hat ?
Verrenne ich mich hier in etwas, was nie richtig funktionieren wird ?
Oder gibt es noch irgendwelche Tips mit Kondensatoren oder
Wiederständen, welche ich noch probieren könnte.
(auf dem ATmega128 habe ich mit und ohne interne Pullup's versucht)

Ich brauche 3-5m Kabel, um von aussen in den Keller zum Controller
zu kommen.

Als Alternative sehe ich, den Sensor an einen PCF8574 über
TWI anzusprechen, dazu müsste ich aber meine SHT Library völlig
umschreiben, und die funktioniert doch so schön....

Oder ich nehme irgend einen klitzekleinen Atmel Chip, Sensor dran und
die Daten über RS232 übertragen.

Vielleicht hat sonst noch jemand eine Idee.

Mit bestem Dank

Daniel

von Martin Thomas (Gast)


Lesenswert?

Mit niedriger Clock-Frequenz ausprobiert? Kurz Pausen zwischen SCK 
umschalten und DATA write oder read ausprobiert? Signale mit Oszilloskop 
angeschaut? Widerstandswert des externen Pull-Ups an Data variiert? 
Internen Pull-Up besser erstmal nicht nutzen, lieber erstmal AVR Pin als 
"open drain" und externen R.

>Oder ich nehme irgend einen klitzekleinen Atmel Chip,
>Sensor dran und die Daten über RS232 übertragen.

Ja, bei mehreren aber eher RS485: Busverkabelung, keine Probleme mit 
langen Leitungen und ungeschirmtes "twisted pair" dürfte genügen. 
Hardware z.B. SHTxx + ATtiny2313 + Max485 o.ä. + evtl. noch 
Spannungsregler. Berechnungen (AD-Werte->Temp. u. Humid.->Taupunkt) dann 
im Empfänger - dafür dürfte der Platz im "klitzekleinen" AVR nicht 
reichen.

von Daniel Buergin (Gast)


Lesenswert?

Nein, noch keine niedriegere Clock-Freq. ausprobiert und ein Oszi habe
leider keines. Kann über Weihnachten eines ausleihen (mit Personal ;-) 
),
wollte das Problem aber wenn möglich vorher lösen.

Im Moment habe ich einen 4.7k Pull-Up an DATA und einen 300 Ohm seriell
in der DATA Leitung (habe ich irgendwo im Internet gefunden).
So funktioniert der Sensor direkt neben dem Controller einwandfrei.

In welchem Umfang kann ich den Pull-UP varieren ? Oder was
macht Sinn ?

Das mit dem kleinen AVR war genau meine Idee. Nur die RAW-Daten sammeln
und diese weiter leiten. Danke für den ATtiny Tip. Kenne im Moment
nur den ATmega128.

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Die anstrengende Methode:
Besorg dir RS422-Sender und -Empfänger.
Für die Mikrocontroller-Seite brauchst du zwei Sender und einen 
Empfänger, für die Sensor-Seite einen Sender und zwei Empfänger.
Die Clk-Leitung geht auf den Sender am Controller und am Sensor auf den 
ersten Empfänger.
Für die Methode braucht man übrigens noch einen Pin mehr am Controller.
Einen für Dout und einen für Din.
Die übrigen Sender und Empfänger auf der Sensorseite müssen dann noch 
zur Datenleitung des Sensor mit einer Diode (ich habe dafür ein 
74SZ125-Gatter genommen...) vereint werden.
Auf der Controllerseite hat man dann entweder einen Eingang und einen 
Ausgang oder auch die Diode + Pull-Up-Widerstand.

Driesen&Kern vertreiben die Sensoren komplett mit Controller für einen 
RS485-Bus...(Den Datenlogger kann man auch käuflich erwerben).

von Stephan (Gast)


Lesenswert?

Hallo,
mein SHT75 läuft ohne Probleme an einem 6 meter langem Patchkabel.
Prozessor ist ein Mega 16 müsste aber auch auf einem 8k laufen.
Mein Programm liegt knapp über 8k wobei der grösste Speicherkiller die
Umwandlung von float in asci durch sprintf ist.
Die delays in den Übertragungsroutinen evtl. einfach mal um das 10 fache 
erhöhen. Ich benutze den internen pullup des SHT wie im Datenblatt 
gefordert, "only low drive the bus" oder so ähnlich. Einen Widerstand in 
der Data-Line verwende ich ebenfalls nicht.

Also am besten erstmal die Zeiten x10 dann sollte es gehn.

Gruß
Stephan

von Falk (Gast)


Lesenswert?

@Daniel Buergin

Wie einige schon geschrieben haben, setz mal die Geschwindigkeit runter. 
Das mit RS485 oder RS422 ist totaler Overkill, das Ding ist so 
schnarchlangsam, das sollte selbst mit 50m Kabel laufen. Mit geschirmten 
CAT5 erst RECHT! Auf jeden Fall aber sollte ein 100nF Keramikkondensator 
zwischen VDD und GND direkt am Sensor. Was auch nicht schaden kann sind 
irgendwas zwischen 50..100 Ohm in der SCK Leitung, direkt am uC 
(Serienterminierung). Bist du auch sicher dass du die Daten auf Data 
während der STEIGENDEN Flanke von SCK abtastest?

MfG
Falk

P.S. Wenn mir jetzt einer mit "niederohmiger Datenübertragung", LVDS 
oder galvanischer Trennung ankommt, gibt eins auf den Deckel.

von Martin Thomas (Gast)


Lesenswert?

> Ich benutze den internen pullup des SHT wie im Datenblatt gefordert...
Habe hier das Datenblatt V2.05 (3/2006) und finde nichts über einen 
internen pull-up Widerstand des SHT. Was ich finde: "An external pull-up 
resistor (e.g. 10 kΩ ) is required to pull the signal high." Habe mit 
internem pull-up des AVR erfolgreich geteste aber nutze nun externen 
10kOhm, da die Signal auf dem Osizilloskop damit "sauberer" aussehen und 
schnellerer SCK-Takt möglich ist. Nur aus Interesse: wo habe ich das mit 
dem "internen pullup des SHT" übersehen?

> Das mit RS485 oder RS422 ist totaler Overkill...
Nun stand aber in der ursprünglichen Frage:
> Ich möchte mehrere Temp/Feuchte Sensoren (SHT75) im Haus verteilen...
Dann ist ein Bus kein "Overkill" und spart eine "Sternverkabelung" und 
besonders gut geschirmte Kabel. Für mich sind CAT5-Kabel nur für die 
Sensoren sternförmig vom "Zentralcontroller" durchs Haus "Overkill". Ein 
kleiner Controller+RS485-Transceiver zur Ankopplung an den Bus kostet im 
Vergleich zum Sensor wenig und die Schaltung/Software ist realtiv 
einfach. Zu RS485: Warum wohl "Stromschleifen" statt "Spannungen" üblich 
sind, wenn man mehr als ein paar Meter überbrücken muss (TP, RS485, 
4-20mA Sensoranschluesse...)? Aber gut, mein Vorschlag war nicht direkt 
auf die Frage bezogen (es ging ja erstmal nur um 3-5m), sondern nur eine 
Idee im Kontext der Anwendung.

>...das Ding ist so schnarchlangsam...
Was bedeutet das? Das "Ding" wandelt zwar relativ langsam, aber die 
Schnittstelle kann mit SCK-Takt bis zu 10MHz (bei >4.5V) betrieben 
werden. Die Schnittstelle kann langsam angesteuert werden (Datenblatt: 
"...is no minimum SCK frequency."), aber das macht der Anwender und es 
hat nichts mit dem "Ding" zu tun.

>..sollte ein 100nF Keramikkondensator zwischen VDD und GND
>direkt am Sensor...
Fragesteller nutzt SHT75. Datenblatt V2.05, Abschnitt 5.2.1: "A 100nF 
capacitor is mounted on the back side between VDD and GND." Zumindest 
bei den SHT75, die ich hier habe ist das auch so.

>während der STEIGENDEN Flanke von SCK abtastest
SCK auf high und währenddessen Zusand des Data-Pins lesen düfte bei 
einem ATmega128 wie vom Fragesteller genutzt kaum möglich sein. Nur aus 
Interesse: wenn man den Sensor bereits auslesen kann, warum sollte man 
dann prüfen, ob man DATA nach ("während") der steigenden Flanke von SCK 
abtastet? Ohne es je ausprobiert zu haben, aber wie könnte das anders 
funktionieren? Was kann man da nur halb richtig machen?

>P.S. ...gibt eins auf den Deckel.
Off-topic aber: Ziemlich selbsgefällige Formulierung. Es gibt immer 
mindestens Einen, der mehr weiss als man selbst und derjenige hat 
möglicherweise gute Argumente für andere Lösungen, liest aber 
wahrscheinlich dieses Forum nicht oder schreibt nach dieser Ankündigung 
nichts mehr um sich Stress zu sparen. Deckelklopfer kann wohl in der 
Schublade bleiben.

von Falk (Gast)


Lesenswert?

@Martin Thomas

> Dann ist ein Bus kein "Overkill" und spart eine "Sternverkabelung" und
> besonders gut geschirmte Kabel. Für mich sind CAT5-Kabel nur für die
> Sensoren sternförmig vom "Zentralcontroller" durchs Haus "Overkill". Ein

Naja, Cat5 musse weis Gott nciht sein, normaler verdrillter Klingeldraht 
tuts hier sicher auch.

> kleiner Controller+RS485-Transceiver zur Ankopplung an den Bus kostet im
> Vergleich zum Sensor wenig und die Schaltung/Software ist realtiv

Was kostet der Sensor? Klar kann man ein kleines RS485 NEtzerk aufbauen, 
ist aber schon einiges an Aufwand im Vergleich zum einfachen 
Strippenziehen.

> einfach. Zu RS485: Warum wohl "Stromschleifen" statt "Spannungen" üblich
> sind, wenn man mehr als ein paar Meter überbrücken muss (TP, RS485,
> 4-20mA Sensoranschluesse...)? Aber gut, mein Vorschlag war nicht direkt

RS485 ist KEINE Stromschleife. 4-20mA ist aus der guten alten 
Analogzeit. Hatte alles seine Berechtignung, wird teilweise auch heute 
noch genutzt.
TP?

> Schnittstelle kann mit SCK-Takt bis zu 10MHz (bei >4.5V) betrieben

OK, hast Recht. Deshalb auch mein Vorschlag mit der Serienterminierung.

> SCK auf high und währenddessen Zusand des Data-Pins lesen düfte bei
> einem ATmega128 wie vom Fragesteller genutzt kaum möglich sein. Nur aus

??? Was meinst du damit.

> Interesse: wenn man den Sensor bereits auslesen kann, warum sollte man
> dann prüfen, ob man DATA nach ("während") der steigenden Flanke von SCK
> abtastet? Ohne es je ausprobiert zu haben, aber wie könnte das anders
> funktionieren? Was kann man da nur halb richtig machen?

Der Teufel ist ein Eichhörnchen. Wenn er die Hardware SPI benutzt könnte 
duch falsche Wahl der Clock-Polarity Einstellung das Timing "auf der 
Kippe stehen". Wenn aber Soft-SPI verwendet wird, solle es weniger 
Fehlermöglichkeiten geben.

> Off-topic aber: Ziemlich selbsgefällige Formulierung. Es gibt immer
> mindestens Einen, der mehr weiss als man selbst und derjenige hat
> möglicherweise gute Argumente für andere Lösungen, liest aber

Hast ja Recht, ich war/bin aber genervt von den vielen "Expertentips" zu 
diesem Thema (SPI über 75cm Flachbandkabel etc.). Also musste ich ein 
wenig die "Schakale" verscheuchen ;-)

MFG
Falk

P.S. Vielleicht noch ein kleiner Hinweis. Ich würde Pin 1 und 2 auf ein 
verdrilltes Paar legen, sowie Pin 3 und 4. Damit haben SCK und DATA in 
etwas 100 Ohm Impedanz, zumindest für SCK ist das wichtig.

von Stephan (Gast)


Lesenswert?

Sorry,
natürlich hat er keinen internen pull up. Ich meinte damit nur die 
Funktion des auf Masse ziehens wobei natürlich aussen ein Pull-Up 
angeschlossen sein muß.
Ich glaub aus der Nummer komm ich nicht mehr raus ;)

von Daniel Buergin (Gast)


Lesenswert?

Ich sehe schon, einfach wird das nicht... Aber trotzdem erstmal
vielen Dank für die Tipps.

Vielleicht noch ein paar Fakten. Wie gesagt, angeschlossen
ist das ganze an einen ATmega128 (www.bdmicro.com Board: Mavric-IB).

ATmega128      SHT75
--------------------
PORTB Pin2      SCK
PORTB Pin3      DATA

Wie gesagt, im Abstand von 10-15cm mit einfachen/einzelnen Drähten und 
nur
mit dem internen Pullup des ATmega128 für die DATA Leitung
klappt es ausgezeichnet.
Die zweite Versuchsleitung ist bereits ein Stück Cat5 Kabel, ca 80cm
lang. Auch damit geht es noch.
Mit dem restlichen ~5m Stück Cat5 geht es nicht mehr.

Der folgende Unterschied spielt vielleicht eine Rolle. Bei kürzeren
Stück habe ich jeweils ein verdrilltes Aderpaar für eine Funktion
genommen, also GND, 5V, SCK und DATA sind jeweils ein Aderpaar.
Beim längeren Stück habe ich aus je einem Aderpaar eine Ader genommen
und nicht beide Adern zusammengelötet. War etwas einfacher
zu erstellen.

Das Oszilloskop habe ich nun auf dem Tisch, jedoch den Fachmann noch
nicht dazu, kommt am Wochenende ;-) Die Signale habe ich mir schon
mal angeschaut, aber eben die Interpretation....
Die Clockleitung sehe ich schön zwischen 0V und 5V hin und herspringen.
Aus dem Bild der DATA Leitung werde ich aber nicht schlau. Die
sehe ich zwar auch hoch und runtergehen, aber nur im Bereich von einem
knappen Volt.
Das ganze bei beiden Kabeln, ich sehe als Laie also im Moment keinen
Unterschied zwischen den beiden Kabeln.

Vielleicht noch etwas zum Hintergrund der ganzen Uebung. Ich will mir
eine kleine Wetterstation bauen. Dazu befindet sich bereits ein
Ultraschall-Windmesser auf dem Dach. Dieser liefert seine Daten
via RS232 Kabel in den Keller auf einen MOXA RS232-to-Ethernet Box.
Da diese MOXA Box noch einen zweiten RS232 Eingang hat, ist meine
Idee, dort eine kleine CPU mit zwei SHT75 anzuhängen. Einen direkt
bei der CPU für die Kellertemperatur und einen eben 5m abgesetzt für
die Aussentemperatur. Da ich noch einen BasicStamp herumliegen hatte,
habe ich es zuerst damit versucht. Hat genau gleich nicht geklappt.
Dannach der Wechsel auf den Atmega128, da ich hier bereits einen
funktionierenden Code hatte. Das gleiche Resulat.
Im ganzen Haus habe ich eine sternförmige sog. "Universelle Haus-
verkabelung". Also Ethernet in jedem Zimmer. Switch und dedizierte
Firewall im Keller. Meine Idee ist es nun, weitere Sensoren
SHT75, Barometersensor, Licht, Radioaktivität usw. nach und nach
so zu integrieren, dass sie ihre Daten im Ethernet einspeisen.
Damit kann ich sie auf der einen Seite auf einem Server sammeln und
ev. einmal auf einer Webseite anzeigen, und auf der anderen Seite mit
intelligenten Displayeinheiten an verschiedenen Stellen im Haus
anzeigen.


Werde am Wochenende mal versuchen die verschiedenen Tips umzusetzen.
- Neues Kabel machen
- Kondensator beim Sensor
- Längere Delays in der Software

Gruss

Daniel

von Falk (Gast)


Lesenswert?

@Daniel Buergin

> Stück habe ich jeweils ein verdrilltes Aderpaar für eine Funktion
> genommen, also GND, 5V, SCK und DATA sind jeweils ein Aderpaar.

Wie bereits geschrieben, ist das eher ungünstig. Nimm SCK und VCC sowie 
DATA und GND in ein Adernpaar.

> Die Clockleitung sehe ich schön zwischen 0V und 5V hin und herspringen.

Welche Frequenz?

> Aus dem Bild der DATA Leitung werde ich aber nicht schlau. Die
> sehe ich zwar auch hoch und runtergehen, aber nur im Bereich von einem
> knappen Volt.

Wahrscheinlich ist der interne Pull-up zu schwach und die SCK Frequenz 
zu hoch. Mal als Überschlag.

Die Kapazität Kabel + AVR Eingangs sind so ca. 50pF. Die inernen 
Pull-ups sind zwischen 20-50 kOhm. Macht ca. 2,5us Zeitkonstante. D.h. 
Das SIgnal braucht ~5*2,5 = 12,5 us um von LOW auf HIGH zu kommen. MIt 
10 kOhm sind es nur noch 2,5 us.

> Das ganze bei beiden Kabeln, ich sehe als Laie also im Moment keinen
> Unterschied zwischen den beiden Kabeln.

> Werde am Wochenende mal versuchen die verschiedenen Tips umzusetzen.
> - Neues Kabel machen

OK.

> - Kondensator beim Sensor

Nicht nötig, ist schon auf dem Mini-board.

> - Längere Delays in der Software

OK.

Versuch auch mal 50..100 Ohm als Serienwiderstand an SCK.

MFG
Falk

von Daniel Buergin (Gast)


Lesenswert?

@Falk

Die Frequenz weiss ich nicht mehr. Muss ich noch mal messen.

Wie meinst du das mit dem Kondensator auf dem Mini-board.
Meinst du damit den Sensor selber ?

Melde mich mit den Ergebnissen ;-)

Däniel

von Daniel Buergin (Gast)


Lesenswert?

Nur zur Vollständigkeit.

Der folgende Setup hat sich nun für bis zu 10m lange Kabel
bewährt:

Connection:

 ATmega128                 SENSIRION
               220
 B2 ----o-----/\/\---o--pin 3 sck, clock
                     |
        ;---/\/\-----' pull-down
        | 4.7k
 Vss--o-o---------------pin 1 common

 Vdd--o-o---------------pin 4 +5 volts
        |    4.7k
        '---/\/\-----; pull-up
                     |
              220    |
 B3 ----------/\/\---o--pin 2 dta, data


SCK und VCC in einem Adernpaar und
DATA und GND in einem anderen Adernpaar

Im Moment läuft das ganze auf einem ETHERNUT 2.1B Board mit
Nut/OS 4.2.1.
Längere Delays in der Software braucht es nicht.

Danke an Alle für die Hilfe

Daniel

von plinepa (Gast)


Lesenswert?

Hallo!

Gehören die Widerstände dann an den SHT oder an den ATMega?

THX
Stefan

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.