2011년 07월 27일
1의보수와 2의보수

가끔씩 까먹을 때 상기하는 용도로...

네이버 mudefack 님의 글입니다.

 

1의 보수

이진법은 각 자리의 수가 0 이나 1로 표현 됩니다. 2를 곱할때마다 한자리수씩 증가하구요

이진법은 컴퓨터에서 많이 사용하는데요 1의보수와 2의 보수에 대해서만 설명하겠습니다.

간단하게 1의 보수는 모든 자리의 0과 1을 각각 1과 0으로 바꿔주면 됩니다.

0-->1  1-->0 으로 말이죠. 2의 보수는 1의 보수를 취하고 나서 맨 오른쪽의 수에 1을 더해주면 나옵니다.

예 )  0001 0101  .>>>  1110 1010 ( 1의보수)

                                 1110 1010 + 0000 0001 = 1110 1011 (2의 보수)

 

 

 

덧셈

덧셈은 우리가 익숙한 10진수처럼 덧셈을 합니다. 이진수에서는 가장 큰 수가 1이므로 이것을 넘어가면 자리올림이 발생합니다. 자리올림수는 자리가 하나 늘어남과 동시에 그자리에 1을 써주면 되겠죠?

 

0 + 0 = 0    0+ 1 = 1   1+ 0 = 1  1+ 1 = 10  ( 1이 자리올림수 입니다. 자리가 하나 늘어났죠? )

 

뺄셈

피감수 - 감수

1) 1의 보수 이용하는 방법

1010 - 0101

감수를 1의 보수를 취합니다.      0101   -->1010

보수를 취한 상태에서 피감수와 덧셈을 합니다.  1010 + 1010 = 1 0100  ( 올림수 1이 발생합니다.)

올림수가 발생하면 최하위의 수에 1을 더해줍니다. (1010에서 마지막 0자리에 1을 더해줘요)

0100 + 0001 = 0101

올림수가 발생하지 않으면 더한 결과를 1의 보수를 취한다음에 부호를 (-)로 바꿔 줍니다.

 

2) 2의 보수 이용하는 방법

1010- 0101

감수를 2의 보수를 취합니다. 0101 --> 1010 + 0001 = 1011

보수를 취한 상태에서 피감수와 덧셈을 합니다. 1010 + 1011 = 10101  ( 올림수 1 이 발생합니다.)

올림수가 발생하면 이를 무시합니다.  1 0101  --> 0101

올림수가 발생하지 않으면 더한 결과를 2의 보수를 취한 다음에 부호를 (-)로 바꿔 줍니다.

by 카르마 | 2011/07/27 18:50 | AVR | 트랙백 | 덧글(0)
2011년 07월 25일
AVR이란 무었인가?

* What is AVR? : AVR이란 무엇인가?

 

* AVR이란 무엇인가?

AVR 은 Alf(Bogen) Vergard(Wollen) Risc 의 약자로서 ATMEL사에서 제작된 RISC 구조의 MCU 이다. 가격적인 측면에서는 약간 고가라는 단점이 있으나 1 cycle에 1 instruction이 수행되는 고속의 MCU라는 점, ISP (In System Programming)이라는 기능을 통해 매우 저렴하게 개발환경을 구축할수 있다는 점, RISC 타입이고, Harvard Architecture의 특징으로 C언어에서 우수한 성능을 발휘한다는 점, 막강한 각종 컴파일러가 무료로 제공된다는 점, 이밖에 ADC, PWM, SPI 등등의 고기능을 손쉽게 구현할 수 있다는 장점이 있다.

또한 AVR의 강점으로 꼽을 수 있는 것은 제작사가 컴파일러 WAVRASM 과 상당히 강력한 디버거인 AVR Studio를 제공한다는 것이다.

 

* AVR에는 수많은 종류가 있다

