www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1621 höhere Auflösung


Autor: Forest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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) ??????????

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Forest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan Noll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hab auf
http://www.wolfgang-back.com/PDF/Messen%20von%20Te...

eine Möglichkeit gefunden, allerdings funktioniert die nicht so richtig
bei mir....

mfg
stefan noll

Autor: Stefan Noll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich bins nochmals :-)

Die Temperaturconversation muss angehalten werden und rund 1 Sekunde
gewartet werden, bevor Counter & Slope Werte ausgelesen werden sollten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.