이번에는 아두이노 프로 마이크로 보드에 대해 이야기 해볼까 한다.
보통 프로 마이크로 보드를 사용하는 사람들은 레오나르도 보드를 사용하다가 작은 보드를 원하는 사람들이나 우노 보드와 달리 USB to Serial 변환칩을 거치지 않고 직접 처리하는 형태를 원할 때 많이 사용하는 보드일 것이다.

실제로는 위와 같은 모습이며 사용을 위해 핀 헤더를 납땜해서 사용하는 형태다.
그리고 앞 쪽의 연결부는 Micro USB 타입으로 되어 있는데 요즘에는 C 타입의 형태도 나온다고 하니 참고하자.

자, 그럼 간단하게 이 보드의 사용법을 살펴보자.
이 보드를 사용하는 사람들은 보통 2가지 방법을 이용할 것이다.
하나는 컴퓨터에 연결했을 때 자동으로 잡히는 ‘Arduino Leonardo’를 선택해서 사용하는 방식이고, 다른 하나는 별도의 보드를 설치해서 사용하는 방식이다.
참고로 프로 마이크로 보드는 기존의 아두이노 정품 마이크로 보드와는 좀 다르다.

기능면에서는 거의 유사하지만 프로 마이크로의 경우 SparkFun에서 소형 장치에 넣기 편하게 만든 형태이기 때문에 크기에서 차이가 있다.
이때 크기를 줄이기 위해서 원래 마이크로 보드의 Digital I/O 20개와 Analog Input 12개의 핀 중 일부만 사용하게 해놓았다.
그리고 동작 또한 5V/16MHz 모드와 3.3V/8MHz 모드 이렇게 2가지 동작 모드를 선택할 수 있게 했다.
아무튼 이 프로 마이크로 보드를 제대로 사용하려면 기본으로 설치된 보드를 이용하는 것으론 한계가 있다.
그래서 별도의 보드를 설치해야 한다.
하지만 SparkFun 보드는 일반적으로 보드 매니저에서 설치하는 방법과는 조금 다르다.
아마 보드 매니저에서 SprakFun을 검색해도 해당 보드가 나오지 않을 것이다.
(참고로 보드는 SparkFun AVR Boards를 설치해야 한다. 그냥 검색했을 땐 해당 항목이 아닌 다른게 검색되니 참고하자.)
그럼 어떻게 해야 하나.
아두이노에서는 보드를 추가하는 방법이 하나 더 존재한다.
그건 환경설정에 추가적인 보드 매니저 URLs이란 곳으로 여기에 설치하고자 하는 보드의 URL을 써주면 보드 매니저에서 해당 보드를 검색할 수 있게 해준다.
그럼 ‘파일 – 환경설정’으로 가보자.

환경설정에서 추가적인 보드 매니저 URLs 칸이 있는데 여기서 옆에 작성하는 칸에 바로 URL을 넣어도 되지만 이렇게 하면 하나의 보드 URL만 넣을 수 있기때문에 오른쪽 끝에 있는 별도의 창이 나오는 버튼을 선택하자.
그리고 거기에 URL로 아래의 주소를 입력하자.
(https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json)
주소를 입력하고 확인 버튼을 누르자.
참고로 만약 이미 다른 보드를 위해 URL을 넣어둔게 있다면 그 아래줄에 입력하면 된다.

그림과 같이 추가해야할 보드 URL이 많다면 밑으로 계속 추가하면 된다.
URL을 입력했다면 이번에는 ‘툴-보드-보드매니저’로 가보자.
보드 매니저 창이 나타났다면 이번엔 sparkfun을 검색해보자.

이번에는 SparkFun AVR Boards 메뉴가 나타난다.
해당 보드를 설치하자.
그럼 이제 ‘툴-보드’로 가보면 SparkFun의 보드들이 추가된 것을 볼 수 있다.

여기서 SparFun Pro Micro를 선택하면 된다.
그럼 보드가 선택되는데 여기가 아주 중요한 부분이다.

