IIC und DS1803 DigiPoti

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

Moderator: Guido Körber

guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

IIC und DS1803 DigiPoti

Post by guidooffer »

Hallo,
ist der adressierbare Dual digitale Potentiometer DS1803 von Dallas mit dem IO-Warrior40 kompatibel. Ich habe mal was von Clock-Jittering gelesen, bin mir aber nicht so sicher bei dem DS1803. Ist da jemandem was bekannt darüber, oder hat schon mal jemand mit dem DS1803 in Verbindung mit dem Warrior etwas gemacht. Ich kriege das Ding jedenfalls mit dem Warrior nicht zum Laufen.

Gruss
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Den Chip hatte ich noch nicht in der Hand, habe aber mal in das Datenblatt gesehen und finde die Ansteuerung eigentlich nicht zu kompliziert. Für Java könnte ich eine Klasse für IOWJ erstellen, kann die aber nicht testen, weil ich den DS1803 nicht hier habe und 8,40 (Reichelt) mir nur zum Testen etwas zu teuer ist. Wenn Du möchtest, kann ich auch mal einen Blick auf Deine Sourcen werfen.
guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

Post by guidooffer »

Vielen Dank für die Antwort.
Ja, die Ansteuerung und auch der Anschluss ist nicht sonderlich kompliziert. Ich habe nur das Problem, dass das Ding nicht reagiert. Normalerweise sollte er mir eine Spannung ausgeben, die max der VCC liegt und sollte diese in 256 Stufen runter oder rauf regeln können. das macht es halt nicht. Ich bekomme auf den Ausgang keine Spannung. Der IOW meldet auch keine Fehler zurück. Daher war meine Vermutung, dass der DS1803 keine interne Clock hat und somit der IOW mit ihm nicht klar kommt.
Mein Code ist mit Delphi erstellt. Ich weiss nicht ob Du damit zurecht kommst. Kann Dir aber mal gerne das Script schicken.

Gruss,
Guido
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Also ich verstehe das Datenblatt anders. Der Chip enthält zwei Potis, die je drei Anschlüsse habe (wie ein Poti eben so hat). Potis erzeugen keine Spannungen ;-). Ich würde zwischen L0 und W0 ein Ohm-Meter schalten und den Widerstand messen. Oder L0 mit GND und H0 mit Vcc verbinden. Dann kannst Du eine Spannung zwischen W0 und GND messen (0V nach anlegen der Betriebsspannung, 5V bei vorheriger Ausgabe einer 255 an Pot 0). Java Klasse ist übrigens fertig (Reklame).
guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

Post by guidooffer »

Sorry, habe mich nicht richtig ausgedrückt.
Natürlich habe ich W0 gegen GND gemessen. Das heisst ich habe zuvor L0 mit GND verbunden und H0 mit VCC.


HEY.........HIPHIP :-) Es hat funktioniert. So ein dummer Fehler im Script (falsche Report ID). Ich wäre fast wahnsinnig geworden. Nun klappt es prima. Danke nochmals für die schnelle Response.
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Sorry für die "Belehrung", aber das Niveau hier im Forum streut doch ziemlich stark und so habe ich ein eher niedriges angenommen.

Interessant sind eigentlich nur die Reports. Einmal write() und read() sind erforderlich. Ich würde, um z.b. 128 auszugeben (müßte dann ca. 2,5V entsprechen), folgenden Report senden:

{2,0xc3,addr,cmd,128,0,0,0} (addr = 5 bei Device Address 0 und cmd = 0xA9 für pot 0)

und einen Report lesen (der sollte auch die id=2 haben), bei dem dann bit 7 vom 2. Byte getestet wird (1=error) und in den drei niederwertigen Bits vom 2. Byte müßten dann eine 3 stehen (für 3 gesendete Bytes). Sollte Bit 7 = 1 oder die 3 Bits != 3 sein, hat die Kommunikation nicht geklappt (Verkabelung und Device Address checken!).

Aber wie ich sehe, hast Du es ja hinbekommen und ich eine Klasse für IOWJ mehr (ist dann in der 0.9.5 enthalten, Reklame).
guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

Post by guidooffer »

Ich finde im übrigen Dein IOWJ-Projekt Klasse !!!

