Hello, Ich habe ein Problem mit der I2C Kommunikation zw. 2 PICs genauer: zw. PIC32MX360F512L (MASTER) und PIC18LF4550 (SLAVE) zwar klappt es nicht Daten vom Slave zum Master zu schicken! andersrum kein Problem. Problem beim senden vom Slave zum Master.: Adresse wird erfolgreich gesendet! (Oszi überprüft) --> von ack gefolgt dann läuft aber irgendwas schief. bisher sieht es so aus, dass ich nur das 2. Byte übertragen bekomme (das "I" von meinem string wird gesendet), was ich am Oszi auch sehe. das erste Byte wird irgendwie verschluckt, kann mir aber nicht erklären warum. Beim debuggen fällt auf, dass die putsI2C Routine in einer schleife hängen bleibt, wo sie auf das 9. Bit (ack) wartet, per oszi sehe ich auch kein ACK Hat schonmal jemand die Kommunikation zw. 2 PICs zum laufen gebracht? Grüße Stephan ich hab versucht die Kommunikation mit den demoprogrammen von Microchip aufzubauen hier mein Quellcode: Hier mein PIC18 Code:
1 | unsigned char I2C_Send[21] = "MICROCHIP:I2C_SLAVE" ; |
2 | //********************* Read the address sent by master from buffer **************
|
3 | while(DataRdyI2C()==0); //WAIT UNTILL THE DATA IS TRANSMITTED FROM master |
4 | temp = ReadI2C(); |
5 | //********************* Slave transmission ************************************
|
6 | if(SSPSTAT & 0x04) //check if master is ready for reception |
7 | while(putsI2C(I2C_Send)); // send the data to master |
8 | //-------------TERMINATE COMMUNICATION FROM MASTER SIDE---------------
|
9 | CloseI2C(); //close I2C module |
10 | |
11 | while(1); |
Hier mein (PIC32) Code:
1 | SlaveAddress = r_SLAVEADRESSE; |
2 | StartI2C1(); //Send the Start Bit |
3 | IdleI2C1(); //Wait to complete |
4 | MasterWriteI2C1( SlaveAddress ); //write SLAVE Adress and read Command |
5 | IdleI2C1(); //Wait to complete |
6 | while( I2C1STATbits.ACKSTAT ); |
7 | |
8 | i2cbyte = MasterReadI2C1(); |
9 | IdleI2C1(); //Wait to complete |
10 | |
11 | StopI2C1(); //Send the Stop condition |
12 | IdleI2C1(); //Wait to complete |
13 | C-Code |
Kann mir irgendjemand helfen? oder hat nen Tipp? Grüße