Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zuki/ssd1331_piko
pico-sdkでOLED (SSD1331) を使用する
https://github.com/zuki/ssd1331_piko
Last synced: 1 day ago
JSON representation
pico-sdkでOLED (SSD1331) を使用する
- Host: GitHub
- URL: https://github.com/zuki/ssd1331_piko
- Owner: zuki
- Created: 2024-02-17T02:06:43.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2024-02-17T02:24:24.000Z (9 months ago)
- Last Synced: 2024-04-23T13:07:08.282Z (7 months ago)
- Language: C
- Size: 499 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.adoc
Awesome Lists containing this project
README
= カラーOLEDディスプレイ(SSD1331)をSPI経由で接続する
ssD1331のデータシートは file:///Users/dspace/Documents/Datasheets/SSD1331_1.2.pdf[ここ] にある。
== 配線情報
* GPIO 17 (pin 22) Chip select -> SSD1331ボードのCS (Chip Select)
* GPIO 18 (pin 24) SCK/spi0_sclk -> SSD1331ボードのSCL
* GPIO 19 (pin 25) MOSI/spi0_tx -> SSD1331ボードのSDA (MOSI)
* GPIO 22 (pin 26) -> SSD1331ボードのDC (Data/Command)
* 3.3V OUT (pin 36) -> SSD1331ボードのVCC
* GND (pin 38) -> SSD1331ボードのGNDSPI port 0を使用する。電源は3.3V OUTピンから供給する。
== 実行結果
=== 1. 画像表示OK
* 24bit BMPから16bit RGB565に変換してヘッダーファイルとして作成するプログラムを作成
* SSD1331_REMAP_COLOR_DEPTH: 0x72 では上下逆さま
* SSD1331_REMAP_COLOR_DEPTH: 0x40 では横半分に圧縮
* SSD1331_REMAP_COLOR_DEPTH: 0x60 で正常
** [7:6]=01: 65K color format
** [5]=1: Enable COM Spilit Odd Even
** [4]=0: Scan from COM0 tom COM[N-1]
** [3]=0: Disable left-right swapping on COM
** [2]=0: RGB
** [1]=0: RAM Column 0 to 95 to Pin Seg(SA,SB,SC) 0 to 95
** [0]=0: Horizontal address increment
* 文字出力が反転するようになった
** 元画像のbmp形式は画像データが上下反転で格納される仕様であった
** `convert -flip` で元画像を上限反転
** SSD1331_REMAP_COLOR_DEPTHを0x72に戻すと画像も文字出力も正常になったimage::image_ok.jpeg[画像表示]
=== 2. フォント表示OK
* フォントは `src-examples/i2c/ssd1306_i2c/ssd1306_font.h`を流用
* このフォントはSSD1306のバッファの持ち方により左に90度釜向いているので右に90度回転するプログラムを作成
* できたフォントを少しだけ修正link:refs/ssd1306_font.adoc[フォントについて]
image::font_ok.jpeg[フォント表示]
=== 3. スクロールOK
=== 4. 変転表示OK
=== 5. ライン描画OK
== データ送信に `spi_write16_blocking` を使用
unit16_t[]を書き出すための関数があることを発見してデータバッファをuint16_t[]として書き直した。
修正点は次の5点。* 画像データをuint16_tの配列で書き出すようimage_to_hex.cを変更
* バッファサイズをuint16_tの個数に変更
* colorのuint8_t[2]への分解をやめる
* send_data()でspi_write_blocking()の代わりにspi_write16_blocking()を使用
* send_cmd(), send_data()の冒頭でspi_set_format()で送信データのビット数を変更なお、この変更で文字色の白が黄色になる問題が解決した。
image::image_16.jpeg[16ビットバッファ]