Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > > Hallo Dirk, > > > > > > lt. Datenblatt des DS18B20 steht die Information nach tconv nach folgenden Zeiten > > > (abhängig von der Auflösung) zur Verfügung: > > > > > > Table 2. Thermometer Resolution Configuration > > > R1 R0 RESOLUTION(BITS) MAX CONVERSION TIME > > > 0 0 9 93.75ms (tCONV/8) > > > 0 1 10 187.5ms (tCONV/4) > > > 1 0 11 375ms (tCONV/2) > > > 1 1 12 750ms (tCONV) > > > > > > Dabei habe ich keinen Unterschied zwischen parasitärer und externer Stromversorgung gefunden. > > > > > > Der 100 Ohm Widerstand sollte sich zwischen IO-Port (direkt am DS2482)-800 und der 1 Wire Line > > > befinden. (laut Datenblatt von 2004) > > > Habe mir nochmal ein aktuelles Datenblatt ( von 2008) geladen, da taucht der > > > "Line Terminaton Resistor" leider nicht mehr auf. Warum auch immer. > > > > > > Gruß > > > Jörg > > > > Hallo Jörg, > > > > das Auslesen der 10 Sensoren funktioniert jetzt soweit, allerdings dauert das Auslesen > > ("Read" anschließend "Convert") um die 2800ms > > => also fast 3 Sekunden > > Soweit kein Problem, wer braucht schon jede ms alle 10 aktualisierten Temp.-Werte ;-) > > Auch das zunächst komplette Auslesen aller DS18B20 (readTemp) und das anschließende Konvertieren > > aller DS18B20 (convertTemp) mit anschließendem Warten von >750ms hilft hier nicht weiter. > > Bereits bei einem einzigen angeschlossenen Sensor werden im Durchschnitt 151ms für das Auslesen und > > anschließend zusätzlich 250ms für das Konvertieren benötigt.Lediglich ein Sensor ist dabei der die > > Statistik zeitlich nach unten drückt. Warum der eine aus der Reihe springt, keine Ahnung. > > Sonst sind alle Messungen ca. im gleichen Bereich. > > > > Da ich allerdings dummerweise auch, in einem anderen Thread, die Auswertung von Tastern (zur Licht- bzw. > > Rollladensteuerung) durchführe reagiert hier die C-Control, sprich der I2C-Bus in diesen ca. 3sek. > > merklich schlechter als in der Zeit, wo sich der Thread für das Auslesen der Temp.-Sensoren gerade > > im "standby-Modus" (hier über einen "sleep 10000;"-Befehl) befindet. Auch Runtersetzen der Prio für diesen > > Thread auf "run=2" hilft nicht weiter. > > Somit muss dann der Mensch den Licht-Taster zwei bzw. auch drei mal drücken, bis das > > "Licht angeht". Bewegungsmelder als Eingänge haben dann auch ihre Probleme. > > Das geht so gar nicht. > > > > Wie lange dauert bei Dir das Auslesen der besagten 15x DS18B20-Sensoren? > > Laufen bei Dir auch noch andere Geschichten in dieser Zeit auf dem I2C? > > Gibt es dabei Timing-Probleme? > > Könntest Du das alte Datenblatt (2004) als Link einfügen oder anderweitig zusenden? > > Ich kann die Geschichte mit dem 100Ohm-Widerstand noch nicht ganz nachvollziehen. > > > > Vielen Dank für Deine/Eure Hilfe. > > Hallo miteinander, > > ich habe mich mal hingesetzt und die verschiedenen Zeiten[ms] ermittelt, für welchen Schritt (Befehlszeile) > welche Zeit verstreicht. Sicherlich kann man nicht jeden Wert auf die "Goldwaage" legen, so kann man > doch eine gewissen Trend erkennen, wo die Zeit liegen bleibt. > <code> > function matchROM(byte sensor) returns int > {byte i; > > // NEU hinzu wegen 800'er > ds2482.setCH(TS[sensor].addr,TS[sensor].ch); // Dauer: 5...8ms > sleep 1; // Dauer: 2ms > > if (ds2482.resetDevices(TS[sensor].addr)) // Dauer: 8...12ms > { > sensor=sensor shl 3; // Offset * 8 > while (ds2482.getStatus(TS[sensor].addr) and 1) // Dauer: 3...7ms > { sleep 1; } > ds2482.writeByte(TS[sensor].addr,ds2482.MROM); // Dauer: 5...13ms > for i = 0...7 ds2482.writeByte(TS[sensor].addr,DS18B20addr[sensor+i]); // Dauer: 42[0] sonst 88ms > return -1; > } > return 0; > } > > function convertDS18B20(byte sensor) > { > matchROM(sensor); // Dauer: 60.64[0] sonst 117...121ms > ds2482.writeByte(TS[sensor].addr,convertTEMP); // Dauer: 10...12ms > } > > function readDS18B20(byte sensor) returns int > {int x; > > matchROM(sensor); // Dauer: 62.65[0] sonst 119...122ms > ds2482.writeByte(TS[sensor].addr,readSCRATCHPAD); // Dauer: 9...12ms > x=ds2482.readByte(TS[sensor].addr) or (ds2482.readByte(TS[sensor].addr) shl 8); // Dauer: 20...25ms > return x; > } > </code> > > Was ist zu erkennen? > Der "writeByte"-Befehl benötigt richtig viel (I2C)-Zeit. > Die Zeiten sind übrigens alle unabhängig von der eingestellten Prio über den run-Befehl. > Was noch auffällt ist der Zeitunterschied beim Port-0 den anderen gegenüber, was das Schreiben betrifft. > Allerdings ist beim Schreiben von "convertTEMP" und "readSCRATCHPAD" widerum kein Unterschied > festzustellen. mmmhhhhhh. > Insgesamt, über alle 10 Sensoren, dauert es 1248...1262ms zu konvertieren bzw. 2763...2772ms um die > beiden Temp.-Bytes auszulesen und anschließend zu konvertieren. > > <b>Wie kann die Abfrage der 10 (später auch 15) Sensoren effektiver gestalten werden, so dass > eine sichere Erkennung eines I2C-Eingang (Licht-Taster bzw. Roll.-Taster) realisiert werden kann ? </b> > > Grüße Dirk.