Edit on GitHub

개요

임베디드 C는 사용자가 직접 제어기 펌웨어를 개발할 수 있는 솔루션입니다. 임베디드 C는 다음과 같은 특징이 있습니다.

참고: 임베디드 C를 사용하려면 하드웨어 및 소프트웨어에 대한 전문적인 지식이 필요합니다. 초보자의 경우 전문 지식을 별도로 습득한 후, 사용하는 것을 권장합니다.

참고: 임베디드 C를 사용하게 되면 제어기 펌웨어가 바뀌어서 로보플러스를 사용할 수 없게됩니다. 다시 로보플러스를 사용하기 위해서는 로보플러스 매니저로 펌웨어 복구를 시도해야 합니다.

CM-510, CM-700

폴더 구조

시작하기

임베디드 C를 시작하기 위한 방법을 설명합니다.

WinAVR 설치

WinAVR은 AVR 프로그래밍을 위해서 필요한 프로그램입니다.
WinAVR은 다음 사이트에서 다운로드 받을 수 있으며, 누구나 무료로 사용 가능합니다.
http://winavr.sourceforge.net/

설치 과정은 다음과 같습니다.

  1. 설치 언어를 설정합니다.

  2. 설치 초기 화면입니다.

  3. 라이센스 관련 내용입니다. 동의 하여야 설치를 진행할 수 있습니다.

  4. 설치 폴더를 설정합니다. 사용자가 원하는 곳으로 설정하고 Next버튼을 누릅니다.

  5. 설치할 프로그램 및 환경 옵션을 선택합니다. 특별한 사유가 없다면 모두 설치하는 것이 좋습니다.

  6. WinAVR 설치를 시작합니다.

  7. WinAVR설치가 완료되었습니다.

Atmel Studio 설치

Atmel Studio는 AVR 프로그래밍을 쉽게 할 수 있도록 여러가지 매크로와 라이브러리 및 통합 환경을 제공합니다.
Atmel Studio는 다음 사이트에서 다운로드 받을 수 있으며, 누구나 무료로 사용 가능합니다.
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

Atmel Studio의 설치 과정은 다음과 같습니다.

  1. Atmel Studio설치 시작화면입니다.

  2. 라이센스 관련 내용입니다. 동의 하여야 설치를 진행할 수 있습니다.

  3. 설치 폴더를 설정합니다. 사용자가 원하는 곳으로 설정하고 Next버튼을 누릅니다.

  4. Next를 클릭하여 설치를 진행합니다.

  5. Atmel Studio 설치를 시작합니다.

  6. Atmel Studio 설치가 완료되었습니다.

환경 설정

임베디드 C를 사용하려면 설치한 프로그램의 기본적인 환경을 설정해야 합니다.
WinAVR을 설치하고 Atmel Studio를 설치하면 특별한 경우가 아닌 한 Atmel Studio만을 이용하여 프로그래밍을 할 수 있습니다.
일반적으로 PC와 제어기가 시리얼 케이블로 연결되어 있으면 기본적인 예제 실행이 가능하며, 예제에 따라 다이나믹셀이 필요하거나, 그 외 외부 장치가 요구될 때도 있습니다.

  1. Debug - Options and Settings 를 클릭합니다.

    img

  2. 왼쪽 메뉴에서 Toolchain을 선택합니다. Atmel AVR 8-bit (C language)를 선택합니다. Add Flavour을 클릭합니다.

    img

  3. […]을 클릭하여 20100110버전의 WinAVR이 설치 되어 있는 폴더의 bin폴더를 선택하여 줍니다. 예) c:WinAVR-20100110bin

    img

  4. Win AVR 을 선택한후 OK 버튼을 누릅니다.

    img

  5. File > Open > Project/Solution 을 클릭합니다.

    img

  6. 예제 파일을 선택하고 열기를 클릭합니다.

    img

  7. 오른쪽 Solution Explorer에 보이는 c파일을 더블 클릭하여 선택합니다. Project > Properties를 클릭 합니다.
    Solution Explorer가 보이지 않는다면 View 에서 Solution Explorer를 선택해주세요.

    img

  8. 왼쪽 메뉴에서 Toolchain을 클릭합니다. Directories를 클릭합니다. 초록색 +모양의 Add Item을 클릭합니다.

    img

  9. Include 폴더를 선택하여 줍니다. 예) c:embedded_c(cm700_v1.01)include

    img

  10. Include 폴더가 추가된 것을 확인 할 수 있습니다.

    img

  11. 오른쪽 Solution Explorer에서 프로젝트 파일을 오른쪽 클릭하여 Add Library를 클릭합니다.

    img

  12. Browse Libraries를 클릭합니다. 오른쪽 하단에 [Browse]를 클릭합니다.

    img

  13. 라이브러리를 선택 하기 위해 예제에 포함되어 있는 lib 폴더를 선택하고 [열기]를 클릭합니다.

    img

  14. 3개의 라이브러리를 추가하기 위해 드래그하여 모두 선택하고 오른쪽 아래 [열기]를 클릭합니다.

    img

  15. 3개의 라이브러리가 추가된 것을 확인 할 수 있습니다.

    img

  16. Build -> Rebuild Solution 을 클릭하여 컴파일하고 아래Output창에 Build Succeeded.가 확인되면 모든 작업이 끝나게 됩니다.

    img