Nun für all die jenigen die auch mal mit dem Poti-IC was basteln wollen und mit Delphi programmieren, das Snippet:

BDATA: array [0..7] of Byte;

BDATA[0] := $02;
BDATA[1] := $84;
BDATA[2] := $50;
BDATA[3] := $AA; //$A9
BDATA[4] := $FF; //MAX VALUE
for I := 5 to 7 do BDATA := $00;
DEVICE.WriteFile(BDATA, 8, W);
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Guido,

Recht herzlichen Dank für Deinen Zuspruch.
Dennoch würde ich über "BDATA[1] := $84;" gerne mit Dir diskutieren:
1. Warum generierst Du keine Stop (ergibt dann $Cx) ?
2. Warum die Länge 4 wenn Du nur 3 Byte Nutzdaten hast (ergibt dann $C3)? Bei BDATA[3] :=$A9 (write position to pot0) würdest Du so pot1 auf 0 gleich mit setzten, und das wolltest Du doch nicht, oder?

Gruß
Thomas
guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

Post by guidooffer »

Hallo Thomas,
die Länge von 3 Bytes ist ausreichend und bis 6 Bytes (C3-C6) möglich, Stop ist nicht zwingend nötig. Byte[5]-[7] kann meinetwegen genauso $FF sein. Wenn Pot0 gesetzt werden soll, wird Byte[3] mit $A9 definiert, für Pot1 mit $AA und für beide Pot1/0 zusammen dann mit $AF. Brauche dann für beide Pots zusammen dann auch nicht mehr Bytes schreiben als für eines.

Gruss,
Guido
towaibw wrote:Guido,

Recht herzlichen Dank für Deinen Zuspruch.
Dennoch würde ich über "BDATA[1] := $84;" gerne mit Dir diskutieren:
1. Warum generierst Du keine Stop (ergibt dann $Cx) ?
2. Warum die Länge 4 wenn Du nur 3 Byte Nutzdaten hast (ergibt dann $C3)? Bei BDATA[3] :=$A9 (write position to pot0) würdest Du so pot1 auf 0 gleich mit setzten, und das wolltest Du doch nicht, oder?

Gruß
Thomas
jan138
Posts: 28
Joined: Tue Feb 13, 2007 7:10 pm

Post by jan138 »

Hallo Guido,

habe es jetzt auch mit dem DS1803 versucht. Bei mir läuft er leider noch nicht. Programmiere auch in Delphi. habe aber den IOW56, macht das einen unterschied?

Könntest du mir vielleicht deinen Quellcode schicken?

Gruss Jan
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ja, es macht einen Unterschied, denn der IOWarrior 56 hat ein anderes Reportformat. Bitte mal die Datenblaetter vergleichen. Sowohl beim Einschalten des IIC oder SPI als auch beim Senden der Daten gibt es Unterschiede.
jan138
Posts: 28
Joined: Tue Feb 13, 2007 7:10 pm

Post by jan138 »

Hi,

habe noch einen IOW40 liegen gehabt.
Funktioniert aber irgentwie so nicht.

Habe das Beispiel aus der SDK genommen für IIC und folgende Änderung vorgenommen:

Report.ReportID := $02;
Report.Bytes[0] := $C3;
Report.Bytes[1] := $50;
Report.Bytes[2] := $AF;
Report.Bytes[3] := $88;
IowKitWrite(IOWIIC, IOW_PIPE_SPECIAL_MODE, @Report, IOWKIT_SPECIAL_REPORT_SIZE);
IowKitRead(IOWIIC, IOW_PIPE_SPECIAL_MODE, @Report, IOWKIT_SPECIAL_REPORT_SIZE);


Habe alle Adresseingänge auf Masse gelötet.

Gruss Jan
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Was kommt denn dabei raus wenn die Daten einfach mittels des Tools SimpleHIDwrite geschickt werden?
jan138
Posts: 28
Joined: Tue Feb 13, 2007 7:10 pm

Post by jan138 »

was ist das für ein Tool SimpleHIDwrite?
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Das ist ein Beispielprogramm der im SDK enthaltenen HID-Komponente und gleichzeitig ein nuetzliches Tool mit dem man alle HID-Geraete (also auch den IOWarrior) direkt ansprechen kann.
Post Reply