ach ja es handelt sich um einen pic16f877
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
ach ja es handelt sich um einen pic16f877
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:
Damit habe ich erfolgreich auf ein I2C EEprom gespeichert, also funkt es mal, dass ein PIC antwortete, an dem spiele ich mich auch gerade.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); }
Weiteres bastle ich an einer funktion, wo man mehrere Daten lesen/schreiben kann, aber die funktionieren nicht.
hoffe es hat dir geholfen
keine leere Signatur möglich
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
ausserdem besitzt auch jeder Compiler beispiele, ich denke, dass jeder ein I2C Beispiel zur verfügung stellt.
wenn wir dabei sind 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
keine leere Signatur möglich
Gott zum gruße
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
Lesezeichen