로보플러스 복구하기

임베디드 C로 만들어진 결과물은 제어기 펌웨어(hex 파일) 입니다.
이것을 설치하면 기존의 제어기 펌웨어가 지워져서 로보플러스를 사용할 수 없게됩니다.
만약, 로보플러스를 다시 사용하려면 공장 출하시 제어기 펌웨어를 설치해야 합니다.
로보플러스 매니저를 이용하면 공장 출하시 제어기 펌웨어를 쉽게 설치할 수 있습니다.
자세한 사항은 로보플러스 매니저의 [펌웨어 복구하기]를 참조하십시오.

프로그래밍

하드웨어 포트맵

다음은 제어기의 하드웨어 주요 핀 기능을 표현해 놓은 하드웨어 포트맵입니다.
각 포트나 내부 기능은 Atmel Studio에서 제공하는 매크로 함수를 통해 간단히 접근하여 제어할 수 있습니다.

CM-510

img

Port Name Function
PORTF1 ~ PORTF6 ADC
PORTD0 Start Button
PORTD1 MIC.
PORTD2 ~ PORTD3 Tx, Rx
PORTA2 ~ PORTA7 External Output ( 5 Pin Port)
PORTC0 ~ PORTC6 Controller LED ( Status, Power )
PORTB5 Buzzer Control Port
PORTE4 ~ PORTE7 Direction Button (U, D, L, R)
PORTD4 ~ PORTD6 Communication Control Port

CM-510의 외부 포트 핀 구성은 다음과 같습니다. 외부 포트 눈금 표시로 포트 1 ~ 포트 6을 확인할 수 있습니다.

포트와 관련된 자세한 사항은 CM-510 제어기 부분을 참조하십시오.

  1. OUT : 5V 출력 가능
  2. VCC (5V)
  3. ADC : 사용자가 제작한 센서의 아날로그 신호를 읽을 수 있음.
  4. GND
  5. NC : 사용하지 않음

img

CM-700

img

Port Name Function
PORTF1 ~ PORTF6 ADC
PORTD0 Start Button
PORTD1 ~ PORTD2 Tx, Rx
PORTA2 ~ PORTA7 External Output ( 5 Pin Port)
PORTC0 ~ PORTC6 Controller LED ( Status, Power )

CM-700의 외부 포트 핀 구성은 다음과 같습니다. Sub보드의 아래면에 표시된 문자로 포트 1 ~ 포트 6을 확인할 수 있습니다.

포트와 관련된 자세한 사항은 CM-700 제어기 부분을 참조하십시오.

  1. OUT : 5V 출력 가능
  2. VCC (5V)
  3. ADC : 사용자가 제작한 센서의 아날로그 신호를 읽을 수 있음.
  4. GND
  5. NC : 사용하지 않음

img

기본 프로그래밍

Atmel Studio에서 간단한 임베디드 C 예제를 만드는 방법을 설명합니다.

프로젝트 만들기

프로젝트를 만드는 과정은 다음과 같습니다.

  1. File 메뉴에서 New > Project를 선택합니다.

    img

  2. Template은 GCC C Executable Project를 선택하고 Name, Location, Solution name 항목을 설정합니다. 설정이 끝나면 [OK] 버튼을 클릭합니다.

    img

  3. 여러 디바이스 목록 중에서 ATmega2561을 선택합니다.(CM5는 ATmega128 선택) 디바이스를 선택 하였다면 [OK] 버튼을 클릭합니다.

img

코드 작성 및 컴파일하기

다음 예제는 가장 기본적인 PORT I/O 제어에 관한 내용입니다.

  1. 생성된 프로젝트에 다음과 같은 코드를 작성합니다.
  2. Build 메뉴에서 [Build Solution]을 클릭하여 Build 명령을 실행합니다.

    img

  3. 아래 Output 창에 Build succeeded가 나타나면 컴파일이 정상적으로 끝난 경우입니다. 프로젝트 폴더 내의 default 폴더에서 펌웨어 파일인 hex 파일을 찾을 수 있습니다.

    img

hex파일 다운로드 하기

부트로더

