How to learn
그럼 마이크로 컨트롤러, 도대체 어떻게 공부해야 할까요? 글을 쓰는 저도 설명하라니 숨이 막힙니다😨. 그래도 차근차근 시작해볼까요?
ATmega128을 다루는 방법
Register
레지스터 이야기를 먼저 해보겠습니다. ATmega128에는 레지스터라는 저장 공간이 있습니다. MCU마다 다르지만 ATmega128은 레지스터가 8칸 짜리 공간을 가지고 있습니다. ATmega128은 아래와 같은 8칸 짜리 레지스터를 엄청 많이 가지고 있고, 각각의 레지스터에는 고유한 이름이 있습니다.

레지스터가 뭔지 모르겠다구요? 낯설다구요? 그냥 저장 공간이라는 것만 알아둡시다😎. 다시 한번 말씀드리지만 본 수업에서는 사용 방법을 알려드리며, 구조와 원리는 과감하게 건너뜁니다. 여러분 모두 USB 디스크부터 HDD, SDD, SD카드 등을 사용할 때 해당 저장 장치의 구조와 원리를 공부하고 쓰시나요? 안그렇죠? 꼭 구조와 원리를 알아야 무언가를 사용할 수 있는건 아니랍니다.
그렇다면 레지스터가 저장 공간이라는건 알겠는데.. 무엇을 저장하는 공간일까요?

위와 같이 각각의 칸에는 0 또는 1, 1bit을 저장할 수 있습니다. 하나의 레지스터에는 8칸이 있으므로, 따라서 8bit을 저장할 수 있습니다.
그런데.. MCU를 다루는 방법을 이야기하는데 왜 레지스터 이야기를 꺼내는지 궁금하시죠?🤔 저기 레지스터에 들어있는 0 또는 1을 스위치라고 생각해볼까요?

뭔가 감이 오시나요? 맞습니다. 특정한 레지스터에 어떠한 값을 저장하게 되면, 그게 스위치의 역할을 합니다. 따라서 레지스터에 어떤 값을 쓰게 되면, ATmega128을 특정한 모드로 설정하는 것이죠. 이러한 방법으로 ATmega128을 우리가 원하는 대로 동작할 수 있게 설정하는 것입니다.
정리하자면, “특정한 레지스터에 특정한 값을 저장하면 ATmega128을 우리가 원하는 대로 설정할 수 있다.” 가 되겠습니다.
레지스터에 값을 저장하는 방법
만약 REG1 이라는 이름의 레지스터에 10010010을 저장하고 싶으면 어떻게 해야할까요?

저장하다.. 저장… 대입… 대입연산자…?😲 바로 대입 연산자를 통해 값을 집어넣을 수 있습니다!
REG1 = 0b11010010; // 0b는 2진수를 의미합니다(binary).
REG1 = 210; // 10진수 입니다.
REG1 = 0xD2; // 0x는 16진수를 의미합니다(hexadecimal).
// 0b11010010, 210, 0xD2 모두 진법만 다를 뿐 같은 크기의 숫자입니다.
// 진법 변환은 윈도우 및 맥 등의 기본 계산기에서 편리하게 이용 가능합니다.
어떤 레지스터에 어떤 값을 써야 할까?
이제 특정한 레지스터에 특정한 값을 저장하면 ATmega128을 우리가 원하는 대로 설정할 수 있다는 것을 알고, 레지스터에 값을 어떻게 저장하는지도 배웠습니다. 그렇다면 어떤 레지스터에 어떤 값을 써야 할까요? 여러분은 처음 보는 전자제품의 사용법을 알기 위해 어떻게 하시죠? 보통 제품을 구매하면 설명서가 딸려오지 않나요? 마찬가지로 ATmega128도 회사에서 판매하는 상품입니다. 역시 사용설명서가 같이 제공됩니다. 영어로는 Data sheet라고 하죠. 저 설명서를 보면 어떤 레지스터에 어떤 값을 저장하면 어떻게 동작하는지를 비롯한 ATmega128에 대한 모든 것을 알 수 있습니다. 그런데 데이터시트를 보면 아시겠지만 분량이 짧지 않고, 영어고, 이해하기 힘듭니다. 하지만! 너무 걱정하지 마시고 이번에는 저와 함께 ATmega128을 공부하면 되겠습니다👌.
데이터시트는 시간이 지나면서 업데이트되기도 하고 조금씩 내용이 변할 수도 있습니다. 제 블로그에서는 링크를 기준으로 합니다.
임베디드 시스템에서 데이터시트는 매우매우매우! 중요합니다. 제품을 가장 잘 아는 사람은 만든 사람이겠죠? 따라서 제품에 대한 가장 좋은 설명서도 데이터시트입니다. 항상 처음 보는 MCU나 부품을 사용할 때는 꼭 데이터시트를 먼저 확인하셨으면 좋겠습니다. 처음부터 데이터시트를 보는 것은 너무 어렵겠지만, 나중에는 꼭 데이터시트를 기반으로 공부해야 한다는 것 잊지 않으셨으면 좋겠습니다.
필요한 부품
개발 보드
ATmega128을 배우기 위한 준비가 되었으니, 직접 다뤄봐야겠죠? 운전을 배울때도 차를 직접 몰듯이 ATmega128도 직접 다뤄봐야죠. 그런데 MCU를 직접 사용하려니 골치가 아픕니다. 쪼끄만 핀들에 전원은 어떻게 연결하고 필요한 핀에 부품들은 또 어떻게 연결할까요?😮💨 그래서! 여러분의 고민을 해결해주는 제품이 있습니다. 바로 개발보드입니다. 네이버에 atmega128을 검색해보면 판매중인 개발 보드들을 확인할 수 있습니다. 개발 보드는 전원을 손쉽게 연결하고, 작은 핀들을 손으로 다룰 수 있게 큰 핀들과 연결해주는 역할을 합니다. 종류에 따라 개발 보드에 LED, 7-segment, switch 등이 붙어있는 경우도 있습니다.

목록
개발 보드 및 그 외 필요한 부품 목록을 정리해드리겠습니다. 가격은 조금씩 변동될 수 있으니 참고만 해주세요.
| 용도 | 링크 | 가격 |
|---|---|---|
| 개발 보드 | Link | 16,500 |
| 브레드보드 | ||
개발 환경
필요한 부품들이 모두 준비가 됐다면 프로그래밍을 해봐야겠지요? 임베디드 시스템 프로그래밍을 위한 개발 환경에 대해서는 다양한 의견이 있습니다. 처음 시작하는 분들에게 뭐가 좋을지 정말 고민 많이 되는데, 저는 VScode에서 프로그래밍 하도록 하겠습니다. 이 부분은 실습 페이지에서 자세히 다루도록 하겠습니다.
VScode란?
Visual Studio Code는 Microsoft에서 만든 코드 에디터입니다. C++, 파이썬 등의 프로그래밍 언어를 편리하게 편집할 수 있게 도와줍니다. Visual Studio와의 차이점은 여기를 참고해주세요(모르셔도 상관 없습니다).
Leave a comment