프로 마이크로 보드를 선택하면 위의 그림과 같이 나타나는데 여기서 가장 많이 실수 하는 부분이 ‘프로세서‘ 부분이다.
이 프로세서는 현재 사용하고 있는 마이크로컨트롤러가 어떻게 동작하고 있는지를 선택하는 곳이다.
기본적으로 프로 마이크로 보드는 ATmega32U4를 사용하고 있는데 이 마이크로 컨트롤러가 동작 방식이 주로 2가지 형태로 사용된다.
하나는 3.3V에 8MHz 클럭을 사용하는 방식이고 다른 방식이 5V에 16MHz 클럭을 사용하는 방식이다.
이렇게 사용하는 이유는 여러가지가 있겠지만 그 중 하나로 센서나 모듈의 전원이 3.3V 버전과 5V 버전으로 나뉘어져 있기 때문이다.
그래서 3.3V 기반의 센서나 모듈을 사용한다면 3.3V 전원의 보드를 사용하면 되고 5V 기반의 센서나 모듈을 사용한다면 5V 전원의 보드를 사용하면 되는 것이다.
그리고 이때 각 전원에 맞는 안정적인 클럭 주파수가 있는데 3.3V는 8MHz, 5V는 16MHz가 거기에 해당된다.
이것을 보면 알겠지만 클럭은 3.3V 전원의 보드가 좀 낮기 때문에 속도도 좀 느리다고 볼 수도 있다.
아무튼 프로 마이크로 보드는 이렇게 2가지 모드를 사용하기 때문에 보드를 구입할 때 이 보드가 어떤 모드로 제작되었는지 반드시 확인해야 한다.
이전에 초기에는 프로 마이크로 보드가 거의 3.3V 8MHz가 대세였지만 현재는 별도의 말이 없다면 5V 16MHz가 거의 대부분이다.
그래도 한 번쯤은 확인해야 한다.
참고로 잘못된 프로세서를 선택하면 어떨까.
이 포스트에선 바로 그 부분에 대해 이야기를 하려고 한다.
그럼 결론부터 말하자면 잘못된 프로세서를 선택하고 업로드 버튼을 누르면 잠시 후 그림과 같은 경고가 뜨는 것을 볼 수 있다.

잘못된 프로세서를 선택하면 USB 장치 인식 실패 문구가 나타나고 이후에도 해당 보드를 사용하면 이 문구가 계속 나타나고 보드는 인식이 되지 않는다.
(참고로 프로 마이크로 보드인데 Leonardo 보드로 선택하고 사용하다 보면 동일한 증상이 나타나기도 하는데 이때도 해결방법은 동일하다.)
이와 같은 현상은 아두이노 보드에 설치되어 있는 부트로더(Bootloader) 때문에 발생하는 현상이다.
아두이노 보드는 기본적으로 AVR 기반의 마이크로컨트롤러에 아두이노 IDE의 코딩을 사용할 수 있도록 미리 부트로더라고 하는 코드가 업로드 되어 있다.
그리고 이 부트로더는 해당 보드의 상태가 들어 있는데 지금과 같이 프로세서를 잘못 선택하면 부트로더의 설정과 다른 코드가 들어와서 충돌이 발생하게 된다.
그렇게 되면 위의 그림과 같은 상태가 발생한다.
그래서 애초에 사용을 할 때 잘 확인하고 사용해야 한다.
만약 내가 보드를 샀는데 5V인지 3.3V인지 모르겠다라고 한다면 보드의 모습을 통해 알아볼 수 있다.
먼저 알아 볼 수 있는건 보드의 뒷면을 보면 5V 3.3V라고 적혀 있는 곳이 있는데 만약 3.3V 보드라면 3.3V에 체크 표시가 되어 있다.

이것도 잘 모르겠다라고 한다면 보드의 윗면에 있는 크리스탈을 확안하면 보드가 어떤 전원인지 확인할 수 있다.


