$programmer = 26 'MCS UPDI programmer ' ' ******************************************** ' * 2.42インチ 128x64ドット OLED (SSD1309) * ' * (XTINY用) テスト・プログラム * ' * O-Family 2022. 7. 6 * ' ******************************************** ' $regfile = "mx4809.dat" '使用するAVRを設定。 $crystal = 20000000 'AVRクロックを設定。 ' $hwstack = 64 'ハードウェア・スタックの容量を設定。 $swstack = 10 'ソフトウェア・スタックの容量を設定。 $framesize = 24 'フレーム領域の容量を設定。 Config Sysclock = 20mhz , Prescale = 1 'システムクロックの設定。 ' ' OLEDコントローラ[SSD1309]の設定 * ' Const Interface_selection = 1 'インターフェイスの選択。(0:SPI , 1:I2C,TWI) '-------------------------------------------------------------------------------------------------- #if Interface_selection = 0 ' ' * [SPI]で接続する場合 * ' Dim _contrast As Byte 'OLEDのコントラスト設定値。[0-255] Const Ssd1309_rotate = 0 '画面の回転。(接続ケーブルが左側=[0], 右側=[1]) $lib "glcdSSD1309-SPI_V2.lib" 'SSD1309-SPIの機能追加版ライブラリを組み込む。 ' OLEDの接続ポートを設定する。Cs1 = [CS], A0 = [DC], Rst = [RES], Si = [SDA], Sclk = [SCLK] Config Graphlcd = 128 * 64eadogm , Cs1 = Porta.7 , A0 = Porta.6 , Rst = Porta.5 , Si = Porta.4 , Sclk = Porta.3 #else ' ' * [I2C,TWI]で接続する場合 (XTINY用) * ' Const I2c_select = 1 'I2Cインターフェイスの選択。(0:ソフトウェアI2C , 1:ハードウェアTWI) ' #if I2c_select = 0 'ソフトウェアI2Cの場合。 Const Twi_adr = Twi0_ctrla : Const Twi_ch = 1 '[ライブラリ内のダミー] $forcesofti2c 'ソフトウェアI2C/TWIライブラリを強制的に使用する。 $lib "i2c.lbx" 'ソフトウェアI2C用のライブラリを上書きする。 Config I2cdelay = 1 'SCLのクロック周波数 = 約260KHz。(AVRクロック20MHz時) (*最大400KHz) Config Scl = Porta.5 'I2CバスのSCLラインを接続するポートピンを設定。 Config Sda = Porta.6 'I2CバスのSDAラインを接続するポートピンを設定。 I2cinit 'I2CバスのSCL,SDAラインを初期化する。 #else 'ハードウェアTWIの場合。 Dim Twi_start As Byte 'TWIライブラリで使用する変数。 Const Twi_adr = Twi0_ctrla 'TWIのポート。TWI_ADR = TWI0_CTRLA:(TWI0) Const Twi_ch = 1 'TWIのチャンネル。TWI_CH = 1:(TWI0), 2:(TWI1) Config Twi0 = 400000 'TWIバスのクロック = 400KHz (*最大400KHz) I2cinit 'TWIバスのSCL,SDAラインを初期化する。 #endif ' Dim _contrast As Byte 'OLEDのコントラスト設定値。[0-255] Reset Porta.7 'OLED(SSD1309)の[RES]ピンを[L]にする。 Config Porta.7 = Output 'OLED(SSD1309)の[RES]ピンの接続ポートを出力に設定する。 Waitms 1 'OLEDのリセットパルスの[L]期間。 Config Porta.7 = Input 'OLED(SSD1309)の[RES]ピンの接続ポートを入力に設定する。(オープン・ドレイン) Waitms 10 'OLEDの起動待ち時間。 ' Const Ssd1309_sa0 = 0 'SSD1309のスレーブ・アドレス。(0:SA0=[L] 78H , 1:SA0=[H] 7AH) Const Ssd1309_rotate = 0 '画面の回転。(接続ケーブルが左側=[0], 右側=[1]) $lib "glcdSSD1309-I2C_V2.lib" 'SSD1309-I2Cの機能追加版ライブラリを組み込む。 Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1309" 'OLEDの設定。 #endif Cls 'OLEDの表示をすべて消去。 '-------------------------------------------------------------------------------------------------- ' ' * OLED表示テストプログラム * ' Do Setfont Font8x8tt 'フォントを設定する。 Lcdat 1 , 1 , "SSD1309 2.42{034} OLED" '通常の文字表示。 Lcdat 2 , 8 , "128x64dots SPI,I2C" '通常の文字表示。 Lcdat 6 , 1 , " ABCDefg012345678 " , 2 '実線のアンダーライン。 Lcdat 8 , 1 , " ABCDefg012345678 " , 3 '点線のアンダーライン。 Setfont Font8x8 'フォントを設定する。 Lcdat 4 , 1 , "[BASCOM-AVR MCS]" , 1 '反転表示。 Wait 3 Glcdcmd &HA7 '画面の表示設定。 [A7:反転] Wait 3 Glcdcmd &HA6 '画面の表示設定。 [A6:通常] Wait 3 _contrast = 0 : Glcdcmd &H81 'OLEDのコントラスト設定。 [0:暗い - 255:明るい] Wait 3 _contrast = 255 : Glcdcmd &H81 'OLEDのコントラスト設定。 [0:暗い - 255:明るい] Wait 3 Glcdcmd &HAE '表示のON/OFF。 [AE:OFF(スリープ・モード)] Wait 3 Glcdcmd &HAF '表示のON/OFF。 [AF:ON(通常モード)] Wait 3 Showpic 0 , 0 , Plaatje 'BGFファイル(BMPを圧縮した画像)を描画する。 Wait 3 Cls Loop End ' ' * フォント・データ * ' $include "font8x8TT.font" 'フォント・ファイルを組み込む。 $include "font8x8.font" ' ' * BGFファイル・データ * ' Plaatje: $bgf "ks108.bgf" 'BGFファイル。(BMPを圧縮した画像)