Arexx RP6 V2 Build your own robot kit RP6 V2 Manuale Utente
Codici prodotto
RP6 V2
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
4.6.11. I²C Bus Funktionen
Zum Schluss dieses Kapitels, kommen wir zu den I²C-Bus Funktionen. Diese sind zur
Kommunikation mit anderen Mikrocontrollern und Erweiterungsmodulen notwendig.
Es gibt zwei Versionen der I²C Funktionen – eine für den Slave und eine für den Mas-
ter Modus.
Achtung: Sie können nicht beide Versionen gleichzeitig verwenden!
Man kann jeweils eine der beiden Versionen einbinden und muss diese auch im Make-
Zum Schluss dieses Kapitels, kommen wir zu den I²C-Bus Funktionen. Diese sind zur
Kommunikation mit anderen Mikrocontrollern und Erweiterungsmodulen notwendig.
Es gibt zwei Versionen der I²C Funktionen – eine für den Slave und eine für den Mas-
ter Modus.
Achtung: Sie können nicht beide Versionen gleichzeitig verwenden!
Man kann jeweils eine der beiden Versionen einbinden und muss diese auch im Make-
file eintragen! Dort sind die passenden Einträge schon vorhanden – aber auskommen-
tiert. Es darf nur einer von beiden Einträgen verwendet werden, sonst gibt der Compi-
tiert. Es darf nur einer von beiden Einträgen verwendet werden, sonst gibt der Compi-
ler einen Fehler aus (weil der TWI Interrupt Vektor dann doppelt definiert wäre... )!
4.6.11.1. I²C Slave
Bei der Roboterbasis ist der Slave Modus sehr wichtig, denn oft wird man wohl einen
Bei der Roboterbasis ist der Slave Modus sehr wichtig, denn oft wird man wohl einen
weiteren Mikrocontroller zur Steuerung des Roboters verwenden. Es gibt auch ein Bei-
spielprogramm, das so gut wie alle Funktionen der Roboterbasis über den I²C Bus be-
spielprogramm, das so gut wie alle Funktionen der Roboterbasis über den I²C Bus be-
reitstellt (RP6Base_I2CSlave).
Der Slave Modus ist genau wie der Master Modus Interrupt basiert. Beim Slave ist das
Der Slave Modus ist genau wie der Master Modus Interrupt basiert. Beim Slave ist das
nicht anders möglich (ohne viel Aufwand jedenfalls), beim Master könnte man das al-
lerdings auch gut ohne realisieren. Um es jedoch einheitlicher zu gestalten, sind beide
lerdings auch gut ohne realisieren. Um es jedoch einheitlicher zu gestalten, sind beide
Versionen Interrupt basiert. Nebenbei kann man die Übertragungen im Mastermodus
dann auch zum Teil im Hintergrund laufen lassen, was etwas Zeit sparen kann.
dann auch zum Teil im Hintergrund laufen lassen, was etwas Zeit sparen kann.
void I2CTWI_initSlave(uint8_t address)
Diese Funktion initialisiert das TWI Modul des Mikrocontrollers als I²C Slave. Man kann
hier die Adresse des Controllers festlegen. Die Adresse gibt auch gleich mit an, ob der
hier die Adresse des Controllers festlegen. Die Adresse gibt auch gleich mit an, ob der
Controller auf sog. „General Calls“ reagieren soll. Wird der I²C Bus mit 0 adressiert,
nennt man das General Call und es können alle angeschlossenen Geräte darauf rea-
nennt man das General Call und es können alle angeschlossenen Geräte darauf rea-
gieren. Das ist z.B. nützlich um alle Controller gleichzeitig in einen Stromsparmodus
zu schalten o.ä.
Beispiele:
zu schalten o.ä.
Beispiele:
I2CTWI_initSlave( adr | TWI_GENERAL_CALL_ENABLE ); // General call aktiv
I2CTWI_initSlave(adr); // General call NICHT aktiv
I²C Register
Gängige I²C Bus Peripherie wird meist über einige Register die man lesen und/oder
Gängige I²C Bus Peripherie wird meist über einige Register die man lesen und/oder
beschreiben kann gesteuert. Die Slave Routinen sind deshalb auch so gestaltet, dass
es „Register“ (in diesem Fall ein Array aus 8 Bit Variablen) gibt, die der Bus-Master
es „Register“ (in diesem Fall ein Array aus 8 Bit Variablen) gibt, die der Bus-Master
beschreiben bzw. lesen kann. Der Master überträgt dazu nach der Slave Adresse noch
die Registeradresse und kann dann Daten aus diesem Register lesen oder es beschrei-
die Registeradresse und kann dann Daten aus diesem Register lesen oder es beschrei-
ben.
Es gibt zwei Arrays mit dem Datentyp uint8_t dafür. Eines davon stellt die lesbaren
Es gibt zwei Arrays mit dem Datentyp uint8_t dafür. Eines davon stellt die lesbaren
Register zur Verfügung, das andere die beschreibbaren Register.
- 106 -