ds1631 am iic bus - wie lesen?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
formatc1702
Posts: 55
Joined: Thu Apr 15, 2004 11:23 pm
Contact:

ds1631 am iic bus - wie lesen?

Post by formatc1702 »

hey!

ich habe gerade versucht, die temperatur aus einem ds1631 auszulesen (per vb), bin aber kläglich gescheitert. ich habe einfach einen 2-byte read ausgelöst...
muss ich vorher noch irgendetwas einstellen damit ich danach ständig die temperatur auslesen kann (etwa jede sekunde)?
es wäre nützlich, wenn jemand mir sagen könnte was für bytes ich an den iow schicken muss damit es klappt.
die adresse vom ds1631 ist 1001000x (x ist R/W)

thx 4 hlp!

ps: ja, das datenblatt zum chip habe ich gelesen, aber nicht ganz kapiert :lol:
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ich such mir mal das Datenblatt und dann sehen wir weiter.
Ich habe gerade einen MAXIM 6675 (am SPI) zum Laufen gebracht.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Also erst mal den IIC Special Mode einschalten per Report "01 01 00 00 00 00 00 00".

Offenbar muss man zuerst ins Config Register schreiben.
Also ein Access Config absetzen und POL und 1SHOT Bit geeignet setzen.
Wenn ich das richtig sehe ist das ein Write auf den IIC mit erst mal dem Control Byte,
dann &HAC als Command Byte gefolgt von dem Wert der ins Config Register gehoert.
Also ein 3 Byte Write auf den IIC mit Start und Stop Bit.
Der Continuous Mode bietet sich an.

"02 C3 90 AC yy 00 00 00" mit 90 = Control Byte = schreiben auf Slave Adresse 0.
yy = Config Register Wert. Den kann ich nicht ausrechnen, da die Infos ueber die konkrete Benutzung fehlen.

Es folgt das Einschalten der Temperaturmessung:
"02 C2 90 51 00 00 00 00" Ein Write mit Start Convert T als Kommando.

Da der IO-Warrior jeweils einen ACK-Report generiert, sollte dieser auch gelesen werden.

Der Chip beschaeftigt sich nun im Continuous Mode mit dem Messen der Temperatur.
Jetzt kann man einen Timer aufsetzen und so alle Sekunde versuchen die Temperatur zu lesen.
Nicht zu oft, da die Chips zwischen ca 100 ms bis 750 ms zum wandeln brauchen.
Es empfiehlt sich das Config Register zu lesen und das Bit zu pruefen das ansagt ob gerade eine Wandlung stattfindet.
"02 C2 91 AC 00 00 00 00" schreiben, den ACK-Report lesen und und dann ein IIC Lesekommando fuer ein Byte absetzen
("03 01 91 00 00 00 00 00").
Ganz sicher bin ich mir jetzt nicht bei dieser Bitfieselei, aber ein Schritt in die richtige Richtung sollte es doch sein.

Klappt das, so sollte jetzt einigermassen klar sein wie man das Temperaturregister liest.
Beim Beenden sollte das Programm die Temperaturmessung brav abschalten und dann den IIC Special Mode auch.
formatc1702
Posts: 55
Joined: Thu Apr 15, 2004 11:23 pm
Contact:

Post by formatc1702 »

hey!

erstmal danke für die infos. es klappt leider noch nicht, ich will aber mal schauen ob ich wenigstens kapiere was diese ganzen bits und bytes machen:
also: iic einschalten und dann
02 C3 90 AC yy 00 00 00

02: ??
C3: ??
90: adresse des bausteins
AC: access config register
yy: die daten für config register
bei mir wäre das 0 (done ist nur lesen also 0, thf,tlf egal, also 0, nvb 0, r1 und r2 auf 0 damit das lesen schneller ist (?), pol egal =0, 1 shot=0 > continuous)

die ersten zwei bytes raff ich nicht :(

und dann

02 C2 90 51 00 00 00 00
02: wieder ??
C2: auch ??
90: adresse
51: start convert, also messung einschalten

die gleichen fragen wie beim 1. byte
02 C2 91 AC 00 00 00 00
02: ??
C2: ??
91: adresse + 1 wegen lesevorgang
AC: acces config
damit weiss man ob er konvertiert oder nicht, stimmts?

03 01 91 00 00 00 00 00
03: ??
01: ??
91: adresse + 1

man sieht, die ersten 2 bytes in jedem report sind mir noch ein rätsel
:lol:
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Das erste Byte ist die ReportID, gibt also praktisch den Befehl an den IO-Warrior an. Das zweite Byte enthält ein paar Flags und die Zahl der Bytes die geschrieben oder gelesen werden sollen.

Mal im Datenblatt die Sektion über IIC lesen...
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Heute nicht mehr. Jetzt gehts ans Bier :-)
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ich beziehe mich auf IOWarriorDatasheet.pdf Kapitel 5.10 (Seite 13).
Das ist wie bei einer Zwiebel. Eine Schale nach der anderen abpellen.

02 C3 90 AC yy 00 00 00
02 = ReportID
C3 = flags byte = Generate Start + Generate Stop + 3 weitere Bytes fuer den IIC im Report (90 AC yy).

90 AC yy ist richtig interpretiert.



02 C2 90 51 00 00 00 00 sollte jetzt leichter gehen.
02 = ReportID
C2 = flags byte = Generate Start + Generate Stop + 2 weitere Bytes fuer den IIC im Report (90 51).

90 51 ist richtig interpretiert.


02 C2 91 AC 00 00 00 00

02 C2 siehe oben
91 AC Access Config lesend

Jeder an den IO-Warrior gesendete Report wird mit einem ACK-Report beantwortet, den man lesen muss.
Man hat also immer ein IowKitWrite/IowKitRead Paar.

03 01 91 00 00 00 00 00
ist nun der Leseauftrag an den IO-Warrior. Das mit 02 C2 91 AC 00 00 00 00 angeforderte Config Register naemlich.
Der Inhalt des Reports ist wohl falsch. Da muss die Dokumentation des IO-Warriors noch verbessert werden. Es muss wahrscheinlich
03 01 01 00 00 00 00 00
sein.

03 = ReportID
01 = 1 weiteres Byte im Report
01 = flags wie beim Schreiben, also 1 Byte vom IIC lesen (eventuell muss noch Start und Stop Bit beruecksichtigt werden).
Die 91 wuerde sich auf den Chip beziehen, aber das Kommando ist ja eine Schicht weiter aussen.

BTW bitte kontakte mich bitte auch noch direkt ueber marquardt at codemercs dot com
Post Reply