読者です 読者をやめる 読者になる 読者になる

Yotazo Lab.

ほぼ自分用。でも誰かの役に立つかもしれない話題

Raspberry Piでインターネットラジオを作る #5

Raspberry Pi

LCD接続計画開始

ラジオの受信部分とコントロール部分がなんとなくできたので、局名などを表示するためにLCDを付けてみようと思います。

TC1602E-25A

秋葉原のマルツでTC1602E-25Aというのを買ってみました。16文字×2行の3.3V仕様LCDです。これにした理由は、黒背景に赤文字発光がカッコよかったからです。

早速、付属のデータシートとこちらのサイトを参考に結線します。
16×2 LCD Module Control Using Python | Raspberry Pi Spy

ちなみに、コントラスト調整用の半固定抵抗が無かったので無視したところ、真っ赤に光ってまるでダメでした。10KΩの抵抗を付けたらなんとか表示できたので、それでしのいでいます・・・。

では、同サイトのサンプルスクリプトを動かしてみます。

f:id:yotazo:20150312104316j:plain

あれれ? 一文字欠けてます。
(文字が白っぽいですが、ちゃんと黒背景に赤文字が出ています)

TC1602E-25Aの初期化

スクリプトを見てもおかしなところは無さそうなので(わからないと言ったほうがいいかも・・・)、初期化の部分を疑ってみます。

TC1602E-25AはHD44780の互換品と書いてありましたが、データシートの初期化手順は、このスクリプトや、HD44780本家の手順より1バイト多く書いてあります。そこで、データシート通りの手順に、きちんとwaitも入れてみたところ、ちゃんと表示ができました。

84行目のdef lcd_init():をいじります。

def msleep(milliseconds):
    time.sleep(milliseconds / 1000.0)
    
def usleep(microseconds):
    time.sleep(microseconds / 1000000.0)

def lcd_init():

  lcd_byte(0x03,LCD_CMD)
  msleep(4.5)
  lcd_byte(0x03,LCD_CMD)
  msleep(4.5)

  lcd_byte(0x03,LCD_CMD)
  usleep(100)
  lcd_byte(0x02,LCD_CMD)

  lcd_byte(0x02,LCD_CMD)
  lcd_byte(0x08,LCD_CMD)
  usleep(50)

  lcd_byte(0x00,LCD_CMD)
  lcd_byte(0x08,LCD_CMD)
  usleep(50)

  lcd_byte(0x00,LCD_CMD)
  lcd_byte(0x01,LCD_CMD)
  msleep(2)

  lcd_byte(0x00,LCD_CMD)
  lcd_byte(0x06,LCD_CMD)
  usleep(50)

  lcd_byte(0x00,LCD_CMD)
  lcd_byte(0x0C,LCD_CMD)

f:id:yotazo:20150312105309j:plain
ジャーン!
(Raspberry Pi 2 Model B なんですけどね・・・)

でも謎が残ります。
この後、pythonLCD表示ライブラリを入れてみたのですが、それは何もいじらずにそのまま動きました。wait部分がキモだったのかな・・・?

今回、初めてLCDをいじってみて、だいぶ勉強してしまいました。でもこれはまだまだ触り部分。これをさらに自由に表示させるのは大変そうだわ~~~ということで、ライブラリに頼ることにしましたとさ。


続く

Raspberry Pi 2 Model B (1)

Raspberry Pi 2 Model B (1)