このチュートリアルでは、PIC16F877AマイクロコントローラーにあるEEPROMを使用してデータを保存するのがいかに簡単かを学びます。ほとんどのリアルタイムプロジェクトでは、電源をオフにしても消去してはならないデータを保存する必要がある場合があります。これは複雑なプロセスのように聞こえるかもしれませんが、XC8コンパイラを使用すると、1行のコードを使用するだけでこのタスクを実行できます。データがメガバイト単位で大きい場合は、SDカードなどのストレージデバイスとインターフェイスして、それらのデータを保存できます。ただし、データが小さい場合は、これらの面倒なプロセスを回避できます。PICマイクロコントローラーにあるEEPROMを使用するだけで、データを保存し、いつでも取得できます。
このPICEEPROMチュートリアルは、非常に基本的なレベルから始めた一連のPICマイクロコントローラーチュートリアルの一部です。以前のチュートリアルをまだ学習していない場合は、今すぐそれらを確認することをお勧めします。このチュートリアルでは、LCDとPICマイクロコントローラーのインターフェイスおよびADCとPICマイクロコントローラーの使用に精通していることを前提としています。
PIC16F877AのEEPROM:
EEPROMは、「電子的に消去可能でプログラム可能な読み取り専用メモリ」の略です。名前が示すように、PICマイクロコントローラー内に存在するメモリであり、プログラミングによってデータの書き込み/読み取りを行うことができます。これに保存されたデータは、プログラムでそうするように言及されている場合にのみ消去されます。EEPROMで使用可能なストレージスペースの量は、マイクロコントローラーごとに異なります。詳細は通常通りデータシートに記載されています。PIC16F877Aの場合、仕様データシートに記載されているように、使用可能なスペースは256バイトです。ここで、これらの256バイトを使用して、簡単な実験セットアップを使用してデータを読み書きする方法を見てみましょう。
回路図と説明:
プロジェクトの回路図は上に示されています。保存および取得されるデータを視覚化するために、LCDをインターフェースしました。通常のポテンショメータはAN4アナログチャネルに接続されているため、可変電圧を供給します。この可変電圧は、EEPROMに保存されるデータとして使用されます。また、RB0のプッシュボタンを使用しました。このボタンを押すと、アナログチャネルからのデータがEEPROMに保存されます。
この接続はブレッドボードで行うことができます。PICマイクロコントローラーのピン配列を以下の表に示します。
S.No: |
ピン番号 |
ピン名 |
に接続されています |
1 |
21 |
RD2 |
LCDのRS |
2 |
22 |
RD3 |
LCDのE |
3 |
27 |
RD4 |
LCDのD4 |
4 |
28 |
RD5 |
LCDのD5 |
5 |
29 |
RD6 |
LCDのD6 |
6 |
30 |
RD7 |
LCDのD7 |
7 |
33 |
RBO / INT |
ボタンを押す |
8 |
7 |
AN4 |
ポテンショメータ |
PIC EEPROMの使用のシミュレーション:
このプロジェクトには、Proteusを使用して設計されたシミュレーションも含まれています。これを使用すると、ハードウェアなしでプロジェクトの動作をシミュレートできます。このシミュレーションのプログラムは、このチュートリアルの最後にあります。ここからHexファイルを使用して、プロセス全体をシミュレートできます。
シミュレーション中に、LCD画面のEEPROMに保存されている現在のADC値とデータを視覚化できます。現在のADC値をEEPROMに保存するには、RB0に接続されているスイッチを押すだけで保存されます。シミュレーションのスナップショットを以下に示します。
EEPROM用のPICのプログラミング:
このチュートリアルの完全なコードは、このチュートリアルの最後にあります。私たちのプログラムでは、ADCモジュールから値を読み取る必要があり、ボタンが押されたときにその値をEEPROMに保存する必要があります。ADCとLCDインターフェースについてはすでに学習したので、EEPROMからデータを保存および取得するためのコードについてさらに説明します。
データシートによると、「これらのデバイスには4または8Kワードのプログラムフラッシュがあり、PIC16F877Aのアドレス範囲は0000hから1FFFhです」。これは、各EEPROMストレージスペースにアクセスできるアドレスがあり、MCUではアドレスが0000hから1FFFhで始まることを意味します。
特定のEEPROMアドレス内にデータを保存するには、以下の行を使用するだけです。
eeprom_write(0、adc);
ここで、「adc」は、保存されるデータが存在する整数型の変数です。また、「0」はデータが保存されているEEPROMのアドレスです。構文「eeprom_write」はXC8コンパイラーによって提供されるため、レジスターはコンパイラーによって自動的に処理されます。
EEPROMにすでに保存されているデータを取得して変数に保存するには、次のコード行を使用できます。
Sadc =(int)eeprom_read(0);
ここで、「Sadc」は、EEPROMからのデータが保存される変数です。また、「0」はデータを取得するEEPROMのアドレスです。構文「eeprom_read」はXC8コンパイラーによって提供されるため、レジスターはコンパイラーによって自動的に処理されます。EEPROMに保存されるデータは16進タイプになります。したがって、構文の前に(int)を付けることにより、整数型に変換します。
ワーキング:
コードがどのように機能するかを理解し、ハードウェアの準備ができたら、コードをテストできます。コードをPICマイクロコントローラーにアップロードし、セットアップに電力を供給します。すべてが期待どおりに機能している場合は、現在のADC値がLCDに表示されているはずです。これで、ボタンを押してADC値をEEPROMに保存できます。次に、システム全体をオフにしてから再度オンにして、値が保存されているかどうかを確認します。電源を入れると、以前に保存した値がLCD画面に表示されます。
PICマイクロコントローラーEEPROMを使用するためのこのプロジェクトの完全な動作は、以下のビデオに示されています。チュートリアルを理解し、楽しんでいただけたでしょうか。疑問がある場合は、以下のコメントセクションに書き込むか、フォーラムに投稿してください。