跳到主要内容

外设配置

本分类的指令用于开关各个外设模块,并配置板载 PWM、外置 PCA9685 PWM 模块、实时时钟与 Playtune 音频引擎。

0xC0 模块配置(MKPZ)​

一次开关多个模块。OP-1 是一个 16 位开关位图,整体替换外设开关位图(位定义与寄存器 R34 相同)。位图的每一位都生效:某位为 0,对应模块即被关闭。

bit模块
0ADS1115 AD 转换器(0xC1)
1BME280 环境传感器(0xC3)
2DS1307 实时时钟(0xCA)
3TCS34725 颜色传感器(0xC4)
4PCA9685 PWM 发生器(0xC5)
6WS2812B 全彩灯(0xCB)
8OLED 显示屏
11旋律发生器(0xE8)
    000  C0  0000  0105    开 ADS1115 + DS1307 + OLED,其余全关
001 C0 0000 0000 位图全 0:所有模块关闭

0105 对应二进制 0000 0001 0000 0101:bit 0、bit 2、bit 8 置 1,恰好是上面注释中提到的三个模块。

信息
操作数数值/范围备注
OP-00000忽略
OP-10000~FFFF开关位图,每位对应一个模块(见上表)

单模块开关:通用格式​

六条单模块开关指令 0xC1、0xC3、0xC4、0xC5、0xCA、0xCB 共用同一个五字节布局 XX 00 ss 00 00,其中 ss = 01 使能,其他值关闭该模块。

信息
操作数数值/范围备注
OP-0000忽略
OP-0101使能模块
其他关闭模块(建议用 00)
OP-10000忽略
000  C1  0001  0000    开启 ADS1115 模块
001 C1 0000 0000 关闭 ADS1115 模块
提示

自 2026-09 固件起,上电自检会自动使能它检测到的每一个模块,因此示例程序一般不再需要显式的使能指令。这些开关仍有用武之地:故意关闭某个模块,或在关闭之后重新打开。

0xC1 ADS1115 开关​

使能或关闭 ADS1115 模数转换器模块。

提示

使能后,转换结果保存在 R40~R4F——见传感器。

0xC3 BME280 开关​

使能或关闭 BME280 环境传感器(温度、湿度、气压)。

提示

传感器读数保存在 R2E~R30。

0xC4 TCS34725 开关​

使能或关闭 TCS34725 颜色识别传感器。

0xC5 PCA9685 开关​

使能或关闭 PCA9685 外置 PWM 发生器模块。

提示

下文的外置 PWM 指令 0xE1~0xEF 需要先使能本模块。

0xCA DS1307 开关​

使能或关闭 DS1307 实时时钟模块。使能后时间数据会持续更新;可以用 0xE3 写入新时间。

0xCB WS2812B 开关(MKCD)​

使能或关闭 WS2812B 全彩灯模块。彩灯指令见彩灯与音乐。

0xCC 板载 PWM 占空比(PWM)​

设置板载 PWM 通道的占空比:CH1=PB4、CH2=PB3、CH3=PB0、CH4=PB1。

    000  CC  0001  01F4    单通道:CH1 占空比 = 500
001 CC FF05 01F4 位掩码:CH1 和 CH3 占空比同时 = 500

第二行中,05 按位选择通道(b0101 = CH1 和 CH3)。

信息
操作数数值/范围备注
OP-00FF位选模式:OP-01 按位选择通道
其他单通道模式(建议用 00)
OP-0100~03通道号(单通道模式)
00~0F通道位掩码,bit0=CH1 … bit3=CH4(位选模式)
OP-10000~03E7占空比;仅当数值小于 1000 时才写入
进阶

旋律(0xE8)或 MIDI 播放(0xFE)占用音频引脚期间,受影响的 PWM 通道不会被重新配置。

0xD0 Playtune 开关​

激活或复原 Playtune 音频引擎。值为 01 时音频系统切换到 MIDI 播放器 0xFE 所需的三声道 MIDI 模式;值为 00 时恢复板载 PWM。

    000  D0  0000  0001    激活 Playtune(MIDI 三声道模式)
信息
操作数数值/范围备注
OP-0000忽略
OP-0101激活 Playtune(MIDI 三声道模式)
00恢复板载 PWM
OP-10000忽略

16 位整体操作数​

从 0xE1 开始,本章的大多数操作数都按 16 位整体解释:OP-0 与 OP-1 各自作为一个 16 位数值(一个 4 位十六进制数),而不是两个独立的 8 位半字节。例如 E1 0003 01FF 中,0003 是通道掩码、01FF 是占空比——两者都不拆分字节。另见简述中的操作数记法。

0xE1 外置 PWM:掩码选通道 + 立即占空比​

一条指令设置 PCA9685 模块 0 全部 16 个通道的占空比。掩码位为 1 的每个通道都收到占空比值。

    000  E1  0003  01FF    模块0 通道0和1,占空比 = 01FF(约12.5%)
信息
操作数数值/范围备注
OP-00000~FFFF16 通道位掩码(bit0 = 通道 0 … bit15 = 通道 15)
OP-10000~0FFF占空比,12 位分辨率
提示

