【问题标题】:Micropython chained shift registers don't behave as expectedMicropython 链式移位寄存器的行为不符合预期
【发布时间】:2020-01-04 16:38:51
【问题描述】:

我是电子新手,并且一直在玩 esp8266 和 Micropython。我试图让几个链式移位寄存器 (sn74hc595) 控制 16 个 LED,但我很难理解我得到的结果。

我的脚本如下:

from machine import Pin
import time

def sixteen_bit(sleep_time=100):
    while True:
        for value in [1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535]:
            bits = [value >> i & 1 for i in range(15, -1, -1)]
            for i in range(15, -1, -1):
                data.value(bits[i])
                clock.value(1)
                clock.value(0)
            latch.value(1)
            latch.value(0)

            time.sleep_ms(sleep_time)

在我的视频中有点难以分辨,但每个 LED 都会在所有重复之前单独亮起。 Google Drive Video Example

根据我的代码和对移位寄存器的初步了解,我预计当[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 移入时所有 LED 都会亮起。

所以我的第一个问题是为什么我的脚本没有点亮每个 LED,而之前的 LED 仍然点亮?如果您需要我进一步澄清,请告诉我!谢谢!

【问题讨论】:

  • 在再次将clocklatch 引脚设置为高电平和低电平之间似乎没有任何延迟。您确定数据正确地输入移位寄存器吗?您是否先尝试过一个更简单的示例,例如只存储一个静态位模式?

标签: python led micropython shift-register


【解决方案1】:

我修改了您的代码以打印 value 后跟您生成的 bits[i] 值序列,并得到:

1
1000000000000000
3
1100000000000000
7
1110000000000000
15
1111000000000000
31
1111100000000000
63
1111110000000000
127
1111111000000000
255
1111111100000000
511
1111111110000000
1023
1111111111000000
2047
1111111111100000
4095
1111111111110000
8191
1111111111111000
16383
1111111111111100
32767
1111111111111110
65535
1111111111111111

所以您生成了正确的位模式,但您没有正确地将数据计时到移位寄存器中。

假设 dataclocklatch 实际上正在驱动您认为的输出引脚,那么这是一个 electronics 问题而不是 MicroPython 问题。但我会先在您将每个引脚拉高或拉低后添加一个时间延迟。

【讨论】:

  • 感谢您的意见!我希望我的代码有一个明显的问题,但我想我会更深入地研究我的移位寄存器的规范!我出城一周,但刚回来,有机会尝试不同的时间延迟。有趣的是,我最终得到了相同的结果(每个 LED 依次点亮),只是更慢或更快!这里发生了一些超出我目前理解的事情......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
相关资源
最近更新 更多