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