Hallo,
ich hoffe, dass ihr mir auf die Sprünge helfen könnte, so langsam bin
ich mit meinem Latein am Ende und verwirre mich bloß noch selbst.
Ich habe mit einem MSP430F2274 und einem BMP180 (Adafruit) versucht, ein
SW-I2C umzusetzen. Die ANs von TI klappen nicht, alle Onlinetutorials
ebenfalls nicht, es kommt immer 0xFF raus. Ich habe folgendes Bsp gerade
versucht (1-zu-1, Unterschiede siehe main unten):
https://gist.github.com/ksvbka/fec1f28ce40c276334fb#file-i2c_sw-c-L131
Auch wieder 0xFF. Ich versuche lediglich, das Calibration Register 0xAA
des Sensors auszulesen. Leider kein Oszi zur Verfügung. Die main:
1 |
|
2 | #define BMP085_I2CADDR 0xEE
|
3 | unsigned char buffAC;
|
4 |
|
5 | void main(void)
|
6 | {
|
7 | WDTCTL = WDTPW + WDTHOLD;
|
8 | if (CALBC1_1MHZ==0xFF)
|
9 | {
|
10 | while(1);
|
11 | }
|
12 | DCOCTL = 0;
|
13 | BCSCTL1 = CALBC1_1MHZ;
|
14 | DCOCTL = CALDCO_1MHZ;
|
15 |
|
16 | I2C_PSEL &= ~(SCL + SDA);
|
17 | I2C_PDIR &= ~(SCL + SDA);
|
18 | I2C_POUT &= ~(SCL + SDA);
|
19 |
|
20 | __delay_cycles(1000);
|
21 |
|
22 | i2c_readData(&buffAC, BMP085_I2CADDR, 0xAA, 2);
|
23 | }
|
Timing? Falsche GPIO? Geht das mit PDIR nicht so hier? Pullups nicht von
Haus aus ok? Irgendwas richtig dummes?
(Gleich noch eine blöde Frage, in der folgenden Funktion kann man die
Anzahl der zu lesenden Bytes übergeben. Was muss denn getan werden, dass
auch mehr als 1 Byte in die *buff-Variable geschrieben werden?
void i2c_readData(unsigned char *buff, unsigned char deviceAddr,
unsigned char regis, unsigned char nLength);)