Forum: Compiler & IDEs I2C PIC18 SDA Problem?!


von Alex F. (alex86)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich betreibe einen PIC18f47j53 im Master I2C um den TMP112 
(Temperatursensor)anzusteuern.
Meine I2C Frage: Warum wird SDA nach dem ACK auf high gezogen (siehe 
Bild)? Ist das ein Fehler meiner Programmierung? Eigentlich bestätigt 
der TMP112 doch mit einem "LOW-ACK".

Mein Code:
1
  SSPCON2bits.SEN = 1;              //Bus übernehmen
2
  while(SSPCON2bits.SEN);
3
  SSP1BUF = adress;  
4
  while(SSP1STATbits.BF);    
5
  while(SSP1CON2bits.ACKSTAT);    
6
  while(SSP1STATbits.R_W);     
7
  while(!(PIR1bits.SSP1IF == 1));          //wait until bus is free
8
  PIR1bits.SSP1IF = 0;              //clear SSPF1
9
10
11
  SSP1BUF = data;  
12
  while(SSP1STATbits.BF);               
13
  while((SSP1CON2 & 0x1F)|(SSP1STATbits.R_W));  //wait until i2c is idel
14
  while(SSP1CON2bits.ACKSTAT);           // wait until ACK accure
15
  SSPCON2bits.PEN = 1;              //Bus freigeben
16
  while(!(PIR1bits.SSP1IF == 1));          //wait until bus is free
17
  PIR1bits.SSP1IF = 0;              //clear SSPF1

Schon mal danke im voraus
Gruß Alex

von Jens (Gast)


Lesenswert?

Warum ist beim erwarteten ACK im Takt so eine Lücke? Fehlt da eventuell 
ein Taktimpuls. Andererseits, was der Slave zurücksendet ist eindeutig 
ein NO-ACK (High). Funktionieren die Routinen mit anderen I²C-Devices?

von Klaus (Gast)


Lesenswert?

Jens schrieb:
> Andererseits, was der Slave zurücksendet ist eindeutig
> ein NO-ACK (High).

Zum Zeitpunkt der 9. Taktflanke ist SDA Low.

MfG Klaus

von Alex F. (alex86)


Lesenswert?

Vielen Dank für eure Antworten. Klaus hat recht, der Slave reagiert 
richtig mit einem ACK. Allerdings ist mir schleierhaft weshalb SDA auf 
High geht.
Wenn jemand eine Lösung hat nur raus damit:)
Gruß
Alex

von XXX (Gast)


Lesenswert?

Vermutung:

Slave gibt Bus wieder frei, damit Master erneut agieren kann.
Während der Übergabe wird SDA durch den Pull-Up hochgezogen.

Wie gesagt, nur eine Vermutung
Joachim

von Klaus (Gast)


Lesenswert?

XXX schrieb:
> Slave gibt Bus wieder frei, damit Master erneut agieren kann.
> Während der Übergabe wird SDA durch den Pull-Up hochgezogen.

So ist es, nach der Leseflanke muß der Slave den Bus loslassen. Ob der 
Bus dann high bleibt, hängt von den nächsten Daten, die vom Master 
kommen, ab.

MfG Klaus

von Alex F. (alex86)


Angehängte Dateien:

Lesenswert?

Laut Datenblatt vom PIC18 (siehe Bild, roter Kreis) bleibt SDA doch auf 
"Low" oder ist das in Wirklichkeit nicht so?
Gruß
Alex

von Alex F. (alex86)


Angehängte Dateien:

Lesenswert?

sorry falsch gezeichnet
Kreis muss natürlich nach oben

von Klaus (Gast)


Lesenswert?

Wenn man in die I2C Spec schaut, sieht es aus, wie auf dem Scope. Nach 
dem Ack geht SDA auf High. Wie es dann weiter geht, hängt von den Daten 
ab.

MfG Klaus

von Alex F. (alex86)


Lesenswert?

ok danke, dann ist das also richtig so.
Habe nämlich einen Fehler beim Auslesen und dachte es liegt daran.
Gruß
Alex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.