Hallo, ich versuche schon seit Tagen einen HMC6343 Kompass-Sensor an
meinen MSP430F5438 per I2c anzuschließen. Leider nur mit mäßigen Erfolg.
Hauptsächlich hab ich zwei Probleme.
1. Wenn ich Daten mit dem MSP als Master empfangen will, verstehe ich
nicht so ganz wie ich den Puffer richtig abfragen soll.
Im Moment löse ich es so:
1 |
|
2 | UCB1CTL1 |= UCTR + UCTXSTT; //I2C RX,start condition (adresse senden)
|
3 | __delay_cycles(100); //Write BIT
|
4 | UCB1TXBUF = 0x50; //Befehl welche Daten der Slave senden soll
|
5 | __delay_cycles(100);
|
6 | UCB1CTL1 |= UCTXSTP; // I2C end condition
|
7 | __delay_cycles(2000);
|
8 |
|
9 | UCB1CTL1 &= ~UCTR;
|
10 |
|
11 | UCB1CTL1 |= UCTXSTT; //I2C RX,start condition(adresse senden)
|
12 | //read BIT
|
13 | MSB = UCB1RXBUF;
|
14 |
|
15 | LSB = UCB1RXBUF;
|
16 |
|
17 | MSBp = UCB1RXBUF;
|
18 |
|
19 | LSBp = UCB1RXBUF;
|
20 |
|
21 | MSBr = UCB1RXBUF;
|
22 |
|
23 | UCB1CTL1 |= UCTXSTP; // I2C end condition
|
24 | LSBr = UCB1RXBUF;
|
Das schreiben von Befehlen scheint zu funktionieren. Leider weis ich
nicht, wie ich mit dem MSP den Takt starten kann, sodass der HMC seine
Daten übertragen kann. Bzw. ein Takt Packet wird immer automatisch
gestartet, wessen Daten ich auch empfangen kann. Leider muss ich 6 Byte
hintereinander empfangen.
2. Zieht der HMC ab und zu die Datenleitung auf GND, wodurch der BUS
natürlich lahmgelegt ist. Die einzige möglichkeit den BUS neuzustarten
ist, dann die spannungsversorgung des HMC zu treffen...
3. Muss ich unbedingt mit den interrupts arbeiten, die in den Example
codes von TI benutzt werden, oder kann man das ganze auch ohne zum
laufen bringen?
Ich wäre euch sehr dankbar, wenn Ihr mir helfen könntet.
Schon mal vielen Dank.
El_Studente