AVR은 ATMEL (http://www.atmel.com)이라는 곳에서 제작되었으며, 위에서 언급한 데이터 쉬트는 해당 사이트에서 구할수 있다. AVR도 여러 종류 (보통 Family라고 한다)가 생산되는데 크게 3종류로 ATtiny 계열, AT90s 계열, ATmega 계열이 있으며, 각각의 계열에도 여러 종류의 AVR을 판매하고 있다. 해당 사이트에 접속해서 여러 AVR을 살펴보면 수많은 AVR이 있어서 어떤 것을 골라야 하나 망설이게 되지만, AVR의 핵심적인 부분은 모두 동일하며 어떤 기능을 더 많이 보유하고 있는가, 램 및 롬의 용량은 어떻게 되는가에 대한 소소한 차이일 뿐이다. AVR 패밀리에 대해서는 추후에 언급할 예정이니 일단 "많은 종류가 있구나, 내부 코어는 동일하구나"라는 점만 알면 되겠다.

 

* AVR에 대해 배우고자 한다면 데이터 쉬트를 반드시 읽어보아라

이보다 더욱 세부적인 내용은 데이터 쉬트의 Feature 부분을 참조하면 상세하게 설명되어 있을것이다. 그러나, 처음으로 AVR을 접하는 이가 이러한 모든 내용을 한번에 이해한다는 것은 쉽지 않은 일이다. 하지만, AVR에 대해 공부하고자 한다면, Feature에서 말하는 "우리가 만든 AVR 은 이러한 기능을 갖고 있습니다."라는 내용 정도는 읽어보아야 하지 않을까.

 

* AVR이 어떤 경우에서든 최상의 MCU인것은 아니다.

아울러 위에서 언급한 내용으로 보면 "다른 MCU보다 AVR이 제일 우수하구나"라고 오해할 여지도 있지만, 기능과 성능이 제일 우수하다고 제일 우수한 CPU가 되는 것이 아닌것처럼 AVR이이 어떠한 경우에든 최상의 선택이라고 말할수는 없다. 이에 대한 논의는 추후에 다시 하기로 하기로 하고 일단은 AVR도 이런 저런 기능을 갖고 있다는 점에 주목하기 바란다.

 

* AVR에 대해 공부하고자 한다면, MCU에 대한 이해가 필수적이다.

일단 AVR에 대해서 공부하고자 하는 이는 CPU/MPU/MCU에 대한 어느정도의 개념을 익히고 있어야 한다.

왜냐하면 MCU는 MPU에 그 근본을 두고 있으며 MPU는 그 근본을 CPU에 두고 있기 때문이다. CPU 혹은 MPU에 대해 개념이 부족한 상태에서 C언어로만 제작하다보면 머지 않아 한계에 부딪히게 된다. 왜냐하면 일반 데스크탑 컴퓨터에서도 C를 사용하고, AVR도 C를 사용하지만 그 둘의 사용법이 매우 다르기 때문이다.

 

예를 들어 MCU에서는 레지스터를 사용하는 방법이 매우 일반적이나 데스크탑 컴퓨터에서는 레지스터를 설정하는 방법이 어쩌다 한번 있을까 말까한 일이기 때문이다. 더구나 근래의 OOP 설계와 같이 설계하는 방법에 있어서는 레지스터 설정이 거의 전무하다고 해도 무방할 것이다. 따라서, MCU가 어떻게 운용되는지에 대한 이해 없이 "왜 MCU에서는 프로그램을 이렇게 짜는가"와 같은 질문은 C언어에 대한 질문이 아닌 바로 MCU 구조를 이해하고 있지 못하기 때문이다. 따라서, MCU에서 프로그램을 능숙하게 다루기 위해서는 C언어의 문법에 대한 이해는 기본적이고, MCU 구조 자체도 이해를 잘 하고 있어야 한다.

 

* MCU를 숙지하고 난 이후에도 주변 회로에 대한 공부는 매번 다시 해야 한다.

또한, AVR 및 C언어에 대해 능숙하게 다룰수 있다 하더라도, 추후 AVR을 본인이 원하는 프로젝트나 회사의 프로젝트에 적용하고자 한다면, 전기/전자 기초 및 디지털 설계에 대한 기본적인 이해가 필수이다. 왜냐하면 CPU 만으로 할수 있는 일이 별로 없듯이 주변회로 제작이 필수적이기 때문이다. 예를 들어 센서를 다루고 싶다거나, 모터를 구동하고 싶다면 이는 원래 AVR과 전혀 관계가 없는 것이다.

따라서 스텝 모터를 다루고 싶다면 스텝 모터를 배워야 하고, 적외선 센서를 다루고 싶다면 적외선 센서를 알아야 한다. 그러나 많은 이들이 AVR을 잘 알게되면 모터도 당연히 잘 다룰수 있다고 생각하고 있으니 참으로 아이러니한 일이 아닐수 없다.

 

* AVR을 한번 구경하고 마치도록 하겠다.

끝으로 AVR이 어떻게 생긴 놈인지 구경한번 해보자.

아래는 AVR 중에서 ATtiny 계열 중에서 ATtiny2313이라는 놈으로 (뒤에 숫자에 따라서 여러 종류가 있다.) 20 핀으로 DIP 형태로 제작되어졌다. 간혹 모델명은 완전히 동일한데 모양이 다른 놈도 있다. 이는 모양이 다를뿐 똑같은 칩이라 생각해도 무방하다.

그러나 간혹 보면 ATTINY2313-20PI ATTINY2313-10PI이 있고, ATTINY2313V-10PI, ATTINY2313-10PI라고 몇글자가 다른 경우가 있는데, 이는 내부 코어는 완전히 동일하다, 클럭의 차이라던가, 전압의 차이가 존재하는 것이다.

 

AVR 시작한지 저도 이제 5-6개월가량 되어가네요 ㅎㅎ

지금이되어도 이론적인 부분에 대해서 습득하기란 정말 힘든 것이 AVR입니다

한가지 분야가 아닌 디지털공학, 회로이론,C는 기본적이되어야 어느정도 이해해가는거 같구요

 국내에 교육용 킷트로 몇종류에 킷들이 있는데 그중 DK-128이란 킷으로 처음 접하셔서 실습위주로 해보신다면 많은 도움이 될것같네요~~

출처
Tong - doyobee님의 AVR통
by 카르마 | 2011/07/25 21:47 | AVR | 트랙백 | 덧글(0)
2010년 09월 09일
헤이그의 환생(여덟번째 이야기)
얼음같이 얼어붙은 간호사는 얼굴이 백짓장 처럼 변했다.

얼어붙은 빙하처럼 그자리에 멈춰버려 흡사 시간이 정지된 듯 한 모습을 하고 있었다.

" 당신을 해칠 생각은 없소. 잠시 동안만 포로가 되어 주어야겠소.. 협조만 잘 해준다면 절대 아무일도 없을 것이오."

짧게 대답한 이준은 간호사의 팔을 억세게 잡아채었다. 그리고는 간호사에게 눈짓으로 병실문을 열도록 지시했다.

다행히 복도는 오가는 사람들이 없었다.

by 카르마 | 2010/09/09 13:52 | 소설습작 | 트랙백 | 덧글(0)


<< 이전 페이지 | 다음 페이지 >>