I2C Probem(Master)

Gast #940050
Lesenswert?

Hallo Zusammen,
ich habe ein Problem mit I2C (PIC18F). ich bin momentan bei Master. ich 
versuche Daten zu schicken aber es komme immer nichts aus. ich weiss 
nicht wo mein Fehler liegt. das sind mein Code:
void I2C_WRITE(void)
{   u08 Data[8]={0xA5,0xD5, 0x50, 0xA5, 0xF5, 0x05,0x64, 0xAF};
  int counter;
 I2C_Start();
 PIR1bits.SPPIF=1; // set Flag
 I2C_ReStart();
 SSPBUF=0x45;
 PIR1bits.SPPIF=0; // set Flag
 I2C_ACK();
 for(counter=0;counter<8;counter++)
 {
 SSPBUF=Data[counter];
}
I2C_ACK();
while(PIR1bits.SPPIF);
 PIR1bits.SPPIF=1; // Flag to Zero
 I2C_Stop();
}
Danke für ihr Hilfe.
#940202
Lesenswert?

Hab das mal etwas ordentlicher gemacht: :)
1
void I2C_WRITE(void)
2
{   
3
  u08 Data[8]={0xA5,0xD5, 0x50, 0xA5, 0xF5, 0x05,0x64, 0xAF};
4
  int counter;
5

6
  I2C_Start();
7
  PIR1bits.SPPIF=1; // set Flag
8
  I2C_ReStart();
9
  SSPBUF=0x45;
10
  PIR1bits.SPPIF=0; // set Flag
11
  I2C_ACK();
12
  
13
  for(counter=0;counter<8;counter++)
14
  {
15
    SSPBUF=Data[counter];
16
  } 
17
  
18
  I2C_ACK();
19
  while(PIR1bits.SPPIF);
20
  PIR1bits.SPPIF=1; // Flag to Zero
21
  I2C_Stop();
22
}

Ich kenn mich mit PIC nicht aus, aber das mit dem ReStart und ACK kommt 
mir spanisch vor. Du willst doch nur senden und nicht empfangen, oder?
Sendet der PIC nach dem ersten I2C_Start() schon die Slave Adresse? 
Sieht irgendwie danach aus als ob die die Adresse erst nach dem 
I2C_ReStart sendest. Und was macht denn die Funktion I2C_ACK() ? Sendet 
die ein ACK oder empfängt die einen? Wenn du nur sachen sendest, schickt 
nur der Slave ein ACK.
Gast #942225
Lesenswert?

Hallo zusammen
ich habe weiter bearbeitet.Und  mit Logicort analysator kriege ich immer 
andere werte aus. das ist mein Funktion:
1
 
2
void I2C_WRITE(void)
3
{ 
4
  u16 i=0
5
 I2C_Start();
6
   PIR1bits.SPPIF=1; // set Flag 
7
   SSPADD=0x48; 
8
  SSPBUF=SSPADD;
9
  i=i+6;
10
 SSPCON2bits.ACKSTAT=0;
11
 PIR1bits.SPPIF=1; // set Flag 
12
      SSPADD=0x68;
13
       SSPBUF=SSPADD;
14
       i=i+6;
15
SSPCON2bits.ACKSTAT=1;
16
PIR1bits.SPPIF=1; // set Flag
17
I2C_Stop();
18
}
und ich kriege solche wetre aus : R:3Fh, R:1Fh, S=start, p=stop, 
GC=generall Call, FFh.
konnte jemand mir helfen
Gast #942276
Lesenswert?

ok ich will zwei werte senden und das war nur ein beispiel. und 
eigenlich ist dieses Programm für master und durch mein logicport quand 
ich sehen was für ein daten von SDA raus kommen. und wenn ich nicht 
durch  SSPADD die Daten eingeben  funktionniert mein logic port 
analysator nicht deshalb bin ich verzweifelt. was schlagen sie vor?
Grüss

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren