2013年8月2日金曜日

PIC C18 メモ(A/D測定値の扱い)

-----------------------------
atoi の注意
-----------------------------

  • atoi 関数は16bit を前提にASCII変換する
  • 15bit 以下の分解能で使う場合は、負側の値を変換する必要がある
  • 14bit バイポーラ の場合、0x2000を超えたら0xE000へシフトする
  • 右図参照

-----------------------------
A/D値を丸めるときの注意
-----------------------------
  • バイポーラ値の場合、単純にビットローテートすると、オフセット誤差が片寄ってしまう
  • 特にゼロ付近が目立ってしまうので困る
  • 右図参照
-----------------------------
2の補数を取るときの注意
-----------------------------
12bit バイポーラの場合
【正】
0xFFFF で EX-OR の後、ビット長を戻す
meas ^= 0xFFFF;
meas++;
meas &= 0x0FFF;

0x0001 -> 0xFFFE -> 0xFFFF -> 0x0FFF  //-1
0x0000 -> 0xFFFF -> 0x0000 -> 0x0000  //0
0x0FFF -> 0xF000 -> 0xF001 -> 0x0001  //+1

【誤】
meas ^= 0x0FFF;
meas++;

0x0001 -> 0x0FFE -> 0x0FFF  //-1
0x0000 -> 0x0FFF -> 0x1000  //NG
0x0FFF -> 0x0000 -> 0x0001  //+1