MSP430 Senden eines Bytes via I2C

Gast #3980282
Lesenswert?

Guten Abend,

ich habe nun schon einige Projekte auf dem MSP430G2553 realisiert und 
wollte mich nun mal mit I2C befassen. Dazu habe ich die Beispielcodes 
von TI ausprobiert, unter anderem den hier:

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
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
39
#pragma vector = USCIAB0TX_VECTOR
40
__interrupt void USCIAB0TX_ISR(void)
41
#elif defined(__GNUC__)
42
void __attribute__ ((interrupt(USCIAB0TX_VECTOR))) USCIAB0TX_ISR (void)
43
#else
44
#error Compiler not supported!
45
#endif
46
{
47
  if (TXByteCtr)                            // Check TX byte counter
48
  {
49
    UCB0TXBUF = TXData;                     // Load TX buffer
50
    TXByteCtr--;                            // Decrement TX byte counter
51
  }
52
  else
53
  {
54
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
55
    IFG2 &= ~UCB0TXIFG;                     // Clear USCI_B0 TX int flag
56
    __bic_SR_register_on_exit(CPUOFF);      // Exit LPM0
57
  }
58
}


Die SDA und SCL Leitungen (P1.6 und P1.7) habe ich mir auf einem 
Oszilloskop angeguckt und festgestellt das lediglich ununterbrochen die 
Slave Addresse (0x48) gesendet wird, aber nicht das zu sendende Byte 
(0x00 ++).

Interpretiere ich da etwas falsch oder muss ich den TI Sourcecode noch 
abändern?

Beste Grüße,
Michael
Gast #3980419
Lesenswert?

Guten Abend!

Hatte gestern auch das Problem bei dem gleichen Mikrocontroller eine RTC 
über I2C anzusprechen.
Daraufhin habe ich etwas gegooglet und folgende Links für C-Code (Using 
the USCI I2C Master) und entsprechender Anleitung auf der TI-Website 
gefunden:

http://www.ti.com/litv/pdf/slaa382
http://www.ti.com/litv/zip/slaa382

Es müssen nur Kleinigkeiten angepasst werden und die Kommunikation 
funktioniert einwandfrei.

Wie sieht es den Hardware-Seitig aus? Arbeitet der Slave auch mit 3.3V 
oder benutzt du einen Pegelwandler?

Hoffe, die Links können weiterhelfen! :)
Persönliche Seite #3984270
Lesenswert?

Ein Hinweis zum von Christoper verlinkten Dokument slaa382.pdf:

Die Abbildung "Figure 2" auf Seite 2 ist exakt dieselbe wie "Figure 1" 
und beschreibt daher nicht den "Master Receiver".

Das Dokument scheint in den letzten sieben Jahren auch nicht 
überarbeitet worden zu sein:

Beitrag "Fehler in TI - Beispielprogramm für I2C -Bus (MSP430)?"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren