国产未成女一区二区三区,成人区人妻精品一熟女,亚洲精品乱码久久久久久中文字幕 ,成人欧美一区二区三区在线观看

資料

基于Zynq的OLED驅(qū)動設計

上傳人:LEDth/整理

上傳時間: 2014-11-11

瀏覽次數(shù): 60

  目前OLED的驅(qū)動大部分都是基于STM系列ARM芯片和傳統(tǒng)FPGA芯片。為適應Xilinx最新平臺Zynq的人機交互需要,提出一種基于Zynq的OLED驅(qū)動設計方法。

  OLED具備自發(fā)光、不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡單等優(yōu)異特性,被認為是下一代的平面顯示器新興應用技術(shù)。目前OLED的驅(qū)動大部分都是基于STM系列ARM芯片和傳統(tǒng)FPGA芯片。為適應Xilinx最新平臺Zynq的人機交互需要,提出一種基于Zynq的OLED驅(qū)動設計方法。文章闡述了OLED的特性和SPI控制方式,給出了設計流程和硬件電路圖。利用Zynq的PL部分完成了OLED驅(qū)動的IP核,利用Zynq的PS部分實現(xiàn)了OLED的驅(qū)動程序設計。通過AXI總線實現(xiàn)PL和PS的通信。最后通過測試程序,實現(xiàn)了字母、數(shù)字和點陣圖像的實時顯示。解決了基于Zynq器件在廣電儀器和電力儀表儀器中人機交互的工程技術(shù),具有集成度高、可移植性強和通用性好等優(yōu)點。

  1 引言

  隨著近幾年嵌入式技術(shù)的飛速發(fā)展和廣泛應用,人機交互成為嵌入式設備的迫切需要。為適應Xilinx最新平臺Zynq的人機交互需要,提出一種基于Zynq的OLED驅(qū)動設計方法。

  有機發(fā)光二極管(OrganicLight-EmittingDiode,OLED)由于同時具備自發(fā)光、不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡單等優(yōu)異特性,被認為是下一代的平面顯示器新興應用技術(shù)。

  Xilinx最新平臺Zynq將處理器的軟件可編程能力與FPGA的硬件可編程能力實現(xiàn)完美結(jié)合,以低功耗和低成本等系統(tǒng)優(yōu)勢實現(xiàn)良好的系統(tǒng)性能、靈活性和可擴展性。

  目前OLED的驅(qū)動大部分都是基于STM系列ARM芯片和傳統(tǒng)FPGA芯片。在Zynq上,Xilinx提供了Linux演示實例,但無裸機源碼,無法滿足實時性比較強的工程實際需求。

  文章詳細闡述了基于Zynq的OLED驅(qū)動設計步驟和方法,并且在基于Zynq的開發(fā)板ZedBoard上實現(xiàn)了實時顯示字母、數(shù)字和點陣圖像,為Zynq在儀器儀表領(lǐng)域?qū)崿F(xiàn)人機交互提供了技術(shù)支撐。

  2 OLED驅(qū)動設計流程

  Zynq是一個ARMPS+PL結(jié)構(gòu),其中PL部分就是傳統(tǒng)意義的FPGA,可以方便地定制相關(guān)外設IP,也可以進行相關(guān)的算法設計,和使用普通FPGA完全一樣。如果不使用PL,Zynq的PS部分和普通的ARM開發(fā)一樣。Zynq最大的特點是可以利用PL部分靈活地定制外設,掛在PS上,而普通的ARM,外設是固定的。因此,Zynq的硬件外設是不固定的,這也是Zynq靈活性的一個表現(xiàn)。OLED在Zynq上是連接在PL上,因此需要把OLED對應引腳掛在PS的硬件上,然后設計OLEDIP核,再通過SDK設計驅(qū)動程序,OLED驅(qū)動設計流程如圖1所示。

  ZedBozrd控制OLED的主要方法是:自行設計一個IP核,對OLED的6個控制信號和電源信號進行邏輯設計和引腳約束,通過AXI總線,把OLED的IP核和PS聯(lián)系起來。在PS部分編寫相應的驅(qū)動程序,即可實現(xiàn)對OLED的控制,如圖2所示。

  

