📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == <br><br> == SC2004 / I2C接続 == ==== ATMega328の設定 ==== ATMega328をI2Cマスターモードで設定する必要がある。<br> <br> * TWCR(TWI Control Register)レジスタを設定して、I2Cの開始条件、停止条件、データ送信等を制御する。 * TWSR(TWI Status Register)レジスタを監視して、I2Cバスの状態を確認する。 * TWBR(TWI Bit Rate Register)レジスタを設定して、I2Cのビットレートを決…」
 
 
2行目: 2行目:
<br><br>
<br><br>


== SC2004 / I2C接続 ==
== SC2004 / I2C通信 ==
==== ATmega328とI2C ====
ATmega328において、I2Cのシリアルクロック線(SCL)とシリアルデータ線(SDA)で一般的によく使用されるピンは、以下の通りである。<br>
* SCL
*: PC5
* SDA
*: PC4
<br>
ATmega328にはI2Cハードウェアモジュール(TWI)が1つ搭載されているため、SCLとSDAに対応するピンは1組しか存在しない。<br>
これらのピンはデフォルトで以下の機能にも割り当てられている。<br>
* PC5
*: リセット時の状態を示すピン
* PC4
*: USART0の受信ピン(RXD0)
<br>
したがって、I2C通信を使用する場合は、これらの代替機能を有効にする必要がある。<br>
また、ATmega328にはI2C専用の物理ピンヘッダが無いため、一般的なデジタルI/Oピンを使用してI2C通信を行う必要がある。<br>
<br>
理論的には、ポートB、C、Dのピンを使用してI2C通信を行うことができるが、ポートCの割り当てられたピンを使うのが最も確実で効率的である。<br>
ポートB、Dを使用する場合は、開発者自身がI2C通信向けのソースコードを設計する必要がある。<br>
* ポートA
*: ATmega328では、ポートA全体がツェナープラグ保護されているため、I2C通信が使用できない。
* ポートB
*: PB2〜PB7はツェナープラグ保護されていないため、I2C通信が使用できる。
* ポートC
*: PC4、PC5がI2Cハードウェアモジュール(TWI)に割り当てられているため、I2C通信に最適である。
* ポートD
*: ツェナープラグ保護されていないため、I2C通信が使用できるが、ハードウェア割り当てが無い。
<br>
また、Arduino IDEでは、Wire.hライブラリを使用することで、I2C通信を簡単に扱うことができる。<br>
Arduinoの公式ボードでは、A4がSDAピン、A5がSCLピンとして使用されている。<br>
<br>
==== ツェナープラグ保護 (Zener Clamping)とは ====
AVRマイクロコントローラ上の入出力ピンを過電圧から保護する機能のことである。<br>
<br>
各入出力ピンの内部にツェナーダイオードが接続されている。<br>
ツェナーダイオードは、一定の電圧を超えると導通し、過剰な電圧を基板のグランド側に流すことで、ICを保護する役割を果たす。<br>
<br>
ATmega328ではポートA全体、一部のポートBピン(PB0、PB1)がこのツェナープラグ保護で保護されている。<br>
保護電圧は、5[V]が典型的な値である。<br>
<br>
ツェナープラグ保護の長所は、ICを過電圧から確実に守れることである。<br>
しかし、その分ピンの使用方法に制約が生じる。<br>
<br>
保護ピンはダイオードの特性上、ハイインピーダンス入力としては使用できない。<br>
また、外部からの電流供給が制限されるため、High駆動能力が低下する。<br>
<br>
このため、I2C通信等でプルアップ抵抗を使用する場合は、ツェナープラグ非保護のピンを選ぶ必要がある。<br>
ATmega328では、一部のポートB、ポートC全体が最適な選択肢となる。<br>
<br>
==== ATMega328の設定 ====
==== ATMega328の設定 ====
ATMega328をI2Cマスターモードで設定する必要がある。<br>
ATMega328をI2Cマスターモードで設定する必要がある。<br>