体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISPで ATtiny13 で I2C 液晶(6) - EEPROM (8/30)

(2016/9/1修正)
前記事のプログラムが冗長なので、Flashよりずっと許容回数の多いEEPROMにDATA文を置いて短くしてみた。
結果、50バイト程度のHEXファイルの減少と、プログラムからのEEPROM活用方法が分かった。

まず、いつもやっているのだが、毎回CPUの設定をするのは面倒なので、前回のソースを開いて、[File][Save as ...]で別名で保存する。その時「Leave File old CFG file ?」(古いCFGファイルは残す?)みたいに聞かれるので、Yesを押す。
CFGファイルがCPUの設定だが、前のCFGファイルを残さないと戻れなくなるので。

新しいソースはそこから修正して作っていく。

で今回プログラムが長くなるとコンパイル後のHEXでFlashが圧迫され、固定データが増えたらプログラムのSRAM領域が足りなくなるので、64バイトのEEPROMにデータ文を退避した。
HEX書き込み時のFlashが1万回、EEPROMが10万回なので安心してもっと活用していい。

プログラムが変わり、窮屈(Out of SRAM)になったのでSRAM 64バイトの構成を変えた。
framesize = 16 → 8 だが、
hwstack = 32 → 16 でもよい。

ソース:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 4
$framesize = 8
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
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 Integer

I2cinit
Waitms 40
For I = 0 To 8
W = I * 2
Readeeprom Cmd , W
Incr W
Readeeprom Wt , W
Call G_i2cwrite(cmd)
Waitms Wt
Next I
A = "@Hello123"
'Incr W
'Readeeprom A , W
I2csend &H7C , A , 9
End

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
Data &H38 , 1 , &H39 , 1 , &H14 , 1 , &H70 , 1 , &H52 , 1
Data &H6C , 200 , &H38 , 1 , &H0C , 1 , &H01 , 2
'Data "@Hello246"
$data
Helloの文自体もDATA文に落とそうとしたがちょっとうまくいかなかった。
DATA文を$eeprom ~ $dataで囲み、Readeeprom 格納変数, EEPROM読出し開始位置(バイト) で格納変数にEEPROM(先頭は0)の任意の位置のデータを読み出す。データの1は2.7usを1msに置換したもの。ワーク変数Wを使ったのはReadeeprom命令でI*2のように式を書けなかったから。

[PR]
by k1segawa | 2016-08-30 21:01 | arduino, AVR | Comments(0)