부트로더란, 제어기를 사용할 수 있도록 도와주는 프로그램입니다. 부트로더는 사용자가 지울 수 없으며 만약, 이 프로그램이 망가진다면 제어기를 사용할 수 없게됩니다. 부트로더는 공장 출하시 제어기에 설치된 상태로 생산됩니다.

부트로더에서 사용할 수 있는 명령은 ‘help’ 명령으로 확인할 수 있습니다.

img

부트로더 진입/나가기

부트로더 진입

부트로더는 키보드의 ‘#’키(Shift+숫자3키)를 누르고 있는 상태에서 제어기를 켜거나 리셋 스위치를 눌러주면 진입할 수 있습니다.
성공하면 다음과 같이 화면이 나타납니다

img

부트로더 나가기

사용자 작업을 완료하면, GO명령으로 원하는 주소로 점프하거나, 제어기를 리셋하여 부트로더에서 나갈 수 있습니다.

APP/SYS 사용법

APP/SYS 명령으로 프로그램 시작 위치를 설정할 수 있습니다. 프로그램 시작 위치가 설정되면, 제어기의 전원을 켜거나 리셋할 때, 설정된 프로그램 시작위치에서 프로그램이 실행됩니다.

Atmega2561을 사용하는 제어기의 메모리맵은 다음과 같습니다.

img

<a name=”프로그램-설치실행”</a>[프로그램 설치/실행]

제어기 펌웨어를 설치하기 위한 준비 작업은 다음과 같습니다.

준비가 완료되면 다음과 같은 절차로 제어기 펌웨어를 설치할 수 있습니다.

  1. 부트로더에서 L명령(혹은 Load)을 입력합니다.

    img

  2. 로보플러스 터미널의 Files메뉴에서 Transmit file을 선택하고, 준비된 펌웨어(hex 파일)를 선택합니다.

    img

  3. 파일이 전송됩니다. 파일이 전송되는 도중 제어기의 전원이 꺼지거나, 케이블이 빠지지 않도록 주의하십시오.

  4. 파일 전송이 완료되면, GO 명령을 사용하여 프로그램을 실행할 수 있습니다.

    • GO명령만 입력한 경우 0번지에서 프로그램을 실행하게 됩니다.
    • G [Address] 와 같이 G 명령 뒤에 실행 주소(16진수)를 입력하면 그 위치부터 프로그램을 실행합니다.

예제

LED 제어

제어기의 각 LED를 제어할 수 있습니다.

버튼

제어기 버튼 입력을 받을 수 있습니다.

시리얼 통신

PC와 제어기가 시리얼 통신을 할 수 있습니다.

버저

제어기의 버저를 사용할 수 있습니다.

옥타브
/Scale
1 2 3 4 5 6 7 8
C 32.7032 65.4064 130.8128 261.6256 523.2511 1046.502 2093.005 4186.009
C# 34.6478 69.2957 138.5913 277.1826 554.3653 1108.731 2217.461 4434.922
D 36.7081 73.4162 146.8324 293.6648 587.3295 1174.659 2349.318 4698.636
D# 38.8909 77.7817 155.5635 311.1270 622.2540 1244.508 2489.016 4978.032
E 41.2034 82.4069 164.8138 329.6276 659.2551 1318.510 2637.020 5274.041
F 43.6535 87.3071 174.6141 349.2282 698.4565 1396.913 2793.826 5587.652
F# 46.2493 92.4986 184.9972 369.9944 739.9888 1479.978 2959.955 5919.911
G 48.9994 97.9989 195.9977 391.9954 783.9909 1567.982 3135.963 6271.927
G# 51.9130 103.8262 207.6523 415.3047 830.6094 1661.219 3322.438 6644.875
A 55.0000 110.0000 220.0000 440.0000 880.0000 1760.000 3520.000 7040.000
A# 58.2705 116.5409 233.0819 466.1638 932.3275 1864.655 3729.310 7458.620
G 61.7354 123.4708 246.9417 493.8833 987.7666 1975.533 3951.066 7902.133

단위 : Hz

마이크

제어기의 마이크를 사용하여 외부 소리를 감지할 수 있습니다.

적외선 센서

외부포트의 ADC를 사용하는 법을 배웁니다. (본 예제에서는 적외선 센서를 사용하여 설명합니다.)

다이나믹셀 읽기/쓰기

다이나믹셀의 위치를 읽거나 설정할 수 있습니다. (보다 자세한 사항은 Dynamixel SDK를 확인 하세요)

다이나믹셀 동기 제어

여러개의 다이나믹셀을 동기화하여 제어할 수 있습니다. (보다 자세한 사항은 Dynamixel SDK를 확인 하세요)

RC100과 ZIGBee

RC-100을 이용하여 제어기를 동작시킬 수 있습니다. (보다 자세한 사항은 [Zigbee SDK]를 확인 하세요)