寻求适配RPi Pico W的MicroPython版TLC5947驱动库
RPi Pico W 上 TLC5947 LED驱动的问题
我正在基于RPi Pico W开发项目,需要使用采用SPI连接方式的TLC5947 LED驱动芯片。自行实现驱动后未能成功运行,Adafruit有对应的CircuitPython模块,但无法直接移植到MicroPython。请问我需要继续自行开发驱动,还是已有现成的MicroPython模块可以直接使用?
以下是我尝试编写的代码(推测问题出在write或pwmbuffer部分,注释来自Adafruit的Arduino版C++库):
from machine import Pin import machine class TLC5947: def __init__(self, clock: int = 2, data: int = 3, latch: int = 5): self.numdrivers = 1 self.data = Pin(data, Pin.OUT) self.clock = Pin(clock, Pin.OUT) self.latch = Pin(latch, Pin.OUT) self.latch.low() self._spi = machine.SPI(0) # self.OE = OE self.pwmbuffer = [0] * (24 * 2 * self.numdrivers) # memset(pwmbuffer, 0, 2 * 24 * n); # self.spi = machine.SPI(0) def write(self): self.latch.low() # digitalWrite(_lat, LOW); # // 24 channels per TLC5974 for c in range(24 * self.numdrivers - 1, -1, -1): # for (int16_t c = 24 * numdrivers - 1; c >= 0; c--) { # // 12 bits per channel, send MSB first for b in range(11, -1, -1): # for (int8_t b = 11; b >= 0; b--) { self.clock.low() # digitalWrite(_clk, LOW); if self.pwmbuffer[c] & (1 << b): # if (pwmbuffer[c] & (1 << b)) self.data.high() # digitalWrite(_dat, HIGH); else: # else self.data.low() # digitalWrite(_dat, LOW); # self.clock.high() # digitalWrite(_clk, HIGH); # } # } self.clock.low() # digitalWrite(_clk, LOW); self.latch.high() # digitalWrite(_lat, HIGH); self.latch.low() # digitalWrite(_lat, LOW); def setLed(self, lednum, r,g,b): self.setPWM(lednum * 3, r) self.setPWM(lednum * 3 + 1, g) self.setPWM(lednum * 3 + 2, b) def setPWM(self, chan: int, pwm: int): if (pwm > 4095): pwm = 4095 try: self.pwmbuffer[chan] = pwm except: pass
补充说明:我看到某个仓库的文件夹结构如下:
project/ ├── modules/ │ └──tlc5947-rgb-micropython/ │ ├──... │ └──micropython.mk └── micropython/ ├──ports/ ... ├──stm32/ ...
但我的项目文件夹结构是这样的,不清楚该如何适配:
project/ |_ .vscode/ | |_ ... |_ lib/ |_ code.py |_ i2c_display.py |_ tlc5947_ME.py |_ .picowgo # Used by Pico-W-Go vscode extention to allow Pico programming in vscode
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

