« ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで) | トップページ | ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと »

2025年9月 9日 (火)

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
    上で示したのとはちょっと変えてます

※表示画面
At41
回路図はこの記事の
 ・ATtiny402マイコン サンプル:I2Cで液晶表示

|

« ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで) | トップページ | ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと »

Arduino」カテゴリの記事

AVRマイコン」カテゴリの記事

ATtiny」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ATtiny402マイコン サンプル:I2Cで液晶表示(Wire.hを使わないで) | トップページ | ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと »