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
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
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 ?
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
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
@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
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
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
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
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
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.