体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISPで ATtiny13 で I2C 液晶(6) - BASCOM-AVR - AQM0802A (8/30)

(2016/9/1修正)
BASCOM-AVRでI2Cを制御する。
秋月で買った8x2ミニ液晶 AQM0802A-RN-GBW を制御。
ブレッドボード変換基板に乗せてVDD,RESET,SCL,SDA,GNDの5 Pinにする。
必要なコンデンサ、プルアップ抵抗は全て有効活用。変換基板のPUは両方とも結線する。
ATtiny13の内部プルアップ抵抗は使わない。外部抵抗10kΩをSCL,SDAに接続する。
変換基板のPUを結線した場合は下図の10kΩ抵抗×2は必要無い。

回路:
米粒AVRでI2C通信を使ってLCD表示のサイト様の回路図を参考に。
a0034780_04113900.jpg
Japaninoもミニ液晶もfritzingにないので代用で。WriterとLCDの差を見ながら配線。VDDが離れているのは抵抗を短く描けなかったから。

BASCOM-AVR:
I2Cを試す。(ATTiny2313編) - 団塊親父のブログ のサイト様のソースを参考に。
BASCOMの「くせ」 のサイト様の通り、i2c.LBXを編集する。
BASCOM-AVRの実行形式のディレクトリ/LIBの中にある。
編集するには、i2c.LBXを[右クリック][プロパティ][セキュリティタブ][編集ボタン][Users(xxxxx)選択][書き込み許可ON][適応ボタン]を押す。
以下の通り、28行目を書き換え、コンパイルエラーになるので[書き込み許可OFF]に戻す。
旧:* sbi  _sclDDR,_SCL
新:* cbi _sclDDR,_SCL
かつ今回の回路は5Vなので、
Netduinoシリアル通信(I2C)でLCD表示 のサイト様の、下の方に「リスト1 LCD接続のためのサンプルコード」の欄外の、
『5. データシートでは3.3V用に「0x56」になっているが、「0x04」(=ブースター回路On/Off)を「0」(off)にすることで、入力電圧5Vをそのまま使用する』との記述に従い、56→52に修正する(ボタン電池の3.3Vならそのまま)。

ソース:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 4
$framesize = 16
Config Scl = Portb. 1
Config Sda = Portb. 0
Config I2cdelay = 5
Declare Sub G_i2cwrite(byval D As Byte)
Dim A As String * 10

I2cinit
Waitms 40
Call G_i2cwrite(&H38)
Waitus 27
Call G_i2cwrite(&H39)
Waitus 27
Call G_i2cwrite(&H14)
Waitus 27
Call G_i2cwrite(&H70)
Waitus 27
Call G_i2cwrite(&H52) '56->52
Waitus 27
Call G_i2cwrite(&H6c)
Waitms 200
Call G_i2cwrite(&H38)
Waitus 27
Call G_i2cwrite(&H0c)
Waitus 27
Call G_i2cwrite(&H01)
Waitms 2

A = "@Hello123"
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
買った部品の説明書の「初期化設定例」の通りコマンドを発行。
G_i2cwriteはユーザ定義関数。
8桁の文字列は先頭に@を1文字追加。
$hwstack = 32
$swstack = 4
$framesize = 16
Config Scl = Portb. 1
Config Sda = Portb. 0
は、[Options][Programmer][Compilerタブ][Chipタブ]/[I2C,SPI,1WIREタブ]より優先される。stackなどの値はソース内の制御命令や配列などの追加に従い、調整する。図はHelloだがHello123と表示する。文字列はNULL分を+1して確保するため10で宣言する。
Arduino IDEだとI2Cライブラリも含めると相当大きいだろう。BASCOM-AVRだとI2CxxxがI2Cライブラリで682バイトで済む。
ATtiny13の使えるピンは少なくとも3(=5-2)個余ってるのでSPI接続のセンサーで入力して表示するといいかも。ボタン電池で動くようにするには、Writerに対応する線(オレンジ2本~白2本まで)全てを取り外し、VDDにボタン電池の+を、GNDにーをつなげばよい(52→56も)。Pin 1のPB5(RESET)はつながなくても動くが、不安定なのでVDDと10kΩ抵抗で結ぶとなお良い。
[PR]
by k1segawa | 2016-08-30 02:05 | arduino, AVR | Comments(0)