PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Benötige Hilfe zu I²C-Sensor



xrzr
19.07.2016, 12:08
Hallo,
ich hatte bisher mit I2C noch nichts zu tun gehabt und tue mich schwer, mit Hilfe von u.a. Google in das Thema einzuarbeiten.
Daher bitte ich um Hilfe auf Anfänger-Niveau im Bereich I2C.

Ich möchte gerne folgendes realisieren:
Ich möchte gerne den I²C-Sensor, den HYT939 (siehe Link) nur mit reiner Hardware in zwei Analoge Spannungssignale (0-5V/0-10V) wandeln. Der Sensor kann Temperatur UND Luftfeuchte messen.
https://www.ist-usadivision.com/objects/media/data-sheets/product/humidity-module/HYT-939.pdf

Dabei geht es mir in erster Linie darum, wie bekomme ich generell aus dem I2C ein Analogsignal.
Dieses mit OP auf den entsprechenden Bereich anpassen ist das kleinere Problem für mich.
Habe mal was davon gelesen das es wohl fertige Bausteine gibt, wie z.B.: http://www.ti.com/lit/ds/slas377b/slas377b.pdf

Da ich wie oben geschrieben mit I2C noch nichts zu tun habe und mich schwer tue, komme ich auch leider mit dem Datenblatt nicht so zurecht, wo das Protokoll drin steht.
Vielleicht kann es ja jemand so in Worte fassen, das ich es verstehe.


Danke vorab schonmal allen Helfern.

Mxt
19.07.2016, 12:19
Hallo,



nur mit reiner Hardware

[...]

Habe mal was davon gelesen das es wohl fertige Bausteine gibt,

Also vom Prinzip her funktioniert I2C so, dass da ein Master mit einem oder mehreren Slaves spricht. Die Slaves werden über ihre Adressen unterschieden.

Sowohl dein Sensor, als auch das verlinkte IC sind beide Slaves. Ohne Master wird da nichts passieren. Normalerweise ist ein Master immer ein Prozessor, wenn man mal von Spezial-ICs, die Busse koppeln oder als Verstärker dienen absieht.

PICture
19.07.2016, 12:44
Hallo!


Dabei geht es mir in erster Linie darum, wie bekomme ich generell aus dem I2C ein Analogsignal.

Aus digitalem Signal (I²C) bekommt man analoges nur durch DAC (Digital zu Analog Umsetzer).

Michael
19.07.2016, 13:11
Ich möchte gerne den I²C-Sensor, den HYT939 (siehe Link) nur mit reiner Hardware in zwei Analoge Spannungssignale (0-5V/0-10V) wandeln.
ich würde es so ungefähr machen:
Einen Taktgeber mit mehreren Zählern hintendran, beim Überlauf (Start) wird die Adresse des Slaves eingetaktet, z.B. über ein Schieberegister mit DIP-Schaltern. Nach 8 Bit (9 mit ACK) schaltet ein weiterer Zähler die Daten ab und auf Ausgangsschieberegister. Das ACK-Bit muss man dann eben auch noch mit Zählern erfassen und dessen Takt ausfiltern.
Bei der Stop-Kondition und richtiger Anzahl der Takte (noch ein Zähler) werden die Schieberegister gelatcht und die Rohdaten stehen an. Dort noch ein R-R Netz dran und du kannst mit OPVs weitermachen.

Ich würde aber eher zu einem gängigen Mikrocontroller tendieren ;)

Gruß, Michael

Mxt
19.07.2016, 13:19
Außerdem würde das mit den Zählern nur bei sehr einfachen Komponenten funktionieren. Bei vielen ICs müssen nach dem Einschalten erst mal ein paar Konfigurationsregister gesetzt werden. Den Sensor habe ich mir nicht genauer angeschaut, hatte aber schon andere, wo man erst mal die Messung triggern muss und später die Daten abholen kann.

Aber selbstverständlich kann man sich eine CPU aus ein paar (tausend) Logik ICs bauen. :cool:

Feuerring
19.07.2016, 13:46
Aber selbstverständlich kann man sich eine CPU aus ein paar (tausend) Logik ICs bauen. :cool:

das einfachste wäre, man nimmt einen günstigen uC mit I2C (TWI)-Interface z.B. Nano.
Der die Daten vom Sensor holt und aufbereitet und dann an einem I2C-DA-Wandler übergibt,
das kann doch nicht so schwer sein, zusätzlich gibt man die Werte noch per RS232 oder Display aus ...

HaWe
19.07.2016, 15:52
ich würde diese Frage (ebenfalls) Plattform-abhängig (Hardware, Programmiersprache) beantworten:
für alle cpu-Plattformen (u.a. AVR nackt oder Arduino, ARM nackt oder Arduino oder Raspberry Pi) gibt es verschiedene Programmiersprachen und dafür auch verschiedene Libraries, mit denen man i2c-Sensoren ganz allgemein auslesen kann (C, Wiring/Arduino-Sketch-C, WiringPi, Java, Python, C#...).
Und dann gibt es dazu sogar meist schon fertige spezielle Libraries für spezielle Sensoren, u.a. sicher auch für deine(n).

Also: auf welcher cpu-Plattform programmierst du womit?

- oder willst du die genauen Hardware-low-level-Schritte - ganz allgemein - erklärt wissen?

- oder willst du das etwa ganz ohne jede programmierbare Hardware schaffen??? - das hielte ich allerdings für ziemlich verwegen - da wäre ich dann komplett raus.

xrzr
20.07.2016, 19:58
Also in erster Linie hätte ich es gerne ohne Programmierung gemacht.
Das scheint aber hier rauszufallen.

Erfahrungen habe ich mit dem Atmega 2560 mit AVR-Studio und C. I2C jedoch noch nicht. Im Prinzip brauche ich nur I²C und zwei analoge Ausgänge, wobei ich Analoge Ausgänge noch nie angesteuert habe.
Platinen Größe wird auf ca. 30x30mm begrenzt sein. Versorgung nur 24V, daher muss noch ein SMD 7805 bzw. 7812 drauf.

Budget mäßig sollte das Projekt ebenfalls mit Sensor keine 50€ erreichen, da es sonst nicht Lohnenswert ist.
Bedeutet grob: 31€ Sensor + 6€ Platine --> 13€ für µC+sonstige Hardware. Wird eng aber eventuell realistisch.
Hat einer gerade zufällig einen Libary in C für I²C zur Hand. Wäre sehr nett.

Danke.

HaWe
20.07.2016, 20:17
Arduino Pro Mini?
Dimensions: 0.7x1.3" (18x33mm).
Arduino ist ideal für solche Zwecke finde ich.
Arduino's Basis-Lib (Wire.h) ist extrem simpel und leistungsfähig und hat irre viele Spezial-Device-Libs.

Preis müsste passen:
http://www.ebay.de/sch/i.html?_from=R40&_trksid=p2060353.m570.l1313.TR0.TRC0.H0.X+Arduino+ Pro+Mini+.TRS0&_nkw=+Arduino+Pro+Mini+&_sacat=0

ansonsten wird höchstens mit dem Platz etwas eng...

xrzr
20.07.2016, 20:27
Und die Pwm ausgänge über RC-Glied als analogen Ausgang nutzen?
Alternativ zwei 7-Bit DA-wandler.
Ist die Frage was genauer wird

HaWe
20.07.2016, 22:58
vermutlich sind DAC Wandler u.U. schon genauer (meist 12-bit, z.B. MCP4725, pwm hat 8-bit) , die Frage ist lediglich, ob du die Genauigkeit brauchst und ob pwm+RC funktioniert für deine Zwecke.
An i2c kannst du ja die DAC Wandler zusätzlich anschließen.


ps,
der originale Arduino.org MINI 05 ist sicher teurer, aber noch ein bisschen kleiner (18 x 30 mm):

http://www.arduino.org/products/boards/arduino-mini-05

Mxt
21.07.2016, 08:20
Das kleinste Bastelboard mit 2 DA-Wandlern onboard (12 Bit), das ich auf die Schnelle finden konnte ist das hier
https://developer.mbed.org/platforms/ST-Nucleo-F303K8/
steht bei Mouser für 9,50 Euro, der nackte Chip 3,86 für ein Stück.

- - - Aktualisiert - - -

Was den Sensor und die Programmierung angeht: Ein HYT-221 steht bei mir noch in der Warteschleife. Ich glaube der hat das gleiche Protokoll. Sobald ich mal Zeit finde könnte ich da mit Code dienen.

- - - Aktualisiert - - -

Für Arduino hat es hier schon jemand aufgeschrieben:
http://www.loetstelle.net/arduino/hyt939/hyt939.php
viel größer würde das Programm in mbed mit Analogausgabe für einen STM32 auch nicht.

xrzr
21.07.2016, 10:44
Danke für die Tipps.

Es wird vermutlich darauf rauslaufen, dass ich doch zu einem Pro Mini o.ä. gehen werde.
Diesen werde ich dann auf eine Platine setzten und an den I²C dann den Sensor anschließe und einen Dual-I²C-DAC.

Mit diesem müsste das doch klappen oder? Kann man da die normale Wire.h Bibliothek verwenden?
Die Adressen sind doch dann 0xF8 und 0xF9 für die beiden Ausgänge?

http://www.produktinfo.conrad.com/datenblaetter/1100000-1199999/001118587-da-01-en-IC_DAC_DUAL_CH_I2C_A_DS4412U__UMAX_8_MAX.pdf

Hardware technisch wird der DAC einfach parallel zu dem Sensor angeschlossen auf dem Bus oder?

Mxt
21.07.2016, 11:22
Die Adressen sind doch dann 0xF8 und 0xF9 für die beiden Ausgänge?

Bei den Adressen muss man aufpassen. Da gibt es eine 7 und eine 8 Bit-Darstellung. Das niederwertigste Bit sagt ja aus, ob geschrieben oder gelesen werden soll. Arduino nimmt einen 7 Bit Wert und shiftetet den dann um 1 Stelle nach links. Andere Libs wollen den 8 Bit Wert, shiften nicht und ändern das untere Bit bei Bedarf.

Bei deinen Werten ist einer gerade und einer ungerade, das ist schon mal verdächtig. Kenne das IC aber nicht.

Man kann übrigens auf dem Mikrocontroller einfach ein Programm laufen lassen, das nachschaut ob unter einer Adresse jemand zuhause ist. Sollte Google für Arduino finden, wirst du bei der Entwicklung eh noch brauchen ...



Hardware technisch wird der DAC einfach parallel zu dem Sensor angeschlossen auf dem Bus oder?
Und nicht vergessen, Pull-Up Widerstände nach Plus, sonst passiert da nix. Die Teilnehmer ziehen die Leitungen beim Schreiben nach Masse.

HaWe
21.07.2016, 11:49
hi,
als blutiger Anfänger würde ich bei Arduino nicht mit i2c-Chips anfangen, für die keine fertigen Libs vorhanden sind bzw. noch nicht mal im www irgendwas an Arduino-Sketchen drüber zu finden ist.
Kann in die Hose gehen, evtl. lernt man bei seinen 10 Jahre langen ergebnislosen Versuchen damit aber auch ne ganze Menge... ;)


