SPIは
SCK...クロック
MOSI...マスタ出力 スレーブ入力
MISO...マスタ入力 スレーブ出力
CS...Chip Select
の4本接続で、
複数の装置を接続する時には、CSを各装置ごとに一本ずつ接続して、制御対象装置のみCSをオンすることで他の3本の通信バスを共有させる使い方です。
なので、
LCDディスプレイとSDカードを使いたい時は、マイコンの入出力ピンを5本SPIに使うことになります。
(LCDはこのほかにもリセットや他の制御ピンも使われるのでもう数本必要ですが)
ところが、どーゆーわけか、SDカードと3.5インチLCDを一緒のバスにつなぐとSDがエラーになってしまう。。。。。
2.8インチのLCDディスプレーに取り換えてみると正常に動くのに。。。
ググってみても、有益な情報は見つからず。
うまくやってる方々のを見てみると、バスをそれぞれ別のSPIにつないでいるみたい。
まぁ、たしかにSDから読み出したデータをそのままディスプレイに表示させていくような使い方をするのであれば、それぞれのバスを独立させて、(DMA使って?)ほぼ同時に読み書きさせた方が速度的に有利なわけで。。。
でも、今回使っているESP32というマイコンは、
多機能なんだけど、ピン数が少ないので、
そういうふうに使うとスイッチなどに回せる入出力ピンが全然足りなくなるんです。
で、
SDカードはほぼあきらめた。もー嫌になったから。。。
。
。
が、
その途端に、
ILI9488 LCDコントローラのMISO(Master Input Slave Output)
つまりマイコンが入力、LCDが出力となるピンを未接続にすると
SDカードが正常に動く!ことをみつけました。
気持ちが楽にならないと、ダメなもんです。
どーやら、
LCDのMISOピンが待機状態の時にローに落ちてしまっているようです。
MISOはプルアップされているので、待機時にはH:ハイかZ:ハイインピーダンス(オープン)になっていないとダメなはずです。
ここがローになっているとSDカード側がデータを出しても、Lのままなので通信できないわけで。
多分にILI9488のエラッタですね。メーカーからのエラッタ情報は見つからないので公表されているのかは不明なんですが。。。
で、
そんなハードの不具合じゃしょうがないと、
またも諦めたのですが、
ん、
ローにならないように”回路”でブロックしたらいいんじゃね??
PICマイコンのエラッタなんかも回路で補う方法が出てることあるし。。。
具体的にはZ:ハイインピーダンスになればいいんだから直列にダイオードいれればいける??
(SDのほうへもプルアップ抵抗を入れてあるので、バスのハイは保たれます。)
結果は、SDは正常に動くようになりましたが、LCDからのデータ読み出しは電圧降下のせいなのか?データが劣化しているみたいな。
今回はスクロールのために画面メモリを読み出して、座標をずらして書き込む、みたいな使い方なので、白い文字がスクロールするたびかすれていくというか、色がつくというか、みたいな状態です。
んで、ダイオードではダメそうなので、
トランジスタを使ってCSがロー(イネーブル)になっている時にのみLCD側からのH信号が通るようにして、CSがハイ(アイドル)のときにはトランジスタをオフして、マイコンから見たらハイインピーダンスになるように考えてみました。
この画像はブレッドボードでやった時はOKだったのに、基板に組んだらオヤヤ?な時のもので、スクロールしたところは文字に少しシアンがかかっています。
おまけに、トランジスタの配置をしくじって、フタが閉じなくなってしまったので
表面実装部品で作りなおし。
なんでかわかりませんけど
よくなった。
スクロール後の文字も真っ白になりました。
できました♪
けれど、どーもこの回路、ちょっと不安な感じで自信なし。。。。
なので、物語にして ながながと書きました。
以前のブログの書き方だったら、
画像2枚と5行くらいで書いてたような気がする。。。。
で、
今回の罠はハードウエアの罠という、、、、
罠もだんだん狡猾になっていくな。。。。
というか、
かむはわなからのだっしゅつほうほうをおぼえた!
(すこしづつわかってきた)
ってことなのか?????
(ちょっと前だったら諦めてた。)
Posted at 2024/03/29 10:36:47 | |
トラックバック(0) |
PIC ESP32 マイコン | 日記