之前我发过关于基于PIC单片机驱动WS2812灯串的帖子。https://bbs.21ic.com/icview-3393678-1-1.html
小编跟我透露可以用CLB驱动,发现厂家的示例库已经提供了方法,本帖仅展示示例中的演示。
示例访问地址:
https://github.com/microchip-pic ... pi-ws2812-mplab-mcc
SPI 到 WS2812 — CLB 用例将 PIC16F13145 微控制器与 MCC Melody 结合使用。CLB 外设是一组逻辑元件,可以对其进行编程以执行各种数字逻辑功能。logic function 可以是完全组合的、顺序的或两者的组合,使用户能够将基于硬件的自定义 logic 合并到他们的应用程序中。
实际上还是使用SPI接口进行控制,只不过将SPI数据发给CLB逻辑组合,解码驱动WS2812B,也就是CLB 可以将 SPI 数据转换为等效的 WS2812 数据。
串行数据输出 (SDO) 和串行时钟 (SCK) 信号定义了应用。信号是两个片外 demux 电路的输入,如下图所示。CLBSWIN 寄存器 - - 的第一个位用作相同 demux 电路的选择器位输入。CLBSWIN[0]、 和 引脚配置为 CLB 的输入引脚,并被描述为同步输入。该引脚配置为正边沿检测器,它将仅输出脉冲。这些 pins 也被路由到不同的 output pins,称为 ,可以设置为使用 logic analyzer 记录信号以进行调试。
MSSP1_SDO CLBSWIN0 MSSP1_SCK SDO SWIN0 SCK PPS_OUTx
如果设置了 CLBSWIN0 位,则 SPI 信号将被路由到电路,如下面的屏幕截图所示,该电路由一个 D 锁存器、一个带复位的 3 位计数器和一个 LUT 组成。4 位查找表 (LUT) 的输出值为 ,用于管理 WS2812 LED 矩阵的特定时序,可在其自己的数据表中找到。LUT 的前三个输入(A、B、C)是 3 位计数器的输出,而 LUT 的第四个输入用于为矩阵选择正确的模式,因此有两组八位。在绿色框中,D 值为 ,表示 “0 代码” 由三个高点和五个低点周期选择和描述,而 “1 代码” 由六个周期高点和两个低点周期描述。这些周期代表数据表中提到的以所需模式为 LED 供电的正确时间。
SPI_to_WS2812 0x7E0E 0
要为 LED 供电,必须传输“1 个代码”信号,即 0.7 μs ± 150 ns 高和 0.6 μs ± 150 ns 低频的脉宽调制 (PWM) 信号。要关闭电源,将传输“0 代码”信号,这意味着 PWM 信号具有 0.35 μs ± 150 ns 高,0.8 μs ± 150 ns 低电平。在本例中,“1 code” 信号由 6 个高信号周期 logic和 2 个低信号周期 logic来描述,而 “0 code” 由 3 个高信号周期和 7 个低信号周期组成。每个传输的字节描述 10 个周期。如果 SDO 信号的位为 或 ,则带启用的 D 锁存器用作 LUT 的第四个输入,为 WS2812 选择所需的序列图。为了更好地理解上述信息,下图提供了序列图和时间。1001
这个带复位功能的 3 位计数器用于对描述每种 GRB 模式颜色的多达 8 个值进行计数。反转的 SPI 时钟脉冲重置计数器。当所有输出都通过 3-AND 门为高电平时,计数器使能,因此计数器保持 Reset 状态,直到下一个脉冲到来。在此配置中,计数器仅在满足使能脉冲时工作,并在最后一个值 7 出现时停止并重置。输出值表示设置 “0 code” 和 “1 code” 所需的下一个 LUT 的输入。下图显示了模拟硬件计数器所需的所有门和引脚。
WS2812 “0/1 代码” 的一个必要周期约为 1.25 μs,具体取决于制造商。要获得所需的周期输出,请将 System Clock 设置为 32 MHz,将 CLB 时钟设置为 System Clock 除以 4,并将 SPI 时钟设置为 800 kHz。这些设置将允许整个 CLB 电路为 WS2812 LED 矩阵生成良好时序的输出。对于其他类型的 neopixels,必须手动更改指定的 clock 值以获得所需的 timings。 为了更好地理解电路,使用调试 output pins 并使用 logic analyzer 读取以显示数字信号。 当 CLBSWIN0 为 时,将显示来自 demux 电路的 SDO 和 SCK 信号。0 设置CLBSWIN1后,将显示 WS2812 矩阵旁边连接的 SPI_to_WS2812 输出。“0 code” 序列图由前三对时序标记组成: P0-T0H cycle, P1-T0L cycle 和 P2 (P0 和 P1 之间的连接)。接下来的三对时序标记,P3-T1H 周期、P4-T1L 周期和 P5 (P3 和 P4 之间的连接),代表 “1 代码” 序列图。
以下外设和时钟配置是使用 PIC16F13145的 MPLAB 代码配置器 (MCC) Melody 设置的:
配置位:
CONFIG1:
External Oscillator mode selection bits:振荡器未启用
COSC 位的上电默认值:HFINTOSC (1 MHz)
CONFIG2:
Brown-out reset enable bits:禁用 Brown-out reset
CONFIG3:
WDT 操作模式:WDT 禁用,SEN 被忽略
时钟控制:
时钟源: HFINTOSC
HF 内部时钟: 32_MHz
时钟分频器:1
MSSP1 和 SPI:
串行协议:SPI
模式:主机
SPI 模式:SPI 模式 1
配置名称:Custom_SPI
请求速度 (kHz):800
时钟源选择: FOSC/4_SSPxADD
CLB1:
启用 CLB:启用
时钟选择:HFINTOSC
Clock Divider: 将 clock source 除以 4
CRC (CRC) (CRC)
由 CLB 自动配置
NVM:
由 CLB 自动配置
Pin Grid View(引脚网格视图):
CLBPPSOUT0:RB4 (CLBSWIN0)
CLBPPSOUT1:RB5 (SDO)
CLBPPSOUT2:RB6 (SCK)
CLBPPSOUT7:RB7(SPI_to_WS2812 出)
|