Forum: Mikrocontroller und Digitale Elektronik I2C-Bus - Fragen


von Andreas H. (heilinger)


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?!

von Jens (Gast)


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

von Bernhard R. (barnyhh)


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

von Andreas H. (heilinger)


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...

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.