目录

  • 日常·唠嗑
  • 一、方案讲解
    • 1、先看效果
    • 2、硬件选择
    • 3、FUXI工程建立
      • 1、软件安装
      • 2、建立工程(此版本适合小白)
  • 二、OLED显示流程
    • 1、IIC驱动
    • 2、屏幕清除
    • 3、字符获取
    • 4、字符显示
  • 三、完整工程获取

日常·唠嗑

接上个日常,最近在接触FUXI软件以及一些测试,记得以前做FPGA开发的时候,特别羡慕学32的同学,可以用小小的0.96寸OLED显示屏做应用,自己则是用大块头LCD,两者有异曲同工之处,不过开发也不尽相同。这次借测试,就顺便完成一下OLED显示的心愿。

一、方案讲解

1、先看效果

2、硬件选择

1、显示屏:0.96寸 OLED显示屏
2、国产FPGA:HME_P1P060_EVB开发板(米联客)

3、FUXI工程建立

1、软件安装

软件安装,这个可以直接在京微齐力的官网京微齐力的官网下载安装包,然后发邮箱申请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、分配IO约束

9、按第7步,选Rerun Project,综合整个工程
10、烧录

记得点Refresh刷新烧录文件。

二、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、屏幕清除

//oled屏幕清除模块
module Oled_Clear(input     clk,input       rst,input       write_done,     //清除丿组数据完房input     clear_req,      //清除请求output        clear_ack,      //清除完成output[23:0]   clear_data     //清除数据的命仿
);  localparam          RST_T           =  1'b0;              //复位有效reg[23:0]     clear_data_reg;reg[3:0] clear_page;
reg[7:0]    clear_index;assign clear_data  = clear_data_reg;
assign clear_ack = (clear_index >= 'd130 && clear_page >= 'd7 && write_done == 1'b1) ? 1'b1 : 1'b0;//初始化完成信叿always@(posedge clk or negedge rst)
beginif(rst == RST_T)clear_index <= 'd0;else if(clear_index == 'd130 && write_done == 1'b1 )clear_index <= 'd0;else if(write_done == 1'b1 && clear_req == 1'b1)clear_index <= clear_index + 1'b1;elseclear_index <= clear_index;
endalways@(posedge clk or negedge rst)
beginif(rst == RST_T)clear_page <= 'd0;else if(clear_index == 'd130 && write_done == 1'b1 && clear_page == 'd7)clear_page <= 'd0;else if(clear_index == 'd130 && write_done == 1'b1)clear_page <= clear_page + 1'b1;elseclear_page <= clear_page;
end
always@(*)
begincase(clear_index)'d0:clear_data_reg <= {8'h78,8'h00,8'hb0 + clear_page};'d1:clear_data_reg <= {8'h78,8'h00,8'h00};'d2:clear_data_reg <= {8'h78,8'h00,8'h10};default:clear_data_reg <= {8'h78,8'h40,8'h00};endcaseend
endmodule

3、字符获取

其他模块代码,不讲,因为CSDN有很多STM32的文章有讲OLED显示原理,原理都是一样的,就是代码不一样而已,有兴趣的,可以看看别的大佬的文章,然后在文底下载工程自己看,可以移植到别的FPGA。
        这里讲一下,怎么获取字符数据。
        使用PCtoLCD2002完美版软件,设置按下面的设置。(字符提取软件我跟工程放一起,下载了,既可用)


4、字符显示

16x16大小的字符会占用两个page,每个page占用16列。所以可以将Oled看成只有2x16大小,这就和oled清屏是一样的了。设置page之后,再设置列地址,每输入一个数据,列地址会自动加一,字符数据的显示可以分为以下过程:
设置page,设置列地址,写入16个数据
设置page+1,设置列地址,写入16个数据。一共是写入2+16+2+16个数据,这样就完成了一个字符的显示。show_page的值为0或1。

always@(*)
begincase(show_index)'d0:show_data_reg <= {8'h78,8'h00,8'hb0 + show_page+start_y};'d1:show_data_reg <= {8'h78,8'h00,8'h00 +start_x[3:0]};'d2:show_data_reg <= {8'h78,8'h00,8'h10 + start_x[6:4]};default:show_data_reg <= {8'h78,8'h40, data};endcase
end

三、完整工程获取

工程获取:FPGA:0.96寸oled字符显示(可直接运行)

鸣谢:本工程参考FPGA之旅开源工程,在此特地鸣谢,希望FPGA之旅越来越好。

