part one
方案讲解
- 效果展示 -
1硬件选择
1. 显示屏:0.96寸oled显示屏
2. 国产fpga:hme_p1p060_evb开发板(米联客)
2fuxi工程建立
1. 软件安装
fuxi软件安装可以通过京微齐力官网下载安装包,并申请license。
注意一下:fuxi软件在导入license码的时候,最后一格可能会自动出现一个空格,这个空格要去掉,不然会注册失败。
2. 建立工程(初学者指南)
1)双击图标,点击create project,建立新工程
2)完成三个地方,路径,工程名,顶层模块。
3)选p1系列、32417芯片。点击finish
4)工程建完,编写verilog文件
5)添加pll ip核
注意:fuxi跟其他软件不一样,pll ip在列表里面是全称:phase-locked loop (v1.0b)。不要傻傻的找pll,找不到的。
这个就是pll ip。
6)例化ip核
开发板底板那个100mhz的时钟是用不了的,得用核心板的25mhz的。工程需要50mhz的,所以例化了一根pll ip。
7)综合rtl文件
8)分配ip约束
9)按第7步,选rerun project,综合整个工程
10)烧录
记得点击refresh刷新烧录文件。
part two
oled显示流程
其实很多人看文章,都是想弄清楚流程,但是很多博主写文章又是这一块那一块,有头没尾的,笔者也是深有体会,这里就跟大家大概捋一下流程:
上电做初始化(配置一些寄存器)→写iic驱动模块(读写操作)→清屏→点亮屏幕→写入数据
fpga模块:
顶层模块:jwql_oled_v2_top
屏幕清除模块:oled_clear
iic驱动模块:i2c_master
屏幕全亮模块:oled_on
显示控制模块:oled_show_control
信息缓存区模块:font_data
1 iic驱动 >>
iic即inter-integrated circuit(集成电路总线),是由philips半导体公司(现在的nxp半导体公司)在八十年代初设计出来的一种简单、双向、二线制总线标准。多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。主机启动总线,并产生时钟用于传送数据,此时任何接收数据的器件均被认为是从机。
i2c总线由数据线sda和时钟线scl构成通信线路,既可用于发送数据,也可接收数据。在主控与被控ic之间可进行双向数据传送,数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4mbit/s,各种被控器件均并联在总线上,通过器件地址识别。
i2c_scl是串行时钟线,i2c_sda是串行数据线,由于i2c器件一般采用开漏结构与总线相连,所以i2c_scl和i2c_sda均需接上拉电阻,也正因此,当总线空闲时,这两条线路都 处于高电平状态,当连到总线上的任一器件输出低电平,都将使总线拉低,即各器件的sda及 scl都是“线与”关系。
i2c总线支持多主和主从两种工作方式,通常工作在主从工作方式,我们的开发板就采用主从工作方式。在主从工作方式中,系统中只有一个主机,其它器件都是具有i2c总线的外围从机。在主从工作方式中,主机启动数据的发送(发出启动信号)并产生时钟信号,数据发送完成后,发出停止信号。
i2c总线结构虽然简单,使用两线传输,然而要实现器件间的通信,需要通过控制scl和sda的时序,使其满足i2c的总线传输协议,方可实现器件间的数据传输。那么i2c协议的时序是怎样的呢?
在i2c器件开始通信(传输数据)之前,串行时钟线scl和串行数据线sda线由于上拉的原因处于高电平状态,此时i2c总线处于空闲状态。如果主机(此处指fpga)想开始传输数据,只需在scl为高电平时将sda线拉低,产生一个起始信号,从机检测到起始信号后,准备接收数据,当数据传输完成,主机只需产生一个停止信号,告诉从机数据传输结束,停止信号的产生是在scl为高电平时,sda从低电平跳变到高电平,从机检测到停止信号后,停止接收数据。
i2c整体时序如下图。起始信号之前为空闲状态,起始信号之后到停止信号之前的这一段为数据传输状态,主机可以向从机写数据,也可以读取从机输出的数据,数据的传输由双向数据线(sda)完成。停止信号产生后,总线再次处于空闲状态。
2 屏幕清除 >>
3 字符获取 >>
使用pctolcd2002完美版软件,设置按下面的设置。(字符提取软件作者跟工程放一起,下载了,既可用)
4 字符显示 >>
16x16大小的字符会占用两个page,每个page占用16列。所以可以将oled看成只有2x16大小,这就和oled清屏是一样的了。
设置page之后,再设置列地址,每输入一个数据,列地址会自动加一,字符数据的显示可以分为以下过程:
设置page,设置列地址,写入16个数据
设置page+1,设置列地址,写入16个数据。一共是写入2+16+2+16个数据,这样就完成了一个字符的显示。show_page的值为0或1。
part three
完整工程获取
fpga:0.96寸oled字符显示(可直接运行)
工程获取
工程是用国产京微齐力的hme_p1p060板子做的,可以做移植,只需要在quartus或者vivado建立工程,把代码放进去综合即可。(除了源码工程,还有字符提取软件)
鸣谢:本工程参考fpga之旅开源工程,在此特地鸣谢,希望fpga之旅越来越好。
华为P10陶瓷白真机上手图赏:美到不能呼吸!
传感器检测的三种方法解析
隐藏的冠军接插件
英特尔:Xe-HPG DG2 游戏独显正在测试中 预计2021年发货
索尼进军汽车市场,未来的“索尼汽车”简析
基于HME_P060的OLED字符显示及FUXI工程建立演示
区块链市场人才紧缺,应远近结合共同解决人才匮乏
iOS10.1/10.1.1越狱发布!iOS10.2的越狱即将来临
板对板连接器的重要作用
广州轴向柱塞泵工作时压力表指针不稳定的原因及排除
你的废旧手机其实是一个未被发掘的宝藏
药物与传感器结合:Abilify MyCite智能药片研制成功
Fairchild宣布2014年度北美洲和亚洲功率技术研讨会时间表
辽宁省诸多重要场所已实现5G优质网络覆盖
LED恒流驱动芯片多段可控硅调光方案推荐:SM2318EA
3D机器视觉和动态投影影射
浅析EC-IoT在行业中的成功应用
放大器的总结
台积电晶圆平均售价同比上涨22.8%!
绘制高精地图如何面对无人驾驶的到来