2017年1月4日 星期三

DIY - PIC24:PIC24FJ64GA008 SSD1306 0.96吋 OLED 屏模塊 I/O 電路(六十二)

DIY - PIC24PIC24FJ64GA008 SSD1306 0.96 OLED 屏模塊 I/O 電路(六十二): 

由於 SSD1306 0.96 OLED 屏模塊是可以使用介面為串列外設介面(SPISerial Peripheral Interface)和積體電路匯流排(I²C / I2CInter-Integrated Circuit),OLED 屏模塊默認是串列外設介面(SPI)介面,所以理所當然是使用串列介面(SPI)連接,但也可以使用一般的 I/O 介面控制。筆者在設計電路時,也考慮到 SSD1306 0.96 OLED 屏模塊連接,可以使用串列外設介面(SPI)或一般的 I/O 介面編程是最好,所以 D1Serial Data Input) 和 D0Serial Clock Input) 會連接到 SDO1/RF8 SCLK1/RF6,而 RESReset) 和 DCData/Command Selection) 便連接到一般的 RE1/RE2 I/O 接口。

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

Microchip PIC24FJ64GA008SSD1306 0.96 OLED 屏連接:
LCD
Signal
Description
I/O Bus
MCU
Signal
1
DC
Data/Command Selection
Low – Write Commnad
High – Write Data
13
78
RE2
2
RES
Reset (Active Low)
11
76
RE0
3
D1
Serial Data Input
19
43
SDO1/RF8
4
D0
Serial Clock Input
23
45
SCK1/RF6
5
VCC
2.7 ~ 3.3V
1

+3.3V
6
GND
Ground
6

GND

工作原理: 
Solomon Systech (晶門)SSD1306 驅動晶片與 Microchip PIC24FJ64GA008 是採用串列外設介面(SPISerial Peripheral Interface Bus)連接,而 SSD1306 I/O 控制已經連接到 6腳的連接器,D1Data Input Line - Pin 3)接至 MCU SDO1/RF8SPI Data Input 1 / RF8 - Pin 43),D0SPI Clock Input Line - Pin 4)接至 MCU SCK1/RF6SPI Clock Output 1 /RF6 - Pin 45),RESReset - Pin 2)接至 MCU PMD0/RE0RE0 - Pin 76)和D/CData / Command - Pin 1)接至 MCU PMD2/RE2RE2 - Pin 78)。由於 SPI 是引腳是可以作 SPI 和一般 I/O 使用,所以可試驗簡單的 I/O 操作。

Microchip PIC24FJ64GA008 SSD1306 OLED 屏接腳  I/O 程式定義:
// Definitions for Reset pin
#define RST_TRIS_BIT       TRISEbits.TRISE0
#define RST_LAT_BIT        LATEbits.LATE0

// Definitions for RS pin
#define RS_TRIS_BIT        TRISEbits.TRISE2
#define RS_LAT_BIT         LATEbits.LATE2

// Definitions for CLK pin
#define CLK_TRIS_BIT        TRISFbits.TRISF6
#define CLK_LAT_BIT         LATFbits.LATF6

//Definition for data BUS
#define DAT_TRIS_BIT        TRISFbits.TRISF8
#define DAT_LAT_BIT         LATFbits.LATF8
#define DAT_PORT_BIT        PORTFbits.RF8

Microchip PIC24FJ64GA008 SSD1306 OLED 屏初始化程式
void ResetDevice(void)
{
AD1PCFG = 0xFFFF;
_PMPEN = 0;

// Start Reset Device
// Set I/O as Input=1/Output=0
RST_TRIS_BIT = 0;  // Reset = Output = 0
RS_TRIS_BIT  = 0;  // Command/Data = Output = 0
DAT_TRIS_BIT = 0;  // Data D0~D7 = Output = 0
CLK_TRIS_BIT = 0;  // SCLK = Output = 0

// Hardward Reset LCD Device
RST_LAT_BIT = 0;  // Reset LCD On = 0 >100ms
delayms(250);
CS_LAT_BIT = 1;   // Chip Select Off = 1
RST_LAT_BIT = 1;  // Reset LCD Off = 1
delayms(200);

           SSD1306_WR_REG(0xAE);
           SSD1306_WR_REG(0xAE);//--turn off oled panel
           SSD1306_WR_REG(0x00);//---set low column address
           SSD1306_WR_REG(0x10);//---set high column address
           SSD1306_WR_REG(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
           SSD1306_WR_REG(0x81);//--set contrast control register
           SSD1306_WR_REG(0xCF); // Set SEG Output Current Brightness
           SSD1306_WR_REG(0xA1);//--Set SEG/Column Mapping     0xa0,0xa1
           SSD1306_WR_REG(0xC8);//Set COM/Row Scan Direction   0xc0,0xc8
           SSD1306_WR_REG(0xA6);//--set normal display
           SSD1306_WR_REG(0xA8);//--set multiplex ratio(1 to 64)
           SSD1306_WR_REG(0x3F);//--1/64 duty
           SSD1306_WR_REG(0xD3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
           SSD1306_WR_REG(0x00);//-not offset
           SSD1306_WR_REG(0xD5);//--set display clock divide ratio/oscillator frequency
           SSD1306_WR_REG(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
           SSD1306_WR_REG(0xD9);//--set pre-charge period
           SSD1306_WR_REG(0xF1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
           SSD1306_WR_REG(0xDA);//--set com pins hardware configuration
           SSD1306_WR_REG(0x12);
           SSD1306_WR_REG(0xDB);//--set vcomh
           SSD1306_WR_REG(0x40);//Set VCOM Deselect Level
           SSD1306_WR_REG(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
           SSD1306_WR_REG(0x02);//
           SSD1306_WR_REG(0x8D);//--set Charge Pump enable/disable
           SSD1306_WR_REG(0x14);//--set(0x10) disable
           SSD1306_WR_REG(0xA4);// Disable Entire Display On (0xa4/0xa5)
           SSD1306_WR_REG(0xA6);// Disable Inverse Display On (0xa6/a7)
           SSD1306_WR_REG(0xAF);//--turn on oled panel

delayms(50);
CS_LAT_BIT = 1;   // Chip Select Off = 1
       
} // ResetDevice

PIC24FJ64GA008 SSD1306 0.96 OLED 屏模塊 I/O 電路試驗
PIC24FJ64GA008 SSD1306 0.96 OLED 屏模塊 I/O 電路顯示試驗
2017年 1月 4日 天氣報告
氣溫:18.8@ 20:40
相對濕度:百分之 81%
天氣:天色大致良好

沒有留言:

張貼留言