mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1621 LSB immer Null ?


Autor: Michael Lehr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kennt sich jemand mit dem DS1621 aus ?

Beim Auslesen der Temperatur ist das LSB immer Null.
Muß ich irgendwas einstellen um 9-Bit Auflösung zu kriegen ?

Merkwürdig ist auch, dass ich im Single_Shot Modus niemals
ein DONE Flag im configuration-Register bekomme.

Ist das Ding etwa kaputt ?

Vielen Dank vorab

Autor: Forest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey du, das kenn ich ;o) !!!
Versuche mal 7 Bit auszulesen statt 8, wenn du mit einer Schleife
arbeitest, einfach 7 durchläufe eingeben. Frag mich nicht warum!? Das
hat ich nochnicht herausgefunden, aber daran lag es bei mir!!!
Womit arbeitst du? Batronix at89Cxx51?
Hast du das mit der höheren Auflösung vom Ds1621 schonmal hinbekommen?
Register "Counter" & "Slope" auslesen und mit der Formel
ausrechnen? Da bin ich nehmlich grad am Rätseln!
mfg
 Forest

Autor: Michael Lehr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,
werde ich mal versuchen !
Ich arbeite im moment mit nem AVR AT90S8535 in ASM an der Sache.
Meine I2C Routinen sind von Atmel, mal sehen ob die sich so einfach
anpassen lassen. Funktionieren ansonsten einwandfrei.
Die höhere Auflösung halte ich eigentlich für Unsinn.
Bei 2°C Abweichung des DS1621 ist eigentlich schon die eine
Nachkommastelle nur Kosmetik ( wenn mann absolute werte braucht ).
Ich schau mir das aber trotzdem mal an, wo liegt das Problem genau ?

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also ich hab' ihn auch in ASM angesteurt (mit meinen eigenen
I2C-Routinen). 9 Bit geht einwandfrei.

Auf Wunsch such' ich mal das Proggi raus.

Sebastian

Autor: Forest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2°C Toleranz? Wußte ich gar nicht, wo steht den das?
Das Problem liegt eigentlich darin, das ich keine konstanten Werte von
"Count" und "Slope" bekommen, somit kommen am Ende der Formel auch
nur instabiele Werte raus.
Das Problem mit dem 9. Bi,t vom Temperaturwert und das Done Bit, hab
ich folgendermaßen herausgefunden, hab mir die Routine allerdings
selber ausgedacht, weiß nicht wie es Atmel gemacht hat.

Das Bit vom Port, wo die SDA Leitung vom I²C Bus dranhängt, schiebe ich
in Register C. C Routiere ich dann links mit dem Akku. Das ganze 8 mal.
Dann hab ich das ganze Byte im Akku stehen. So funktioniert es mit
allen I²C Bausteinen die ich bisher hatte (PCF....).

Funktioniert beim DS1621 auch, aber nur mit dem MSB Byte von der
Temperatur, Done Bit fehlt, und beim auslesen von Slope und Count hängt
sich das Ding auf! Irgendwann bin ich auf die Idee gekommen daß das LSB
ein mal zu weit rotiert wird und das höchste Bit rausfällt. So war es
dann auch. Hab aber keine Ahnung warum!!?!?? Mit 7 mal hat es dann
Funktioniert. Mit 7 mal rotieren, kam dann auch das Done Bit zum
Vorschein, und beim auslesen vom Slope und Count ist der Sensor dann
auch nicht mehr "Abgestürzt". Das MSB Byte muß ich allerdings immer
noch mit 8 mal Routieren auslesen, sonst stimmt die Temperatur nicht.
Hier meine Routine:

read_data:
  MOV R7,#08h            'Anzahl der Subroutine durchläufe
poi3:  SETB scl               'SCL auf High setzen
  call wait_i2c          'kurz warten
  MOV C,sda              'SDA in C kopieren
  RLC A                  'Akku mit C links Routieren
  CLR scl                'SCL auf Low setzen
  call wait_i2c          'kurz warten
  DJNZ R7,poi3           'R7 - 1 wenn nicht 0 dann springe poi3
  RET

Kein Plan warum, aber es geht! Vielleicht liegt es an diesem Mysterium
das Count und Slope nicht konstant sind?! Muß ich mir nochmal den Kopf
drüber zerbrechen. Aber wenn der Sensor wirklich
2°C Toleranz hat, kann ich mir das Schenken!
Mfg
Forest

Autor: Forest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sebastian
Kannst mal Posten dein Prog. Dann hab ich ein Vergleich, und vielleicht
find ich mein Fehler. War schon am überlegen ob es an dem Programm von
Batronix liegt, dem Vertraue ich nehmlich auch nicht so! Kann ja nicht
sein das es mal so Funkt, und dann wieder so. Vielleicht bin ich ja
auch nur einfach zu Doof g
mfg

Autor: Sebastian Wille (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hier ist mal mein Prog. Ist für den Mega8, die Temperatur wird auf dem
USART ausgegeben.

Sind einige Kommentare im Programm, bei Fragen einfach hier posten.

Sebastian

Autor: Michael Lehr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forest,

hab mich geirrt mit der Toleranz, war ein anderer Sensor den ich im
Kopf hatte. Auf Seite 15 des DataSheet sind die Fehlergrenzen
angegeben.

Gruß Michael

Autor: Michael Lehr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

Habe mal den oben genannten Source Code für meinen AVR angepasst.

Jetzt geht es !

Aber: Du betreibst den Bus ja nur mit 400 Hz .

Ich kann so ca. bis 1.2 kHz aufdrehen.
Darüber gehts wieder nicht.

Das erste Byte kann ich sogar mit 120 kHz auslesen !

Schreiben kann ich problemlos bis 250 kHz.

Ist mir irgendwie ein Rätsel.

Trotzdem vielen Dank

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Michael,

schön, daß ich Dir helfen konnte! :-)

Wie kommst Du auf 400 Hz? Ich komme auf ca. 1 kHz bei 4 MHz. Naja,
macht ja auch kein großer Unterschied. Laut Datenblatt geht der DS1621
bis 100kHz (im "Fastmode" bis 400 kHz). Fall Du mehr als 120 kHz
willst, mußt Du vielleicht noch Deine Kabellänge verkürzen. Hat aber
überhaupt kein Sinn, da eine Konvertierung 750ms dauert!

Viel Spaß noch!

Sebastian

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.