温度ロガーの温度センサ補正値を、EEPROMに書いて不揮発化


温度センサには、それぞれバラツキがあるので、それを、h2 -0.5 のような補正コマンドで補正する、というのが温度ロガーの仕様でした.

しかし、電源を入れる度に h2 -0.5 と打たなければならず、とても使いにくかったです.

そこで、STM8S の 4000番地からある EEPROM 領域に補正値を書き込んで、電源を切っても補正値が消えないように改善しました.

このように、EEPROMに不揮発性のデータを書き込むやりかたを、こちらで解説 しました.



EEPROMへの補正値格納マッピングはこうしました.

4020〜402F     センサ2の補正値をASCIIで格納 (最大15文字)
4060〜406F     センサ6の補正値をASCIIで格納 (最大15文字)
4070〜407F     センサ7の補正値をASCIIで格納 (最大15文字)

STVDのプロジェクトファイルを、ここに置きます. (zip)

以下で、ソースコードの変更点を解説します.


main( )

プログラム起動時に、EEPROMを読んで、補正値変数HOSEIに、補正値をセットするように追加しました.

 for(i=0;i<=15;i++){ a[i] = FLASH_ReadByte(0x4020+i); }
 HOSEI2 = atof(a);
 for(i=0;i<=15;i++){ a[i] = FLASH_ReadByte(0x4060+i); }
 HOSEI6 = atof(a);
 for(i=0;i<=15;i++){ a[i] = FLASH_ReadByte(0x4070+i); }
 HOSEI7 = atof(a);



UART_Menu( )

補正値コマンドをRS232から受信したら、HOSEI変数をセットすると同時に、EEPROMにASCIIで補正値を格納するようにしました.頭の FLASH_Unlock( ) で書き換え許可し、末尾の FLASH_Lock( ) で書き換え禁止しています.

   else if(fieldnumber==2 && Field[0][0]=='h' & strlen(Field[1])<=15 && Field[0][2]==0){
    FLASH_Unlock(FLASH_MEMTYPE_DATA);
    if(Field[0][1]=='2'){
     HOSEI2 = atof(Field[1]);
     for(i=0;i<=15;i++){ FLASH_EraseByte(0x4020+i);FLASH_ProgramByte(0x4020+i,(u8)Field[1][i]); }
    }
    if(Field[0][1]=='6'){
     HOSEI6 = atof(Field[1]);
     for(i=0;i<=15;i++){ FLASH_EraseByte(0x4060+i);FLASH_ProgramByte(0x4060+i,(u8)Field[1][i]); }
    }
    if(Field[0][1]=='7'){
     HOSEI7 = atof(Field[1]);
     for(i=0;i<=15;i++){ FLASH_EraseByte(0x4070+i);FLASH_ProgramByte(0x4070+i,(u8)Field[1][i]); }
    }
    FLASH_Lock(FLASH_MEMTYPE_DATA);



stm8s_conf.h

#define _FLASH (1)          FLASH書き換え関数を利用するためにコメント解除





release 2010.9

inserted by FC2 system