So,
Ich habe den Kompass mal angeschlossen und zwar an den XBUS2.
Habe ganz normal SDA an SDA, SCL an SCL und GND bzw. VDD an GND bzw. VDD angeschlossen.
Nun klappt das bis jetzt nur mit der Programmierung nicht so wie es soll.
Diesen Code:
Code:
void i2c_start(void) {
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); // send start condition
while (!(TWCR & (1 << TWINT)));
}
void i2c_write_byte(char byte) {
TWDR = byte;
TWCR = (1 << TWINT) | (1 << TWEN); // start address transmission
while (!(TWCR & (1 << TWINT)));
}
char i2c_read_byte(void) {
TWCR = (1 << TWINT) | (1 << TWEA) | (1 << TWEN); // start data reception, transmit ACK
while (!(TWCR & (1 << TWINT)));
return TWDR;
}
char i2c_read_last_byte(void) {
TWCR = (1 << TWINT) | (1 << TWEN); // start data reception
while (!(TWCR & (1 << TWINT)));
return TWDR;
}
void i2c_stop(void) {
TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN); // send stop condition
}
habe ich ganz einfach aus der compass.c (dem Beispiel) entnommen.
Nun hängt sich der RP6 bei:
Code:
DDRC = 0;
PORTC = (1 << PC1) | (1 << PC0); // SDA | SCL
TWSR = 0;
TWBR = 17;
i2c_start();
i2c_write_byte(0x3C);
i2c_write_byte(0x02);
i2c_write_byte(0x00); // hier.....
i2c_stop();
einfach auf.
Als ich diese Zeile einfach einmal auskommentiert hab, hat er sich eine Zeile davor aufgehängt.
Bei der aktivierung des Beschleunigungssensors bleibt er übrigens auch hängen.
Weiß jemand wieso? Bzw. was daran falsch ist? Habe ich evtl etwas falsch angeschlossen?
Lesezeichen