「基板が作れるようになったら、PCD8544ボードを自作するぞ…!」と思っていたのに、すっかり忘れていたことを思い出して、いよいよ作ってみました。PCD8544は、Nokia 5110という昔のケータイに使われていた液晶ディスプレイで、84x48のつぶつぶしたモノクロ具合がレトロな雰囲気のやつです。気がつけば初めて買ってから10年経っていました。やべえ。
Picoでも動かしていましたね。
なんで自分で基板を作るのか
上の2つの記事では、それぞれ違うモジュールを使用しています。
一最初のものは汎用的な形状で、バックライトの制御もできますが、汎用ゆえにRaspberry PiやRaspberry Pi Picoにつなぐにはケーブル接続が必須となり面倒です。
もう一つは中華系通販サイトやaitendoでよく買えた、26ピンだった頃のRaspberry Piのピン配置に合わせた形状のものです。ケーブル配置が不要で簡単に扱えますし、現在の40ピンのRaspberry Piにももちろん使えますが、バックライト制御ができないため、ライトが常時点灯するのが難点でした。また、配線がSPI向けのピンではなく、適当なGPIOピンに繋がれていたため、コードを書くにはソフトウェアSPIを使う必要がありました。さらに、ファッキンホット温度計では、センサーのケーブルをボードに直はんだ付けするなど、見栄えもイマイチになりがちでした。
上記の難点を解消するために、以下の要件でボードを設計してみました。
- Raspberry Pi向けのボードにする
- SPIのGPIOピンに配線する
- バックライト制御に対応する
- Raspberry Piの1,3,5,7,9ピンをスルーホールで提供することで、I2Cや1-Wireデバイスの接続に対応
細かい点として、3枚ほどモジュールを持っていて、基板の厚みが1mm(汎用のやつとRPi向けその1)と1.2mm(RPi向けのaitendo版)に分かれていたのですが、どうやら1mmのほうが、PCD8544が基板にしっかり固定できそうだったので、基板の厚みは1mmとしました。
Raspberry Pi向けにボードは作成しますが、私としては基本的にuHAT Porter Picoを経由してRaspberry Pi Picoで使うことを意図しています。なので、私のボードシリーズを使ってもらえれば両方で遊べます。ぐふふ。
つくっていき
PCD8544のKiCad向けデータは、hackadayに投稿している人がいたため、これをベースに作ることとしました。基板が作れるようになったらといいつつ、他人のデータ頼りなんですが、MITライセンスなので、ヨシ!(後で私も公開せねば……)。
なんやかんやでできたのがこちら。基板裏面でGPIO配線リストのテキストが抜け落ちてる時点のスクショですが。
表面はなにも印字がなく、配線も極力見せないようにしてみました。配置されるのはPCD8544と、そのバックライト用のLEDだけです。余白には必要に応じて自分でシールを貼ったりして、デコってもいいかなという意図が少しありました。なお、後述のRev.2ではその意図が破壊されます。
メインとも言える裏面。他のチップ部品はすべてこちらに配置しています。PCD8544向けのチップコンデンサー、バックライトLED用のFETとLEDの抵抗です。FETはかぐら氏のアドバイスによりBSS138というものが採用されました。Rev.1ではFETのプルダウン抵抗が不足していた点もコメントをもらって、パッチ修正で事なきを得ています。監修助かる……!
I2Cは、当初はQwiic/STEEMA QTという、Pimoroniでも最近採用しているJST-SH 4ピンのソケットを採用しようとしましたが、1mmピッチはさすがに無理と判断して、ただのスルーホールとしています。ラズパイ配置なので、使い勝手自体は悪くないと思います。L字のヘッダーかソケットをつけても、基板からはみ出さないような位置にしてあります。
練習
JLCPCBに発注して、発送メールが来た!と思ったら、10月はじめにJLCPCBが3日ほどホリデーに入ってしまい、どうも集荷まちの状態で休み入りされてしまったため、いつもより届くのが遅れました……その休み中に発注したuHAT Porter Picoの増産分(スイッチサイエンスさんに追加納品する用)が、数日差で到着していました……。
その間にやっていた、LED回路の練習。発注してから練習すんなと言われればそうですが。部品は抵抗以外を秋月で、抵抗(330Ω)は千石で調達しました。LEDは白・緑・青の3色を用意しました。青がやや暗め?ですが、まあ大丈夫な気がします。逆に明るすぎれば、PWM制御で暗くはできるので、それもまたヨシです。
届いた
そんなことなをしているうちについに到着。大変良いですね。比較で既存モジュールを並べました。
チップ部品を全部つけ終わったところで気づいた、先述のプルダウン抵抗不足による現象。LEDの制御用GPIOに触れるとLEDが光り、指を離して少しするとふわっと消えます(笑)。ふわっとの部分は多分チップコンデンサーによるものですね。これはこれで楽しそうなので良い気がしますが、抵抗を追加して解消しました。
PCD8544は、右上のaitendoのモジュールから外して移植しました。問題なく表示されて一安心。(☝ ՞ਊ ՞)☝の画像データは、昔作ったデータをCircuitPythonで改めてデコードしたもの。試行錯誤した結果、フレームバッファにそのまま流せばOK、ただしY方向は8px単位でしか動かせないので、1px単位で動かすなら自分でビットシフトって感じでした。最初はループで回して1ドットずつ打っていたら500msとかかかっていましたが、1px単位移動&はみ出し対応を入れても最大16msくらいで描画できるようになりました。基板を作って終わりではないので、コード周りもいろいろ作っています。
プルダウン抵抗を入れる前のコード再実行のようす。こう言うタイミングでもふわっと消えるので、逆にアリまであった。
プルダウン抵抗は10KΩのやつを、BSS138の2本足に乗っけて終わりでした。良かった。
Rev.2
Rev.2では、Rev.1のバグをつぶしつつ、表面にボタンを追加したくなったので追加しました。バックライトのオンオフをボタンでやりたくなったのと、あとはミニゲームとか作れたら楽しいかなとか思ったので。
まずRev.1のバグ修正がこちら。穴の配置も間違えていたッ……!
- FETにプルダウン抵抗を追加してLEDの意図しいない挙動に対応
- uHATサイズのマウントホールで、下側が1mm上よりになっていたのを修正
ボタンは、表面実装でよく使われている楕円のアレを個人的に初採用しました。アリエクでポチって、ちんたら基板を設計していたら、もうボタンが届きました。最近のアリエクマジで早い。おかげで、ボタン配置のシミュレーションが実物でできました。
というわけでこんな感じに(JLCPCBのプレビューから)。ボタンは4つにしました。部品の斜め配置、やってみたくなったんや……!GPIOの位置はシルク印刷を入れましたが、裏に書くか表に書くかでは結構迷いました。
裏。GPIOのシルクが残ってる時点のスクショだったけどまあいいや(雑)。ボタンの配線の都合でもとの配線が一部変わったりしていますが、他の変化はプルダウン抵抗程度です。
ついさっき発注したので、OSC東京に間に合えばいいな〜って感じですね。
まとめ
念願の自作PCD8544ボードができました。バックライトなしでも自然光だけでマアマア見れる、かわいいやつなので、また常設系のアプリを作れたらと思っています。データを取りっぱなしになっているCO2センサーのグラフとかの表示をやりたいなとか。
余った基板はチップ部品だけつけて、OSCで配ろうかしらん……?PCD8544は各自で用意してね!って感じにはなりますが、どうでしょうね?中途半端に実装するなら完成品で出せそれはそう。