1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1602 キャラクタ LCDモジュール を STM32 と RaspberryPi で動かす

Posted at

1602LCDとは

SC1602に代表される、キャラクタ表示の LCDモジュール。

IMG_20200318_170019.jpg

16行2列。キャラクタは5x7ドット。

SC1602は台湾SUNLIKE社の製品。この形態のLCDモジュールは山ほどあるが、オリジナルはどこだろう?? (現サンテック・ディスプレイ株式会社?)

表示文字数が異なるバリエーションがあり、たとえば16行1列は SC1601, 20行4列はSC2004。

インターフェースは16ピン。ピンが 2x8ピンと 1x16ピンのタイプがある。SUNLIKE社の製品だと、 SC1602A は 2x8ピンタイプ、 SC1602B は 1x16ピンタイプ。

SUNLIKE社の1602シリーズは他にも SC1602C, SC1602D , ・・・とあり、 SC1602Zまである。

image.png

コントローラー

日立の HD44780コントローラー ないし互換品。

日立の HD44780 コントローラーは 1980 年代から存在するドライバチップ。
https://www.crystalfontz.com/blog/look-back-tech-history-hd44780-controller-data-sheet/

元々2x28文字が表示できる。拡張ドライバを使うと80文字まで表示できるらしい。

濃度調整ボリューム

LCDモジュールのピン3は、半固定抵抗で濃度を調整する。今回手持ちに半固定抵抗が無かったため10kΩと10kΩで中点の電位でいいんじゃない? と思ったら全然ダメだった。

http://radiopench.blog96.fc2.com/blog-entry-287.html
によると、0.5V ぐらいなのだそうです。

2kΩと330Ωで3.3Vを分圧すると何とか見える濃度になりました。

使用したLCDモジュール

中国で流通している、安いもの。
image.png

3.3V 仕様のものを使いました。
IMG_20200319_120241.jpg

なお、今回は 3.3V 仕様のものを購入しましたが 5V 仕様のものでも I/O は 2.2V 以上で Hi になるので、3.3V 系のマイコンで大体使えます。

STM32 で動かしてみる

環境

  • STM32_Arduino
  • Arduino IDE 1.6.10
  • Ubuntu 18.04

配線

以下のようにしました。

この配線のバインディングは必ずしもこれである必要はなく、大体、自由ぽいです。

LCD PIN SIGNAL NAME STM32
1 VSS GND
2 VDD 3.3V
3 VO (Volume)
4 RS PB11
5 R/W GND
6 E PB10
7 D0 (NC)
8 D1 (NC)
9 D2 (NC)
10 D3 (NC)
11 D4 PB0
12 D5 PB1
13 D6 PC13
14 D7 PC14
15 LED(+) 3.3V
16 LED(-) GND

#include <LiquidCrystal.h>

const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //STM32 Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD

void setup() {
Serial1.begin(115200);
lcd.begin(16, 2);//Defining 16*2 LCD
lcd.setCursor(0, 0); //LCD Row 0 and Column 0
lcd.print("Hello...!");
lcd.setCursor(0, 1); //LCD Row 0 and Column 1
lcd.print("Time:");

}

void loop() {

lcd.setCursor(6, 1);
int times=millis() / 1000;
lcd.print(times);
Serial1.println(times);
delay(1000);
}

IMG_20200317_144723.jpg

基板を起こして動かしてみました。

RaspberryPi

LCD PIN SIGNAL NAME RaspberryPi2
1 VSS GND
2 VDD 3.3V
3 VO (Volume)
4 RS GPIO26
5 R/W GND
6 E GPIO19
7 D0 (NC)
8 D1 (NC)
9 D2 (NC)
10 D3 (NC)
11 D4 GPIO20
12 D5 GPIO21
13 D6 GPIO22
14 D7 GPIO27
15 LED(+) 3.3V
16 LED(-) GND

Adafruit_Python_CharLCD ライブラリ → 廃止

まずはライブラリとしてこれを使ってみましたが・・・

pip3を使ってインストール


pi@raspberrypi:~ $ sudo pip3 install Adafruit_CharLCD
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting Adafruit_CharLCD
  Downloading https://www.piwheels.org/simple/adafruit-charlcd/Adafruit_CharLCD-1.1.1-py3-none-any.whl
Collecting Adafruit-GPIO>=0.4.0 (from Adafruit_CharLCD)
  Downloading https://www.piwheels.org/simple/adafruit-gpio/Adafruit_GPIO-1.0.3-py3-none-any.whl
Collecting adafruit-pureio (from Adafruit-GPIO>=0.4.0->Adafruit_CharLCD)
  Downloading https://www.piwheels.org/simple/adafruit-pureio/Adafruit_PureIO-1.0.4-py3-none-any.whl
Requirement already satisfied: spidev in /usr/local/lib/python3.7/dist-packages (from Adafruit-GPIO>=0.4.0->Adafruit_CharLCD) (3.4)
Installing collected packages: adafruit-pureio, Adafruit-GPIO, Adafruit-CharLCD
Successfully installed Adafruit-CharLCD-1.1.1 Adafruit-GPIO-1.0.3 adafruit-pureio-1.0.4


import Adafruit_CharLCD as LCD
lcd_rs        = 22
lcd_en        = 26
lcd_d4        = 5
lcd_d5        = 6
lcd_d6        = 13
lcd_d7        = 19
#
lcd_columns = 16
lcd_rows    = 2
#
#
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                       lcd_columns, lcd_rows)
lcd.clear()
lcd.message('Hello...!')
# cursol blink
lcd.blink(True)                          

IMG_20200317_154041.jpg

動いた動いた・・と思ったら、このライブラリは廃止なんだって。

Adafruit_Python_CharLdCD ライブラリ

なので、adafruit_character_lcd ライブラリを使いました。

https://github.com/adafruit/Adafruit_Python_CharLCD
https://learn.adafruit.com/character-lcds/python-circuitpython

インストール

sudo pip3 install adafruit-circuitpython-charlcd

Python プログラム

下のページ
https://learn.adafruit.com/character-lcds/python-circuitpython

Raspberry Pi simpletest example:
は上記ページでは表示されていないが、Project ZIPの中に charlcd_rpi_mono_simpletest.py
がある。

ページ内にある charlcd_mono_simpletest.py とコードは同じ、GPIOの割当などの指定が違うだけ。

これらのプログラムを、今回の配線に合わせて、以下のように書き換える。


# Metro M0/M4 Pin Config:
lcd_rs = digitalio.DigitalInOut(board.D26)
lcd_en = digitalio.DigitalInOut(board.D19)
lcd_d7 = digitalio.DigitalInOut(board.D27)
lcd_d6 = digitalio.DigitalInOut(board.D22)
lcd_d5 = digitalio.DigitalInOut(board.D21)
lcd_d4 = digitalio.DigitalInOut(board.D20)
lcd_backlight = digitalio.DigitalInOut(board.D13)

lcd_backlight は使ってないのだが適当に設定した。

映りました。

IMG_20200320_074915.jpg

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?