Thread 中讨论的其他器件: LP5813
工具与软件:
我已通过 i2c 将 RaspberryPi 3 B+与 LP55231结合使用、能够通过写入寄存器来预览连接到 D7和 D9的 LED、使用 python 并连接 python 代码。
我们的目标是点亮 D7和 D9的启动状态。
导入 smbus2
导入时间
导入 RPi。 GPIO 作为 GPIO
# I2C 总线(1为 Raspberry Pi 3)
总线= smbus2.smbus (1)
# LP55231 I2C 地址
地址= 0x32
#用于使能的 GPIO 引脚(BCM 编号)
ENABLE_PIN = 17
DEF setup_GPIO():
""""设置 GPIO 引脚以启用并将其设置为高电平以启用 LP55231。""
GPIO.setmode(GPIO.BCM)
GPIO.setup(ENABLE_PIN、GPIO。 输出)
GPIO.OUTPUT (ENABLE_PIN、GPIO。 High) #启用 LP55231
DEF READ_REGISTER (REGISTER):
""通过 I2C 从指定寄存器读取一个字节。""
value = BUS.READ_BYTE_DATA (地址、寄存器)
从 reg{register:#04x}打印(f"读取值{value:#04x}")
返回值
DEF WRITE_REGISTER (寄存器、值):
""通过 I2C 将一个字节写入指定的寄存器。""
BUS.WRITE_BYTE_DATA (地址、寄存器、值)
# print (f"写入值{value:#04x}到注册{register:#04x}")
READ_REGISTER (REGISTER)
DEF init_lp55231 ():
""初始化 LP55231 LED 驱动器。""
#重置设备
WRITE_REGISTER (0x00、0x40)
WRITE_REGISTER (0x01、0x15)
# write_register (0x05、0x40)
time.sleep (0.1)
#启用所有引擎并设置内部时钟和开机状态
WRITE_REGISTER (0x36、0x0F) #引擎1控制
# write_register (0x37、0x0F) # Engine 2 control
# write_register (0x38、0x0F) # Engine 3 control
#设置 LED 电流(假设你想要全电流,必要时调整)
WRITE_REGISTER (0x26、0x32) #红色 LED 电流(最大50%)
WRITE_REGISTER (0x27、0x32) #绿色 LED 电流(最大50%)
WRITE_REGISTER (0x28、0x32) #蓝色 LED 电流(最大50%)
#启用所有 LED 的输出控制
WRITE_REGISTER (0x16、0xFF)
WRITE_REGISTER (0x17、0xFF)
WRITE_REGISTER (0x18、0xFF)
WRITE_REGISTER (0x71、0x40)
WRITE_REGISTER (0x2C、0xB7)
WRITE_REGISTER (0x0C、0x80)
#将程序加载到 SRAM 中
enable_auto_boot()
LOAD_PROGRAM_TO_SRAM()
#配置在引导时运行程序
#设置自动增量以保持写入指令
WRITE_REGISTER (0x3D、0x01)
READ_REGISTER (0x3A)
#延迟以确保 LP55231开始执行程序
时间睡眠(0.5)
DEF LOAD_PROGRAM_TO_SRAM():
""将程序加载到 SRAM 中以设置上电时的绿色 LED。""
#将绿色 LED 设置为最大亮度的示例程序
程序=[
0x9D、0x03、 # ldi R6100 (最大亮度)
0x40、0x96、 # MOV R6、PWM1 (将值移至绿色 PWM 寄存器)
0xC0、0x00、 # MOV R6、PWM1 (将值移至绿色 PWM 寄存器)
0x01、0x00、 # NOP (无操作、程序结束)
]
SRAM_ADDRESS = 0x50 #程序存储器从0x50开始
#将程序写入 SRAM
对于 i、枚举(program)中的指令:
WRITE_REGISTER (SRAM_ADDRESS + I、指令)
# READ_REGISTER (SRAM_ADDRESS + I)
DEF ENABLE_AUTO_BOOT():
""在上电时启用 LP55231从 SRAM 执行程序。""
#设置引擎1在引导时从 SRAM 执行程序
WRITE_REGISTER (0x4C、0x50) #将程序计数器设置为 SRAM 的起始值
WRITE_REGISTER (0x37、0x00) #引擎2控制
# write_register (0x00、0x60) #启动引擎1.
默认 main():
尝试:
Setup_GPIO()
init_lp55231 ()
READ_REGISTER (0x50)
#保持循环或休眠以保持程序运行
# 正确时:
# 时间睡眠(1)
最后:
#清理 GPIO
gpio.cleanup ()
如果__name__="__MAIN__":
main ()
-------------------------------------------------------- 程序结束
从寄存器0x00读取值0x40
从寄存器0x01读取值0x15
从寄存器0x36读取值0x0F
从寄存器0x26读取值0x32
从寄存器0x27读取值0x32
从寄存器0x28读取值0x32
从寄存器0x16读取值0xff
从寄存器0x17读取值0xff
从寄存器0x18读取值0xff
从寄存器0x71读取值0x00
从寄存器0x2C 读取值0xb7
从寄存器0x0c 读取值0x80
从寄存器0x4c 读取值0x50
从寄存器0x37读取值0x00
从寄存器0x50读取值0x00
从寄存器0x51读取值0x00
从寄存器0x52读取值0x00
从寄存器0x53读取值0x00
从寄存器0x54读取值0x00
从寄存器0x55读取值0x00
从寄存器0x56读取值0x00
从寄存器0x57读取值0x00
从寄存器0x3D 读取值0x00
从寄存器0x3a 中读取值0x50
从寄存器0x50读取值0x00
-------------------------------------------------------- 代码的实际日志。
因为我可以看到从0x50开始的程序存储器地址不能写入数据
有没有我在这里遗漏的任何顺序,任何建议请提供相同的