I2C Problem (Peter Fleury) Adressierung?

Gast #2753749
Lesenswert?

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...
Gast #2753752
Lesenswert?

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
Gast #2753776
Lesenswert?

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.
Gast #2753788
Lesenswert?

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!
Gast #2753807
Lesenswert?

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.
Gast #2753834
Lesenswert?

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.
Gast #2753845
Lesenswert?

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
Gast #2754513
Lesenswert?

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?

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