0xE1 只能寻址模块 0。要同时刷新多个 PCA9685 模块,请用 0xEB 或 0xEC。

0xE2 外置 PWM:掩码选通道 + 寄存器占空比​

通道选择方式与 0xE1 相同,但占空比取自寄存器。

000  10  0020  01FF    R20 = 01FF(占空比)
001 E2 0003 0020 模块0 通道0和1,占空比取自 R20
信息
操作数数值/范围备注
OP-00000~FFFF16 通道位掩码
OP-100~FF寄存器号;占空比 = R[reg]

0xE3 写 RTC 时间​

向 DS1307 实时时钟写入新时间。以 OP-01 为起始的 7 个连续寄存器依次存放年、月、日、星期、时、分、秒。写入在后台异步进行。

000  10  0030  001A    R30 = 26(年)
001 10 0031 0009 R31 = 9(月)
002 10 0032 0019 R32 = 25(日)
003 10 0033 0005 R33 = 5(星期)
004 10 0034 000A R34 = 10(时)
005 10 0035 001E R35 = 30(分)
006 10 0036 0000 R36 = 0(秒)
007 E3 0030 0000 把 R30~R36 写入 DS1307
信息
操作数数值/范围备注
OP-0000忽略
OP-0100~FF起始寄存器号;R[n]~R[n+6] = 年、月、日、星期、时、分、秒
OP-10000忽略

三模块掩码机制​

外置 PWM 端口最多支持 3 个 PCA9685 模块——模块 0、1、2,各 16 通道(Port4~6,见简述)。对 0xEB~0xEE 而言,OP-0 是三个连续掩码寄存器中第一个的编号 n:

寄存器内容
R[n]模块 0 的 16 通道位掩码
R[n+1]模块 1 的 16 通道位掩码
R[n+2]模块 2 的 16 通道位掩码

0xEB 与 0xEC 一条指令刷新全部三个模块中被掩码选中的通道(最多 48 个);0xED 与 0xEE 分别只刷新模块 1、模块 2,使用对应的掩码寄存器 R[n+1] / R[n+2]。

0xEB 外置 PWM:三模块 + 立即占空比​

对三个模块中由掩码寄存器选中的通道施加立即占空比。

000  10  0040  0003    R40 = 模块0 掩码(通道0和1)
001 10 0041 0001 R41 = 模块1 掩码(通道0)
002 10 0042 0000 R42 = 模块2 掩码(无通道)
003 EB 0040 01FF 掩码命中的所有通道占空比 = 01FF
信息
操作数数值/范围备注
OP-00000~00FF掩码寄存器号 n(R[n]~R[n+2] = 模块 0/1/2 掩码)
OP-10000~0FFF占空比,12 位分辨率

0xEC 外置 PWM 寄存器版(WPWM)​

0xEB 的寄存器版:占空比取自寄存器。一条指令可刷新三个模块共 48 个通道。

000  10  0040  0003    R40 = 模块0 掩码
001 10 0041 0001 R41 = 模块1 掩码
002 10 0042 0000 R42 = 模块2 掩码
003 10 0050 01FF R50 = 01FF(占空比)
004 EC 0040 0050 刷新所有掩码通道,占空比取自 R50
005 EC 0010 000F 掩码取 R10/R11/R12(模块0/1/2),占空比取 R15;掩码为1的通道一起输出
信息
操作数数值/范围备注
OP-00000~00FF掩码寄存器号 n(R[n]~R[n+2] = 模块 0/1/2 掩码)
OP-100~FF占空比寄存器号;占空比 = R[reg]

0xED 外置 PWM:仅模块 1(寄存器版)​

与 0xEC 相同,但只刷新模块 1(掩码寄存器 R[n+1])。

    000  10  0041  00F0    R41 = 模块1 掩码 (channels 4~7)
001 10 0050 0800 R50 = 0800(占空比)
002 ED 0040 0050 只刷新模块1,占空比取自 R50
信息
操作数数值/范围备注
OP-00000~00FF掩码寄存器号 n;掩码取自 R[n+1]
OP-100~FF占空比寄存器号;占空比 = R[reg]

0xEE 外置 PWM:仅模块 2(寄存器版)​

与 0xEC 相同,但只刷新模块 2(掩码寄存器 R[n+2])。

    000  10  0042  0001    R42 = 模块2 掩码 (channel 0)
001 10 0050 0400 R50 = 0400(占空比)
002 EE 0040 0050 只刷新模块2,占空比取自 R50
信息
操作数数值/范围备注
OP-00000~00FF掩码寄存器号 n;掩码取自 R[n+2]
OP-100~FF占空比寄存器号;占空比 = R[reg]

0xEF 设置 PWM 频率(WPL)​

设置某个 PCA9685 模块(0、1 或 2)的 PWM 频率,单位 Hz。

    000  EF  0000  03E8    模块0 的 PWM 频率 = 1000 Hz
信息
操作数数值/范围备注
OP-00000~0002模块号
OP-10000~FFFF频率,单位 Hz(PCA9685 大约支持 24~1526 Hz)
警告

设置频率会暂停通道刷新:0xEF 执行后,各通道保持最后一次的输出,直到下一条 WPWM 0xEC 执行为止。