Raspberry Pi Picoで、MicroPythonを使い、I2C LCD 0802Aの表示テストをします。
これまで、AQM0802Aは、PICやArduinoで利用し、その表示プログラムはJH7UBCホームページに掲載しています。AQM0802Aのコントローラは、ST7032です。ST7032のライブラリがあれば、それを利用するのが簡単です。
今回はMicroPythonでのI2Cの使い方の勉強なので、ライブラリを使わないで、プログラミングをします。(ライブラリがあるのか、確認していません)
PicoとAQM0802Aの接続回路図です。id=0 SCL=GP17,SDA=GP16としました。
I2Cデバイスへの書き込みメッソドには、writeto(addr,buf)やwriteto_mem(addr,memaddr,buf)などがあります。
writeto(addr,buf)で、addr=0x3e,buf[0]=0x00,buf[1]=0x02としてI2CのSCLとSDAを観測してみました。赤線がSCL、青線がSDAです。OKです。
LCDを初期化した後、1行目に「JH7UBC」が表示され、2行目に数値が0からカウントアップされます。
------------------------------------------------------------------
from machine import Pin, I2C
import utime
i2c = I2C(0,freq=100000,scl=Pin(17),sda=Pin(16))
addr=0x3e
buf=bytearray(2)
def write_cmd(cmd):
import utime
i2c = I2C(0,freq=100000,scl=Pin(17),sda=Pin(16))
addr=0x3e
buf=bytearray(2)
def write_cmd(cmd):
buf[0]=0x00
buf[1]=cmd
i2c.writeto(addr,buf)
def write_char(char):
buf[0]=0x40
def write_char(char):
buf[0]=0x40
buf[1]=char
i2c.writeto(addr,buf)
def print(str):
def print(str):
for c in str:
write_char(ord(c))
def LCD_cursor(x,y):
def LCD_cursor(x,y):
if y==0:
write_cmd(0x80+x)
if y==1:
write_cmd(0xc0+x)
def LCD_clear():
def LCD_clear():
buf[0]=0x00
buf[1]=0x01
i2c.writeto(addr,buf)
utime.sleep(0.001)
def LCD_home():
def LCD_home():
buf[0]=0x00
buf[1]=0x02
i2c.writeto(addr,buf)
utime.sleep(0.001)
def LCD_init():
def LCD_init():
orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',b'\x38', b'\x0c', b'\x01']
utime.sleep(0.04)
for order in orders:
i2c.writeto_mem(addr, 0x00, order)
utime.sleep(0.001)
LCD_init()
LCD_clear()
LCD_home()
print('JH7UBC')
num=0
while True:
LCD_init()
LCD_clear()
LCD_home()
print('JH7UBC')
num=0
while True:
LCD_cursor(0,1)
print(str(num))
num=num+1
utime.sleep(1)
------------------------------------------------------------------
LCD初期化の手順について説明します。各コマンドを順番にLCDに送ります。
0x38 #8bit,2line
↓
0x39 #IS=1:extension mode set
↓
0x14 #Internal OSC Frequency
↓
0x73 #Contrast 私の場合この値がちょうど良いコントラスト(要調整)
↓
0x56 #Power/ICON/Contrast control
↓
0x6C #Follower control
↓
0x38 #IS=0:extension mode cancel
↓
0x0C #Display ON
↓
0x01 #Clear Display
ブレッドボードです。無事表示されました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます