2024年8月6日火曜日

OLED 0.91inch をSTM32で動かす

中華で売ってる小さなOLEDがあります.interfaceが5V+I2Cだけなので楽ちんです.SSD1306で検索するとたくさんのexampleが出てきます.
2019年にこれの仕様(SSD1306)を調べて、Arduinoで軽く動かして投稿しました.→こちら

今回はSTM32で動かしましたのでsourceをこちらに置きます.
black boxのlibraryとか使って無いです.I2C peripheralも使って無いです.port叩きでベターッとやってます.

SSD1306にとって、clkが速過ぎたり、setup timeが短すぎるかもしれませんので、そこは注意してください.STM32F401の48MHzで動かしていて、SSD1306にとってギリギリなtimingなような気はしてます.がっ、動いてます.

あと、間違っていても知りません.素直に死にましょう!!


↓やったことはこれです.21文字4行のcharacter displayです.character pattern ROMを内蔵してないので、character発生はこちらの仕事になります.
128x32dotの表示デバイスに、6x8dotのfontを表示させています.小さくて老眼だと見えません.

↓4行のアロケーションはこうなっております.

sourceの細かい説明はしませんが、やりたかった関数はこの1本に集約されます.
 void I2Csend_str(char* s, int line);
・文字列表示関数
・引数sは文字列 (21文字以内)
・引数lineはどのラインに表示するか 0~3
・同ラインのVRAMを消去 (何か書く度に1行消去します)
・同ラインにcharacter patternを転送

main()の最初の方でI2C_init()呼び出して使い始めてください.

good luck!

かしこ

9 件のコメント:

  1. 読者 納期厳守 やっと原稿しあがった(できてないけどできた)
    OLED ってアルディーノのサンプルでうごかしてみましたが
    それでどうしようか
    電車の行先表示でもつくればいいのかな?と思い 丸の内線の液晶はすごく長細いなあと眺めていました ツイート見る用画面をつかえばいいのか?

    返信削除
    返信
    1. arduinoでお馴染みのブレッドボードで簡単ポンですね

      削除
  2. >SSD1306
    このシリーズの奴は、「Nano Pi NEO」
    https://akizukidenshi.com/catalog/g/g112301/
    ※正確にはこれではないです。本家 friendlyarm.com から、直接買いました。
    で、動かしたことがあります。
    「Nano Pi」は、Raspberry Pi と同様に、linux が動くので、python のライブラリで動かしました。
    (と言っても、サンプルをコピペしただけ。私は python 使いでは無いので、どうやって動いているのか詳細は分かってないです。)
    ※これで、時計をずーーっと(1か月くらいかな?)表示させてたら、
    ・見事に焼き付いて
    しまったので、以来、私は OLED が嫌いになりました。(まぁ、連続表示させなきゃいいだけですが。)

    返信削除
    返信
    1. 焼きつくのかぁ 採用は厳しいかなぁ

      Nano Pi NEOって立派なものですね
      NanoとかPiとかついてると軽いものと思ってしまいがち

      削除
    2. このサイトは、ちょっと日本語が怪しいけど、割とマトモなこと書いてあります。
      https://newhavendisplay.com/ja/blog/image-burn-in/
      ※英語では、「画面焼き付き」を、"Image burn-in" って言うんですね。ちょっと為になった。しかし、
      ・スクリーンセーバーが、焼き付き対策として有効
      と言うのがウケた。時代が一周して、「本来の役目を取り戻した」感じ。
      (ホントは、「液晶モニタ」にも、焼き付き現象は有るんだけど、OLEDほどはひどくないんだよな。昔の「汎用機の端末」の、焼き付きは酷かった。ほとんどのモニタに、うっすらと、常に
      ・ログイン画面
      が、表示されてました。(通常、使ってないときは「ログイン画面」が、表示されてるため。)
      ちなみに、私が↑で使ってたOLED画面は、ずーっと時計を表示してたのですが、ある時
      ・なんか時間表示が、ずっと 88:88 に見えるなぁ?
      で、気付きました(笑)
      ※OLEDには、「スクリーンセーバー」が、必須のようです(笑)

      削除
    3. 「OLEDは、遅かれ早かれ、使っていると劣化します」
      「寿命を延ばす、唯一の方法は、輝度を下げることです」
      って、こないだの Intel の CPU の件と、
      ・全く同様
      なのが笑った。
      ※電子部品は、全て「消耗品」である・・・
      一般に、半導体の寿命は
      ・「半」永久的
      って言いますが、これは、必ず
      ・使っていると、何らかの形で「劣化する」から
      と聞いたとき(ずいぶん昔の話)は驚いたけど、なんか、その再来か?と思った。
      (この言い方は、当時の「真空管」に比べて寿命は長いけど「永久に使える」ワケでは無いことを表すために、こう表現したらしいです。)

      削除
    4. バッテリーは消耗品です →はい100万円!
      バッテリーは消耗品です →中古車値下がり!

      なんか英文和訳調だなと思ったらUSの表示デバイス会社でした

      上のOLEDには輝度調整レジスタがあります
      暗さは正義である

      削除
    5. 読者 OLEDの焼き付きは有名ですね 喫茶店のブラウン管のゲームみたい

      削除
    6. 陰キャは正義である

      削除