Forum: Mikrocontroller und Digitale Elektronik MSP430G2553 I2C funktioniert nicht


von Alexander A. (alex91)


Lesenswert?

Hallo zusammen,

habe mich hier angemeldet, da ich bei einem Problem nicht weiter komme.
Bastle schon eine Weile mit dem Launchpad rum und wollte mich jetzt mal 
an die I2C Kommunikation wagen.

Habe mir den Beispiel Code von TI geholt(msp430g2xx3_uscib0_i2c_06.c) 
und aufgespielt... und es passiert gar nix.
Hab die Ausgänge mit einem Oszi vermessen und sind beide auf Dauer high. 
Auch beim Debuggen finde ich nix, das Programm läuft durch.
Hab es schon mit einem anderen Controller, internen und externen 
Pull-Ups versucht und auch mit anderen Programmen und immer passiert 
nix.

Hatte das schon mal jemand oder weiß, woran es liegen könnte? Ich gehe 
mal davon aus, dass der Code von TI funktionsfähig ist oder gibt es da 
bekannte Probleme? Hab das Forum und Internet schon durchsucht, aber 
dass der Basiscode von TI nicht funktioniert gab es wohl noch nicht.

Danke schon mal für die Hilfe

Schöne Grüße
Alex91

von Christian (Gast)


Lesenswert?

Zeig doch mal deinen Code... Wird I2C richtig initialsiert? Wird I2C 
gestartet?

von Alexander A. (alex91)


Lesenswert?

1
#include <msp430.h>
2
3
unsigned char TXData;
4
unsigned char TXByteCtr;
5
6
int main(void)
7
{
8
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
9
  P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
10
  P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
11
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
12
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
13
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
14
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
15
  UCB0BR1 = 0;
16
  UCB0I2CSA = 0x48;                         // Slave Address is 048h
17
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
18
  IE2 |= UCB0TXIE;                          // Enable TX interrupt
19
20
  TXData = 0x00;                            // Holds TX data
21
22
  while (1)
23
  {
24
    TXByteCtr = 1;                          // Load TX byte counter
25
    while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent
26
    UCB0CTL1 |= UCTR + UCTXSTT;             // I2C TX, start condition
27
    __bis_SR_register(CPUOFF + GIE);        // Enter LPM0 w/ interrupts
28
                                            // Remain in LPM0 until all data
29
                                            // is TX'd
30
    TXData++;                               // Increment data byte
31
  }
32
}
33
34
//------------------------------------------------------------------------------
35
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
36
// number of bytes by pre-loading TXByteCtr with the byte count.
37
//------------------------------------------------------------------------------
38
#pragma vector = USCIAB0TX_VECTOR
39
__interrupt void USCIAB0TX_ISR(void)
40
{
41
  if (TXByteCtr)                            // Check TX byte counter
42
  {
43
    UCB0TXBUF = TXData;                     // Load TX buffer
44
    TXByteCtr--;                            // Decrement TX byte counter
45
  }
46
  else
47
  {
48
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
49
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
50
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
51
  }
52
}
original von TI...
ggf noch mit P1REN |= BIT6 +BIT7; nach dem watchdog

von Holger S. (Gast)


Lesenswert?

http://www.ti.com/lit/ug/slau144j/slau144j.pdf

USIPE7 + USIPE6 in UCB0CTL0
USII2C  muss auch noch im UCB0CTL1 enabled werden

Weitere hilfe findest du im Link oben.

von Alexander A. (alex91)


Lesenswert?

USIPE7, USIPE6 und USII2C sind doch aber gar nicht im Header vom G2553 
definiert?! Kann das Programm dann auch nicht kompilieren.

von ma r. (gintonic)


Lesenswert?

Da es in meinem Thread wohl um das selbe Problem geht: Wie aktiviere ich 
die denn? Im CCS wird keines der Bits gefunden!

von Mrs MSP (Gast)


Lesenswert?


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.