그림에 표시된 부분이 크리스탈인데 여기에 16.000이라고 적혀있다면 16MHz 클럭을 사용하고 있고 8.000이라면 8MHz 클럭을 사용한다는 것이다.
일반적인 마이크로컨트롤러에서 8MHz라고 하면 내부 클럭을 사용하는 경우가 많지만 프로 마이크로 보드의 경우 안정성을 위해 외부 클럭을 사용한다고 하니 이것을 통해 확인할 수 있다.
하지만 이미 잘못 사용해서 보드가 인식이 안된 사람들도 있을 것이다.
그런 경우에는 두 가지 해결책이 있다.
하나는 약간 마이너한 방법이고 두 번째는 권장하는 방식이다.
마이너한 방법은 아주 간단하다.
보드에 올라간 코드를 리셋하는 것이다.
그런데 이미 보드가 인식이 안되는데 무슨 리셋이야라고 생각할 수 있다.
이 방법은 보드가 정상동작하는 잠깐의 틈을 이용하는 방법이다.
아마 먹통이 된 보드를 가지고 있다면 그 보드를 컴퓨터에 연결했을 때 바로 하드웨어 연결실패 문구가 나타나는 것은 아닐 것이다.
조금의 시간이 흐른 뒤에 연결 실패가 나타나게 된다.
물론 그 시간이 8초 정도로 짧은 시간이다.
하지만 우리는 이 짧은 시간을 이용하면 보드에 잘못 올린 코드를 없앨 수 있다.
방법은 이렇다.
먼저 아두이노에서 정상적인 프로세서를 선택하고 업로드 버튼을 누른다.
그러면 컴파일을 시작하게 되는데 이때 컴파일이 끝나는 것을 기다렸다가 컴파일 중이라는 문구가 업로딩 이라고 변경되는 순간 보드를 리셋시키는 것이다.
그럼 보드가 처음부터 다시 시작하면서 처음 정상 동작하는 그 짧은 틈에 이 빈 코드가 업로드 되게 된다.
그러면 잘못 설정된 코드가 지워지면서 보드가 정상으로 돌아온다.
이 절차를 순서대로 진행하면 되는데 한 가지 문제가 있다.
바로 프로 마이크로 보드에는 우노 보드와 달리 리셋 버튼이 없는 것이다.
그래서 이 리셋을 하는 동작을 만들어야 하는데 그 방법은 어렵지 않다.
기존의 우노 보드도 마찬가지로 우리가 수동으로 리셋 시키는 방법이 잇다.
그 방법은 보드의 마이크로컨트롤러의 RST 핀에 GND를 연결해주는 것이다.
여기서 중요한 점은 계속 연결하는 것이 아닌 짧기 한 번만 GND를 넣어 주는 것이다.
그럼 마이크로컨트롤러는 리셋 신호로 받아들이고 보드를 리셋하게 된다.
지금도 마찬가지다.
업로드 버튼을 누르고 업로딩 문구가 나오는 순간 RST 핀과 GND핀을 한 번 연결했다가 때주면 된다.

