Hi,
ja sicher man könnte Baustein über einen Port ode IRQ darauf aufmerksam machen das es neue Servodaten gibt und er die quasi als Master abrufen soll. Aber dann hättest du ja das Problem mit dem anderen COntroller - denn der müsste nu als Slave programmiert werden
Außerdem wäre es Murks
wenn ich es mal so sagen darf.
Nö ich würde baustein dann schon vernünftig als Slave programmieren, entweder mit der genannten Libary die du für 5 Euro bekommst oder halt mit oberer Assembler Routine (die hab ich aber nicht ausprobiert).
Das heißt der Hauptcontroller spricht den Servobaustein per I2C an und überträgt ihm die neuen Servo Positionen. Die IC2 Libary nutzt dazu auch einen Interruptfähigen Eingang als I2C-Port.
Ein Problem besteht dann darin das vermutlich deine Servosteuerung kurz unterbrochen wird (während der I2C Übertragung). Inwieweit das deine Servosteuerung beeinflußt mußt du selbst wissen, mit der genauen Impulsgenerierung für die Servos hab ich mich nicht beschäftigt. Da kann Kjion sicher was zu sagen, denn er kennt das Problem. Er sperrt Interrupts während der Servo-Signalgenerierung soweit ich mich erinnere. Dadurch ist aber dann die volle I2C Geschwindigkeit nicht mehr möglich (es würden Takte verpaßt werden).
Wozu I2creceive ist weiß ich aus dem stehgreif garnicht. Ich nehme aber an das er die I2C-Grundfunktionen I2CSTART , I2CSTOP , I2CRBYTE
einfach zusammenfaßt und einige Bytes liest. Abrufen und senden von Bytes ist ja als Master möglich.
Das Beispiel hab ich gefunden:
Code:
Example
Config Sda = Portb.5
Config Scl = Portb.7
Dim X As Byte , Slave As Byte
X = 0 'reset variable
Slave = &H40 'slave address of a PCF 8574 I/O IC
I2creceive Slave , X 'get the value
Print X 'print it
Das gleiche geht auch mit I2CSTART , I2CSTOP , I2CRBYTE .
Lesezeichen