人気ブログランキング |

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

2016年 08月 31日 ( 1 )

(2016/9/1修正)
前記事から、このI2C液晶のコマンドを発行してみる。
2行3桁目に表示するためDDRAMアドレス&H42を指定する。
取扱説明書に沿った形でインストラクションテーブルというのをConst定義して、コマンド記述出来るようにする。明示的に分周比を1と定義する。2行目の先頭&H40に1桁の数字0~9を300msで表示する。初期化設定例のClear Displayが効いていないようなので、Forループの外へ移動した。fuseビットは周波数9.6MHzに書き換えてある。ちなみに買った時点では1MHz(ずっと前の記事でマイコンボードInternal clock 9.6MHzを選んでからATtiny13に対してブートローダ書込みをする)。

ソース:
'****************************************
' Copyright (c) 2016 k1segawa
' License : free
'****************************************

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 24
$swstack = 4
$framesize = 8
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
Config Clockdiv = 1
Declare Sub G_i2cwrite(byval D As Byte)
Dim A As String * 10
Dim I As Integer
Dim Cmd As Byte
Dim Wt As Byte
Dim W As Byte
'--- Instruction Description Command ---
Const Ins_cleardsp = &H01
Const Ins_returnhm = &H02
Const Ins_entrymd = &H04
Const Ins_dsponoff = &H08
Const Ins_curdspsft = &H10
Const Ins_funcset = &H20
Const Ins_setcgram = &H40
Const Ins_setddradr = &H80
'--- Instruction table 1 Command (IS=1) ---
Const Ins_intoscfreq = &H10
Const Ins_seticonadr = &H40
Const Ins_powericonctrst = &H50
Const Ins_flwctrl = &H60
Const Ins_contrstset = &H70
'--- I2C Init ---
I2cinit
'--- LCD Init ---
Waitms 40
For I = 0 To 7
'--- Read EEPROM ---
W = I * 2
Readeeprom Cmd , W
Incr W
Readeeprom Wt , W
'--- Output Command ---
Call G_i2cwrite(cmd) : Waitms Wt
Next I
'--- Clear Display Command ---
Call G_i2cwrite(ins_cleardsp) : Waitms 2
'''--- Read EEPROM ---
'''Incr W
'''Readeeprom A , W

'--- Output Data (String) ---
A = "@Hello"
I2csend &H7C , A , 6
'--- Output DDRAM Address ---
W = Ins_setddradr Or &H42
Call G_i2cwrite(w) : Waitus 27
'--- Output Data (String) ---
A = "@World"
I2csend &H7C , A , 6
'--- Rotate number ---
I = 0
Do
W = Ins_setddradr Or &H40
Call G_i2cwrite(w) : Waitus 27
W = I + &H30
A = "@" + Chr(w)
I2csend &H7C , A , 2 : Waitms 300
Incr I
I = I Mod 10
Loop
End
'--- Sub routine : Output Command ---
Sub G_i2cwrite(byval D As Byte)
I2cstart
I2cwbyte &H7C
I2cwbyte &H80 (2016/9/1修正 0→&H80)
I2cwbyte D
I2cstop
End Sub
'=== ATtiny13 EEPROM=64byte, rewrite 100,000 ===
$eeprom
'--- LCD Init Squence ---
Data &H38 , 1 , &H39 , 1 , &H14 , 1 , &H70 , 1 , &H52 , 1
Data &H6C , 201 , &H38 , 1 , &H0C , 1
'''--- String ---
'''Data "@Welcome"
$data
' History
' 2016/08/31
' clock 9.6MHz
' $hwstack 32->24
' W As Integer -> Byte
' Mult Statement
' LCD Init Squence
' Power &H56(3.3V) -> &H52(5V)
' Follwer control wait=201ms
' remove Clear Display

Const定義はHEXサイズを変えない。Do-Loopが結構容量を食って現在924バイト。

by k1segawa | 2016-08-31 21:26 | arduino, AVR | Comments(0)