I2C-Bus - Fragen

OP #1590029
Hallo,

ich möchte zum ersten Mal den I2C-Bus mit einem ATmega48 in Betrieb 
nehmen. Allerdings klappts bei mir noch ganz und gar nicht. Es geht 
darum, einen Drucksensor auszulesen, der einen Wert mit 15-Bit-Auflösung 
sendet.

Die Adresse des Drucksensors ist "1111 000". Ich möchte den Drucksensor 
nur auslesen.

void I2C()
{
  unsigned int low_byte = 0;
  unsigned int high_byte = 0;
  unsigned int value = 0;

  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //TWSTA = TWI Start 
Condition Bit

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

  TWDR = (0xF1);                  //Slave-Adresse 7 bit lang: 1111 000, 
1 am Ende für Master Receiver Mode
  TWCR = (1<<TWINT) | (1<<TWEN);  //Adresse und "Read" senden

---> hier in der while-Schleife bleibt der Debugger hänger:
  while (!(TWCR & (1<<TWINT)));   //warten bis TWINT-Flag gesetzt wurde

  high_byte = TWDR;

  while (!(TWCR & (1<<TWINT)));   //warten bis TWINT-Flag gesetzt wurde
  low_byte = TWDR;

  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Stopbit senden
  while (TWCR & (1<<TWINT));      //warten bis Stopbit gesendet wurde
  value = ((256*high_byte) + low_byte);
}

Irgendwie finde ich im Internet kein Beispiel, wo mal ein Sensor 
ausgelesen wird. Evtl. kennt ihr ja ein Beispiel, an dem ich mich 
orientieren könnte?!
Gast
Hallo,

Dein Debugger bleibt wahrscheinlich hängen, weil dein Sensor nicht 
weiss, was er tun soll (Der Sensor gibt kein ACK zurück und blockiert so 
den Bus). Ich hab das Datenblatt nicht, kenne das aber von AD Wandlern. 
Du musst dem Sensor im Master_Transmitter Mode mitteilen, welches 
Register du lesen willst. Dann folgt ein Repeated Start mit der Slave 
Adresse + Read Kommando. Dann kannst du erst was auslesen.

Gruß, Jens
Debugger?
Läuft das Ganze auf der realen Hardware oder auf dem PC (ATMEL-IDE, 
Simulator)?

Wenn auf Simulator, dann ist die Lösung einfach: Gehe an die reale 
Hardware, denn der Simulator unterstützt die I/O-Peripherie des AVR nur 
sehr rudimentär. Das TWI-Interface wird z.B. nicht unterstützt.

Bernhard

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.