ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら
ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで)
これの続き。
I2C液晶、スペックを見ると電源5VならSCL周波数は
400kHzに対応しています。
そこで・・・液晶の文字数・行数をセットするときに
SCL周波数をセットできるようにしてみました。
// I2C液晶
LCD.begin(8, 2, 400); // 液晶初期化 8文字x2行,SCL=400kHz
設定処理はこんな具合。
WIFビットのタイムアウトチェックは無くしました。
/***** TWI 初期化 *****/
// _scl_frq(kHz)からTWI周波数を設定
// MBAUD = F_CPU/2/fSCL - 5
void i2c_lcd_acm0802_tn::twiInit()
{
int16_t d;
// TWI0.MBAUD = 50; // TWI SCL周波数設定
// CPUクロックから計算してみる
d = F_CPU / 1000; // CPU クロック周波数(kHz)
d = (d / 2 / _scl_frq) - 5; // F_CPU/2/fSCL-5
if(d < 0) d = 1; // 1~255
if(d > 255) d = 255;
TWI0.MBAUD = d; // TWI SCL周波数設定
TWI0.MCTRLA = 0b00000001;
// || ||||+----- ENABLE 主装置許可
// || |||+------ SMEN 簡便動作しない
// || |++------- TIMEOUT 使わない
// || +--------- QCEN 迅速指令 しない
// |+----------- WIEN 書き込み割り込み なし
// +------------ RIEN 読み込み割り込み なし
TWI0.MSTATUS = 0b00000001;
// ||||||++----- BUSSTATE アイドル状態に
// |||||+------- BUSERR
// ||||+-------- ARBLOST
// |||+--------- RXACK
// ||+---------- CLKHOLD
// |+----------- WIF
// +------------ RIF
}
/***** TWI 書込み送出開始 *****/
void i2c_lcd_acm0802_tn::twiStartW(uint8_t adrs)
{
TWI0.MADDR = adrs << 1; // アドレス 書き込みで(0)
while(!(TWI0.MSTATUS & TWI_WIF_bm)); // WIF=1を待つ
}
/***** TWI データ書き込み *****/
void i2c_lcd_acm0802_tn::twiWrite(uint8_t data)
{
TWI0.MDATA = data; // データ書き込み
while(!(TWI0.MSTATUS & TWI_WIF_bm)); // WIF=1を待つ
}
/***** TWI 送出終了 *****/
void i2c_lcd_acm0802_tn::twiStop()
{
TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Stop Condition
}
メイン側の記述でSCL周波数が設定できてエエかな
っと思ったのですが、「割り算」が入るので、単純に
「TWI0.MBAUD」に値を書くだけの元のに比べると
「90バイト」ほど肥大してしまいました。
ここらは目をつぶってSCL周波数を設定できるほうが
便利になるかと。
100kHz→400kHzにしたら液晶表示のための
処理速度が1データの書き込み単位で4倍に。
※スケッチ全体の様子
・ダウンロード - lcd_test1a.zip
上で示したのとはちょっと変えてます
※表示画面
回路図はこの記事の
・ATtiny402マイコン サンプル:I2Cで液晶表示
| 固定リンク
« ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで) | トップページ | ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと »
「Arduino」カテゴリの記事
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」#2(2025.09.15)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」(2025.09.11)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
- ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら(2025.09.09)
- ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで)(2025.09.08)
「AVRマイコン」カテゴリの記事
- ATtinyのデータシートに「1/1023」が出現(2025.09.26)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
- ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら(2025.09.09)
- ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで)(2025.09.08)
- ATtiny402マイコン サンプル:I2Cで液晶表示(2025.09.05)
「ATtiny」カテゴリの記事
- ブザー報知周波数でマイコンの動作クロックを探る#2(2025.12.04)
- ブザー報知周波数でマイコンの動作クロックを探る(2025.10.31)
- ADCの機能差 ATtiny402とATtiny1614(2025.10.20)
- ATtiny1614につないだ32kHz水晶発振子、隣のピンの影響を受けるみたい(2025.10.06)
- ATtiny1614で周波数カウンタ:キャプチャタイミング(2025.10.04)


コメント