Hi Leute, Hat vielleicht einer Zeit mir auf Deutsch zu erklären wie ich mit dem Temperatursensor DS1621 eine Höhere Auflösung errechnen kann. Verstehe den Englischen Text abzulut nicht. Weiß nicht welche Register ich nun mit wechen werten teilen, addieren, oder subtrieren soll ?!?!? mfg
Hallo, verstehe nicht, was es da nicht zu verstehen gibt... Wenn Du mehr Auflösung willst, musst Du die beiden anderen Register (COUNT_REMAIN mit dem READ_COUNTER-Befehl und COUNT_PER_C mit dem READ_SLOPE- mit nachfolgendenm READ_COUNTER-Befehl) auslesen und in die Formel einsetzen. Wörtliche Übersetzung: Höhere Auflösung kann man erreichen, indem man den Temperaturwert liest und das LSB (das MSB des 2. Bytes) abschneidet {ADÜ: d.h. das 2. Byte einfach ignoriert}. Der Wert, der im Zähler verbleibt, kann mit dem READ_COUNTER-Befehl gelesen werden. Dieser Wert ist die Variable COUNT_REMAIN, nachdem die Zählzeit abgelaufen ist. Wenn man den Wert des Slope Accumulators mit dem READ_SLOPE-Befehl in das Zähler-Register lädt, kann dieser Wert (COUNTS_PER_C) gelesen werden; so erhält man die Zahl (Aulösung) pro Grad {ADÜ: der Wert COUNTS_PER_C dürfte bei diesem IC immer 16 sein, braucht also nicht ausgelesen werden}. Die tatsächlich Temperatur kann dann mit folgender Formel berechnet werden: ..... Praktisch würde ich es so machen: TEMP_READ (nur High-Byte) in ein 16-bit-Register laden um 4 nach links schieben 4 abziehen (-0.25 aus der Formel) Count_Remain dazuaddieren dann hast Du die Temperatur in 16tel Grad. Ganzzahl-Arithmetik: Die vollen Grad erhälts Du, wenn Du dieses Register sicherst und um 4 Bit nach rechts schiebst, die Nachkommastellen, indem Du das Register mit 15 andierst. Floadting-Arithmetik: Das Ergebnis (16tel-Grad) einfach durch 16 dividieren. PS: habe alles aus dem Stegreif gemacht, keine Garantie! Melde Dich auf jeden Fall nochmal, wenns klappt oder wenns nicht klappt, das schaffen wir auf jeden Fall. Poste Deinen Code als Anhang.
Hallo, nochmal ich, Du kannst auch alle 16 Bits des Temperaturwertes in ein 16-Bit-Register lesen, dann mit $ff00 andieren und um 4 Bits nach rechts schieben. Du kannst aber auch einen DS1631, DS1721, DS1731 oder DS1775 nehmen, die von Haus aus schon 12 Bit können. DS 1721 und DS1775 sind volatile, d.h. merken sich die Thermostatwerte nicht ohne Vcc. Noch eine Anmerkung an ALLE, die nicht verletzen, sondern zum Lernen anspornen soll: Ich bitte Euch um mehr Konzentration beim Schreiben, sowohl von Code als auch von Posts. In den 4 Zeilen des Ursprungsposts finde ich 12 Rechtschreibfehler (zumindest nach der alten besseren Regeln) (ich gebe zu, in meinem sind auch 3, aber es sind auch fast 40 Zeilen) Im Hinterkopf denke ich mir, wenn schon in der natürlichen Sprache solche passieren, wie schaut's dann erst mit dem Programmtext aus. Und wenn's dann nicht funktioniert, wundert's mich nicht. In Eurerem Interesse also bitte nochmal kritisch lesen, bevor man abschickt, und lernen, lernen, lernen, was das Zeug hält, es lohnt sich für später allemal! Aber das tun wir ja alle hier.
Bevor ich jetzt lange suche: Wie kann ich denn 2 Register zusammenfassen um auf ein 16 Bit register zu kommen? Arbeite mit dem Prog-Studio von Batronix und dem 89c2051.
Hab jetzt man Read Counter ausgelesen, der Wert bleib ja gar nicht konstand!!! Hab es mir jetzt mal so ausgedacht. R1 = High Byte der Temperatur R2 = Read Counter R3,R4 das 16Bit register R3 MSB ; r4 LSB MOV A,R1 'Temperatur in Akku ANL A,#0fh 'rechte 4 Bit herausfiltern SWAP A 'rechte und linke 4 Bit vertauschen mov R4,A 'Akku nach R4 kopieren LSB MOV A,R1 'Temperatur in Akku SWAP A 'rechte und linke 4 Bit vertauschen MOV R3,A 'Akku nach R3 kopieren MSB Jetzt hab ich die Temperatur um 4 Bit nach rechts geschoben. Und wie Addiere ich jetzt zu beiden Registern R2 (read count) ??????????
Auch ich kann mich mal irren, hab nochmal nachgelesen, es KÖNNTE sein, dass der Wert COUNTS_PER_C ist nicht konstant 16 ist, sondern von der Temperatur abhängen KÖNNTE (zur Korrektur der parabolischen Abhängigkeit) und doch ausgelesen und zur Berechnung verwendet werden MÜSSTE. Selbst ausprobieren! Zitat: At the same time, the counter is preset with a value determined by the slope accumulator circuitry. This circuitry is needed to compensate for the parabolic behavior of the oscillators over temperature. @Walter: mit dieser Controller-Familie kenne ich mich (noch) nicht aus, weiß ich nicht. Das Read-Count Register ändert sich, weil die Temperatur nie ganz gleich bleibt. Schon durch die Eigenerwärmung beim Ausführen des Conversion-Befehls erwärmt sich das IC (kein Witz!). Deshalb keine "Salven abfeuern", sondern immer zwischen 2 Conversions einige Sekunden warten. Bedenke, dass die Auflösung 1/16° beträgt. Auch muß die Versorgung dann schon sehr stabil und rauscharm sein.
Hilfe!!!! Hab die beiden Bytes Read-Count und Read-Slope ausgelesen. Read Slope ist immer 13dez Read Count ist total instabiel Wie soll man damit Rechnen? Da kommt nur Schrott bei raus. mfg
Hi! Ich hab auf http://www.wolfgang-back.com/PDF/Messen%20von%20Temperaturen.pdf eine Möglichkeit gefunden, allerdings funktioniert die nicht so richtig bei mir.... mfg stefan noll
Hi ich bins nochmals :-) Die Temperaturconversation muss angehalten werden und rund 1 Sekunde gewartet werden, bevor Counter & Slope Werte ausgelesen werden sollten.
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.