DHT22 mit ATTiny85 auf 1Wire

Ich bin auf der Suche nach einem ATTiny85 oä Sketch der als 1wire Slave mit DHT22 Master fungiert. Hat da schon jemand etwas gemacht?

Meinst Du echt DHT22 als Master?

Gruß Tommy

Der ATTiny soll der DHT22 Mater sein und als 1Wire Slave agieren.

Im Endeffekt soll der DHT22 an den 1Wire Bus.

Also Google spuckt mir folgendes für I2C und 1 Wire auf Attiny aus.

Gruß Tommy

Ich brauche kein I2C.
Der DHT hat ein eigenes Protokoll.

Stimmt, ich hatte ihn mit dem SHT verwechselt.

Gruß Tommy

SHT31 oder SHR21?

I2C ist mir adresstechnisch zu unflexibel und vom bus her zu störanfällig.
Außer ich nehme die mit dem von mir geposteten umsetzer :slight_smile:

SHT21

Ich habe keine Probleme mit I2C im 20-30 cm Bereich mit 5 Teilnehmern:

FRAM solo, DS3231, FRAM auf DS3231 (EEPROM ausgetauscht) und 40x4 Display auf 5V und SHT21 mit Adapter auf 3,3 V

Gruß Tommy

Bei mir bleibt es halt nicht bei 20-30cm. eher 1 bis 2 Meter.

Ich habe jetzt nen Umsetzer geschrieben, der läuft allerdings auf dem 328p.
Wenn ich die Tinys habe werde ich das wohl stark optimieren müssen...

Die Lib ist recht komplex aufgebaut, und beinhaltet alle 1wire requests:
https://github.com/neuoy/OneWireArduinoSlave

Dann gibt es noch den OneWireHub, der sieht auch recht mächtig aus.

Ist wohl alles eher mehr Big al Tiny :o

Das ist schon etwas länger.
Da wirst Du für den Tiny nur die Teile der Lib raus ziehen müssen, die Du unbedingt brauchst.

Gruß Tommy

Tommy56:
Das ist schon etwas länger.
Da wirst Du für den Tiny nur die Teile der Lib raus ziehen müssen, die Du unbedingt brauchst.

Gruß Tommy

Du bist gut :wink: :smiley:
So einfach ist das leider nicht Tommy...

Wieso nicht? Klar bestimmte Teile braucht man immer incl. interne Grundfunktionen.
Aber die Implementation aller Funktionen wirst Du nicht brauchen.

Evtl. kann man da noch RAM sparen, durch nicht benötigte Variablen. Oder nach Analyse Teile selbst neu schreiben.

Der Linker soll zwar ziemlich gut unterscheiden können aber ob das reicht? Wenn es passt, ist es ja gut.

Gruß Tommy

U.a. deswegen:

	cli(); // disable interrupts
	pin_.inputMode();
	pin_.writeLow(); // make sure the internal pull-up resistor is disabled

	// prepare hardware timer
	TCCR1A = 0;
	TCCR1B = 0;
	TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
	tccr1bEnable_ = (1 << WGM12) | (1 << CS11) | (1 << CS10); // turn on CTC mode with 64 prescaler
void OneWireSlave::setTimerEvent_(short delayMicroSeconds, void(*handler)())
{
	delayMicroSeconds -= 10; // remove overhead (tuned on Arduino Uno)

	short skipTicks = (delayMicroSeconds - 3) / 4; // round the micro seconds delay to a number of ticks to skip (4us per tick, so 4us must skip 0 tick, 8us must skip 1 tick, etc.)
	if (skipTicks < 1) skipTicks = 1;
	TCNT1 = 0;
	OCR1A = skipTicks;
	timerEvent = handler;
	TCCR1B = tccr1bEnable_;
}

Aber wenn du mit dem Datenblatt des Tiny85 vertaut bist, kannst du mir ja ein Äquivalent anbieten...

Leider muß ich gestehen, daß ich bei diesem Thema nicht wirklich durchblicke, was da gemacht werden soll. Nach meinem Verständnis geht es um eine I2C-zu-1Wire-Umsetzung. Meine Anmerkungen unter der Voraussetzung, daß ich etwas im Nebel stehe.

Muß es ein ATtiny85 sein? Was hälst Du alternativ von einem ProMini oder Nano jeweils mit ATmega328P, also kompatibel mit den UNO-Bibliotheken?

mde110:
Aber wenn du mit dem Datenblatt des Tiny85 vertaut bist, kannst du mir ja ein Äquivalent anbieten...

Bin ich nicht, aber ein flüchtiger Blick verrät gewisse Gemeinsamkeiten zwischen UNO- und ATtiny-Timern. Da ich eine gute, leider unvollendete und unveröffentlichte Doku zum Uno-Timer habe, würde ich mich trauen, mich vertraut zu machen.

