ADC 칩을 다루다 보면 12비트 또는 14비트 부호화 값으로 데이타를 읽게된다.

하지만 프로그래머 입장에서는 16비트 정수 또는 16비트 양의 정수로 계산하여야 한다.


부호화 12비트를   unsigned short 변수에  넣어버리면   이 값은  0 ~ 4095 란 값을 갖는다.

그럼 16비트로 변환된 0 이라는 값이 최소 값일까?.... 아니다.


부호화 12비트의 최소값은   1000 0000 0000 

부호화 12비트의 최대값은   0111 1111 1111 

부호화 12비트의 중간값은   0000 0000 0000 


이런값들은 무턱대고 16비트 변수에 넣을수는 없다.

그럼 어떻게 하면 될까??


아주 간단하게 이렇게 하자

------------------------------------------------------------------


 12-bit 일 경우)

       16-bit 변수  =  ( 12-bit 부호화 값  +  1000 0000 0000  ) & 0xFFF


       즉   unsigned short val =  ( adc_12bit + 0x800 )  & 0xFFF;

       여기서  0x800 값은 12비트 부호화 값에서 최소값  -2048 이다.  (12트 이면  -2048 ~ +2047 까지 나타낸다)


 14-bit 일 경우)

      16-bit 변수  =   ( 14-bit 부호화 값  +  10 0000 0000 0000 ) & 0x3FFF


만일 이 값을 음수가 포함된 정수로 변환하고 싶다면  12-bit  최소값(-2048)을  더해주면 된다.

      short val =  (short)( (adc_12bit + 0x800)&0xFFF ) - 2048;


--------------------------------------------------------------------

이글을 읽는 분들이 이런것으로 고민하지 않기를 바라며 ^^


뜬금없이 이런글은 적은것은 

ADC 칩 메뉴얼을 보다 예전에 이것을 하지 못해 고생했던 기억이 있고 그때 당시 해결하지 못하고 

ADC 칩에서 양의 정수로 받은 기억이 있어서이다.

그리고 지금 조용히 고민했더니 위와 같은 방법이 생각났다.  ㅇㅎ 역시 2진수의 매력이