PART ONE
方案講解
- 效果展示 -
1硬件選擇
1. 顯示屏:0.96寸OLED顯示屏
2. 國產(chǎn)FPGA:HME_P1P060_EVB開發(fā)板(米聯(lián)客)
2FUXI工程建立
1. 軟件安裝
FUXI軟件安裝可以通過京微齊力官網(wǎng)下載安裝包,并申請License。
注意一下:FUXI軟件在導(dǎo)入License碼的時候,最后一格可能會自動出現(xiàn)一個空格,這個空格要去掉,不然會注冊失敗。
2. 建立工程(初學(xué)者指南)
1)雙擊圖標(biāo),點(diǎn)擊Create Project,建立新工程
2)完成三個地方,路徑,工程名,頂層模塊。
3)選P1系列、32417芯片。點(diǎn)擊finish
4)工程建完,編寫Verilog文件
5)添加PLL IP核
注意:FUXI跟其他軟件不一樣,PLL IP在列表里面是全稱:Phase-Locked Loop (v1.0b)。不要傻傻的找PLL,找不到的。
這個就是PLL IP。
6)例化IP核
開發(fā)板底板那個100Mhz的時鐘是用不了的,得用核心板的25Mhz的。工程需要50Mhz的,所以例化了一根PLL IP。
7)綜合RTL文件
8)分配IP約束
9)按第7步,選Rerun Project,綜合整個工程
10)燒錄
記得點(diǎn)擊Refresh刷新燒錄文件。
PART TWO
OLED顯示流程
其實(shí)很多人看文章,都是想弄清楚流程,但是很多博主寫文章又是這一塊那一塊,有頭沒尾的,筆者也是深有體會,這里就跟大家大概捋一下流程:
上電做初始化(配置一些寄存器)→寫IIC驅(qū)動模塊(讀寫操作)→清屏→點(diǎn)亮屏幕→寫入數(shù)據(jù)
FPGA模塊:
頂層模塊:JWQL_oled_v2_top
屏幕清除模塊:Oled_Clear
IIC驅(qū)動模塊:I2C_Master
屏幕全亮模塊:Oled_On
顯示控制模塊:Oled_Show_control
信息緩存區(qū)模塊:font_data
1IIC驅(qū)動 >>
IIC即Inter-Integrated Circuit(集成電路總線),是由Philips半導(dǎo)體公司(現(xiàn)在的NXP半導(dǎo)體公司)在八十年代初設(shè)計(jì)出來的一種簡單、雙向、二線制總線標(biāo)準(zhǔn)。多用于主機(jī)和從機(jī)在數(shù)據(jù)量不大且傳輸距離短的場合下的主從通信。主機(jī)啟動總線,并產(chǎn)生時鐘用于傳送數(shù)據(jù),此時任何接收數(shù)據(jù)的器件均被認(rèn)為是從機(jī)。
I2C總線由數(shù)據(jù)線SDA和時鐘線SCL構(gòu)成通信線路,既可用于發(fā)送數(shù)據(jù),也可接收數(shù)據(jù)。在主控與被控IC之間可進(jìn)行雙向數(shù)據(jù)傳送,數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,在快速模式下可達(dá)400kbit/s,在高速模式下可達(dá)3.4Mbit/s,各種被控器件均并聯(lián)在總線上,通過器件地址識別。
I2C_SCL是串行時鐘線,I2C_SDA是串行數(shù)據(jù)線,由于I2C器件一般采用開漏結(jié)構(gòu)與總線相連,所以I2C_SCL和I2C_SDA均需接上拉電阻,也正因此,當(dāng)總線空閑時,這兩條線路都 處于高電平狀態(tài),當(dāng)連到總線上的任一器件輸出低電平,都將使總線拉低,即各器件的SDA及 SCL都是“線與”關(guān)系。
I2C總線支持多主和主從兩種工作方式,通常工作在主從工作方式,我們的開發(fā)板就采用主從工作方式。在主從工作方式中,系統(tǒng)中只有一個主機(jī),其它器件都是具有I2C總線的外圍從機(jī)。在主從工作方式中,主機(jī)啟動數(shù)據(jù)的發(fā)送(發(fā)出啟動信號)并產(chǎn)生時鐘信號,數(shù)據(jù)發(fā)送完成后,發(fā)出停止信號。
I2C總線結(jié)構(gòu)雖然簡單,使用兩線傳輸,然而要實(shí)現(xiàn)器件間的通信,需要通過控制SCL和SDA的時序,使其滿足I2C的總線傳輸協(xié)議,方可實(shí)現(xiàn)器件間的數(shù)據(jù)傳輸。那么I2C協(xié)議的時序是怎樣的呢?
在I2C器件開始通信(傳輸數(shù)據(jù))之前,串行時鐘線SCL和串行數(shù)據(jù)線SDA線由于上拉的原因處于高電平狀態(tài),此時I2C總線處于空閑狀態(tài)。如果主機(jī)(此處指FPGA)想開始傳輸數(shù)據(jù),只需在SCL為高電平時將SDA線拉低,產(chǎn)生一個起始信號,從機(jī)檢測到起始信號后,準(zhǔn)備接收數(shù)據(jù),當(dāng)數(shù)據(jù)傳輸完成,主機(jī)只需產(chǎn)生一個停止信號,告訴從機(jī)數(shù)據(jù)傳輸結(jié)束,停止信號的產(chǎn)生是在SCL為高電平時,SDA從低電平跳變到高電平,從機(jī)檢測到停止信號后,停止接收數(shù)據(jù)。
I2C整體時序如下圖。起始信號之前為空閑狀態(tài),起始信號之后到停止信號之前的這一段為數(shù)據(jù)傳輸狀態(tài),主機(jī)可以向從機(jī)寫數(shù)據(jù),也可以讀取從機(jī)輸出的數(shù)據(jù),數(shù)據(jù)的傳輸由雙向數(shù)據(jù)線(SDA)完成。停止信號產(chǎn)生后,總線再次處于空閑狀態(tài)。
2屏幕清除 >>
3字符獲取 >>
使用PCtoLCD2002完美版軟件,設(shè)置按下面的設(shè)置。(字符提取軟件作者跟工程放一起,下載了,既可用)
4字符顯示 >>
16x16大小的字符會占用兩個page,每個page占用16列。所以可以將OLED看成只有2x16大小,這就和OLED清屏是一樣的了。
設(shè)置page之后,再設(shè)置列地址,每輸入一個數(shù)據(jù),列地址會自動加一,字符數(shù)據(jù)的顯示可以分為以下過程:
設(shè)置page,設(shè)置列地址,寫入16個數(shù)據(jù)
設(shè)置page+1,設(shè)置列地址,寫入16個數(shù)據(jù)。一共是寫入2+16+2+16個數(shù)據(jù),這樣就完成了一個字符的顯示。show_page的值為0或1。
PART THREE
完整工程獲取
FPGA:0.96寸oled字符顯示(可直接運(yùn)行)
工程獲取
工程是用國產(chǎn)京微齊力的HME_P1P060板子做的,可以做移植,只需要在quartus或者vivado建立工程,把代碼放進(jìn)去綜合即可。(除了源碼工程,還有字符提取軟件)
鳴謝:本工程參考FPGA之旅開源工程,在此特地鳴謝,希望FPGA之旅越來越好。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603319 -
OLED
+關(guān)注
關(guān)注
119文章
6200瀏覽量
224195 -
顯示屏
+關(guān)注
關(guān)注
28文章
4488瀏覽量
74291 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
字符顯示
+關(guān)注
關(guān)注
0文章
4瀏覽量
4993
原文標(biāo)題:京微齊力:基于HME_P060的OLED字符顯示(及FUXI工程建立演示)
文章出處:【微信號:HME-FPGA,微信公眾號:HME京微齊力】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論