实验环境
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共阴数码管电路连接
基础模型介绍与分析1、数码管简介数码管简单来说就是将多个led有规律的排列在一起,实验中用到的数码管外观如图5.4所示,其型号为:fj3461ah,三维尺寸:30.00mmx14.00mmx7.20mm,数码管内部为共阴极,内部电路原理和引脚定义如图5.5图所示。
图5.4 数码管实物外观
图5.5 数码管尺寸及内部电路原理图
2、ch422g芯片介绍数码管驱动芯片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 线串行接口的数据时钟
3、simulink模型分析本次实验中只用到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驱动数码管显示实验,模型中初步做到了参数初始化和数据显示写入,但是这里有个问题,我们无法使用硬件在环修改参数达到同步修改数码管数据的效果,这里读者朋友可以研究研究下。另外本节中还有个问题就是数据显示不是循环显示,大家也可以修改模型实现循环滚动显示。
GPT-4是这样搞电机的
智慧能源系统解决方案提供商正泰电器发布2022第一季度报告
RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云
拓维信息旗下湘江鲲鹏开创智能计算新局面
现在购买世界上最小的无人机SKEYE Pico可享77折优惠
STM32 I2C写入驱动数码管显示实验
功率电感器之SimSurfing功能
618首日战报:德施曼预售全网第一!智能锁Q5P全网单品冠军
自动计数器电路图及工作过程
瀚高发布“护航计划”,携手渠道伙伴共赢数字化转型
反相比例放大器
木几智能亮相第十六届中国工业论坛丝路峰会暨中国新工业博览会
中美科技冷战:从华为5G到超级计算机零部件禁运
英飞凌推出新一代车用安全控制器SLI37
物联网的脆弱性:我们没有跟上
eSMP创新封装技术加持,TVS性能可以有多强?
贸泽电子第十一度获得“2018年度全球分销商卓越表现奖
了解一下每种开关中存在的不同电路
盛群推出短距离无线解决方案
台积电以56%的份额占据晶圆代工厂商营收排名第一