This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:至MSP430G2553 I2C链路

Guru**** 2126830 points
Other Parts Discussed in Thread: ENERGIA, MSP430G2553
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/582664/msp430g2553-to-msp430g2553-i2c-link

部件号:MSP430G2553
主题中讨论的其他部件:EnergiaMSP430WARE

通过I2C将主MSP430连接到从MSP430时出现问题。  使用ENERGIA 17代码示例。  已更新twi.c和twi.swh 。(代码适用于Arduino设备)

RAN程序返回连接设备的地址-从0到127的所有地址都在循环中返回- MSP如何将自己识别为从属设备?  或者 还有其他问题吗?

谢谢

Brian Elliott  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Brian,

    从属MSP430G2553器件是否已编程以相应地响应I2C消息? 您是否在I2C线路上使用上拉电阻器?

    此致,

    詹姆斯

    MSP客户应用程序
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Brian Elliott"]

    RAN程序返回连接设备的地址-从0到127的所有地址都在循环中返回- MSP如何将自己识别为从属设备?  或者 还有其他问题吗?

    [/QUEOTE ]>

    要回答第一个问题,当UCMST位为0时,从属设备会将自己识别为从属设备。 如果您已使用正确的固件刷新从属设备,则应自动正确配置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以下代码适用于Arduino UNO / nano组合。

    [根据430h论坛的建议,我使用了提供的'修订' twi.c和twi.sw.c文件(通过e2e链接:来自Robert Wessels TI员工)

    链接:-

    e2e.ti.com/.../1924562 192.4562万

    以下是从YouTube视频中获得的:-)

    师父:-

    #include <Wire.h>
    #define LED red_LED
    void setup()

    Wire.begin();//加入i2c总线(主中继器的地址可选)
    迟延(2000年);
    引脚模式(LED,输出);
    }



    void循环()

    Wire.beginTransmission(4);//传输到设备#4

    wire.write ('H'); //发送一个字节
    wire.endTransmission ();//停止传输
    延迟(3000);
    DigitalWrite (LED,高);


    延迟(1000);
    Wire.beginTransmission(4);//传输到设备#4

    wire.write ('L'); //发送一个字节
    wire.endTransmission ();//停止传输
    延迟(3000);
    DigitalWrite (LED,低);
    延迟(1000);
    }

    从机:-

    #include <Wire.h>
    #define LED red_LED
    void setup()

    Wire.begin(4); //使用地址#4加入i2c总线
    wire.onReceive(receiveEvent);//注册事件
    Serial.begin(9600); //开始输出串行
    }

    void循环()

    //延迟(100);
    }

    //从master接收数据时执行的函数
    //此函数注册为事件,请参见setup()
    void receiveEvent (int howMany)


    //延迟(100);
    DigitalWrite (LED,高);
    延迟(1000);
    DigitalWrite (LED,低);
    延迟(1000);

    while (Wire.Available ())//循环

    char c = Wire.read();//接收字节作为字符
    serial.print(c); //打印字符
    IF (c ==' H')

    DigitalWrite (LED,高);
    延迟(1000);
    }
    否则,如果( c =='L')

    DigitalWrite (LED,低);
    延迟(1000);

    }
    }
    }

    我也跑过这个:-

    #include <Wire.h>

    void setup()

      Serial.begin(9600);
      serial.println ("开始!");
      
      Wire.setModule(0);
      Wire.begin();
    }

    void循环()

      findAddress();
      延迟(1000);
    }

    UINT8_t fromAddress =0;
    UINT8_t至地址=127;

    void findAddress()

      对于(uint8_t a = fromAddress;a < toAddress;A++)
      {
        Wire.beginTransmission(a);
        Int endStatus = Wire.endTransmission ();

        IF (endStatus == 0)
        {
          serial.print ("找到的设备:0x");
          serial.println (a,hex);
        }
      }
    }

    这产生了从0到127的所有地址的循环。

    注意:Wire.setModule (0)会使程序崩溃!

    任何建议-对于MSP430来说延迟是否过大?

    此致

    B. Elliott
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PS上拉装置为4k7,常用接地。 绿色LED链路已卸下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然下面的应用说明较旧,但它仍有一些与您想要做的类似的事情的良好讨论。

    使用USCI I2C从属设备

    此外,正如Caleb在您的其他线程中提到的,我们在用于I2C的MSP430Ware中提供了许多代码示例(它们被命名为'msp430g2xxS 3_uscib0_i2c_xx.c')。 最近,他编写了一份出色的应用手册,这对您现在和将来都可能有所帮助。

    MSP430TmMCU上常见eUSCI和USCI串行通信问题的解决方案

    此致,

    詹姆斯

    MSP客户应用程序