【问题标题】:What is wrong with my I2C link? It toggles LEDS when it shouldn't我的 I2C 链接有什么问题?它在不应该的时候切换 LED
【发布时间】:2012-07-19 18:34:43
【问题描述】:

我有两个通过 I2C 连接到我的 Arduino 的 Lattice 芯片。每个 Lattice 板包含 8 个 LED。我的 Arduino 是主人。

Photo

我的目标是驱动每个板上的 LED。

到目前为止一切顺利,但存在一些错误。我通过告诉格子板开始这个过程,我正在寻址,我即将发送我希望它驱动的引脚。我现在通过发送一个设置为 10 的字节来做到这一点。在此之后,我发送我希望它以这样的字节驱动的引脚,10110111,其中索引 0 是第一个 LED,索引 1 是第二个 LED,依此类推,依此类推到 8。

Verilog 代码:

if(adr_match & bit_DATA & data_phase & op_write & getDrive == 1'b1) begin
    drivePins[bitcnt] <= SDAr;
    if (bitcnt == 0) begin
        getDrive = 1'b0;
    end
end

if (adr_match & bit_DATA & data_phase & op_write & (IOout == 10) & bitcnt == 0) getDrive = 1'b1;

最后我发送一个字节,一个 11,告诉 Lattice 板它的设置和驱动连接到 8 个 LED 的引脚。

if (adr_match & bit_DATA & data_phase & op_write & IOout == 11 & bitcnt == 0) begin
    led0 = drivePins[0];
    led1 = drivePins[1];
    led2 = drivePins[2];
    led3 = drivePins[3];
    led4 = drivePins[4];
    led5 = drivePins[5];
    led6 = drivePins[6];
    led7 = drivePins[7];
end

其余代码基于此 I2C 从机here 的实现。

我的问题是,如果我从 Arduino 发送 drivePins 字节,在第一个索引中带有 1(例如 0000110 0),那么它会吓坏并打开不应该的 LED吨。 LED 模式最终看起来像这样:11110110,来自这个 11111110。那么有人知道发生了什么吗?

在 Arduino 上,我正在使用 Wire 库。

Wire.beginTransmission(2);
Wire.write(10);
Wire.endTransmission();

Wire.beginTransmission(2);
Wire.write(~(10101011));
Wire.endTransmission();

Wire.beginTransmission(2);
Wire.write(11);
Wire.endTransmission();

传输看起来像这样。

【问题讨论】:

  • 数字默认为整数类型。 == 10 等于 10。我不确定你的意思是不是 2'b10。
  • 10 应该等于 10
  • 你绝对应该模拟一下,看看结果,而且,没有完整的代码,很难说那个代码有什么问题。

标签: verilog i2c led


【解决方案1】:

问题是在 bitcnt 0 上运行代码。它没有更新字节中的第 0 个索引。我在我的数据字节之后发送了一个 9h 位,一个 Ak 位,并在接收该字节时运行代码。

【讨论】:

    【解决方案2】:

    我的回答可能完全不正确,因为问题中缺少很多信息,但是在最低有效位引起的问题让我认为您可能对 I2C 地址有些混淆。你能检查一下主人是否发送了这样的命令:

    开始 - Lattice1AddressWrite(lsb==0) - 0x0A - LedPatterSingleByte - 0x0B - 停止

    多次开始或停止会改变字节的含义。

    如果这不能解决您的问题,请您提供一些信息/伪代码,大师。我需要一些信息来说明这一点。

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多