京微齐力:基于HMEP060的OLED字符显示(及FUXI工程建立演示)相关推荐

  1. 新享科技签约京微齐力,UniPro全方位助力国产FPGA研发管理

    近日,新享科技与京微齐力(北京)科技有限公司签约,旗下UniPro产品将用于京微齐力的缺陷管理.敏捷开发.瀑布管理等研发项目管理场景,助力入选"中国IC领域独角兽企业"的京微齐力提 ...

  2. 京微齐力:基于HMEP060的心率血氧模块开发(1:FPGA发送多位指令)

    目录 日常·唠嗑: 实验结果 一.硬件解析 1.国产FPGA:HMEP060 2.MAX30102心率传感器模块 二.程序设计 1.波特率计算(25MHz时钟) 2.顶层模块 3.子模块 三.工程获取 ...

  3. 京微齐力:基于P1P060的OLED动态显示(温湿度实时数据)

    目录 日常·唠嗑 实验结果 一.硬件解析 1.国产FPGA:HME-P1P060 2.0.96寸OLED 3.DTH11温湿度模块(比较枯燥,请耐心看完原理) 二.程序设计 1.DTH11数据采集(状 ...

  4. 获奖名单揭晓!京微力小程序开发者大赛开拓社交电商新尝试

    近日,由京东主办,面向全国开发人员的大型科技创新型比赛--京微力小程序开发者大赛圆满落幕. 京微力小程序开发者大赛于今年5月启动,京东借此大赛面向各界选手输送积累多年的供应链优势.物流能力,旨在打造一 ...

  5. “微天气” - 一个基于微信小程序的智能天气预报体验

    "微天气" - 一个基于微信小程序的智能天气预报体验 一.引言 微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生 ...

  6. 高速上车辆追尾无法移动 众人齐力抬车温暖归途

    众人齐力抬车.金华高速交警提供 众人齐力抬车.金华高速交警提供 中新网金华1月22日电(记者 奚金燕 通讯员 陈忆轩)在高速上发生事故,车辆无法移动,看到这一幕,周边的十多名驾驶员主动联手抬车,只花了 ...

  7. .NET Core微服务之基于Ocelot实现API网关服务(续)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientServic ...

  8. .NET Core微服务之基于IdentityServer建立授权与验证服务(续)

    上一篇<.NET Core微服务之基于IdentityServer建立授权与验证服务>我们基于IdentityServer4建立了一个AuthorizationServer,并且继承了Qu ...

  9. .NET Core微服务之基于Ocelot实现API网关服务

    一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式.以前的话,客户端不得不去请 ...

最新文章

  1. 有状态bean与无状态bean
  2. 日常工作问题解决:配置NTP服务器以及一些常见错误解决
  3. python基本语法积累~
  4. Unity3d 去掉exe版本的边框
  5. OMG Network与安全多方计算提供商Enya达成合作
  6. 吴恩达机器学习(十二)主成分分析(降维、PCA)
  7. IBM连续20个季度营收下滑,但这可能是个好信号
  8. 武汉大学计算机学院创业老师,胡瑞敏 - 教师简历 CV- 武汉大学计算机学院
  9. 路由重分布 rip,eigrp,和ospf
  10. 智能汽车路径规划-曲线插值法、人工势场法
  11. 【语音处理】音频信号分析仪Matlab系统
  12. 使用HTTP下载单词音标,特此记录
  13. 深入探索REST(1):如何设计好的RESTful API?
  14. Ubuntu 向日葵被远控无法显示图形化界面的解决方案
  15. 加拿大低龄高中留学规划与过程管理三个关键点
  16. Docker教程(一)入门教程
  17. 文本分析论文基本方法论
  18. 如何查询oracle 的版本
  19. Linux定时任务与开机自启动脚本(cron与crontab)
  20. 期刊论文和会议论文的区分与识别

热门文章

  1. Mjpeg-streamer源码学习笔记-Main-守护进程Daemon(二)
  2. PyQt5常用模块介绍
  3. HTML5期末大作业:英雄游戏网站设计——超级英雄游戏介绍(11页) 大学生wa网游网页作品 手游网页设计作业模板 学生网页制作源代码下载
  4. Delphi压缩解压文件,无需第三方控件
  5. 用python把扫描件转换成word
  6. php打印机,PHP云打印类完整示例
  7. express处理get与post请求
  8. 在网页中调用打印预览及打印设置
  9. 标准日语初级 测试题
  10. 【Python小程序】纪念日礼物|恋爱一周年,送媳妇儿什么礼物浪漫又有惊喜?一键收藏,过节再也不用绞尽脑汁啦~(特别的礼物赠送)