• ベストアンサー

AVRマイコンの内部EEPROMの値について

AVRマイコンの内部EEPROMの値について AVRマイコンにて、デバイスシャットダウン時にあるデータを内部EEPROMに保存し、起動時にその前回保存したデータを読み込むという制御を考えています。 ここで質問ですが、初めてプログラムを焼いたデバイスに電源を投入した場合に、内部EEPROMに入っている値を読み込んだ場合、その値は不定値なのでしょうか? それとも決められた値なのでしょうか? ソースの対処はどのようにすればよろしいでしょうか? ご教授下さい。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ore100
  • ベストアンサー率54% (34/62)
回答No.1

大体はEEPROMの初期の値はFFになっている場合多いです。 デバイスシャットダウン時にあるデータを内部EEPROMに保存するのですが、EEPROMに入っているデータが正しいデータか否かどのように見るつもりでしょうか? (1)デバイスシャットダウン時にEEPROMにデータを保存するのと同時に保存したデータのサムチェック・コードも保存しておきます。 (2)再起動のとき、サムチェック・コードをチェックして正しければ、EEPROMのデータが正しいことになります。正しくなければ、初期にもどすか、それなりの処理が必要になります。 シャットダウンのデータを保存するのは、シャットダウン割り込み処理で行います。電源が完全に落ちる前にEEPROMにデータを保存しなければなりません。時間は大丈夫でしょうか?

ron_nast
質問者

お礼

ご回答ありがとうございます。 なるほど!大変参考なりました! 下記の様に組んでみたいと思います。 ・OFFボタン→割込み→EEPROMへデータ保存(チェックサム付随)→自前シャットダウン ・電源電圧監視→ある電圧値→割込み→EEPROMへデータ保存(チェックサム付随)→自前シャットダウン

