このチュートリアルでは、2つのATMEGA8マイクロコントローラー間のシリアル通信を確立します。ここで確立される通信はUART(Universal Asynchronous Receiver Transmitter)タイプです。このシリアル通信により、さまざまな組み込みシステムで必要とされる2つのマイクロコントローラ間でデータを共有できます。
必要なコンポーネント
ハードウェア: ATMEGA8(2個)、電源(5v)、AVR-ISPプログラマー、100uFコンデンサー(電源の両端に接続)、1KΩ抵抗(2個)、LED、ボタン。
ソフトウェア: Atmel studio 6.1、progispまたはflashmagic。
回路図と説明
AVRマイクロコントローラーのシリアル通信を理解しましょう。ここでATMEGAはデータを他のATMEGAにシリアルで送信します。他の通信モードもありますが、簡単に通信できるようにRS232を選択しています。最初のATMEGA8のRS232ピンは2番目のATMEGA8のRXDピンに接続されています。
確立されたデータ通信は、次のようにプログラムされています。
- 8データビット
- 2つのストップビット
- パリティチェックビットなし
- 2400 BPS(ビット/秒)のボーレート
- 非同期通信(2つのATMEGA8間でクロック共有なし)
したがって、2つのATMEGA8に対して2つのセットレジスタがあり、1つは送信機として機能し、もう1つは受信機として機能します。
ここで、2つのATmegaマイクロコントローラー間のRS232インターフェースの場合、送信機と受信機で次の機能を満たす必要があります。
1. 1番目のコントローラーのTXDピン(データ受信機能)をTRANSMITTERに対して有効にし、2番目のコントローラーのRXDピンをRECEIVERに対して有効にする必要があります。
2.通信はシリアルであるため、データバイトが受信されるたびに知る必要があります。これにより、完全なバイトが受信されるまでプログラムを停止できます。これは、データ受信の完全な割り込みを有効にすることによって行われます。
3. DATAは、8ビットモードでコントローラーと送受信されます。したがって、一度に2文字がコントローラーに送信されます。
4.モジュールから送信されるデータにはパリティビットがなく、ストップビットが1つあります。
上記の機能はコントローラレジスタに設定されています。それらについて簡単に説明します。
DARK GRAY(UDRE):( TRASMITTER SIDE)このビットは起動時に設定されませんが、送信機が送信する準備ができているかどうかを確認するための作業中に使用されます。詳細については、TRASMITTERSIDEのプログラムを参照してください。
ライトグレー(RXC):(受信側)このビットは起動時に設定されませんが、受信機がデータを受信する準備ができているかどうかを確認するために作業中に使用されます。詳細については、受信側のプログラムを参照してください。
VOILET(TXEN):( TRASMITTER SIDE)このビットは、TRASMITTERSIDEのトランスミッタピンを有効にするために設定されます。
赤(RXEN):(受信側)このビットはデータ受信機能を表します。このビットは、モジュールからのデータをコントローラーが受信するために設定する必要があります。また、コントローラーのRXDピンを有効にします。
ブラウン(RXCIE):このビットは、データ受信が成功した後に割り込みを取得するために設定する必要があります。このビットを有効にすることで、8ビットのデータを受信した直後に知ることができます。ここではこのビットを使用しないので、そのままにしておきます。
PINK(URSEL):このビットは、UCSRCで他の必要なビットを設定した後、UCSRCで他のビットを有効にする前に設定する必要があります。URSELを無効にするか、ゼロにする必要があります。ここではこのビットを使用しないので、そのままにしておきます。
YELLOW(UCSZ0、UCSZ1、UCSZ2):(受信側とトラスミッター側)これらの3ビットは、一度に受信または送信するデータビットの数を選択するために使用されます。
2つのATMEGA間の通信は8ビット通信として確立されます。通信をテーブルと照合することにより、UCSZ0、UCSZ1を1に、UCSZ2を0に設定します。
これらを受信側と送信側の両方に設定する必要があります。
オレンジ(UMSEL):(受信側とトラスミッター側)このビットは、システムが非同期(両方とも異なるクロックを使用)または同期(両方とも同じクロックを使用)で通信しているかどうかに基づいて設定されます。
両方のコントローラーはクロックを共有しません。どちらも独自の内部時計を使用しているためです。したがって、両方のコントローラーでUMSELを0に設定する必要があります。
GREEN(UPM1、UPM0):(受信側とトラスミッター側)これらの2つのビットは、通信で使用しているビットパリティに基づいて調整されます。
ATMEGAは、パリティなしでデータを送信するようにプログラムされています。データ伝送長が短いため、データの損失やエラーがないことは明らかです。したがって、ここではパリティを設定していません。したがって、UPM1、UPM0の両方をゼロに設定するか、すべてのビットがデフォルトで0であるため、そのままにしておきます。
ブルー(USBS):(受信側とトラスミッター側)このビットは、通信中に使用するストップビットの数を選択するために使用されます。
ここで確立される通信は非同期タイプであるため、より正確なデータ送受信を行うには、2つのストップビットを使用する必要があります。したがって、両方のコントローラーでUSBSを「1」に設定します。
ボーレートは、適切なUBRRHを選択することによってコントローラーで設定されます。
UBRRH値は、ボーレートとCPU水晶周波数を相互参照することによって選択されます。
したがって、相互参照により、UBRR値は「25」と見なされ、ボーレートが設定されます。
回路に示すように、送信機側にボタンが接続されています。このボタンを押すと、8ビットのデータがTRANSMITTERによって送信され、このデータがRECEIVERによって受信されます。このデータを正常に受信すると、接続されているLEDのオンとオフが切り替わり、2つのコントローラー間のデータ転送が成功したことを示します。