本帖最后由 dvacos 于 2024-7-2 19:39 编辑
PD 与 0.91 IIC OLED
PD协商输出20V
打开...\CH32X035EVT\EVT\EXAM\USBPD\USBPD_SNK工程,
需要注意,LOG的比特率为 921600,串口上位机要同步修改为921600
编译烧录后,接好串口线,可以看见以下LOG
SystemClk:48000000
ChipID:03510601
PD SNK TEST
CC1 SRC Connect
IF_RX_RESET
SystemClk:48000000
ChipID:03510601
PD SNK TEST
CC1 SRC Connect
PDO:1
Current:3000 mA
Voltage:5000 mV
PDO:2
Current:3000 mA
Voltage:9000 mV
PDO:3
Current:3000 mA
Voltage:15000 mV
PDO:4
Current:2500 mA
Voltage:20000 mV
Request:
Current:3000 mA
Voltage:5000 mV
Success
可以看见在确认CC连接好之后,出现了一次断电重新上电(SystemClk:48000000重新打印了)
重新上电之后就能看见PDO报文展示目前使用的充电器支持4种输出模式
1、5V 3A 2、9V 3A 3、15V 3A 4、20V 2.5A
上图是测试使用的充电器标注的信息有所出入,11V 5A的和15V 3A 的信息不一样,可能11V 5A是小米为了做这个55W的充电器专门魔改出来的,不是规范的协议标准,应该需要修改协议内容才能触发该挡位。
在上图的代码处,把PDO_INDEX_1修改想要的电压、电流挡位即可,安装上文的LOG,将其改为PDO_INDEX_4,就是选择20V 2.5A 功率为55w的输出!足够电烙铁、加热器等,常见的小功率设备了!更换更大功率的充电器可以得到更大功率的输出!让你的手机充电器不再空闲!
添加OLED显示
这种OLED屏幕是某宝最容易找到的屏幕之一,科普什么的,去百度,我就不赘述了。
屏幕的驱动IC是 SSD1306,所以我们驱动这块屏幕是控制主控把我们想要现实的内容按SSD1306能够识别的格式整理后,通过IIC发送给 SSD1306 ,接到数据后SSD1306会按照对应的格式解析 并 显示在屏幕上。
和大多数传感器一样我们需要初始化OLED屏幕,设定分辨率,左上角坐标、刷图方式等等,以下是我找到的初始化参数。
PS:注意每一款屏幕的初始化参数都是不一致的!!需要确认参数是否可用。
0xAE //--display off
0x40 //---set low column address
0xB0 //---set high column address
0xC8 //-not offset
0x81 // contract control
0xFF //--128
0xA1 //set segment remap
0xA6 //--normal / reverse
0xA8 //--set multiplex ratio(1 to 64)
0x1F
0xD3 //-set display offset
0x00
0xD5 //set osc division
0xF0
0xD9 //Set Pre-Charge Period
0x22
0xDA //set com pin configuartion
0x02
0xDB //set Vcomh
0x49
0x8D //set charge pump enable
0x14
0xAF //--turn on oled panel
具体代表什么,可用对照SSD1306的规格书,一一理解。
将以上的数据通过IIC正确发送数据后,就可以成功初始化屏幕了。
屏幕成功初始化的效果
至此我们就验证了IIC 和 屏幕通讯正常,初始化正常后就移植gui代码,就可以显示任意数据了。
PD+OLED显示
组合效果!
如图,可以看见目前我选择的是20v 2.5A 的输出!
代码:
USBPD_20240702.zip
(635.96 KB)
以上代码需要放在 官方Demo的例程路径下,才能正常编译,应为相关联的文件,我没有单独提取出来。
路径如下
xxx\CH32X035EVT\EVT\EXAM
|
@mingkong :代码上传到附件了
想问一下可以发完整源码吗 这边邮箱1041603260@qq.com,谢谢谢谢