2017年3月3日 星期五

DIY - ESP8266:SSD1306 0.96吋 I2C OLED 屏電路(十九)

DIY - ESP8266:ESP8266 SSD1306 0.96吋 I2C OLED 屏模塊 I/O 電路(十九):

這款 SSD1306 0.96吋 OLED 屏模塊是使用積體電路匯流排(I²C / I2C / IIC:Inter-Integrated Circuit)介面,接口祇有 4線,包括電源供應(VCC 和 GND)和 2線 I/O,2線 I/O 是 Pin 3 的SCK(Serial Clock Input)和 Pin 4 的 SDA(Serial Data Input),會連接到 ESP-12E 板上 Pin 23 的 GPIO14(ESP-12E 的 D5)和 Pin 26 的 GPIO2(ESP-12E的 D4) I/O 接口。

ESP8266 SSD1306 0.96吋 I2C OLED 屏模塊 I/O 電路
SSD1306 0.96吋 OLED 屏模塊是使用 Solomon Systech (晶門)SSD1306 驅動晶片,SSD1306 0.96吋 OLED 屏模塊是使用採用 I2C 通信介面,資料線和控制線都連接到 4腳(1×4腳)的連接器上。

ESP8266 ESP-12E SSD1306 I2C OLED 屏連接:
LCD
Signal
Description
ESP8266
Board Signal
I/O Signal
1
VCC
VCC 2.7 ~ 3.3V
25
Vcc
Vcc
2
GND
Ground
24
GND
GND
3
SCK
Serial Clock Input
23
D5
GPIO14
4
SDA
Serial Data Input
26
D4
GPIO2

Solomon Systech (晶門)SSD1306 驅動晶片與 Microchip PIC24FJ64GA008 是採用積體電路匯流排(I²C / I2C / IIC:Inter-Integrated Circuit)連接,而 SSD1306 的 I/O 控制已經連接到 4腳的連接器,電源是連接到 ESP-12E 的 3.3V供電,OLED 屏模塊 Vcc 連接到 ESP-12E Pin 25 的 Vcc 和 Pin 24 的 GND 電源,SCK(Serial Clock Input)連接到 ESP-12E Pin 23 的 D5(GPIO14),SDA(Serial Data Input)連接到 ESP-12E Pin 26 的 D4(GPIO2)。2腳的 I2C 連接比 3腳的 SPI 更加簡單。

ESP8266 ESP-12E SSD1306 I2C OLED 屏接腳 I/O 程式定義:
//SDA on GPIO2
#define I2C_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
#define I2C_SDA_FUNC FUNC_GPIO2
#define I2C_SDA_PIN 2

//SCK on GPIO14
#define I2C_SCK_MUX PERIPHS_IO_MUX_MTMS_U
#define I2C_SCK_FUNC FUNC_GPIO14
#define I2C_SCK_PIN 14

#define OLED_ADDRESS      0x78  // D/C->GND

ESP8266 ESP-12E SSD1306 I2C OLED 屏初始化程式
bool ICACHE_FLASH_ATTR OLED_Init(void)
{
        os_delay_us(60000);
        os_delay_us(40000);
       
  OLED_writeCmd(0xAE); // turn off oled panel
  OLED_writeCmd(0x00); // set low column address
  OLED_writeCmd(0x10); // set high column address
  OLED_writeCmd(0x40); // set start line address
  OLED_writeCmd(0x81); // set contrast control register

  OLED_writeCmd(0xCF); // Set SEG Output Current Brightness
  OLED_writeCmd(0xA1); // Set SEG/Col Mapping        0xA0, 0xA1
  OLED_writeCmd(0xC8); // Set COM/Row Scan Direction 0xC0, 0xC8
 
  OLED_writeCmd(0xa6); // set normal display
  OLED_writeCmd(0xa8); // set multiplex ratio(1 to 64)
  OLED_writeCmd(0x3F); // 1/64 duty
  OLED_writeCmd(0xD3); // set display offset
  OLED_writeCmd(0x00); // not offset
  OLED_writeCmd(0xD5); // set display clock divide ratio/oscillator frequency
  OLED_writeCmd(0x80); // set divide ratio
  OLED_writeCmd(0xD9); // set pre-charge period
  OLED_writeCmd(0xF1);
  OLED_writeCmd(0xDA); // set com pins hardware configuration
  OLED_writeCmd(0x12);
  OLED_writeCmd(0xDB); // set vcomh
  OLED_writeCmd(0x40);
  OLED_writeCmd(0x8D); // set Charge Pump enable/disable
  OLED_writeCmd(0x14); // set(0x10) disable

  OLED_writeCmd(0xA4); // Disable Entire Display On (0xA4/0xA5)
  OLED_writeCmd(0xA6); // Disable Iverse Display On (0xA6/0xA7)

  OLED_writeCmd(0xAF); // turn on oled panel   
   
  OLED_Fill(0x00);  //OLED CLS
 
  return oledstat;
} // ResetDevice

