2018年2月27日 星期二

用 Arduino MEGA 2560 SPI 介面使用 1.3吋 12864 點陣型 OLED 顯示器模組 (一)


使用點陣型OLED顯示器,最簡單的方式,就是使用現成的函式庫來顯示中英文字或畫圓/線/框 ⋯⋯ 等圖形。

在 Arduino 的系統上,u8g2 的函式庫應該是最好用的。

由於點陣型OLED顯示器需要從CPU傳送大量的點陣資料到驅動IC上,因此需要考慮

  1. 介面的速度:高速的SPI介面(最快 5MHz @SH1106)會比低速的IIC (最快400KHz~1MHz)介面好。IIC雖然接腳比較少,但是在很多應用上,因為速度太慢並不合適。
  2. 是否使用內建字型的OLED顯示器模組。(字型檔要使用很多記憶體)

以下為本文要使用的2種使用4-Wire SPI介面 OLED 顯示器模組

https://seller.shopee.tw/portal/product/928548884
https://seller.shopee.tw/portal/product/929270114
http://goods.ruten.com.tw/item/show?21808691433791
http://goods.ruten.com.tw/item/show?21808691338964.

在 Arduino 上要使用 u8g2, 要先安裝 u8g2 的函式庫,請到以下的網址去看如何安裝
https://github.com/olikraus/u8g2/wiki/u8g2install

安裝完成後,連接 Arduino MEGA 2560 到 OLED 顯示器模組

Arduino MEGA 2560   OLED 模組(含內建中英文字型)  OLED 模組(不含字型)
46                                  CS2 (字型檔晶片選擇)                    RES
47                                
48                                  CS1  (SH1106 晶片選擇)                 CS
49                                  DC   (資料/命令設定)                    DC
50 MISO                       FSO (字型IC資料輸出)                    -----
51 MOSI                       MOSI (輸出資料到LCD/字型IC)    MOSI
52 SCK                          CLK                                                  CLK
53 SS                              ------                                                  -----
3.3V                               3.3V                                                   3.3V
GND                              GND                                                  GND

連接完成後,在檢查一遍,確認沒有接錯後,就可以開始寫程式了。下面的連結有 u8g2 的範例程式,

https://github.com/olikraus/u8g2/wiki/setup_tutorial

範例程式的 CPU板子不是 Arduino MEGA 2560, 因此要修改 Constructor 的設定 (下面紅字的部分). 為達最快速度,使用硬體 SPI 來傳送資料,而不使用軟體 SPI 的方式。

//#define OledPanelWithFontBuiltIn

#include <Arduino.h>
#include <U8g2lib.h>
#include <U8x8lib.h>

#ifdef OledPanelWithFontBuiltIn
  #define SPI_CS2   46
  #define SPI_FSO   47
  #define SPI_CS1   48
  #define SPI_DC    49

  U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, SPI_CS1, SPI_DC);
#else
  #define SPI_RESET 46
  #define SPI_CS    48
  #define SPI_DC    49

  U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, SPI_CS, SPI_DC, SPI_RESET);
#endif

void setup(void) {
  u8g2.begin();
}

void loop(void) {

  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_ncenB14_tr);
#ifdef OledPanelWithFontBuiltIn  
    u8g2.drawStr(2,32,"Hello World1");
#else
    u8g2.drawStr(2,32,"Hello World2");
#endif
  } while ( u8g2.nextPage() );
}

如果在有內含字型檔的螢幕上顯示 "HelloWorld1" 如下圖,就表示一切都正常。

 或在沒有內含字型檔的螢幕上顯示 "HelloWorld2" 如下圖,就表示一切都正常。



下一篇:如何使用 Arduino MEGA 2560 SPI 介面和內含中英文字庫的 1.3吋 12864 點陣型 OLED 顯示器模組 (二)
https://www.blogger.com/blogger.g?blogID=7530656930048997875#editor/target=post;postID=8731948848737741146;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=postname

沒有留言:

張貼留言