圖1 OLED驅(qū)動設計流程

  

圖2 OLED系統(tǒng)設計圖

  因此,要實現(xiàn)OLED顯示功能,主要做以下幾個方面工作:設計Zynq硬件系統(tǒng)(PS部分)、設計自己的IP核和PS部分驅(qū)動程序設計。

  3 建立Zynq硬件系統(tǒng)和OLEDIP核

  Zynq的開發(fā)板ZedBoard上使用Inteltronic/Wisechip公司的OLED顯示模組UG-2832HSWEG04,分辨率為128×32,是一款單色被動式顯示屏,驅(qū)動電路采用所羅門科技的SSD1306芯片。具體電路如圖3所示。根據(jù)原理圖可知,ZedBoard開發(fā)板使用的OLED采用SPI方式控制,SPI模式使用的信號線和電源線有如下幾條:

  RST(RES):硬復位OLED;

  DC:命令/數(shù)據(jù)標志(0,讀寫命令;1,讀寫數(shù)據(jù));

  SCLK:串行時鐘線;

  SDIN:串行數(shù)據(jù)線;

  VDD:邏輯電路電源;

  VBAT:DC/DC轉(zhuǎn)換電路電源。

  在SPI模式下,每個數(shù)據(jù)長度均為8位,在SCLK的上升沿,數(shù)據(jù)從SDIN移入到SSD1306,并且是高位在前的。

  

圖3 OLED原理圖

[NT:PAGE]

  Zynq的硬件系統(tǒng)是指在PL中配置相關(guān)外設,掛載到PS中,作為PS部分的外設使用。OLED驅(qū)動主要用到6個IO口,在生成硬件系統(tǒng)時,只需要利用Xilinx的嵌入式工具XPS生成最小硬件系統(tǒng),然后把OLED的相關(guān)引腳添加到最小硬件系統(tǒng)中。主要過程如下:

  (1)根據(jù)芯片型號,根據(jù)XPS工具設計流程,生成Zynq的最小硬件系統(tǒng)。

  (2)在最小硬件系統(tǒng)中,添加外設IPmy_oled,把OLED的SPI引腳添加到工程中。添加一個6位寄存器,每位和SPI引腳對應。

  (3)my_oledIP核邏輯設計主要完成IP核引腳添加、端口映射和用戶邏輯功能。首先要對設計的IP核添加引腳,在系統(tǒng)生成的MPD文件中,添加OLED的相關(guān)引腳端口和方向信息。

  在MPD文件中,在PORT下添加OLED的相關(guān)引腳和方向信息,具體代碼如下:

  PORTDC=“”,DIR=O

  PORTRES=“”,DIR=O

  PORTSCLK=“”,DIR=O

  PORTSDIN=“”,DIR=O

  PORTVBAT=“”,DIR=O

  PORTVDD=“”,DIR=O

  (4)在系統(tǒng)生成的my_oled.vhd文件中,用VHDL語言進行端口設計,主要進行以下兩個設計。

  聲明IP和用戶6個信號和電源的端口。代碼如下:

  DC∶outstd_logic;

  RES∶outstd_logic;

  SCLK∶outstd_logic;

  SDIN∶outstd_logic;

  VBAT∶outstd_logic;

  VDD∶outstd_logic;

  將用戶端口和IP核端口進行映射,代碼如下:

  DC=>DC,

  RES=>RES,

  SCLK=>SCLK,

  SDIN=>SDIN,

  VBAT=>VBAT,

  VDD=>VDD,

  (5)在系統(tǒng)生成的user_logic.v文件中,用Verilog語言進行邏輯設計,實現(xiàn)寄存器和SPI對應端口連接并實時讀取,主要代碼如下。其中slv_reg0為IP核寄存器,tmp為用戶定義臨時寄存器,tmp的每一位和IP端口一一對應。實現(xiàn)把slv_reg0寄存器低6位實時傳給tmp寄存器,通過對寄存器slv_reg0的寫操作達到控制6個引腳的時序。

  always@(posedgeBus2IP_Clk)

  begin

  tmp<=slv_reg0[5:0];

  end