ESP8266 SSD1306 0.96吋 I2C OLED 屏模塊 I/O 電路試驗
ESP8266 SSD1306 0.96吋 I2C OLED 屏模塊 I/O 電路顯示試驗
2017年 3月 3日 天氣報告
氣溫:17.5@ 20:20
相對濕度:百分之 62%
天氣:大致多雲

2017年3月2日 星期四

DIY - ESP8266:Solomon 晶門 SSD1306 驅動控制晶片 - I2C(十八)

DIY - ESP8266:Solomon 晶門 SSD1306 驅動控制晶片 - I2C(十八):

Solomon Systech (晶門)SSD1306 控制器是由 8個數據引腳和 5個控制引腳組成,可以通過不同接口的引腳設置來選擇模式,包括 8-bit 8080、8-bit 6800、3-wire SPI、4-wire SPI 和 I2C 模式,這次筆者使用是 2線的 I2C 積體電路匯流排(I²C / I2C / IIC:Inter-Integrated Circuit)I/O 介面。


SSD1306 控制器的 I2C 通信接口由 I2C 總線數據信號 SDA(SDAOUT / D2 輸出和 SDAIN / D1 輸入)、I2C 總線時鐘信號 SCL(D0)和從地址位 SA0 組成,SDA 數據和 SCL 時鐘信號必須是連接到上拉電阻。


SSD1306 控制器的開始字節格式:
a從地址位(SA0
SSD1306 必須在 I2C 總線發送或接收任何信息之前識別從機地址。器件將響應從器件地址,後跟從器件地址位(SA0 位)和具有以下字節格式的讀/寫選擇位(R / W#位)。

從地址位(SA0)的定義:
b7
b6
b5
b4
b3
b2
b1
b0
0
1
1
1
1
0
SA0
R / W

SA0 位提供從地址的擴展位,可以是 “0111100X” 或 “0111101X” 選擇為 SSD1306 的從地址。 D / C# 引腳用作從地址選擇的 SA0。R / W# 位用於確定 I2C 總線接口的工作模式,R / W#= 1 表示正在讀取模式。R / W#= 0 是處於寫模式。

b)I2C總線數據信號(SDA)SDA 用作發送機和接收機之間的通信信道。 數據確認通過SDA 發送。應當注意,在 SDA 引腳處的 ITO 跡線電阻和上拉電阻變為電壓分壓器,確認結果將不可能獲得有效 SDA 中的邏輯 0 電平。SDAIN 和 SDAOUT 綁定在一起並充當 SDA。SDAIN 引腳必須連接到充當 SDA。 SDAOUT 引腳可能斷開。 當 SDAOUT 引腳斷開時,確認信號將在 I2C 總線中被忽略。

c)I2C 總線時鐘信號(SCL)I2C 總線中的信息傳輸遵循時鐘信號 SCL,每次傳輸數據位在 SCL 的單個時鐘週期期間發生。

I2C 的數據格式(I2C-bus data format) 

I2C 的開始和停止狀態定義(Definition of the Star and Stop Condition)

 
I2C的應答位狀態定義(Definition of the acknowledgement Condition)
I2C的寫模式(Write mode for I2C): 
1)主設備(Master Device)通過啟動條件啟動數據通信。開始的定義是當 SCL 保持高電平時為低電平,通過將 SDA 從高電平拉到高電平來建立起始條件。 