아마 처음한다면 여러번 실패할지도 모른다.
생각보다 저 타이밍을 맞추기 좀 까다롭다.
그래서 마이너한 방법이다.
(사실 이 방법은 아두이노 공식 포럼에서 많은 연구 끝에 나타난 방법이다.)
글이 좀 어렵다면 아래 영상을 참고하자.
이번에는 권장하는 방법이다.
(5V 16MHz 보드에 해당하는 방법이다. 그리고 AVR 코딩을 해보지 않았다면 앞의 방법을 이용하자.)
권장하는 방법은 프로 마이크로 보드에 부트로더를 다시 올리는 것이다.
그렇기 때문에 몇가지 준비물이 필요하다.
일단 이전에는 Atmel Studio였고 지금은 Microchip Studio가 된 프로그램이 필요하다.
그리고 부트로더를 올리기 위한 ISP 장치도 하나 있어야한다.
프로그램과 ISP 장치가 준비됬다면 프로그램을 켜보자.
만약 프로그램 설치가 필요하다면 아래 링크를 참고하자.
( https://polnalab.com/atmega/basic-atmega/506/ )

프로그램을 켰다면 ‘Tools’에서 ‘Device Programming’ 메뉴를 선택해보자.

새로 나타난 창에서 ‘Device’에서 ATmega32U4를 선택하자.
마이크로컨트롤러를 선택했다면 옆에 ‘Apply’ 버튼을 누르고 그 옆쪽에 ‘Read’ 버튼을 눌러보자.
만약 보드가 정상적으로 ISP 장치로 연결되어 있다면 그림과 달리 Read 버튼이 활성화 되어 있고 버튼을 누르면 밑에 쪽에 상태가 나타나게 된다.
이렇게 했다면 이번엔 왼쪽 메뉴에서 ‘Memories’ 버튼을 선택해보자.

여기에선 마이크로컨트롤러에 코드를 올릴 수 있는 곳인데 아두이노 코딩과는 좀 다른 코드를 올리게 된다.
간단히 지금은 부트로더를 올릴 수 있는 곳이라고 생각하자.
아무튼 먼저 Erase now를 선택해서 보드 안에 있는 코드를 모두 지워준다.
코드를 지웠다면 이번에는 새로운 코드를 설치해야 할 것이다.
그래서 먼저 마이크로컨트롤러에 현재 설정되어 있는 보드 정보를 입력하기 위해 왼쪽에 ‘Fuses’ 메뉴로 가보자.

여기선 이제 우리가 원하는 메뉴를 선택해야 하는데 굳이 체크 박스를 하나하나 누를 필요 없이 그림에 표시된 부분에 해당 값을 입력하면 위쪽 메뉴가 자동으로 선택되게 된다.
그래서 여기 들어갈 값을 알아야 하는데 그 값은 아두이노가 설치된 폴더에 정의되어 있다.
(Arduino\hardware\arduino\avr 경로의 boards 파일)

boards.txt 파일을 열어보면 다양한 보드의 설정 방법들이 나오는데 우리는 여기서 Leonardo 보드를 보면 된다.
지금 그림에 표시된 부분이다.
여기에 보면 low_fuses, high_fuses, extended_fuses가 있는데 여기 적혀 있는 값을 창에 기입하면 된다.

이렇게 설정해따면 ‘Program’ 버튼을 클릭해보자.
그럼 설정이 완료될 것이다.
다음으로 다시 ‘Memories’ 탭으로 가보자.

이번에는 부트로더 파일을 올려볼 것인데 그림에 표시된 … 버튼을 선택해보자.
여기서 부트로더 파일을 선택해줘야 하는데 부트로더 파일은 아두이노가 설치된 폴더 안에 있다.
경로는 아두이노 폴더에서 hardware, arduino, avr, bootloader, caterina 순으로 들어가보자.
그럼 안에 다양한 파일이 있는데 그 중에서 Caterina-Leonardo.hex 파일을 선택해보자.
이때 hex 확장자는 보통 기계어가 저장된 파일이다.

비슷한 파일이 많으니 주의하면서 선택하자.
이렇게 선택했으면 이제 ‘Program’ 버튼을 눌러보자.

다음으론 왼쪽에서 Lock bits를 선택해보자.

여기도 마찬가지로 위쪽에 값을 선택해야 하는데 이부분도 우리가 선택하기 어려우니깐 아까 보았던 board 파일에 있는 LOCKBIT 값을 넣으면 된다.
값을 넣었다면 ‘Program’ 버튼을 선택하자.
자, 이렇게 하면 프로 마이크로 보드에 새로운 부트로더가 설치 되면서 보드를 다시 연결해보면 정상적으로 동작하는 것을 볼 수 있다.
그런데 아마 여기까지 보면 알것인데 정석적인 방법이 훨씬 어렵다.
AVR 코딩을 해본적이 없다면 생소하기도 하고 필요한 장비도 있고 좀 힘들 것이다.
그래서 왠만하면 아두이노 포럼에서 검증된 마이너한 방법을 사용하는 것을 추천한다.
