見出し画像

マイコンde学習しよう(レッスン11)AVR128DA28

「通信(i2c)」


<目的>
・i2c インタフェースを使った通信について学ぶ。

<動作概要>
・SW1 が押されたら温度センサの温度を読出し、USART 通信でパソコンに送信する。

<ポイント>
・i2c インタフェースは用意したモジュールを使用する。
・i2c インタフェースをもつ温度センサを使用する。
・SW1 のチャタリング対策をする。

<レジスタ説明>

MCTRLAレジスタ

SMEN は接続相手からデータを受信したとき、ACK(またはNACK)応答をする場合に1にします。
ENABLE はマイコン側をマスタとして動作することを許可します。


MCTRLBレジスタ

MCMD[1:0]の設定については下記となります。

MCMD[1:0]ビット

MSTATUSレジスタ

RXACKビットは、0であれば接続相手からACKが返された(相手が通信を受信可能)であることを、1であればACKが返されていない(受信不可)であることをしまします。
BUSSTATE[1:0]ビットは、使用を始めるにあたり、0x1 にしてアイドル状態(IDLE)にする必要があります。


MBAUDレジスタ

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 となります。


MADDRレジスタ

MDATAレジスタ

<プログラム>

ここから先は

8,705字 / 4画像 / 1ファイル
この記事のみ ¥ 300

この記事が気に入ったらサポートをしてみませんか?