arduino

NodeMCU 扩展74HC595 控制数码管

2017-08-27  本文已影响42人  Zszen

spi api

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

引脚图

IMG_6250.JPG timg.jpg 0a4.png 0a3.png

接法

youtube教学

单595连通led

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都不会很亮

16灯全亮状态
上一篇 下一篇

猜你喜欢

热点阅读