PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PICs als I2C Master und Slave in C mit CCS-compiler



andi619
07.08.2005, 02:20
Hallo,

ich möchte einen PIC als I2C Master betreiben und einen weiteren als I2C Slave.
Das ganze in C mit dem CCS Compiler. (In Assembler habe ich schon einige Beispiele gefunden, welche mir aber nichts nutzen, da ich es in C brauche!)
Das Beschreiben (Nachrichten schicken) des Slaves-Pics klappt inzwischen, aber das Lesen vom Slave stellt noch ein Problem dar.
Ich bin kein Programmierprofi und bräuchte einfach ein Programm oder ein Tip für den Slave, welcher dann fähig sein sollte, zwischen lesen und schreiben unterscheiden zu können. Er soll dann eine Nachricht zurück an den Master schicken.

Für das Lesen vom Slave durch Master:
Brauche ich beim Master unbedingt ein "restart" wie im Folgenden oder kann ich nicht gleich nach dem ersten Start meine Slave Adresse mit gesetztem read Bit ('1') schreiben?

i2c_start();
i2c_write(0xa0); //Device address
i2c_write(address); //Data to device
i2c_start(); // Restart
i2c_write(0xa1); // to change data direction
data=i2c_read(0); // now read from slave
i2c_stop();

Im Voraus vielen Dank.

Gruß Andi

07.08.2005, 08:47
Hallo,

start ist nicht gleich restart.
Ich würde vorschlagen, dass du nach
i2c_write(address); //Data to device
erst ein stop sendest und dann wieder ein start.
Also so:
i2c_start();
i2c_write(0xa0); //Device address
i2c_write(address); //Data to device
i2c_stop();
i2c_start(); // Restart
i2c_write(0xa1); // to change data direction
data=i2c_read(0); // now read from slave
i2c_stop();

SprinterSB
07.08.2005, 10:10
Ein RESTART ist ein START ohne vorheriges STOP.
Falls nur 1 Master am Bus ist, geht beides.
Falls aber mehrere Master am Bus sind, kann ein anderer Master den Bus übernommen haben. Dann gibt es Fehler, weil 'address' aus dem dammy-write nicht so ist, wie einem dünkt.

@andi619:
Ja, das RESTART brauchst du.