関連するQ&A

  • Atmel studo6.2デバッグ時EEPROM

    現在、Atmel studio6.2でAtmel88pマイコンのプログラミングを行っています。JTAGICE3でリアルタイムデバッグをやっています。通常のプログラミングモードからデバッグモードにマイコンを切り替える際に、EEPROMの内部データが初期化されてしまいます。 マイコンのデバッグを開始する際に一番最初にEEPROMのデータ内容を読み込んでいるので、このデータをいちいち打ち込まなければいけないのですが、EEPROM内容を保存しているeepファイルなどを読み込む機能はデバッグモード時にありますでしょうか? AVR Studio4.19の時はこの機能があったと思うのですが、ご教示頂きますよう、よろしくお願い致します。

  • AVR studio6でeepromリードできない

    AVR studio6.1の環境をPCに入れてATmega88のプログラムを行っています。ATmega88に電源を投入直後に初期設定のために、あらかじめeeprom内に設定しているプリセット値を読み込むためにeeprom_read_byte関数を使用してデータを読み出したいと思っています。 テストとしてeepromの0x00番地のデータを読み出そうとしているのですが、データを読み出すことができず困っています。 volatile u8 test01; volatile u8 test02; volatile u8 test03; volatile u8 test04; volatile int addr; addr = 0x00; eeprom_busy_wait(); test01 = eeprom_read_byte(&addr); addr = 0x01; eeprom_busy_wait(); test02 = eeprom_read_byte(&addr); addr = 0x02; eeprom_busy_wait(); test03 = eeprom_read_byte(&addr); addr = 0x03; eeprom_busy_wait(); test04 = eeprom_read_byte(&addr); このようなプログラムを組んでAVR Studio6.1のシミュレーションモードで、eepromのアドレス0x00番地から順に0x00,0x01,0x02,0x03,0x04・・・・  このように設定してみたのですが、 実際にシミュレーションしてみるとeeprom_read_byteの戻り値に代入されたtest01,test02,test03,test04には0x00という値が代入されeeprom内からのデータの読み出しに失敗しているようです。 eepromデータの取り扱いに関するプログラムの書き方などご教示頂きますよう、お願い致します。

  • PICマイコン16F84AのEEPROMについて

    EEPROMっていうのは電源を切ってもデータを保存できるんですよね? PICマイコン16F84AのEEPROMの使い方を分かりやすく、丁寧に教えて下さい。初心者なので・・・。 参考になるHPを教えてくださっても結構です。

  • AVRマイコンの割り込みについて

    AVRマイコンの割り込みについて 初心者です。 ・AVRマイコンの割り込みの優先順位ですが、割込みベクターのアドレスが小さい順に優先度が高いでよろしいでしょうか? ・優先低の割り込みルーチンを処理している時に、優先高の割り込みが入った場合、  (1)優先低の割り込みルーチン処理中断→優先高の割り込みルーチンの処理、完了→優先低の割り込みルーチン処理再開(中断ヶ所から)  (2)優先低の割り込みルーチン処理、完了→優先高の割り込みルーチンの処理、完了  (3)その他 (1)、(2)、(3)のどの処理が行われますか? ・優先高の割り込みルーチンを処理している時に、優先高の割り込みを禁止し、ルーチン内で優先低の割り込みが入った場合、優先高の割り込みルーチンから優先低の割り込みルーチンにとばすことは可能でしょうか? 以上、よろしくお願い致します。

  • Atmel Studioのeepromアドレス

    現在Atmel Studio6.2でATmega88pマイコンのプログラミングを行っています。 https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/head/branches/test002_AVRS6_20140819/test02/test02/src/main.c AVR studio4.19 + winAVR Cコンパイラで作成していたコードをAtmel Studio6.2に移してコンパイルを行ったところ、EEPROMアドレスへのデータ書き込みが逆になってしまう現象が起きました。 #define EEPROM __attribute__((section(".eeprom"))) ctl_data EEPROM gctl_data; reg_slave EEPROM greg_slave[100]; int EEPROM eprom_level[14]; char EEPROM eprom_fixid[3]; char EEPROM test_mode; char EEPROM monitor_state; int EEPROM wdt_cnt; int EEPROM cnt_loop_break; このようなコードを”AVR studio4.19 + winAVR”の時からしているのですが、このときは ctl_data EEPROM gctl_data; こちらがEEPROMアドレスの0x0000番地から始まっていたのですが、Atmel Studio6.2の場合は、 int EEPROM cnt_loop_break; こちら側が0x0000番地に配置するようになっていて、逆になってしまっています。 この場合、一番最初のアドレスに割り当てするには、コードも逆にして記述する必要がありますでしょうか? どうぞ、ご教示頂きますようお願いいたします。

  • IAR社のAVRマイコン用の無償版コンパイラ

    最近、AVRマイコンを使用し始めたのですが、 訳あってIAR社のコンパイラを使用しようと考えています。 試しに、IAR社のAVRマイコン用の無償版コンパイラを ダウンロードしました。 コンパイルすると、実行形式ファイルが、3個生成されました。 test.hex(おそらく本体), test_data.hex, test_eeprom.hexです。 ISPを使用してダウンロードしようとしたのですが、 ファイルを3つもダウロードできないようです。 試しにtest.hexをダウンロードしましたが、 動作しませんでした。 何か、実行形式ファイルの出力設定などがあるのでしょうか? また、簡単なサンプルプログラムなどお持ちの方いらっしゃらないでしょうか? マイコンは、Atmega128です。 ご存知の方がいらっしゃいましたら、ご教授お願い致します。

  • PIC EEPROM

    PICでLEDのデータをEEPROMに書き込んで電源を切ってもデータを保存させ、再度電源オンの時は電源を切る前のデータで点滅させたいのですが、EEPROMって書き込みと読み出しってありますよね?  この場合は、LEDデータの書き込みのみで大丈夫でしょうか?

  • AVRーUSBについて

    AVRマイコンを使って以下の機能を実装しようとおもっています。 ・AVRからデータをノートパソコンに送信し、受信したデータをパソコンの画面に表示する ・ノートパソコンからAVRにデータを送信する ノートパソコンのためUSBポートしかないのでUSB通信にしようと思っています。あとFT232などのUSBシリアル変換機も持ってないのでUSBの通信の仕方で通信しようと思っています。 そこで質問なのですがAVRでUSB通信を実現できるらしいAVR-USBライブラリを使って上記の機能を実装しようと思っているのですが配布サイトからダウンロードしたもののどのソースを使ってどの関数を使うのかソースを読んで見たもののわかりません。とうかアドバイスや参考になるサイトや資料があったら教えてください. あと、もうひとつ質問なのですがUSBとパソコンの通信の仕方はどのように行っているのでしょうか?信号線が二本だからI2Cなのかとおもっているのですがそうなのでしょうか? どうかよろしくおねがいします。

  • マイコンと外部とのインターフェース

    マイコン初心者です。 マイコンと、外部デバイスとのインターフェースについて教えて下さい。 マイコンとフラッシュメモリ、UART(パラレル→シリアル変換)等を接続する場合、マイコンのアドレスバス、データバスなど外部バスをそれらデバイスへ接続して、アドレスを指定、データを読み書きするような回路を見てきました。 これと同じようなことを、アドレスバス、データバスがマイコンの外に出ていないタイプ(シングルチップマイコン?)でやろうとした場合、どういった制御方法があるのでしょうか? 汎用入出力ポートを駆使して制御するのでしょうか? それともシリアル(SPIやI2C)で制御できるようなデバイスを選択するべきなのでしょうか。 知識不足で不明瞭な質問かと思いますが、アドバイスよろしくお願いいたします。

  • AVRマイコンのRESET端子について

    AVRマイコンのRESET端子について質問させて頂きます。 RESET端子が汎用ポートと兼用の場合、プログラム書き込み時に、その端子をRESETか汎用ポートかをヒューズビットで選択できますが、汎用ポートとしてプログラムを書き込んだ場合、再度SPI通信でプログラムの書き込みを行うのは不可能なのでしょうか? よろしくお願い致します。

専門家に質問してみよう