mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Probem(Master)


Autor: Joel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das mal etwas ordentlicher gemacht: :)
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();
}

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.

Autor: Joel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich will nur zuerst senden. und empfang keine Daten mit mit meine 
Analysator

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und der Slave ist ein EEPROM?

Autor: Joel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen
ich habe weiter bearbeitet.Und  mit Logicort analysator kriege ich immer 
andere werte aus. das ist mein Funktion:
 
void I2C_WRITE(void)
{ 
  u16 i=0
 I2C_Start();
   PIR1bits.SPPIF=1; // set Flag 
   SSPADD=0x48; 
  SSPBUF=SSPADD;
  i=i+6;
 SSPCON2bits.ACKSTAT=0;
 PIR1bits.SPPIF=1; // set Flag 
      SSPADD=0x68;
       SSPBUF=SSPADD;
       i=i+6;
SSPCON2bits.ACKSTAT=1;
PIR1bits.SPPIF=1; // set Flag
I2C_Stop();
}
und ich kriege solche wetre aus : R:3Fh, R:1Fh, S=start, p=stop, 
GC=generall Call, FFh.
konnte jemand mir helfen

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Joel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.