User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
Diese Funktion braucht man häufig, denn viele I²C Geräte erwarten die Daten im For-
mat:
Slave Adresse – Registeradresse – Daten
void I2CTWI_transmit3Bytes(uint8_t adr, uint8_t data1, uint8_t data2,
uint8_t data3)
Braucht man ebenfalls häufig. Vor allem im Zusammenhang mit dem oben beschrie-
benen Slave Programm – hier kann man die Daten im Format
Slave Adresse – Kommandoregister – Kommando – Parameter1
übertragen.
void I2CTWI_transmitBytes(uint8_t targetAdr, uint8_t *msg,
uint8_t numberOfBytes)
Diese Funktion überträgt standardmäßig bis zu 20 Bytes an die angegebene Adresse.
Wer mehr Bytes direkt hintereinander übertragen muss, kann in der Header Datei den
Eintrag I2CTWI_BUFFER_SIZE vergrößern.
Falls man ein Register angeben muss, an das die Daten geschickt werden, kann man
einfach das erste Byte des Buffers verwenden.
Die Anwendung dieser Funktionen ist denkbar einfach. Beispiel:
I2CTWI_transmit2Bytes(10, 2, 128);
I2CTWI_transmit2Bytes(10, 3, 14);
I2CTWI_transmit3Bytes(64, 12, 98, 120);
Hier werden zweimal nacheinander zwei Bytes an den Slave mit der Adresse 10 ge-
schickt und dann noch drei an den Slave mit Adresse 64.
Analog dazu funktionieren die anderen transmitXBytes Funktionen.
Weiteres Beispiel:
uint8_t messageBuf[4];
messageBuf[0] = 2; // Evtl. hier das zu beschreibende Register angeben...
messageBuf[1] = 244; // Daten...
messageBuf[2] = 231;
messageBuf[3] = 123;
messageBuf[4] = 40;
I2CTWI_transmitBytes(10,&messageBuf[0],5);
So kann man mehrere Bytes (hier 5) nacheinander über den I²C Bus schicken.
Die genannten Funktionen blockieren den Programmablauf nur dann, wenn das I²C
Interface gerade aktiv ist. Dann wird solange gewartet bis die Übertragung komplett
ist. Wenn man das abfragt bevor man die Funktion aufruft, kann man so Daten über-
tragen und während der Übertragung andere Dinge tun.
Die Transfers über den I²C Bus dauern schließlich relativ lange verglichen mit der Ge-
schwindigkeit des Mikrocontrollers.
Das Makro
I2CTWI_isBusy()
gibt zurück, ob das TWI Modul derzeit verwendet wird. Falls nicht, kann man neue Da-
ten übertragen.
- 110 -