Habe folgendes Problem: Ich versuche über die I2C Bib von Peter Fleury auf ein Sensorboard (RoboBee 6 DOF) zuzugreifen. Jedoch bleibt das Programm in der start_i2c Routine hängen. [c] //main.c #define ADXL345_ADRESS 0x6A ... i2c_start(ADXL345_ADRESS+I2C_WRITE); i2c_write(DATA_FORMAT); i2c_write(0x01); i2c_write(POWER_CTL); i2c_write(0x08); ... //twimaster.c unsigned char i2c_start(unsigned char address) { uint8_t twst; // send START condition TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // wait until transmission completed while(!(TWCR & (1<<TWINT))); //hier bleibt er stehen! ... }/* i2c_start */ Liegt es vielleicht an einer falschen Adresse? Laut Datenblatt ist die Adresse 0x53, jedoch benötige ich doch eine 8 Bit Adresse, also 0xA6? Habe leider keinen Logik Analyzer um zu schauen was auf dem Bus passiert...
Die Fleury-Bibliothek gibt das Adressbyte so aus, wie du es eingibst, während die offizielle TWI-Norm nur die oberen 7 Bit als Adresse definiert. guggst du halt mal in den Source-Code, dann siehst du, was da gemacht wird. Oliver
Aber zu dem Punkt an dem die Adresse übergeben wird komme ich doch erst gar nicht oder?
Wenn er wirklich an der Stelle hängen bleibt, die du gekennzeichnet hast, dann ist der I2C Bus nicht bereit. Häufigste Ursachen sind Kurzschluss an einer der beine Leitungen, fehlende Pull-Up Widerstände oder fehlende Stromversorgung an einem Slave. In allen diesen Fällen ist SCL oder SDA immer Low. In Ruhelage sollten die Leitungen beide aber High sein.
Also Pullups sind auf dem Sensorboard verbaut (2K2). Kurzschluss schließe ich auch aus. Liegt es vielleicht an der Portkonfiguration? Ich benutze ein rn Control. Habe das Sensorboard an Port C Hängen. Die Ports aktiviere ich so: DDRC =0xFF; PORTC = 0xFF; Danke für die Hilfe!
Da parallel am Port C noch die Led's des rn control anliegen, sehe ich, dass die LED an Port C.0 leuchtet. An diesem Port liegt SCL. Dh. SDA ist high und SCL ist low.
Andreas schrieb: > Also Pullups sind auf dem Sensorboard verbaut (2K2). Kurzschluss > schließe ich auch aus. Hat das Sensorboard denn Saft?
Ja hat es, hab ich auch nachgemessen, Led leuchtet auch auf dem Sensorboard...
Andreas schrieb: > Da parallel am Port C noch die Led's des rn control anliegen, sehe ich, > dass die LED an Port C.0 leuchtet. An diesem Port liegt SCL. Dh. SDA ist > high und SCL ist low. Hab das gerade mal bei meinem Selbstbau getestet. Sobald ich die LEDs an den Pins dran mache geht meine I2C Verbindung auch nicht. Mach die mal ab und teste nochmal.
Abmachen dürfte schwer werden, da diese fest auf dem Board verbaut sind, jedoch habe ich sie mit einem dip Schalter ausgeschaltet, jedoch keine Änderung!
Andreas schrieb: > [c] > //main.c > #define ADXL345_ADRESS 0x6A Andreas schrieb: > Liegt es vielleicht an einer falschen Adresse? Laut Datenblatt ist die > Adresse 0x53, jedoch benötige ich doch eine 8 Bit Adresse, also 0xA6? Da ist schon was anders. 0xA6 oder 0x6A. Musst dich an der Stelle schonmal entscheiden.
Ja war ein Tippfehler. Adresse laut Datenblatt: 0x53 (7 Bit) -> 0xA6 (8 Bit)
Ja Adresse ist richtig. Wenn du nichts zum testen da hast. Dann lass doch einfach nach dem i2c_start eine LED toggeln. Dann weiß du ob der die Funktion ausgeführt hat. Andreas schrieb: > DDRC =0xFF; > PORTC = 0xFF; Ob du das brauchst weiß ich nicht. Die Pins vom I2C habe ich noch nie damit belegt. Testweise kann man das ja mal auskommentieren.
Habe es auskommentiert, jedoch keine Änderung. Zum Debuggen habe ich Text über die serielle ausgegeben mit dem ergebnsi, dass er genau an der oben angegebenen Stelle stehen bleibt. Leider!
HI >Ob du das brauchst weiß ich nicht. Die Pins vom I2C habe ich noch nie >damit belegt. Testweise kann man das ja mal auskommentieren. Die TWI-Pins brauchen nicht konfiguriert werden: When TWEN is written to one, the TWI takes control over the I/O pins connected to the SCL and SDA pins, enabling the slew-rate limiters and spike filters. MfG Spess
Ok danke. Hab dies auch jetzt raus genommen, aber leide immer noch keine Änderung... Noch weitere Ideen, Anregungen?
Mir ist jetzt noch aufgefallen, dass das Rn Control bereits 10k Pullups onboard hat, das verwendete Sensorboard hat ebenfalls 2k2 Pullups. Kann es sein, dass es daran liegt? Wenn ja, hat von euch jemand ein rn control und weiß ob ich die Pullups des RN Control deaktivieren kann oder ob ich die auftrennen müsste?
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.