Problema al iniciar la comunicación I2C con MSP430g2553

1

Estoy teniendo dificultades para que la comunicación I2C entre en el MSP430g2553. Después de trabajar en esto durante un par de días, al final, eliminé el código de lo que pensé que deberían ser los huesos básicos necesarios para enviar el patrón de inicio y la dirección del esclavo, pero incluso eso no parece funcionar.

Tengo un osciloscopio conectado a los pines 1.6 y 1.7, pero no he podido capturar nada. Además, enciendo un LED cuando el patrón de inicio no se ha enviado e intento apagarlo después, pero nunca se apaga.

Aquí hay un código simplificado. ¿Alguien puede arrojar algo de luz sobre esto?

#include <legacymsp430.h>
#include <msp430g2553.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  // Set up the DCO
  BCSCTL1 = CALBC1_1MHZ;
  DCOCTL = CALDCO_1MHZ;

  P1SEL |= BIT6 + BIT7;                   // Assign I2C pins to USCI_B0
  P1SEL2|= BIT6 + BIT7;                   // Assign I2C pins to USCI_B0
  P1REN |= BIT6 + BIT7;

  P1DIR |= 0x01;                          // For the LED
  P1OUT &= ~BIT0;                         // Make sure it's off

  UCB0CTL1 |= UCSWRST;                    // Enable SW reset
  UCB0CTL0 |= UCMST + UCMODE_3 + UCSYNC;  // I2C Master, synchronous mode
  UCB0CTL1 |= UCSSEL_2 + UCSWRST;         // Use SMCLK, keep SW reset
  UCB0BR0 = 10;                           // SMCLK/10
  UCB0BR1 = 0;
  UCB0I2COA = 0;                          // Master own address
  UCB0CTL1 &= ~UCSWRST;                   // Clear SW reset, resume operation

  UCB0I2CSA = 0x78;                       // Slave Address
  UCB0CTL1 |= UCTXSTT;                    // Send start and slave address
  while(UCB0CTL1 & UCTXSTT){
    P1OUT |= BIT0;                        // Turn on the LED while the start has not been sent.
  }

  P1OUT &= ~BIT0;  // This never gets executed.

  LPM0;

  return 0;
}
    
pregunta HeadCode

1 respuesta

1

Las líneas de datos / reloj I²C requieren resistencias de pull-up. La configuración de los bits P1REN sin configurar los bits P1OUT correspondientes puede dar lugar a resistencias desplegables.

Además, las resistencias pull-up deben ser lo suficientemente fuertes para superar las capacidades parásitas de su circuito lo suficientemente rápido; un valor típico para 100 kHz es 10 kΩ. Las resistencias integradas del G2553 pueden tener hasta 50 kΩ, por lo que sería una mejor idea usar resistencias externas o reducir la frecuencia de reloj.

    
respondido por el CL.

Lea otras preguntas en las etiquetas