mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-Bus - Fragen


Autor: Andreas H. (heilinger)
Datum:

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

Autor: Jens (Gast)
Datum:

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

Autor: Bernhard R. (barnyhh)
Datum:

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

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich debugge das mit Hilfe des AVR DRagon, also direkt die Hardware.

Hab mir jetzt aber die Application Notes von der Atmel-Seite 
runtergeladen und versuche es lieber damit...

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.