AVR Cのヘッダなど
1 I2Cヘッダー 2019.11.27
2 LCDヘッダー 2019.11.27
1 I2Cヘッダー 2019.11.27
I2Cのヘッダーは以前に作ってあって、利用していましたが一部を変更しました。
大きな変更は2点で次のとおりです。
1 スレーブアドレスの指定を 8ビット から 7ビット に変更しました。一般には7ビットのようです。
2 スレーブのローカルアドレスのうち、highアドレスが無いものがあります。今まで 0x00 で無視するようにして
いましたが、中にはhighアドレスが0x00のものもあるようなので、0xff(255)に変更しました。
ヘッダーファイルのコメントをコピーしておきます。
/* ***************************************************************************************
i2c_msr.h I2Cマスター機能のためのヘッダファイル 2019.11.26 一部修正 (2010.12.25) im
スレーブアドレスは 7ビット に変更した。
スレーブのhighアドレスが無いときは 255(0xff)に変更した。(以前は0であった)
swNAK氏のプログラムからimが作製。「動いている」が正しいとは限らない。
i2c_msr.c とともに使用プログラムフォルダに置くこと。
FCPUは makefile で決定しているので注意のこと。これにより、下記の#define TWBR_data F_CPU/1000000UL*1.25-2
で SCKは100kHzに決定される。
RTC読み出しの手順
// ライト・シーケンス
I2CStart(); // スタート・コンディション
I2CWrite(0x68) // CB(W) Adrs=address<<1 7bit+0 R/W=0
I2CWrite(0xXX); // ROM Adrs(H) Hは不要=無いものには 255(0xff)を書く。スルーされる。
I2CWrite(0x00); // ROM Adrs(L)
I2CWrite(0xXX); // 0番地書き込みデータ
I2CWrite(0xXX); // 1番地書き込みデータ
I2CStop(); // ストップ・コンディション発行
//リード・シーケンス (読み出す内部番地を書き込んで、リピートする) ------- 流れ ----------------------
I2CStart(); // スタート・コンディション |スタートコンディション発行 |
I2CWrite(0x68) // CB(W) Adrs=address<<1 7bit+0 R/W=0 |コントロールバイト(書き込み) |
I2CWrite(0xXX); // ROM Adrs(H) Hがないときは 255 | |
I2CWrite(0x00) // ROM Adrs(L)指定=読み出しポイント00 |ROMアドレス書き込み(読み出し起点) |
I2CStart(); // リピート・スタート・コンディション |リピートコンディション発行 |
I2CWrite(0x68) // CB(R) Adrs=(address<<1)+1 7bit+1 R/W=1 |コントロールバイト(読み出し) |
dat1 = I2CRead(0); // バイト・リード(ACK応答) |読み出し(継続) 自動インクリメント |
dat1 = I2CRead(1); // バイト・リード(NOACK応答) |読み出し(最終) |
I2CStop(); // ストップ・コンディション発行 |ストップコンディションで終了 |
----------------------------------------
スレーブのアドレス指定時は NOACK 対策を施すべきだが省略している
if(!I2CWrite(0x68<<1)) { // CB Adrs=0xd0(W)
// NOACK時
I2CStop(); // ストップ・コンディション発行
Delay3();
string_out("NOACK!!!!");
while(1){}
}
TWIビットレート値設定 100kHzの時は クロック(MHz)*1.25-2 の値になる。←←←(注意)
8MHz=8 12MHz=13 16MHz=18 20MHz=23
********************************************************************************************* */
zipファイルをここに置きます。
1 I2Cヘッダー おわり ↑
2 LCDヘッダー 2019.11.27
データ4ビット、コントロール2ビット、及び電源2本の8ピンで接続する 2行×16文字 LCDのヘッダーファイルです。自己流のファイルで機能は乏しいものです。
ヘッダーファイルのコメントをコピーしておきます。
/*******************************************************************
lcd.h ファイル名を lcd.hに変更してください。
HD4470系 液晶モジュール用コード 060429 041216 im
LCD ヘッダーファイル (Kusunoki Masahiroさんのものを変更)
ポートの割り当て
LCD_DATA_PORT 0:3bit ここからLCDのD4:D7にデータを送る(8ビットを2回に分けて)
LCD_CTL_PORT bit_n LCDの RS(Register Srect)指定
LCD_CTL_PORT bit_m 〃 E(Enable)指定
060117 SRAMを消費しない文字列表示 lcd_putstrp() を追加した。
よく使う関数
// lcd_init();
// lcd_cls();
// lcd_gotopos(uint8_t col,uint8_t lin);
// lcd_putch(uint8_t ch);
// lcd_putstr(uint8_t *str);
// lcd_putstrp("");
注意:メインプログラムに #include <avr/pgmspace.h> が必要です。
******************************************************************* */
zipファイルをここに置きます。
2 LCDヘッダー おわり ↑
工事中
1 めんにゅー 1 ほ そ く
1 めんにゅー 1 おわり ↑