Hallo,
ja ich weiß, dass es schon so ein ähnliches Thema gibt, aber ich verstehe einfach net, über was die da reden.
Also ich hab den Chip PCF 8591, und würde gerne die 4 A/D-Wandler und dein einen D/A-Wandler nutzen.
Ich hab die zwei Pins des Chips also I2C-SDA und I2C-SCL mit dem I/O-Warrior 40 verbunden.
Da wär schon meine erste Frage, ob ich da noch was an den I/O-Warrior anschließen muss.
Meine zweite Frage lautet, wie ich den Chip nun mit Delphi ansteuern kann. Also der I/O-Warrior funktioniert einwandfrei nur ich hab davor noch nie etwas mit Chips und Hardwareadressen und so Zeugs gemacht, also freu ich mich auf jede Hilfe.
PCF 8591 ansteuern mit Delphi
Moderator: Guido Körber
-
Robert Marquardt
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Ich zieh mir mal naher das Datenblatt und versuche mal die Umsetzung zu erklaeren. Das ist meist das schwierigste Problem.
An +5V und Masse muss der Chip bestimmt auch angeschlossen werden.
Es steht zwar zu vermuten das das als selbverstaendlich nicht erwaehnt wurde, aber wir haben schon alles erlebt.
An +5V und Masse muss der Chip bestimmt auch angeschlossen werden.
Es steht zwar zu vermuten das das als selbverstaendlich nicht erwaehnt wurde, aber wir haben schon alles erlebt.
Hallo,
ich hab mit dem baustein auch mla rumgespielt, hier ist eine kleine übersicht über die ansteuerung, steht sonst aber auch soweit im Datenblatt.
die Werte in meinen beispielen sind alles hexwerte, d.h, 82 = 1000 0010
die reports sind diesem format dargestellt: rep ID | werte
IIC "anschalten"
01 | 01 00 00 00 00 00 00 00
Kanäle auslesen:
02 | 82 Writeaddr ControlByte
03 | AnzByte Readaddr
wenn Du alle adresspins des PCF mit GND verbindest, hast Du die Writeaddr 90 und Readaddr 91
Controlbyte könnte z.B. 40 =0100 0000 sein (setze analog output on, alle kanäle einzelnd auslesen, nach dem auslesen eines kanals nicht automatisch den kanal erhöhen, wähle kanal 00)
Achtung: das aktuelle ergebnis am eingang kommt immer einen zyklus verzögert an, d.h. man sollte 2 mal hintereinander wandeln, damit man den aktuellenpegel am AD eingang bekommt.
spich auslesen des kanals 0 könnte wie folgt aussehen:
02 | 82 90 40
03 | 02 91
setzen des digitalausganges kannst Du mit
02 |c3 writeaddr controlbyte WERT
also z.B.:
02 |c3 90 40 WERT
Testen, ob Deine schaltung so funktioniert kann man mit dem HDI Tool ganz gut (..\sampels\General HID Tools\SimpleHIDWrite.exe)
schaltest einfach oben auf complex interface, klickst unten einmal auf read und gibst dann deine Zahlen ein und bestätigst diese mit write. zur implementierung in delphi kann ich Dir nicht viel sagen, aber schau Dir doch mal die beispiele an, die sollten das ein wenig vereinfachen.
ich glaub ich hab mich ziemlich verworren und unstrukturiert ausgedrückt, aber vielleicht hilft es ja weiter.
ich hab mit dem baustein auch mla rumgespielt, hier ist eine kleine übersicht über die ansteuerung, steht sonst aber auch soweit im Datenblatt.
die Werte in meinen beispielen sind alles hexwerte, d.h, 82 = 1000 0010
die reports sind diesem format dargestellt: rep ID | werte
IIC "anschalten"
01 | 01 00 00 00 00 00 00 00
Kanäle auslesen:
02 | 82 Writeaddr ControlByte
03 | AnzByte Readaddr
wenn Du alle adresspins des PCF mit GND verbindest, hast Du die Writeaddr 90 und Readaddr 91
Controlbyte könnte z.B. 40 =0100 0000 sein (setze analog output on, alle kanäle einzelnd auslesen, nach dem auslesen eines kanals nicht automatisch den kanal erhöhen, wähle kanal 00)
Achtung: das aktuelle ergebnis am eingang kommt immer einen zyklus verzögert an, d.h. man sollte 2 mal hintereinander wandeln, damit man den aktuellenpegel am AD eingang bekommt.
spich auslesen des kanals 0 könnte wie folgt aussehen:
02 | 82 90 40
03 | 02 91
setzen des digitalausganges kannst Du mit
02 |c3 writeaddr controlbyte WERT
also z.B.:
02 |c3 90 40 WERT
Testen, ob Deine schaltung so funktioniert kann man mit dem HDI Tool ganz gut (..\sampels\General HID Tools\SimpleHIDWrite.exe)
schaltest einfach oben auf complex interface, klickst unten einmal auf read und gibst dann deine Zahlen ein und bestätigst diese mit write. zur implementierung in delphi kann ich Dir nicht viel sagen, aber schau Dir doch mal die beispiele an, die sollten das ein wenig vereinfachen.
ich glaub ich hab mich ziemlich verworren und unstrukturiert ausgedrückt, aber vielleicht hilft es ja weiter.
-
Robert Marquardt
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
by the way, eine frage hab ich auch noch.
wenn ich 7 byte vom IOW lesen will, kommen ja 2 reports zurück, der zweite enthält ja nur noch ein byte vom I2C slave.
Wenn ich das mit dem simple-HDI-write mache, kommen auch beide reporte zurück, jedoch verwundert ich der zweite ein wenig:
03| 01 "wert" "5 werte aus dem alten report"
wird das vom IOW so zurückgeliefert bzw nicht überschrieben oder liegt das an dem Programm, dass der Report nicht mit nullen aufgefüllt ist? (frage: soll so sein oder kleiner bug?)
Gruß Martin
wenn ich 7 byte vom IOW lesen will, kommen ja 2 reports zurück, der zweite enthält ja nur noch ein byte vom I2C slave.
Wenn ich das mit dem simple-HDI-write mache, kommen auch beide reporte zurück, jedoch verwundert ich der zweite ein wenig:
03| 01 "wert" "5 werte aus dem alten report"
wird das vom IOW so zurückgeliefert bzw nicht überschrieben oder liegt das an dem Programm, dass der Report nicht mit nullen aufgefüllt ist? (frage: soll so sein oder kleiner bug?)
Gruß Martin
-
Guido Körber
- Site Admin
- Posts: 2880
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: