이 책의 3장은 원래 개발환경 설정에 관한 글이라 Atmel Studio를 설치하고 사용하는 방법에 대해서 이야기하고 있다. 그런데 나는 맥을 사용하고 있으므로 윈도우에만 설치 가능한 Atmet Studio를 설치할 수 없었기에(Virtual Box를 이용하면 할 수도 있지만 요즘 컴퓨터 용량이 부족해서 ㅠㅠ 얼마 전에 삭제하였다) 넘겼다.
찾아보니 맥 사용자들은 avrdude나 Arduino Studio를 사용해서 개발하는 것도 가능하다고 해서 나는 이미 깔려있는 Arduino Studio를 사용할 예정이다. 그리고 책을 둘러보던 중 34장에 아두이노와 마이크로컨트롤러에 관한 전반적인 설명이 있어서 이 챕터를 먼저 공부하기로 하였다.
34.1 아두이노
아두이노는 2005년 이탈리아에서 출범한 오픈소스 프로젝트로, 예술가와 디자이너들이 쉽게 사용할 수 있는 저렴한 제어창치를 만들고자 시작한 프로젝트라고 한다.(당연히 미국에서 만들어진 줄 알았는데 이탈리아라니, 전혀 몰랐던 사실이다.) 아두이노라는 단어는 마이크로컨트롤러를 이용하여 구현한 개발 보드인 하드웨어와 하드웨어를 동작할 수 있도록 돕는 소프트웨어 개발 환경까지 아우르는 말이다. 즉, '마이크로컨트롤러를 이용한 개발 보드'이지 '마이크로컨트롤러'는 아니다.
아두이노에는 편리한 개발을 위해 컴퓨터 또는 주변장치를 쉽게 연결할 수 있는 방법과 전원을 공급할 수 있는 방법들을 제공하고 있다. 위의 그림에서 보면 두 개의 커넥터가 존재하는데, 한개가 ISP 연결 커넥터, 다른 하나는 USB 커넥터이다. ISP 연결 커넥터는 ATmega128의 ISP 커넥터와 배열만 다르지 구성은 같다.
USB 커넥터는 UART 통신을 통해 터미널로 데이터를 전달하기 위함이다. (위의 그림에서 보면 아두이노 우노에는 마이크로컨트롤러가 두 개 있는 것을 볼 수 있는데 그중 하나는 USB를 UART로 변환해주는 마이크로 컨트롤러이다)
34.2 부트로더
위에 ATmega128 보드에도 2개의 커넥터(ISP 커넥터, USB/UART 커넥터)가 있다. 하지만 아두이노에서 USB 커넥터는 UART 통신 이외에도 프로그램 다운로드에도 사용이 가능하고, ATmega128 보드에서는 프로그램 다운로드를 위해서는 ISP 커넥터를, UART 통신을 위해서는 USB 커넥터를 사용해야 된다는 차이점이 있다.
왜 ATmega128 보드에서는 아두이노처럼 간단한 방식을 사용하지 않을까?
UART 통신을 통한 프로그램 다운로드를 위해서는 부트로더라는 프로그램이 필요하다. ATmega128의 플래시 메모리는 아래와 같이 애플리케이션 프로그램을 위한 영억과 부트로더 영역으로 나뉘어 있다.
애플리케이션 프로그램 영역은 사용자가 작성한 프로그램이 설치되는 영역이며, 부트로더 영역은 UART 통신을 통해 프로그램을 다운로드하기 위해 필요한 프로그램인 부트로더가 설치되는 영역이다. 부트로더를 사용하는 경우 애플리케이션 프로그램 영역의 크기가 줄어들지만, 부트로더를 사용하지 않으면 모든 플래시 메모리를 사용자 프로그램을 위해 사용할 수 있다.
하지만 부트로더를 사용하려면 하드웨어적 뒷바침 되어야 하기 때문에 ATmega128 보드는 아두이노와 같이 UART 통신을 위한 프로그램 다운로드 방식은 사용할 수 없기에 ISP 방식을 이용한다. 아두이노 역시 ISP 방식을 통해 프로그램을 다운로드할 수 있다. 이처럼 아두이노에서는 USB 커넥터를 사용하여 사용자 프로그램 다운로드와 UART 통신을 동시에 할 수 있다는 장점이 있는데, 이보다 더 큰 장점은 마이크로컨트롤러를 위한 프로그램을 작성하는 방법에 있다.
34.3 스케치 - 아두이노를 위한 프로그램
마이크로컨트롤러를 위한 프로그램은 흔히 펌웨어(firmware)라고 말하고, 아두이노를 위한 프로그램은 스케치(sketch)라고 말한다. 아두이노는 비전공자들이 마이크로컨트롤러를 보다 쉽게 이용할 수 있도록 만들어졌는데 위에서 말한 시리얼 방식을 통한 프로그램 다운로드도 하나에 속한다. ATmega128을 위한 프로그램은 레지스터를 통해 이루어지는데 레지스터의 이름을 기억하는 것은 쉽지 않으므로 레지스터 조작 작업을 추상화한 라이브러리 형태로 제작하여 간단히 호출할 수 있다.
아두이노 역시 마찬가지인데, 아두이노에서는 사용자가 레지스터를 직접 조작하지 않아도 된다. 즉 복잡한 레지스터 조작 작업을 대신할 수 있는 라이브러리를 제공함으로써 사용자가 쉽게 프로그램을 작성할 수 있도록 도와준다.
예를 들어 ATmega128에서 디지털 출력 필을 통해 연결한 LED를 점멸하기 위해서는 해당 핀을 출력으로 설정하기 위해서 DDRx 레지스터를, 해당 핀으로 값을 출력하기 위해서 PORTx 레지스터를 사용하였다. 하지만 아두이노에서는 레지스터를 직접 사용하지 않는다. 대신, DDRx 레지스터 조작을 위해 pinMode 함수를, PORTx 레지스터 조작을 위해 digitalWrite 함수를 사용한다.
pinMode 함수는 핀번호를 사용하여 핀의 입출력 설정을 한다. DDRx 레지스터를 사용하는 경우에는 비트 연산자를 사용하여 설정해야 되는데, 아두이노에서는 핀 번호를 정의하여 사용함으로써 비트 이름을 사용하지 않고도 핀의 입출력을 지정할 수 있다.
레지스터 사용을 없앤 점 외에도 아두이노의 스케치의 구조는 펌웨어의 구조와 차이가 있다.
일반적인 컴퓨터와는 달리 마이크로컨트롤러에는 오직 하나의 프로그램만 설치할 수 있으며, 설치된 프로그램은 전원이 주어지는 동안 무한 루프를 통해 데이터를 처리한다. 이 외에도 초기화 부분이 필요한데 이 구조는 그림 34-7과 같다. 이에 비해 아두이도(그림 34-8)은 구조를 보다 직관적으로 이해할 수 있게끔 초기와 부분인 setup과 데이터 처리 부분인 loop 함수를 분리한다.
이 외에도 이 챕터에는 아두이노 스튜디오를 설치하는 방법, 아두이노에 ISP 방식으로 프로그램을 업로드하는 방법, 아두이노 환경에서 ATmega128 사용하는 방법 등이 나와있으나 나에게는 필요한 내용이 아니라서 블로그에는 적지 않았다.
'배움의 즐거움 > 하드웨어' 카테고리의 다른 글
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(6) 디지털 데이터 출력과 입력 (0) | 2020.03.03 |
---|---|
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(5) - ATmega128 보드 (0) | 2020.03.02 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(4) - 마이크로컨트롤러를 위한 전자공학 (0) | 2020.03.01 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(2) - ATmega128 소개 (0) | 2020.02.26 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(1) - 마이크로 컨트롤러란? (2) | 2020.02.25 |