Forum: Mikrocontroller und Digitale Elektronik i2c send data


von irene (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leuten
ich versuche seit gestern Daten über i2c an ds3231 zu senden ohne 
Erfolg. Ich kann die Adresse senden. Aber wenn ich vielleicht 0x00 
senden möchte, dann bekomme ich ein Fehler. Ich poste mein Code hier. 
Vielleicht kann mir jemand helfen
Liebe Grüße Irene

von irene (Gast)


Lesenswert?

sorry ich habe ein falscher Datei angehängt. der i2c ist falsch.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

irene schrieb:
> Aber wenn ich vielleicht 0x00 senden möchte, dann bekomme ich ein Fehler.

Aha. Was für einen Fehler?

von irene (Gast)


Lesenswert?

hallo und danke für deine Antwort. ich bekomme hier:
1
unsigned char i2c_sendData(unsigned char data)
2
{
3
   TWDR = data; 
4
   TWCR = (1<<TWINT) |(1<<TWEN);     //Load SLA_W into TWDR Register. Clear TWINT bit
5
                           //in TWCR to start transmission of data
6
  while (!(TWCR & (1<<TWINT)));     //Wait for TWINT flag set. This indicates that the
7
                            //data has been transmitted, and
8
  //while((TWSR & 0xF8) != MT_DATA_ACK)                   //ACK/NACK has been received.
9
   if ((TWSR & 0xF8) != MT_DATA_ACK)   //Check value of TWI Status Register
10
       return(1);
11
    
12
  else
13
     return(0);
14
     
15
}
eine 1. Mein Programm hängt hier: while((TWSR & 0xF8) != MT_DATA_ACK).

--
Mit den [ c ] [ /c ] -Tags wird Dein Quelltext lesbarer, meinst Du nicht 
auch?
-rufus

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

Hast du ein Speicheroszilloskop, um den I2C mal anzusehen und um ggf. 
herauszufinden, weshalb der I2C Slave kein ACK schickt?

von irene (Gast)


Lesenswert?

Hallo Peter, ich habe leider kein Oszi. Ich habe auch gehört, dass man 
auch per i2c bit banging machen kann. Hast du vielleicht eine Ahnung.

von Karl K. (leluno)


Lesenswert?

irene schrieb:
> eine 1. Mein Programm hängt hier: while((TWSR & 0xF8) != MT_DATA_ACK).

Bekommst du eine 1 oder hängt das Programm?

Wenn es hängt, dann wohl an dieser Stelle:

 while (!(TWCR & (1<<TWINT)));

weil hier bei fehlender Rückmeldung eine Endlosschleife ist. Ansonsten 
mal den Wert von TWSR anzeigen lassen.

: Bearbeitet durch User
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.