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.

[参考译文] CCS/TM4C123GH6PM:连接 I2C LCD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/641657/ccs-tm4c123gh6pm-connecting-an-i2c-lcd

器件型号:TM4C123GH6PM
主题中讨论的其他器件:Energia

工具/软件:Code Composer Studio

我很难将 I2C LCD 显示屏连接到 TM4C123G。 我正在尝试将其连接到 Grove Base BoosterPack 上的 J14。

http://wiki.seeed.cc/I2C_LCD/ 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经访问过您链接的页面、但无法(轻松)找到您引用的"J14"。

    您的问题是否在于"123"(假设 LPAD)和此(I2C 控制的 LCD)之间的"连接"? 通过阅读链接中直接显示的页面、可以看出显示板需要5V 的电源、但"接受"了 MCU 的3V3 (最大值) I2C 信号电平。 您如何为"I2C 显示屏"提供5V 电压? 您是否在显示板上测量了"但愿"5V 电压? (尤其是在 LCD 背光"默认打开?"时)

    更好的描述(除了"连接困难")将使您的"助手 crüe "能够进一步诊断。 该模块的软件特性和功能令人印象深刻。 (在显示业务中为一个-我(可能)有资格作出此类评论。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vitaly、

    尝试将其连接到 J10、J10连接到 TM4C 上的 I2C 线路。 我不认为您可以将 I2C 器件连接到 J14等数字引脚并对其进行控制、因为我认为这些引脚的布线仅限于标准 GPIO、而标准 GPIO 上不会有 I2C 外设。

    CB1、J14是此 BoosterPack 的一部分: www.seeedstudio.com/Grove-Base-BoosterPack-p-2177.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ralph -我仍然感到困惑- Fire/I 已经"成功连接"(123个及以前基于 LX4F 的 LPad)多次连接到由"I2C 和 SPI 和 UART"控制的(外部)器件-从未/从未需要此类" Booster Pack"。   (赦免,但“升压”——大声响铃——“超售”)   任何此类所谓“升压”的价值和/或目的是什么?    

    简单的"适当/足够功率的通过"和2个 I2C 信号(带上拉电阻)"是否证明"任何此类 I2C 器件都需要?"     

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

    SeeedStudio 的 Grove 产品是一个霍比生态系统、构建在每个具有4引脚连接器的模块上。 它主要面向 Arduino、但 TI 的一个团队通过 Energia 和专为插入 TI LaunchPad 而设计的 BoosterPack 实现了对它的支持。 BoosterPack 采用4引脚连接器并将其路由到相应的 LPAD 引脚。

    该值是高度可争议的(我们并不真正支持用于 TM4C 的 Energia 和 Grove)、但其目的是使器件很容易连接到 MCU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试将其连接到 J10。 引脚为6和7。

    #define LCD_SLAVE_ADDR       0x51

    这是我的 init 函数:

    //初始化 I2C 模块1
    // TI 示例代码
    void InitI2C1 (void)
    的细微修改版本{
    //启用 I2C 模块1
    SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
    
    //复位模块
    SysCtlPeripheralReset (SYSCTL_Periph_I2C1);
    
    //启用包含 I2C 1的 GPIO 外设
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    
    //为端口 B2和 B3上的 I2C1功能配置引脚复用。
    GPIOPinConfigure (GPIO_PA6_I2C1SCL);//引脚6
    GPIOPinConfigure (GPIO_PA7_I2C1SDA);//PIN7
    
    //为这些引脚选择 I2C 功能。
    GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_6);
    GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_7);
    
    //启用并初始化 I2C1主机模块。 使用的系统时钟
    // I2C1模块。 最后一个参数设置 I2C 数据传输速率。
    //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
    //设置为400kbps。
    I2CMasterInitExpClk (I2C1_base、SysCtlClockGet ()、false);
    
    //清除 I2C FIFO
    HWREG (I2C1_base + I2C_O_FIFOCTL)= 80008000;
    } 

    以下是我的发送函数:

    //向指定的从
    器件发送 I2C 命令 void I2Csend (uint8_t slave_addr、uint8_t num_of _args、...)
    {
    uint8_t i;
    
    //告诉主模块何时将在总线上放置什么地址
    //与从设备通信。
    I2CMasterSlaveAddrSet (I2C1_base、slave_addr、false);
    
    //存储变量数量的参数列表
    va_list vargs;
    
    //将 va_list 指定为"open"和最后一个固定参数
    //so vargs 知道从何处开始查找
    va_start (vargs、num_of _args);
    
    //将要发送的数据放入 FIFO 中
    I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t));
    
    //如果只有一个参数,我们只需要使用
    //单发送 I2C 函数
    if (num_of _args == 1)
    {
    //从 MCU 发起数据发送
    I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND);
    
    //等待 MCU 完成传输。
    while (I2CMasterBusy (I2C1_base));
    
    //"close"变量参数列表
    va_end (vargs);
    }
    
    //否则,我们开始在上传输多个字节
    //I2C 总线
    其他
    {
    //从 MCU 发起数据发送
    I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
    
    //等待 MCU 完成传输。
    while (I2CMasterBusy (I2C1_base));
    
    //send num_of _args-2数据片段、使用
    ///burse_send_contt 命令的 I2C 模块
    for (i = 1;i <(num_of _args - 1);i++)
    {
    //将下一段数据放入 I2C FIFO 中
    I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t));
    //发送刚刚放置到 FIFO 中的下一个数据
    I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_CONT);
    
    //等待 MCU 完成传输。
    while (I2CMasterBusy (I2C1_base));
    }
    
    //将最后一段数据放入 I2C FIFO 中
    I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t));
    //发送刚刚放置到 FIFO 中的下一个数据
    I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
    //等待 MCU 完成传输。
    while (I2CMasterBusy (I2C1_base));
    
    //"Close"变量 args 列表
    va_end (vargs);
    }
    } 

    这是我的写入函数:

    空 WriteChar (uint8_t 字符)
    {
    I2CSend (LCD_SLAVE_ADDR、1、字符);
    } 

    我在 main 中调用它:

    InitI2C1();
    字符 A ='A';
    WriteChar (a); 

    但是、仍然没有输出。

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

    除了这一点之外、我认为您的配置似乎还可以、这一点完全不是必需的:

    HWREG (I2C1_BASE + I2C_O_FIFOCTL)= 80008000;

    您是否了解了尝试传输的器件、以了解其协议是什么? 是否没有需要发送的初始化?
    或者、它的配置是为了让器件自行设置、而您只需将 ASCII 字符打印到器件上? 即使是对我来说似乎过于简单的 Grove 产品...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的问题到底是什么? 屏幕不执行任何操作?

    您能看到总线上有任何数据在移动吗? 至少、您可以使用示波器来证明时钟速度、作为完整性检查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报彼得的问题是,“医生所要求的。”    著名的“不起作用”证明远程助手“无用”crüe……

    使用任何此类"无升压电池组"似乎会增加成本、且(高度)价值值得怀疑。    真的-找到和使用两个 I2C 互连有多困难?    (与往常一样-实际(外部)上拉 Rs 证明最有用-通常是强制性的。)