I2C probelem

Gast #26861
Lesenswert?
• ▲
▼
ich ahb 2 probleme !
1. wie kann ich hier im forum beiträge über I2C finden ?


2. ich hab jetzt versucht I2C zu programmieren, jedoch ist das einzige 
was passiert das CLK von LOW auf High geht und auf high bleibt, data 
geht eine periode auf HIGH und dann wieder auf LOW. und das war es, hat 
wer eine idee was der fehler sein könnte ?



arbeite mit dem PIC 16F877
Gast #26862
Lesenswert?
• ▲
▼
Hallo Chris,

1. I2C geht nicht, da nur drei Buchstaben. (verstehe ich zwar nicht, da 
es etliche sinnvolle Suchbegriffe mit 2 oder drei Buchstaben gibt).

2. Da bräucht ich noch ein paar Informationen. Am besten den Quelltext. 
Ich nehme mal an, dass Du den integrierten I2C-Port verwendest. Eine 
falsche Einstellung und das Ding kann nicht gehen.

MfG
Steffen
Gast #26863
Lesenswert?
• ▲
▼
ja, ich verwende den internen I2C Port !


ich schreib einmal wie ich es mir gedacht habe:

ich habe einmal die beiden I2C Ports als Eingänge definiert,


 SSPADD = 0b00001001;    // 100kHz Takt
 SSPCON = 0b00001000;    // I2C MasterMode
 SSPCON.5 = 1;      // I2C an
 CKE = 0;                       // I2C parameter

das ist bei mir die ganze initialisierung
Gast #26864
Lesenswert?
• ▲
▼
und so möchte ich daten übertragen:


void I2C_FERTIG ()
{
 while (PIR1.3 == 0);
 PIR1.3 = 0;
}

void I2C_BUS_START ()    // Start - Bit
{
 SEN = 1;
 I2C_FERTIG ();
}

void I2C_BUS_START_rep ()  //
{
 RSEN = 1;
  I2C_FERTIG ();
}

void I2C_BUS_STOPP ()    // Stopp - Bit
{
 PEN = 1;
 I2C_FERTIG ();
}

void I2C_R (char x)    // Daten schreiben
{
 SSPBUF = x;
 I2C_FERTIG ();
}

void I2C_W ()      // Daten lesen
{
 RCEN = 1;      // PIC soll den Takt erzeugen
 I2C_FERTIG ();


 I2Cempfang = SSPBUF;
}

void RTC_INI ()
{
 I2C_BUS_START ();
 I2C_R (0xA0);    // zum lesen adressieren
 I2C_BUS_START_rep ();
 I2C_R (0x00);    // Adresse im pcf 8583
 I2C_BUS_START_rep ();
 I2C_R (0x00);    // 0 in das register schreiben
 I2C_BUS_STOPP ();
}

void RTC_auslesen ()
{
 I2C_BUS_START ();
 I2C_R (0xA0);    // Adresspointer auf die auszu-
 I2C_BUS_START_rep ();
 I2C_R (0x02);    // lesende adresse stellen
 I2C_BUS_START ();
 I2C_R (0xA1);    // zum lesen adressieren
 I2C_BUS_START_rep ();
 I2C_W ();    // Daten vom bus einlesen
 sek = I2Cempfang;
 I2C_BUS_START_rep ();
}
#26866
Lesenswert?
• ▲
▼
Ich kenn mich mit den PICs nicht aus, aber I2C geht so:

Ein Start sendet man nur einmal bevor man die Slaveadresse sendet. Und 
dann wartet man das ACK des Slaves ab, sonst geht gar nichts.

Ein Repeat-start sendet man nur, wenn man die Richtung wechseln will, 
d.h. von Schreiben auf Lesen oder umgekehrt. Und dann kommt als erstes 
auch wieder die Slaveadresse mit dem Lese/Schreibbit, das ACK des Slaves 
usw...

Die Daten-ACKs erzeugt immer der Lesende und der Schreibende prüft sie.

Und nach dem Lesen des letzten Bytes muß der Master ein NACK senden, 
damit der Slave weiß, daß Schluß ist.


Peter
Gast #26867
Lesenswert?
• ▲
▼
was stimmt an der iniziasierung und am beginn der datenübertragung nicht 
?


bei mir beginnt er gar nicht daten zu übertragen !


void I2C_INI ()
{
 SSPEN = 1;
 SSPM3 = 1;
 SSPM2 = 0;
 SSPM1 = 0;
 SSPM0 = 0;
 SSPCON2 = 0;
 SMP = 1;
 CKE = 0;
 SSPADD = 10;
}

void I2C_BUS_START ()    // Start - Bit
{
 SEN = 1;
 while (SEN);
}

void I2C_W (char x)
{
 SSPIF = 0;
 SSPBUF = x;
 while (SSPIF == 0);
}



void RTC_INI ()
{
 I2C_BUS_START ();
 I2C_W (0xA0);
 I2C_W (0x00);
 I2C_W (0x00);
 I2C_BUS_STOPP ();
}

Antwort schreiben

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.

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.