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)?
Du schreibst nicht welchen ATmega du verwendest. Wenn du aber die Taktfrequenz bei 3,3V berücksichtigt hast, dürfte es keine Probleme in diese Richtung geben.
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.
Thomas schrieb: > ich würde als Pullups auf 47kOhm erhöhen Einfach mal so? Ohne Begründung? Na toll! Wenn hier so heisse Tipps gegeben werden, dann: ... ich würde als Pullups auf 2.2kOhm erniedrigen. Hat bisher immer geholfen! Ich schwör!
ByteBit schrieb: > allerdings > bekomme ich vom Slave einfach keine Acknowledge beim Senden von Start Auf welcher I2C-Adresse versuchst du ihn denn anzusprechen? Lt. Datenblatt sollte der auf 0x52 sitzen. http://www.robotshop.com/media/files/PDF/inex-zx-nunchuck-datasheet.pdf
I2C schrieb: > Auf welcher I2C-Adresse versuchst du ihn denn anzusprechen? Lt. > Datenblatt sollte der auf 0x52 sitzen. > http://www.robotshop.com/media/files/PDF/inex-zx-n... Die Adresse ist auf jeden Fall korrekt, es muss auf jeden Fall am Aufbau liegen. Ich habe auch schon versucht ein Gyroskop anzusprechen, aber dort schlägt das Senden des Start-Signals auch immer fehl.
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
Danke für die Antworten, es lag tatsächlich an der Adresse :) Ich habe als Test erstmal einen I2C Scanner laufen lassen und festgestellt, dass die eigentliche Adresse wohl 0xA4 war.
ByteBit schrieb: > Ich habe als Test erstmal einen I2C Scanner laufen lassen und > festgestellt, dass die eigentliche Adresse wohl 0xA4 war. Nach I2C Spezifikation kann das nicht sein, da die Adresse nur 7-Bit lang ist. Was du meinst, ist vermutlich das erste übertragene Byte, oft als Adressbyte bezeichnet. http://www.cs.unc.edu/Research/stc/FAQs/Interfaces/I2C-BusSpec-V2.1.pdf
Hi >Nach I2C Spezifikation kann das nicht sein, da die Adresse nur 7-Bit >lang ist. Was du meinst, ist vermutlich das erste übertragene Byte, oft >als Adressbyte bezeichnet. Selbst NXP bezeichnet in aktuellen Dokumenten Adresse+RW-Bit als Adressbyte: http://www.nxp.com/documents/data_sheet/PCF8574_PCF8574A.pdf MfG Spess
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.
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 !!!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.