meherere Digitalfühler über I/O-Expander MCP23017 einlesen?

Hallo zusammen,

Für meine Anwendung einer Heizungssteuerung werden die Digitalports des µC langsam zu wenig.
Kann man an einen I/O-Expander (MCP23017), welcher über I2C-Bus gesteuert wird, 6-8St. Digitalfühler (DHT22) anschließen und die Werte einlesen...anzeigen...speichern?
Ich betreibe einen solchen Baustein, da mir die Schaltkanäle vom Controller nicht mehr ausreichen.

Gruß Franz

Da müsste man nach jedem Bit den Expander auslesen. Das geht schon mal mit der Standard Lib nicht und es ist fragwürdig ob man dass überhaupt mit dem Timing hinbekommen würde.

Vielen Dank für die turboschnelle Info.
Ich muss dann wohl doch auf z.B. I2C-Fühler umsteigen oder eine andere Lösung suchen.
Gibt's noch eine andere Möglichkeit, 6-8 Fühler (DHT22 sind schon vorhanden) über ein Bussystem einzulesen?

Gruß Franz

Such mal nach "humidity sensor I2C". Man bräuchte aber auch ein Modell bei dem die Adresse einstellen kann - was anscheinend meistens nicht geht. Die sind auch i.d.R. sehr teuer.

Ein weiteres Problem mit dem Port Expander ist darüber den One-Wire Bus abzubilden. Das heißt man muss das bidirektional machen, zwischendurch die Richtung umschalten. Dann die Interrupts auswerten wenn Daten kommen. Selbst wenn das gehen würden, bist du einige Zeit damit beschäftigt die Library zu schreiben.

Kannst du vielleicht was anderes an eine Port-Erweiterung hängen? Oder auf den Mega umsteigen? Letzteres wäre billiger als neue Sensoren.

EDIT:
Brauchst die Sensoren überhaupt als Feuchtigkeitssensoren? Wenn es nur um die Temperatur geht gibt es DS18B20.

Ansonsten kannst du auch die analogen Eingänge als digitale I/Os verwenden wenn du da noch welche frei hast.

es sollte eigentlich auch möglich sein, sich einen I2C Adapter zu bauen. Mit meinem Lieblingsboard - einem Digispark - sollte das zum Beispiel gehen. Der sollte eigentlich 1Wire und I2C gleichzeitig können. Damit könnte er das Auslesen des Sensors übernehmen und auf der anderen Seite als I2C Slave die Werte zur Verfügung stellen zu können. Mit seinen rund 2 x 2,5 cm ist er darüber hinaus auch klein genug, dass man ihn wohl problemlos zu den Sensoren packen kann. Leider kostet er mit 9 Euro fast so viel wie der Sensor selbst. Programmiert wird das Ding auch über eine Arduino-IDE, so dass es da auch keinen großen Einarbeitungsaufwand kosten sollte.

Ich hatte vorhin vor Serenfly auch einen Beitrag verfasst, aber scheinbar ist der hier wieder nicht richtig gelandet.

Mein Vorschlag wäre auf den Mega umzusteigen, wenn du an den Sensoren nichts mehr ändern möchtest. Solltest du mit dem Mega nicht auskommen, kannst du weitere Arduinos miteinander koppelt. Es muss nicht Mega mit Mega sein. Ein Mega als Master und gefolgt von Unos als Slave würde auch gehen.

mgcss:
es sollte eigentlich auch möglich sein, sich einen I2C Adapter zu bauen. Mit meinem Lieblingsboard - einem Digispark - sollte das zum Beispiel gehen.

Gute Idee. :slight_smile:

Der ATTiny85 sollte dazu auch gehen und ist für 1-2 Euro zu haben. Daran könnte man wenn ich das richtig sehe 4 Sensoren anschließen.

Der Attiny ist auch auf dem Digispark drauf ... deshalb sollte es natürlich auch gehen, wenn man sich das "zu Fuß" nachbaut :slight_smile: ... aber ich fürchte, man bekommt nur 3 Sensoren an einen Chip ... egal ob der auf dem Digispark sitzt oder auf einem eigenen Board ... es sei denn ...

Der Attiny hat 6 PINs. 2 fallen weg für den I2C ... einer für den 1Wire ... bleiben 3 Pins für den Chip-Select. Jetzt könnte man natürlich noch ein paar AND-Gatter spendieren und so aus den 3 Select Leitungen 8 "Adressen" machen ... also gingen max. 8 Sensoren an einem Attiny.

Bei der Gelegenheit fällt mir auf, dass das vielleicht auch das Ausgangsproblem lösen könnte :slight_smile:

Hallo zusammen,

so, nun muss ich mich auch mal wieder melden.
Als Hardware verwende ich das Zeug von Sainsmart, also einen Mega+TFT-Shield+3,2"-Display mit SD.
Das Projekt ist eine bestehende Heizungssteuerung (elektrisch) und ich habe mir dazu schon einige Gedanken bzgl. der Ausbaustufen der noch zu erstellenden Software gemacht. Beim Durchplanen der gesamten Schaltung drumherum u. beim Schaltplanzeichnen merke ich, dass die Ports beim Mega etwas knapp werden. Das Display verschlingt viel.

Zu dem Thema Expansionsport:
es war nur ein schneller Gedanke, aber was hier dazu geschrieben wurde, ist mir dann schon klar geworden, dass dies so nicht klappt.
Als weitere Möglichkeit werde ich nun einen Slave-µC einsetzen, der mir die Fühler ganz normal einliest und diese dann über RXTX an den Master sendet (ist ja auch ein interessantes Thema...)
Da ich eine passende Platine mache, ist natürlich eine einlötbare Lösung ideal. Und die Diskussion, ob das Digispark nun 8 oder 10EUR kostet, ist in dem Projekt nun nicht ganz so wichtig.
Vielen Dank für die Gedanken.

Gruß Franz

Wenn du was zum Einlöten willst, ist ein blanker ATTiny die bessere Wahl.

Es gibt auch welche mit mehr Pins, z.B. ATTiny44:

Der hat 12 I/Os

also mal abgesehen davon, dass man den Digispark auch einlöten kann :wink: ... Das Hauptproblem ist doch, dass Du zuviele Pins für den Chip-Select brauchst ... richtig? Wenn dem so ist, dann solltest Du nochmal über die Sache mit den Logik-Gattern nachdenken. Damit könnte man mit 3 Pins 8 Sensoren adressieren. Mit 4 Pins 16 Sensoren usw. Das hätte halt den Charme, dass Du keinen weiteren Controller programmiern musst sondern alles in einem erledigt werden kann.

Die DHT22 haben keinen CS sowie ich das sehe. Aber es ist auch kein 1-Wire Bus. Man muss einfach jeden Sensor an einen eigenen Pin anschließen.

ach das ist ja blöd ... muss gestehen, dass ich da gar nicht genau nachgeschaut hatte. Dann vergesst alles, was ich über Gatter gesagt habe :slight_smile: