$programmer = 16 'USBprog Programmer/ AVR ISP mkII (Atmel) ' ' ******************************************** ' * 2.42インチ 128x64ドット OLED (SSD1309) * ' * [I2C]で2台接続するプログラム (XMEGA用) * ' * O-Family 2022. 7. 7 * ' ******************************************** ' $regfile = "xm128a1def.dat" $crystal = 32000000 ' $hwstack = 64 $swstack = 40 $framesize = 40 Config Osc = Enabled , 32mhzosc = Enabled Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 ' ' OLEDコントローラ[SSD1309]の設定 (I2C]で2台接続) (XMEGA用) * ' Const I2c_select = 1 'I2Cインターフェイスの選択。(0:ソフトウェアI2C , 1:ハードウェアTWI) ' #if I2c_select = 0 'ソフトウェアI2Cの場合。 Const Twi_adr = 0 : Const Twi_ch = 0 '[ライブラリ内のダミー] $forcesofti2c 'ソフトウェアI2C/TWIライブラリを強制的に使用する。 $lib "i2c.lbx" 'ソフトウェアI2C用のライブラリを上書きする。 Config I2cdelay = 1 'SCLのクロック周波数 = 約280KHz。(AVRクロック32MHz時) (*最大400KHz) Config Scl = Portc.6 'I2CバスのSCLラインを接続するポートピンを設定。 Config Sda = Portc.5 'I2CバスのSDAラインを接続するポートピンを設定。 I2cinit 'I2CバスのSCL,SDAラインを初期化する。 #else 'ハードウェアTWIの場合。 Dim Twi_start As Byte 'TWIライブラリで使用する変数。 Const Twi_adr = Twic_ctrl 'TWIのポート。TWI_ADR = TWIC_CTRL:(TWIC), TWID_CTRL:(TWID), TWIE_CTRL:(TWIE), TWIF_CTRL:(TWIF) Const Twi_ch = 1 'TWIのチャンネル。TWI_CH = 1:(TWIC), 2:(TWID), 4:(TWIE), 8:(TWIF) Config Twic = 400000 'TWIポート[TWIC, TWID, TWIE, TWIF]のクロック周波数。 (*最大400KHz) I2cinit 'TWIバスのSCL,SDAラインを初期化する。 #endif ' Dim _contrast As Byte 'OLEDのコントラスト設定値。[0-255] Dim I2c_addr As Byte 'I2Cのスレーブ・アドレス選択。[&H78 or &H7A] Reset Portc.7 'OLED(SSD1309)の[RES]ピンを[L]にする。 Config Portc.7 = Output 'OLED(SSD1309)の[RES]ピンの接続ポートを出力に設定する。 Waitms 1 'OLEDのリセットパルスの[L]期間。 Config Portc.7 = Input 'OLED(SSD1309)の[RES]ピンの接続ポートを入力に設定する。(オープン・ドレイン) Waitms 10 'OLEDの起動待ち時間。 ' Const Ssd1309_rotate = 0 '画面の回転。(接続ケーブルが左側=[0], 右側=[1]) $lib "glcdSSD1309-I2C_V2x2.lib" 'SSD1309-I2Cの2台用の機能追加版ライブラリを組み込む。 Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1309" 'OLEDの設定。 ' I2c_addr = &H78 '1台目のOLEDを選択する。 Cls 'OLEDの表示をすべて消去。 I2c_addr = &H7A '2台目のOLEDを選択する。 Cls 'OLEDの表示をすべて消去。 '-------------------------------------------------------------------------------------------------- ' ' * OLED表示テストプログラム * ' Setfont Font8x8tt 'フォントを設定する。 ' ' * 1台目の表示 * ' I2c_addr = &H78 '1台目のOLEDを選択する。 Lcdat 1 , 1 , "SSD1309 2.42{034} OLED" '通常の文字表示。 Lcdat 2 , 8 , "128x64dots SPI,I2C" '通常の文字表示。 Lcdat 4 , 2 , "Multiple Connections" , 1 '反転表示。 Lcdat 6 , 9 , " < I2C Unit 1 > " , 2 '実線のアンダーライン。 Lcdat 8 , 1 , " Address = [78] " , 3 '点線のアンダーライン。 ' ' * 2台目の表示 * ' I2c_addr = &H7A '2台目のOLEDを選択する。 Lcdat 1 , 1 , "SSD1309 2.42{034} OLED" '通常の文字表示。 Lcdat 2 , 8 , "128x64dots SPI,I2C" '通常の文字表示。 Lcdat 4 , 2 , "Multiple Connections" , 1 '反転表示。 Lcdat 6 , 9 , " < I2C Unit 2 > " , 2 '実線のアンダーライン。 Lcdat 8 , 1 , " Address = [7A] " , 3 '点線のアンダーライン。 End ' ' * フォント・データ * ' $include "font8x8TT.font" 'フォント・ファイルを組み込む。