-
I2C-Bus übertragung!
Habe ein sehr großes problem!
ich muss von meinem master aus eingeben können: adresse, anzahl der folgenden daten, und die daten
dies sollte ich an die slaves schicken können und auch wieder empfangen können...
hat das schon wer programmiert???
bitte um schnelle hilfe! julia
-
Re: I2C-Bus übertragung!
ach ja es handelt sich um einen pic16f877
-
Programmierst du in C oder Assembler?
I2C-Befehlssatz findest du in der Wiki (brauchst nur auf das I2C hier klicken).
Beim PIC musst du nur wenige Register konfigurieren, denn der hat Hardware-I2C-Unterstützung, die auch recht gut im Datenblatt erklärt ist.
-
Re: I2C-Bus übertragung!
kann mir denn keiner helfen???? ist wirklich wichtig... bitte!!
-
ähm - Ich kann dir nur helfen, wenn du ein paar mehr Infos gibst, z.B. in welcher Sprache du programmierst oder ob du dich mit I2C selber auskennst und nur wissen willst, wie man das dem PIC beibringt, oder bei welcher Taktfrequenz du schaffen willst...
Ich mein, ich helf dir gerne, aber dazu musst du mitarbeiten ;)
mfG
Stefan
-
programmiere in c
mit i2c kenn ich mich nicht aus!
müsste ein prog schreiben, bei dem ich angeben kann, welchen slave ich ansprechen möchte, also zb. 0x02 dann die anzahl der daten zb 5 und dann die daten
also: 0x025ABCD
slave und master sollten dadurch kommunizieren können.
19200 baud
-
Hiho,
also hier is mal eine seite, wo es um PIC und I2C geht:
http://www.fernando-heitor.de/picfor...&highlight=i2c
Weiteres benütze ich folgenden Code:
Code:
void init_i2c()
{
output_float(I2C_SCL);
output_float(I2C_SDA);
}
//Schreiben von einem Byte über I2C
void write_i2c(Byte address, BYTE data, int c_nr)
{
short int status;
i2c_start(); //Belegen des Buses
i2c_write(0xfe & c_nr); //schreiben der Deviceadresse
i2c_write(address); //Datenadresse
i2c_write(data); //1 Byte Daten
i2c_stop(); //Busfreigabe
//Warten bis die Daten verarbeitet und Gerät wieder bereit
i2c_start();
status=i2c_write(c_nr);
//Statusabfrage, 0-Gerät reagiert, 1-Gerät reagiert nicht
while(status==1) //Warten bis es reagiert
{
i2c_start();
status=i2c_write(0xa0 | c_nr);
}
i2c_stop();
}
BYTE read_i2c(Byte address, int c_nr) //Lesen eines Bytes
{
BYTE data;
i2c_start(); //Belegen des Buses
i2c_write(0xfe & c_nr); //schreiben der Deviceadresse
i2c_write(address); //Datenadresse
i2c_start(); //Restarten des Buses
i2c_write(0xa1 | c_nr); //1 steht für Lesezugriff
data=i2c_read(0); //1 Byte lesen
i2c_stop(); //Freigeben des Buses
return(data);
}
Damit habe ich erfolgreich auf ein I2C EEprom gespeichert, also funkt es mal, dass ein PIC antwortete, an dem spiele ich mich auch gerade.
Weiteres bastle ich an einer funktion, wo man mehrere Daten lesen/schreiben kann, aber die funktionieren nicht.
hoffe es hat dir geholfen
-
Ansonsten wirst du wohl bei (fast allen) C-Compilern schon fertige Bibliotheken finden, mit denen du I2C ansteuern kannst... ;)
Was ich dir empfehlen würde: Klick mal auf das I2C - da findest du einiges an Infos - denn es bringt dir nix, wenn du irgendwas übernimmst, aber nicht weisst, warum und wie es funktioniert.
MfG
Stefan
-
Hiho,
ja, soll mal denkanstoss sein :D
ausserdem besitzt auch jeder Compiler beispiele, ich denke, dass jeder ein I2C Beispiel zur verfügung stellt.
wenn wir dabei sind :D ich verwende CCS Compiler, und möchte gerne einen text z.B. "Hallo" auf ein I2C EEPROM speichern, lesen klappt fehlerfrei, aber beim senden werde ich es schrittweiße machen, aber wie bekomme ich zB Das 'H' von 'Hallo' in den HEX Code gewandelt? hab schon gesucht, aber leider nur i-net rechner gefunden :(
-
Gott zum gruße :cheesy:
Die buchstaben im string werden sowieso im ascii format abgelegt, also musst du nur eine for-schleife ablaufen lassen und die einzelnen werte des char arrays seriell ans eeprom senden