マイコンde学習しよう(レッスン11)AVR128DA28
「通信(i2c)」
<目的>
・i2c インタフェースを使った通信について学ぶ。
<動作概要>
・SW1 が押されたら温度センサの温度を読出し、USART 通信でパソコンに送信する。
<ポイント>
・i2c インタフェースは用意したモジュールを使用する。
・i2c インタフェースをもつ温度センサを使用する。
・SW1 のチャタリング対策をする。
<レジスタ説明>
SMEN は接続相手からデータを受信したとき、ACK(またはNACK)応答をする場合に1にします。
ENABLE はマイコン側をマスタとして動作することを許可します。
MCMD[1:0]の設定については下記となります。
RXACKビットは、0であれば接続相手からACKが返された(相手が通信を受信可能)であることを、1であればACKが返されていない(受信不可)であることをしまします。
BUSSTATE[1:0]ビットは、使用を始めるにあたり、0x1 にしてアイドル状態(IDLE)にする必要があります。
BAUD[7:0] : ボーレート設定
実際のボーレートは下記の計算式で求まる。
BAUD = fCLK_PER/(2 x fSCL) - (5 + fCLK_PER x TR / 2)
fCLK_PER : 周辺機能に供給されるクロック周波数
fSCL : TWI のクロック(SCL)周波数
TR : SDAとSCL信号の上昇時間
fSCL ≦ 100kHz の場合、1us
fSCL ≦ 400kHzの場合、20~300ns
fSCL ≦ 1MHzの場合、120ns
標準動作で100kHz まで、高速動作で400kHz、高速動作+で1MHz までです。
もちろん接続相手の上限周波数以下である必要があります。
今回使用するi2c モジュール(ADT7410)の上限周波数は400kHz です。
本レッスンでは標準動作内の50kHz としてみます。
するとBAUD の計算値は、4MHz/(2x50kHz)-(5+4MHzx1us/2)=40-7=33 となります。
<プログラム>
この記事が気に入ったらサポートをしてみませんか?