ich empfehle bewährte Chips mit bewährten Sketchen und/oder Libs 8)

Google-Suche:
Arduino + DAC
o.ä.

xrzr
21.07.2016, 12:30
Ok.

War bisher immer ein Bastlerfreund. Also alles selbst zusammen stellen. Arduino scheint aber doch was zu sein, was ich schon längere Zeit auf dem Markt bewährt, bzw. was es auch noch lange geben wird.
Da waren immer so meine kleinen zweifel.

Denke auch aus zeitlichen Gründen wird es dann der Arduino Pro Mini in Kombination mit zwei mcp4725 Boards. Die Boards kann man unterschiedlich adressieren.
Wenn ich den Hardware Aufbau gezeichnet habe, werde ich mich mit dem SChaltplan nochmal melden.

Aber ob es Original Aruino oder sonstige Kompatible Herstellern sind, wird ja egal sein oder?

HaWe
21.07.2016, 12:48
für den Programmiercode auf jeden Fall egal,
nur was die Treiber für die USB-Schnittstelle oder USB-zu-Serial-Konverter für den Anschluss an den PC und den Upload über die IDE angeht, gibt es teilweise Unterschiede.
Die Original Arduinos haben meist einen U16 USB-Chip, da läuft alles automatisch, manche Chinaklone haben einen ch340 Chip, für den musst du gesondert Treiber installieren.



ps,
sehe gerade: der pro Mini hat ja gar keine USB-Buchse, da brauchst du eh ein FTDI Kabel.