我有两个点阵芯片通过I2C连接到我的Arduino上。格子板每个有8个发光二极管。我的阿迪诺是主人。
照片
我的目标是在每个板上驱动LED。
到目前为止进展顺利,但也有一些bug。我一开始就告诉格板,我正在努力,我要把我想要它驱动的引脚发送出去。我现在通过将一个字节设置为10来完成这个任务。在此之后,我发送我希望它以这样的字节驱动的引脚,10110111,其中索引0是第一个发光二极管,索引1是第二个发光二极管等等等等。
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,它告诉格子板,它的设置和驱动引脚连接到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从这里的这个实现。
我的问题是,如果我从Arduino发送drivePins字节,第一个索引中有一个1 (ex )。0000110 ),然后它就会抓狂,打开它不应该打开的LED。最终的LED模式看起来是这样的: 11110110,而这11111110。有人知道这是怎么回事吗?
在Arduino上,我正在使用这条线库。
Wire.beginTransmission(2);
Wire.write(10);
Wire.endTransmission();
Wire.beginTransmission(2);
Wire.write(~(10101011));
Wire.endTransmission();
Wire.beginTransmission(2);
Wire.write(11);
Wire.endTransmission();十字架看起来是这样的。
发布于 2012-07-31 22:48:44
问题是在bitcnt 0上运行代码。它没有更新字节中的第0次索引。我发送了一个9h位,一个ACk位,跟踪我的数据字节,并在接收到该字节时运行代码。
发布于 2012-07-20 21:04:01
我的答案可能是完全错误的,因为问题中缺少了很多信息,但在最不重要的一点上引起的问题使我认为您可能与I2C地址有一些混淆。您能检查一下主人是否发出这样的命令:
Start - Lattice1AddressWrite(lsb==0) - 0x0A - LedPatterSingleByte - 0x0B -停止
有多个开始或停止将改变字节的含义。
如果这不能解决您的问题,请您提供一些信息/伪代码,主。我需要一些信息把这个放到背景里。
https://stackoverflow.com/questions/11567179
复制相似问题