NodeMCU 扩展74HC595 控制数码管

spi api

https://nodemcu.readthedocs.io/en/master/en/modules/spi/

引脚图

NodeMCU 扩展74HC595 控制数码管_第1张图片
IMG_6250.JPG
NodeMCU 扩展74HC595 控制数码管_第2张图片
timg.jpg
NodeMCU 扩展74HC595 控制数码管_第3张图片
0a4.png
NodeMCU 扩展74HC595 控制数码管_第4张图片
0a3.png

接法

  • SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。
  • SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;
    下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
  • RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
  • G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

youtube教学

单595连通led

NodeMCU 扩展74HC595 控制数码管_第5张图片
image.png

https://gist.github.com/lucsmall/66d9b6539df7a0daa569

youtube此视频提供的代码:

latch_pin = 2
gpio.mode(3,gpio.INPUT)
gpio.mode(latch_pin, gpio.OUTPUT)
gpio.write(latch_pin,gpio.LOW)
result = spi.setup(1,spi.MASTER,spi.CPOL_HIGH,spi.CPHA_LOW,8,0)
print(result)  
index = 0x00ff
function next()
    print(index, string.format("0x%02X", index))
    spi.send(1,index) 
    gpio.write(latch_pin,gpio.HIGH)
    gpio.write(latch_pin,gpio.LOW)
    index = index+1
end  
next() 
gpio.trig(3,"up",next)

按照上面接线, 成功点亮, 但是貌似没有逻辑, 逻辑分析仪显示也和led亮灭相符

num bitcode led real led should correct ?
0 0000 - - right
1 0001 - 1 wrong
2 0010 - 2 wrong
3 0011 1,2 1,2 right
4 0100 - 3 wrong
5 0101 - 1,3 wrong
6 0110 3 2,3 wrong
7 0111 1,2,3 1,2,3 right
8 1000 - 4 wrong
9 1001 - 1,4 wrong
10 1010 - 2,4 wrong
11 1011 2 1,2,4 wrong
12 1100 3,4 3,4 wrong
13 1101 1,3,4 1,3,4 right
14 1110 3,4 2,3,4 wrong
15 1111 1,2,3,4 1,2,3,4 right

后来发现把spi的clock divide设置为1就正常了, 其他分频都不正常, 未知原因, 没有逻辑分析仪, 无法深入研究, 会的可以留言说明一下

双595级联

现在是正确的级联方案,

latch_pin = 2
gpio.mode(3,gpio.INPUT)
gpio.mode(latch_pin, gpio.OUTPUT)
gpio.write(latch_pin,gpio.LOW)
result = spi.setup(1,spi.MASTER,spi.CPOL_LOW,spi.CPHA_HIGH,16,8)
print(result)  
index = 0x00ff
function next()
    print(index, string.format("0x%02X", index))
    spi.send(1,index) 
    gpio.write(latch_pin,gpio.HIGH)
    gpio.write(latch_pin,gpio.LOW)
    index = index+1
--    if(index>255) then
--        index = 0
--    end
end  
next() 
gpio.trig(3,"up",next)

595级联压降问题

第二个595 led有高电平时, 第一个595对应的led压降为0.23~0-26
第二个595 led无高电平时, 第一个595对应的led压降为0.012
现象: 不管第一级led亮没亮, 第二级led都不会很亮

NodeMCU 扩展74HC595 控制数码管_第6张图片
16灯全亮状态

你可能感兴趣的:(NodeMCU 扩展74HC595 控制数码管)