实验环境
Matlab版本: 2021b
操作系统 :Win10专业版
硬件平台 :YF-STM32-ALPHA 1R4
实验内容 :I2C驱动数码管芯片显示‘0’~‘A’字符
本次实验所用到的simulink模型如图5.2所示,威廉希尔官方网站 原理图如图5.3所示,实验效果为数码管从‘0’~‘A’轮流显示,如图5.1所示。
图5.1 数码管驱动显示实验效果
图5.2 数码管显示I2C驱动模型
图5.3 CH422G共阴数码管威廉希尔官方网站 连接
数码管简单来说就是将多个LED有规律的排列在一起,实验中用到的数码管外观如图5.4所示,其型号为:FJ3461AH,三维尺寸:30.00mmx14.00mmx7.20mm,数码管内部为共阴极,内部威廉希尔官方网站 原理和引脚定义如图5.5图所示。
图5.4 数码管实物外观
图5.5 数码管尺寸及内部威廉希尔官方网站 原理图
数码管驱动芯片CH422引脚分布如图5.6所示,引脚定义解释参考表5.1。
图5.6 数码管驱动芯片
表5.1 CH422G芯片引脚功能说明
引脚号 | 引脚名称 | 类型 | 引脚说明 |
---|---|---|---|
14 | VCC | 电源 | 正电源,持续电流不小于 100mA |
7 | GND | 电源 | 公共接地,持续电流不小于 100mA |
1~4、12、13、15、16、 | SEG0~SEG7 | 三态输出及输入 | 数码管的段驱动,高电平有效,双向输入输出,内置弱上拉电阻 |
8~11 | DIG0~DIG3 | 推挽或开漏输出 | 数码管的字驱动,低电平有效,通用输出,可选开漏输出,低电平有效 |
5 | SDA | 开漏输出及输入 | 2 线串行接口的数据输入和输出,内置上拉电阻 |
6 | SCL | 输入 | 2 线串行接口的数据时钟 |
本次实验中只用到I2C写模型,写I2C数据核心模型如图5.7所示,其参数设置如图5.8所示,其中“I2C module”用于设置选用哪个I2C,即STM32中常说的I2C0,I2C1,I2C2,实验中用到的I2C芯片连接在I2C2(PB10->SCL,PB11->SDA)上,"Slave address"用于设置I2C器件地址,图中为了便于理解,使用了一个hex2dec('24')模型转换函数,“Slave register addr”用于设置寄存器地址,参数设置基本就介绍这些,后面用到其它方式再逐一介绍,这里面的具体参数含义稍后为大家解答。
图5.7 I2C向寄存器写数据模型
图5.8 I2C写模型参数设置
在驱动CH422芯片前,我们首先要知道进行哪些参数设置和数据写入才能使数码管正常工作,如下代码所示,先对芯片进行设置(读者朋友对着操作即可,此代码为官方提供的参考代码,官方手册上只有0x48和0x46有简要说明),我们只需往0x48,0x44,0x46地址中写入固定数据,最后往0x60地址中写如要显示的数据即可。
/* 共阴数码管编码表 0~F */
unsigned char BCD_decode_tab[ 0x10 ] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 }; //0--9数码管数字
CH422_Write(0x48,0x01); /* 设置输出引脚 DIG0~DIG3 开漏输出使能 */
CH422_Write(0x44,0x00); /* 设置低8位开漏输出命令,默认方式 */
CH422_Write(0x46,0x00); /* DIG0~DIG3使引脚输出低电平 */
CH422_Write(0x60,BCD_decode_tab[i]); /* 设置双向输入输出命令,显示数据用 */
这里作者首先用C语言方式正常驱动数码管工作,如图5.9所示,这是参数设置过程正确时逻辑分析仪捕获到的I2C波形,图5.10为正常显示数字过程中捕获到的I2C波形。
图5.9 C语言方式正常设置数码管波形
图5.10 C语言方式正常显示数字波形
为了实现上述相同的效果,我们需要在simulink对参数进行设置来达到上述效果,0x48,0x44,0x46参数设置如图5.11~5.13所示,细心的读者应该有发现,器件地址与C语言写的地址不一样,这里作者暂时没找到原因,但是好在还有一定的规律可循,最终得到的波形如图5.14所示,与C语言驱动的还是有点不一样,只代表其能工作,图中首次出现一个脉冲符号样式,"Enable"模型它是作为子模型的使能用,另外就是每一个写入模型都是放在一个子模型中,方便对数据进行控制操作。
图5.11 simulink中"0x48"写入“0x01”
图5.12 simulink中"0x44"写入“0x00”
图5.13 simulink中"0x46"写入“0x00”
图5.14 使用simulink模型初始化数码管I2C波形
数码管显示数据显示模型如图5.15所示,地址部分还是一样的问题,只是寄存器部分数据可以正常使用编码表中的十六进制数据,最终的波形如图5.16所示。
图5.15 simulink中"0x60"写入“0x3F”
图5.16 simulink模型“0x60”显示字母'A'指令波形
最后我们来看下整个模型,参考图5.2中,除最后一个显示模型,其它所有的I2C写入模型都是顺序执行,且都只执行一次,最终停留在在显示字符'A'处。
实验代码统一放在码云上,有问题欢迎给我留言!!
本节实验中实现了一个基本I2C驱动数码管显示实验,模型中初步做到了参数初始化和数据显示写入,但是这里有个问题,我们无法使用硬件在环修改参数达到同步修改数码管数据的效果,这里读者朋友可以研究研究下。另外本节中还有个问题就是数据显示不是循环显示,大家也可以修改模型实现循环滚动显示。
全部0条评论
快来发表一下你的评论吧 !