首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的I2C链接有什么问题?当它不应该的时候,它会切换LEDS

我的I2C链接有什么问题?当它不应该的时候,它会切换LEDS
EN

Stack Overflow用户
提问于 2012-07-19 18:34:43
回答 2查看 288关注 0票数 1

我有两个点阵芯片通过I2C连接到我的Arduino上。格子板每个有8个发光二极管。我的阿迪诺是主人。

照片

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

到目前为止进展顺利,但也有一些bug。我一开始就告诉格板,我正在努力,我要把我想要它驱动的引脚发送出去。我现在通过将一个字节设置为10来完成这个任务。在此之后,我发送我希望它以这样的字节驱动的引脚,10110111,其中索引0是第一个发光二极管,索引1是第二个发光二极管等等等等。

Verilog代码用于此:

代码语言:javascript
复制
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,它告诉格子板,它的设置和驱动引脚连接到8 LED。

代码语言:javascript
复制
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从这里的这个实现。

我的问题是,如果我从Arduino发送drivePins字节,第一个索引中有一个1 (ex )。0000110 ),然后它就会抓狂,打开它不应该打开的LED。最终的LED模式看起来是这样的: 11110110,而这11111110。有人知道这是怎么回事吗?

在Arduino上,我正在使用这条线库。

代码语言:javascript
复制
Wire.beginTransmission(2);
Wire.write(10);
Wire.endTransmission();

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

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

十字架看起来是这样的。

EN

回答 2

Stack Overflow用户

发布于 2012-07-31 22:48:44

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-20 21:04:01

我的答案可能是完全错误的,因为问题中缺少了很多信息,但在最不重要的一点上引起的问题使我认为您可能与I2C地址有一些混淆。您能检查一下主人是否发出这样的命令:

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

有多个开始或停止将改变字节的含义。

如果这不能解决您的问题,请您提供一些信息/伪代码,主。我需要一些信息把这个放到背景里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11567179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档