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:
habe ich ganz einfach aus der compass.c (dem Beispiel) entnommen.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 }
Nun hängt sich der RP6 bei:
einfach auf.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();
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?







Zitieren

Lesezeichen