SW-I2C MSP430, Sensor, ergibt nur 0xFF

Gast #5333680
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);)
Gast #5337299
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
Gast #5337380
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.