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
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.
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.
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).
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
@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.
> 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.
@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.
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 ;)
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
@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
@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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.