[NT:PAGE]

  4 OLED驅(qū)動程序設計

  由于ZedBoard開發(fā)板上的OLED使用的是SPI協(xié)議,并且只支持寫,不支持讀,因此控制OLED就是在SCLK的時鐘下,通過SDIN進行命令和數(shù)據(jù)的傳輸。OLED的控制需要經(jīng)過初始化、傳數(shù)據(jù)和命令以及對顯存設置等操作實現(xiàn)。

  4.1初始化

  驅(qū)動IC的初始化代碼,可以參考廠家推薦的設置,但需要根據(jù)開發(fā)板上OLED實際參數(shù)進行一些修改。

  根據(jù)SSD1306數(shù)據(jù)手冊的初始化說明,具體步驟如圖4所示。初始化的實現(xiàn)就是對SSD1306進行寫命令。

  

圖4 SSD1306初始化步驟

  4.2寫數(shù)據(jù)和命令的實現(xiàn)

  在SCLK時鐘下,根據(jù)要寫入的數(shù)據(jù)或者命令,設置SDIN引腳的電平,一位一位地把數(shù)據(jù)寫入SSD1306。SSD1306每次傳送的命令和數(shù)據(jù)均為一個字節(jié),傳送數(shù)據(jù)和命令的區(qū)別是通過Set_OLED_DC宏,設置該函數(shù)為寫數(shù)據(jù),通過Clr_OLED_DC宏,設置該函數(shù)為寫命令。實現(xiàn)一個字節(jié)的數(shù)據(jù)傳輸代碼如下:

  for(i=0;i<8;i++)

  {

  Clr_OLED_SCLK;

  if(data&0x80)

  Set_OLED_SDIN;

  else

  Clr_OLED_SDIN;

  Set_OLED_SCLK;

  data<<=1;

 ?。?/p>

  4.3顯存數(shù)據(jù)寫入SSD1306存儲器

  我們采用的辦法是在PS的內(nèi)部建立一個OLED的GRAM(共128個字節(jié)),在每次修改的時候,只是修改PS上的GRAM(實際上就是SRAM),在修改完之后,一次性把PS上的GRAM寫入到OLED的GRAM。具體代碼如下:

  voidOLED_Refresh_Gram(void)

  {

  u8i,n;

  for(i=0;i<4;i++)

  {

  write_cmd(0xb0+i);//設置頁地址

  write_cmd(0x00);//設置顯示位置-列低地址,偏移了2列

  write_cmd(0x10);//設置顯示位置-列高地址

  for(n=0;n<128;n++)write_data(OLED_GRAM[n][i]);

 ?。?/p>

 ?。?/p>

  4.4顯示結(jié)果

  系統(tǒng)實現(xiàn)了OLED的字母、數(shù)字和點陣圖形實時顯示,如圖5所示。

  

圖5OLED運行結(jié)果

  5 結(jié)論

  系統(tǒng)采用可軟硬件協(xié)同設計的Zynq器件,定制硬件IP核,采用傳統(tǒng)ARM程序設計方法設計OLED驅(qū)動程序和測試程序,實現(xiàn)了實時顯示。解決了基于Zynq器件在廣電儀器和電力儀表儀器中人機交互的工程技術(shù),具有集成度高、可移植性強和通用性好等優(yōu)點。

| 收藏本文
最新評論

用戶名: 密碼:

主站蜘蛛池模板: 布尔津县| 聊城市| 宿州市| 本溪| 吴川市| 贡山| 富平县| 南江县| 枣庄市| 巴塘县| 五河县| 青河县| 海阳市| 久治县| 华池县| 城固县| 林西县| 内丘县| 宜兴市| 呼玛县| 军事| 中西区| 金川县| 祥云县| 通城县| 鹿泉市| 巴塘县| 鄱阳县| 如东县| 安义县| 苗栗县| 永泰县| 六枝特区| 自治县| 远安县| 乌拉特中旗| 金秀| 斗六市| 雷山县| 永嘉县| 连州市|