Forum: Mikrocontroller und Digitale Elektronik SW-I2C MSP430, Sensor, ergibt nur 0xFF


von Kalri (Gast)


Lesenswert?

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);)

von wv (Gast)


Lesenswert?

Hallo Kalri,

also auf den ersten Blick fällt mir auf, dass in Deinen Buffer nur ein 
Byte reinpasst und Du zwei Byte lesen willst

--> unsigned char buffAC;

warum willst Du denn Software Bitbang I2C machen? der µC hat doch ein 
Hardware I2C Modul.

--wv

von wv (Gast)


Lesenswert?

Hallo Karli,

außerdem muß diese Zeile noch beachtet werden:

--> //NOTE: Need custom Read_SCL(), Read_SDA(), Clear_SCL(), Clear_SDA() 
to compatible Hardware.

und:

--> #include "msp430g2553.h"
hast Du hier den richtigen Header eingebunden?

also so einfach mit copy & paste geht das wohl nicht, da ist einiges 
noch anzupassen. Also bevor man sich da durchwühlt, solltest Du Dich 
eher mit dem I2C Hardwaremodul befassen. Da gibts bei TI genug Beispiele 
wie das geht.

--wv

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.