2)從地址(Slave Address)遵循識別使用的開始條件。對於 SSD1306 的從機地址是“b0111100 或 “b0111101,通過將 SA0 改為低或高(D / C 引腳用作 SA0)。

3)通過將 R / W# 位設置為邏輯 “0” 來建立寫模式。 

4)在接收到一個字節(Byte)的數據,包括從器件之後,將產生一個確認信號地址和 R / W# 位。確認位定義是在高電平期間將 SDA 線被下拉。 

5)從地址傳輸後,可以在 SDA 發送控製字節或數據字節,控制字節主要由跟隨有 6個 “0” 的Co D / C# 位組成。
a〕如果 Co 位被設置為邏輯 “0”,祇傳輸數據(Data)。
b〕D / C# 位決定下一個是字節(Byte)是作為命令(Command)或數據(Data)。如果 D / C# 位設置為邏輯 “0”,它將以下字節定義為命令(Command)。如果 D / C# 位設置為邏輯 “1”,它將以下字節定義為將存儲在 GDDRAM 中的數據(Data)。GDDRAM 列地址指針將在每個數據寫入後自動增加一。

6)在接收到每個控制字節或數據字節後,將產生應答位(Acknowledge bit)。

7)當停止條件(Stop condition)時,寫入模式將結束。停止條件通過將 “SDA in” 從低電平拉到高電平來建立 “SCL” 保持高電平。

2017年 3月 2日 天氣報告
氣溫:17.9@ 22:00
相對濕度:百分之 65%
天氣:天色良好

2017年3月1日 星期三

DIY - ESP8266:SSD1306 0.96吋 I2C OLED 屏模塊(十七)

DIY - ESP8266:SSD1306 0.96吋 I2C OLED 屏模塊(十七): 

這片是 SSD1306 0.96吋 128×64 點陣可顯示藍色 OLED(有機發光二極體,Organic Light-Emitting Diode)屏模塊,使用共 4線的 I/O 介面,2線的 I2C 積體電路匯流排(I²C / I2C / IIC:Inter-Integrated Circuit)I/O 介面和 2線的電源供應(Vcc 和 GND ),由於是 OLED 顯示屏,所以顯示很清晰細緻。

SSD1306 0.96吋 I2C OLED 屏模塊
SSD1306 0.96吋 I2C OLED 屏模塊的正面
SSD1306 0.96吋 I2C OLED 屏模塊的背面
這片是 0.96吋 128×64 點陣可顯藍色 OLED 屏模塊,祇支持 1種介面,積體電路匯流排(I²C / I2C / IIC:Inter-Integrated Circuit),正常顯示時功耗是 0.06W,由於是點陣 OLED,並使用 Solomon Systech(晶門)SSD1306 控制器,可以顯示不同圖案和文字。

SSD1306 0.96I2C OLED 屏模塊規格:
Signal
Description
型號
SSD1306 0.96
顯示屏類型
128 × 64 點陣 OLED 液晶屏
顯示屏尺寸
0.96吋(21.74mm × 10.86mm
點尺寸
0.15mm × 0.15mm
點距
0.17mm × 0.17mm
顏色
藍單色
可視角
170°
對比度
>2000 : 1
介面
積體電路匯流排 I2C 介面
驅動晶片
Solomon Systech(晶門)SSD1306
工作電壓
3.3V ~ 5.0V
工作溫度
-40~70
OLED 屏尺寸
26.6mm × 19.1mm × 1.26mm
模塊尺寸
28.4mm × 29.3mm × 2.96mm
重量
1.29g

SSD1306 0.96I2C OLED 屏模塊 4 I/O 的定義:
Pin
Signal
Description
描述
1
VCC
VCC 2.7 ~ 3.3V
電源輸入
2
GND
Ground
地線
3
SCK
Serial Clock Input
串列時鐘線
4
SDA
Serial Data Input
串列資料線
※ 小心:筆者發現 OLED 屏上的白色絲印 I/O 的定義是錯誤,將 VCC 和 GND 標示相反。

VCC 和 GND 標示相反的 OLED 屏
2017年 3月 1日 天氣報告
氣溫:20.8@ 19:40
相對濕度:百分之 69%
天氣:天色良好