ついでにもうひとつ液晶ネタ。
ラズパイマガジン2015年春号買いました。まぁ、基本的に日経Linuxに載ってたラズパイネタを再掲してるだけの雑誌ですが、普通のLinuxは全く使ってない自分には大変有難い(w。
で、本題。元々2014年9月号掲載のaitendoの小型液晶 [M-TM022-SPI(
[URL] )で遊ぶ、という記事。
この記事でppm2lcdっつー、ppm画像を表示させるサンプルプログラムがあるんですが、
このプログラム、確かに表示されますが、暫く放って置くと表示させた画像が崩れることがあります。っていうか崩れました。
原因は、main()関数の締めの
bcm2835_spi_end();
bcm2835_close();
のせい。SPIの使用終了を宣言して、通常のGPIOに戻る訳ですが、デフォルトが入力なおかげでMOSI、SCLK、CS、どれも電位的に浮いてしまい、ノイズの影響をもろに受けてしまうのです。
さらに、液晶のコマンド2Cは画面データを渡した後も、再び先頭から上書きされる形で入力を受け続けます。
なので、bcm2835_spi_end()でSPIを手放す前に液晶の画面データ入力受付を止めないと、ノイズで上書きされて崩れる場合が出ます。
特に、バックライトをPWMしてたりすると、バックライトピンのすぐ隣がSCLKなのでバリバリ崩れますw。
対策として一番手っ取り早いのは、bcm2835_spi_end();の前に
lcd_write_cmd(0x00);
を1行書き足すだけでNOPになり治まります。
本来なら、CSだけでもプルアップしておいた方が安全なんですが・・・
セコメントをする