TWI - Fehler beim Senden von Start

Gast #4195480
Lesenswert?

Hallo,
ich versuche mich gerade daran einen Wii Nunchuck Beschleunigungssensor 
über TWI/I2C auszulesen, doch irgendwie klappt das Ganze nicht. SDA und 
SCL verfügen bereits über 2,5kΩ Pullups. Der Atmega und der Nunchuck 
besitzen einen selben GND und sind an 3,3V angeschlossen, allerdings 
bekomme ich vom Slave einfach keine Acknowledge beim Senden von Start 
(Das TW_STATUS Register enthält weder TW_MT_SLA_ACK noch TW_MR_SLA_ACK).
Als Library benutze ich den fertigen Code von Peter Fleury.

Könnte es sein, dass die Pullups falsch dimensioniert sind oder 
irgendwie das Hardware TWI bei <5V nicht richtig funktioniert (ich habe 
keine L version)?
Gast #4195679
Lesenswert?

Es handelt sich hierbei um einen Atmega8 der auf 2Mhz getaktet ist. Den 
TWI Takt habe ich deshalb auch auf 10kHz gestellt, aber auch wenn der µC 
auf 4MHz und 100KHz SCL Takt läuft funktioniert das einfach nicht.
Gast #4195711
Lesenswert?

Hi

>Auf welcher I2C-Adresse versuchst du ihn denn anzusprechen? Lt.
>Datenblatt sollte der auf 0x52 sitzen.

Aber nur wenn die Software die Adresse selbst shiftet. Das weiß aber nur 
der TO.

MfG Spess
Gast #4197455
Lesenswert?

spess53 schrieb:
> Selbst NXP bezeichnet in aktuellen Dokumenten Adresse+RW-Bit als
> Adressbyte:

Sag ich ja. Und dieses Adressbyte setzt sich aus der 7-Bit Adresse und 
dem R/W-Bit (LSB) zusammen. Die höchste 7-Bit Zahl ist nun mal 0x7F.

Unter 7.1 steht explizit: "Following a START condition, the bus master 
must send the address of the slave it is accessing and the operation it 
wants to perform (read or write)."

Auch da nur 7 Bit für die Adresse.
(Firma: Vescomp) #4197504
Lesenswert?

I2C schrieb:
> Sag ich ja. Und dieses Adressbyte setzt sich aus der 7-Bit Adresse und
> dem R/W-Bit (LSB) zusammen. Die höchste 7-Bit Zahl ist nun mal 0x7F.

 Nicht schon wieder...
 R/W bit ist beim Lesen 1 und beim Schreiben 0.
 Adresse besteht aus OBEREN 7 bits + R/W bit.

 Also kann I2C-Deviceadress sehr wohl größer als 0x80 sein - und ist
 es auch meistens).

 Device auslesen ist 0xA5, Device schreiben ist 0xA4 beim TO.

 Weil es nur 7 Bytes sind, muss die richtige Adresse 0x52 und nicht
 0xA4 sein, aber ich sende trotzdem 0xA4 beim schreiben und 0xA5 beim
 lesen - was fur ein Unsinn ohne jede menschennahe Logik dahinter.

 Die ganze Bit- bzw. Byteschifterei weil 7bit nicht größer als 0x7F
 sein können interessiert doch keinen Menschen, ausser diejenigen, die
 nicht wahrhaben wollen oder nicht verstehen können, dass diese 7bit
 nicht für sich alleine stehen, sondern Teil einer Adresse sind.

 Es wird gerade deswegen NICHT geschoben, sondern:
      Adresse |= R/W bit.
 Oder:
       Adresse += R/W bit.
 So und nicht anders !!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren