RTCは、 リアルタイム組み込みシステム設計 。システムクロック、学生出席システム、アラームなどのさまざまなアプリケーションで正確な時刻と日付を提供し、現在の時刻を追跡し、それぞれのタスクに一貫した結果を提供します。この記事では、8051microcotrollerとのRTCインターフェースと内部レジスタへの基本的なアクセスについて説明します。
“合計カルノー図の積 ”
8051マイクロコントローラーとのRTCインターフェース
RTCプログラミングとインターフェース
8051マイクロコントローラーとインターフェースするRTCは、それにインターフェースされる他のすべての種類の「リアルタイムクロック」と同様です。それでは、との単純なRTCインターフェースを見てみましょう。 8051マイクロコントローラー それに関連するプログラミング手順。
ステップ1:RTCデバイスを選択する
さまざまな種類のRTCチップがリアルタイム組み込みの世界で利用可能であり、パッケージタイプ、供給電圧、ピン構成などのさまざまな基準に基づいて分類されます。RTCデバイスのいくつかのタイプは次のとおりです。
- 2線式シリアルインターフェース(I2Cバス)
- 3線式シリアルインターフェース(USBバス)
- 4線式シリアルインターフェース(SPI BUS)
まず、I2CバスRTCやSPIバスRTCなど、それぞれのマイクロコントローラーとのインターフェースに適した要件に基づいて、カテゴリーごとにRTCデバイスのタイプを選択する必要があります。次に、バッテリー寿命、適切なパッケージ、クロック周波数などのアプリケーションの要件に応じて、RTCデバイスの機能を選択できます。 2線式インターフェースについて考えてみましょう DS1307などの8051マイクロコントローラを搭載したRTC 。
ステップ2:RTCデバイスの内部レジスタとアドレス
RTCはリアルタイムクロックの略で、水晶の周波数に基づいて年、月、週、日、時間、分、秒を提供します。 RTCは組み込みで構成されています データストレージ用のRAMメモリ 。バッテリーをRTCデバイスに接続することにより、主電源に障害が発生した場合に備えて、バッテリーバックアップが提供されます。
RTC DB1307構成:
RTC内部ブロックとピンダイアグラム
A0、A1、A2: はRTCDB1307チップのアドレスピンであり、マスターデバイスとの通信に使用できます。とインターフェースするRTCで8つのデバイスを制御できます 8051マイクロコントローラー I2Cプロトコルを使用してA0、A1、A2ビットで。
VCCおよびGND: VCCとGNDは、それぞれ電源ピンとグランドピンです。このデバイスは1.8Vから5.5Vの範囲で動作しました。
VBT: VBTはバッテリー電源ピンです。バッテリー電源は2Vから3.5Vの間に保持する必要があります。
SCL: SCLはシリアルクロックピンであり、シリアルインターフェイス上のデータを同期するために使用されます。
SDL: シリアル入出力ピンです。シリアルインターフェースでデータを送受信するために使用されます。
クロックアウト: オプションの方形波出力ピンです。
OSC0およびOSC1: これらは、RTCデバイスにクロック信号を提供するために使用される水晶発振器ピンです。標準の水晶周波数は22.768KHzsです。
デバイスのアドレス指定:
I2Cバスプロトコルは、一度に多くのスレーブデバイスを許可します。すべてのスレーブデバイスは、それを表すために独自のアドレスで構成されている必要があります。マスターデバイスは、アドレスによって特定のスレーブデバイスと通信します。 RTCデバイスアドレスは「0xA2」です。「1010」はメーカーから提供され、A0、A1、A2はユーザー定義アドレスであり、8つのRTCデバイスとの通信に使用されます。 I2Cバスプロトコル 。
デバイスアドレス指定
R / Wビットは、RTCで読み取りおよび書き込み操作を実行するために使用されます。 R / W = 0の場合、書き込み操作が実行され、読み取り操作の場合はR / W = 1が実行されます。
RTCの読み取り操作のアドレス=“ 0xA3”
RTCの書き込み操作のアドレス=“ 0xA2”
メモリレジスタとアドレス:
図に示すように、RTCレジスタは00hから0Fhのアドレス位置にあり、RAMメモリレジスタは08hから3Fhのアドレス位置にあります。 RTCレジスタは、カレンダー機能とドライブ時刻を提供し、週末を表示するために使用されます。
メモリレジスタとアドレス
制御/ステータスレジスタ:
DB1307は、リアルタイムクロックを制御するために使用されるcontrol / status1とcontrol / status2などの2つの追加レジスタで構成されています。 割り込み 。
コントロール/ステータスレジスタ1:
制御ステータスレジスタ1
- TEST1 = 0ノーマルモード
= 1EXTクロックテストモード
- STOP = 0RTCが開始します
= 1RTC停止
- TESTC = 0パワーオンリセット無効
=パワーオンリセットが有効
コントロール/ステータスレジスタ2:
制御ステータスレジスタ2
- TI / TP = 0INTは常にアクティブです
= 1INTアクティブ所要時間
- AF = 0アラームが一致しません
= 1アラーム一致
- TF = 0タイマーオーバーフローは発生しません
= 1タイマーオーバーフローが発生します
- ALE = 0アラーム割り込みを無効にする
= 1アラーム割り込みが有効
- TIE = 0タイマー割り込みを無効にする
= 1タイマー割り込みを有効にする
ステップ3:RTCds1307と8051のインターフェース
RTCは マイクロコントローラーに接続 I2CやI2Cなどのさまざまなシリアルバスプロトコルを使用する SPIプロトコル それらの間の通信リンクを提供します。この図は、I2Cバスプロトコルを使用して8051マイクロコントローラーとインターフェイスするリアルタイムクロックを示しています。 I2Cは双方向シリアルプロトコルであり、バスに接続されたデバイス間でデータを転送するためのSCLやSDAなどの2本のワイヤで構成されています。 8051マイクロコントローラーにはRTCデバイスが組み込まれていないため、 シリアル通信 構成データを確保するため。
8051マイクロコントローラーとのRTCインターフェース
I2Cデバイスはオープンドレイン出力を備えているため、プルアップ抵抗を電圧源でI2Cバスラインに接続する必要があります。抵抗がSCLおよびSDLラインに接続されていない場合、バスは機能しません。
ステップ4:RTCデータフレーミングフォーマット
8051マイクロコントローラとインターフェイスするRTCはI2Cバスを使用するため、データ転送はバイトまたはパケットの形式で行われ、各バイトの後に確認応答が続きます。
データフレームの送信:
送信モードでは、マスターはアドレスビットでスレーブデバイスを選択した後、開始条件を解除します。アドレスビットには7ビットが含まれており、スレーブデバイスをds1307アドレスとして示します。シリアルデータとシリアルクロックは、SCLおよびSDLラインで送信されます。 START条件とSTOP条件は、シリアル転送の開始と終了として認識されます。受信および送信操作の後にはR / Wビットが続きます。
データフレームの送信
開始: 主に、開始条件を生成するマスターによって開始されるデータ転送シーケンス。
7ビットアドレス: その後、マスターは単一の16ビットアドレスではなく、2つの8ビット形式でスレーブアドレスを送信します。
制御/ステータスレジスタアドレス: 制御/ステータスレジスタアドレスは、制御ステータスレジスタを許可するためのものです。
コントロール/ステータスレジスタ1: RTCデバイスを有効にするために使用される制御ステータスレジスタ1
コントロール/ステータスレジスタ2: 割り込みを有効または無効にするために使用されます。
R / W: 読み取りおよび書き込みビットがローの場合、書き込み操作が実行されます。
ALAS: スレーブデバイスで書き込み動作を行うと、レシーバは1ビットのACKをマイクロコントローラに送信します。
やめる: スレーブデバイスでの書き込み動作が完了すると、マイクロコントローラはスレーブデバイスに停止条件を送信します。
データフレームの受信:
データフレームの受信
開始: 主に、開始条件を生成するマスターによって開始されるデータ転送シーケンス。
7ビットアドレス: その後、マスターは単一の16ビットアドレスではなく、2つの8ビット形式でスレーブアドレスを送信します。
制御/ステータスレジスタアドレス: 制御/ステータスレジスタアドレスは、制御ステータスレジスタを許可するためのものです。
制御/ステータスレジスタ1:RTCデバイスを有効にするために使用される制御ステータスレジスタ1
コントロール/ステータスレジスタ2: 割り込みを有効または無効にするために使用されます。
R / W: 読み取りおよび書き込みビットがハイの場合、読み取り操作が実行されます。
ALAS: スレーブデバイスで書き込み操作が実行されると、レシーバは1ビットのACKをマイクロコントローラに送信します。
やめる: スレーブデバイスでの書き込み動作が完了すると、マイクロコントローラはスレーブデバイスに停止条件を送信します。
ステップ5:RTCプログラミング
マスターからスレーブへの書き込み操作:
- マスターからスレーブに開始条件を発行します
- SDLラインで書き込みモードでスレーブアドレスを転送します
- 制御レジスタアドレスを送信します
- コントロール/ステータスregister1valueを送信します
- 制御/ステータスレジスタ2の値を送信します
- 分、秒、時間などの日付を送信します
- ストップビットを送信する
#include
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start()
voidホスト(unsigned char)
delay(unsigned char)
void main()
{{
開始()
write(0xA2)//スレーブアドレス//
write(0x00)//制御レジスタアドレス//
write(0x00)//制御レジスタ1の値//
write(0x00)// regiter2vlaueを制御します//
書き込み(0x28)//秒値//
write(0x50)//分の値//
write(0x02)//時間値//
}
void start()
{{
SDA = 1 //データの処理//
SCL = 1 //クロックが高い//
delay(100)
SDA = 0 //データを送信しました//
delay(100)
SCL = 0 //クロック信号が低い//
}
void write(unsigned char d)
{{
unsigned char k、j = 0×80
for(k = 0k<8k++)
{{
SDA =(d&j)
J = j >> 1
SCL = 1
delay(4)
SCL = 0
}
SDA = 1
SCL = 1
delay(2)
c = SDA
delay(2)
SCL = 0
}
void delay(int p)
{{
unsignedinta、b
For(a = 0a<255a++) //delay function//
For(b = 0b
スレーブからマスターへの操作の読み取り:
#include
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start()
void write(usigned char)
void read()
void ack()
void delay(unsigned char)
void main()
{{
開始()
write(0xA3)//読み取りモードのスレーブアドレス//
読んだ()
Alas()
sec = value
}
void start()
{{
SDA = 1 //データの処理//
SCL = 1 //クロックが高い//
delay(100)
SDA = 0 //データを送信しました//
delay(100)
SCL = 0 //クロック信号が低い//
}
void write(unsigned char d)
{{
unsigned char k、j = 0×80
for(k = 0k<8k++)
{{
SDA =(d&j)
J = j >> 1
SCL = 1
delay(4)
SCL = 0
}
SDA = 1
SCL = 1
delay(2)
c = SDA
delay(2)
SCL = 0
}
void delay(int p)
{{
unsignedinta、b
For(a = 0a<255a++) //delay function//
For(b = 0b
ボイド読み取り()
{{
unsigned char j、z = 0×00、q = 0×80
SDA = 1
for(j = 0j<8j++)
{{
SCL = 1
delay(100)
フラグ= SDA
if(flag == 1)
z =(z
void ack()
{{
SDA = 0 // SDAラインがローになります//
SCL = 1 //クロックはハイからロー//
delay(100)
SCL = 0
}
これらは、LTCが8051マイクロコントローラーとインターフェースするために必要な手順です。これらの手順に加えて、データの転送と受信に使用されるデータフレームについても、適切なプログラミングでユーザーが理解できるように、この記事で説明します。この概念に関するさらにヘルプが必要な場合は、以下にコメントを残すことができます。