Wenn Du mir also einen kleinen auf dem Uno lauffähigen Testsketch ohne Bibliotheksgedöns strickst, würde ich versuchen, den auf den ATtiny85 zu bringen. Einen 1Wire-Sensor habe ich nicht, aber ein Oszi, wenn das hilft. Versprechen kann ich natürlich nichts.

Hallo,

der DHT22 hat ein eigenes asynchrones serielles Protokoll. Der kann kein I2C.

Ich will also als erstes einen 1wire Slave emulieren.
Dieser Slave soll später noch den DHT22 auslesen und di Werte der Emulation "übergeben"...

Also eine DHT22 to 1wire Bridge.
Eine I2C to 1wire Bridge gibt es schon von Maxim.

Ich mag die pro mini 8Mhz sehr, mit deep sleep eine feine Sache! Da aber ein SOT8 schön klein ist, würde ich diesen gerne Huckepack draufkleben, ohne großartig zusätzliche Bautaeile zu benötigen.

Vielen Dank für dein großzügiges Angbot!! Ich bastel dir einen Sketch mit allem drin, der auf einem 328p 16Mhz lauffähig ist. Der wird aber hässlich groß und wird nicht schön aussehen. :wink:
Zusäzlich dazu liefere ich die einen UNO Test Sketch, der den 1wire scannt und Sensoren ausliest...
Aber lass mir bitte noch zwei Tage Zeit.

Ein Oszi ist gut, ein Saleae Logicanalyser wäre besser.

mde110:
Der kann ein I2C.

Du meinst sicher "kein I2C", richtig?

mde110:
Ein Oszi ist gut, ein Saleae Logicanalyser wäre besser.

Geht auch BitScope?

mde110:
Aber lass mir bitte noch zwei Tage Zeit.

Da ich einer regelmäßigen Arbeit nachgehe, habe ich meist am WE etwas mehr Muße. Sonst hast Du alle Zeit dieser Welt.

Und ich verspreche nur, daß ich es versuche. Erfolg ist nicht garantiert :slight_smile:

Fehler wurde korrigiert.

Das mit der regelmäßigen Arbeit ist so ein Problem, ich suche auch noch nach einem passablen gut bezahlten Ausweg. Dann kommt noch Familie dazu, und das ist dann der Overkill... Arduino hat dann nichts mehr zu sagen, erst ab 22:00 ;D

Agmue, ich erwarte nichts, du darfst testen und gut. Wenns nicht klappt, dann klappts halt nicht. Danke gibts im Voraus!

Es gibt da auch noch andere Libs, die habe ich aber noch nicht genauer angeschaut/getestet...
Aber eins nach dem anderen.

das klingt spannend: tm3d.de - geniale 1-Wire Sensoren und mehr Da hat einer die 1-Wire Bausteine DS18B20 und DS2423 mit einem Attiny25 nachgebaut. Ggf. kannst Du den Code adaptieren. Ich hab ihn jetzt nicht durchgearbeitet, allerdings erscheint er mir gut aufgebaut.

mgcss:
das klingt spannend: tm3d.de - geniale 1-Wire Sensoren und mehr Da hat einer die 1-Wire Bausteine DS18B20 und DS2423 mit einem Attiny25 nachgebaut. Ggf. kannst Du den Code adaptieren. Ich hab ihn jetzt nicht durchgearbeitet, allerdings erscheint er mir gut aufgebaut.

Danke dir! Schau ich mir mal an...

agmue, im Anhang ist der 1wire Slave-Test :wink:
Hast du mit den DS18B20 Sensoren schon gearbeitet?

OneWire_Slave_0004.zip (11.3 KB)

mde110:
Hast du mit den DS18B20 Sensoren schon gearbeitet?

Nein, leider noch nicht.

Dein Slave-Test erzeugt bei meinem UNO leider keine Signale, ich habe an 2 gemessen. Was mache ich falsch?

Daher habe ich mir OneWire und DallasTemperature heruntergeladen und das Beispiel Single.pde radikal gekürzt:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  sensors.begin();
}

void loop(void)
{ 
  sensors.requestTemperatures(); // Send the command to get temperatures
}

Da erhalte ich ein wiederkehrendes Signal.

Um die Problemstellen zu identifizieren, habe ich dann den Sketch auf einen ATtiny geladen. Zu meiner Überraschung bekomme ich da an D2 ein Signal, das dem des UNO entspricht:

Die Cursor stammen noch von der UNO-Messung, während das Signal vom ATtiny85 kommt.

Da Deine Bibliothek aber Slave im Namen trägt, ist das wohl nicht, was Du möchtest. Oder könnte man die OneWire umstricken zu Slave?