STM32 I2C接続OLEDディスプレイを使う

03s_241_1oled.jpg
秋月電子等で取り扱いがある、128×64ドットのI2C制御有機ELディスプレイモジュールを使ってみます。使われているSSD1306は定番の制御ICらしいです。接続は上写真の通り、GND、VCC(3.3V)、SCL、SDAをつなぎます。SCL、SDAのプルアップ抵抗はモジュールに搭載されているようです。



<STM32CubeMX(5.1.0) Pinout & Configurationタブ>
左側列のConnectivity→I2C1を開く

・中央列上側 Mode
 I2C : I2C

・中央列下側 Configuration→Parameter Settingsタブ
 Rise Time (ns) : 1000
 Fall Time (ns) : 300

・右側列 IC画像
 ピン位置を変更
  (61)-PB8 : I2C1_SCL
  (62)-PB9 : I2C1_SDA



<TrueSTUDIO(9.3.0)>
下記ページのライブラリを利用します。必要最小限となっているので使いやすいと思います。
 github.com/4ilo/ssd1306-stm32HAL(右側の[Clone or download]ボタンから全ファイルをダウンロードできます。)

以下の4ファイルを自分のプロジェクトへコピーします。
 Incフォルダ→fonts.h ssd1306.h
 Srcフォルダ→fonts.c ssd1306.c

私のNucleoボードはSTM32F3シリーズなので、fonts.hとssd1306.h最上部に記載されている"stm32f4xx_hal.h"を"stm32f3xx_hal.h"へ変更します。STM32F4シリーズを使う場合は、そのままでOKです。

ライブラリのmain.cから以下の2箇所のコードを自分のmain.cへコピーします。
 /* USER CODE BEGIN Includes */〜/* USER CODE END Includes */
 /* USER CODE BEGIN 2 */〜/* USER CODE END 2 */

実行しディスプレイに文字が表示されれば成功です。以下は各関数の簡単な説明です。円などの図形を描く関数はないので、必要なものはssd1306_DrawPixel関数を使って描画することになります。
 ssd1306_Init…初期化
 ssd1306_Fill…画面全体塗りつぶし
 ssd1306_DrawPixel…1ピクセル描画
 ssd1306_SetCursor…文字描画位置を設定
 ssd1306_WriteString…文字列を描画
 ssd1306_UpdateScreen…描画を反映して画面を更新



<画面端の文字を強制描画>
ディスプレイ端のピクセル数が足りない場合、文字描画しないようになっていますが、文字が切れてでも描画するようにします。ssd1306_DrawPixel関数で画面外は描画しないよう制限されているので、たぶん問題ないでしょう。

ssd1306.c内、ssd1306_WriteChar関数の以下の記述を削除
// Check remaining space on current line
if (SSD1306_WIDTH <= (SSD1306.CurrentX + Font.FontWidth) ||
SSD1306_HEIGHT <= (SSD1306.CurrentY + Font.FontHeight))
{
// Not enough space on current line
return 0;
}



<フォント自作>
font.cにフォントのデータが入っており、自分で文字データを作成することができます。例として7x10ピクセルの「2」を0と1で描きます。横は左側7列だけ使いますが、後々のために16列準備します。
0011100000000000
0100010000000000
0100010000000000
0000010000000000
0000100000000000
0001000000000000
0010000000000000
0111110000000000
0000000000000000
0000000000000000
1行ずつを16桁の2進数とみなし、16進数へ変換します。
→0x3800, 0x4400, 0x4400, 0x0400, 0x0800, 0x1000, 0x2000, 0x7C00, 0x0000, 0x0000
これを「2」のフォントデータとすればOKです。自動計算できる表計算ファイル(LibreOfficeやOpenOfficeで開けるodsファイル)をGitHubに置いています。

タグ : マイコン 

コメントの投稿

非公開コメント

管理人

管理人

自己紹介のページ
記事一覧
Twitter
GitHub

ブログ内検索
カテゴリー
タグ

自作エフェクター   レイアウト   回路図   歪み   PureData   周波数特性   波形・倍音   マイコン   RaspberryPi   エレキギター   アンプ   エフェクター自作方法   歪率   エレキベース   真空管   コーラス   ピックアップ   静音ギター   ヘッドフォンアンプ   擬似ギター出力   市販エフェクター   アコースティックギター   ブースター   コンデンサ   ソロギター   ポールピース   イコライザー   コンプレッサー   ビブラート   フェイザー   トレモロ   TAB譜   ディレイ   DIY_Layout_Creator   ワウ   オートワウ   バッファー   

最近の記事
最新コメント
Twitter
RSS
メールフォーム
当ブログに関するお問い合わせはこちらからお願いします。 ※FAQ(よくある質問)もお読みください。

お名前
メールアドレス
件名
本文

アクセスカウンター