I2C Probem(Master)

Gast #940050
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.
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
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
Schreib doch erst mal GENAU was du machen willst.

Ich vermute mal du willst an Adresse 0x48 den Wert 0x68 senden?
Angeblich soll das Register SSPADD für die Bus Geschwindigkeit zuständig 
sein, warum stellt du dann 2x daran rum?
Gast
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.