티스토리 뷰
먼저 ATmega2560 칩이 있는 보드를 이용하기 위한 초기 준비를 해보도록 합시다.
동작을 위해서는 먼저 보드의 전원을 연결해주어야 합니다.
왼쪽 노란 동그라미 부분에다가 전원을 연결해 줍니다.
보드와 컴퓨터를 연결해서 해야하기 때문에 두 장치를 연결해주어야 하는데, 그러기 위해서는 ISP 방식을 이용합니다.
저기 노란 네모처럼 'ISP'가 써져있는 ISP 방식 업로드 장치를 사용해줍니다.
ISP 방식 업로드 장치와 보드를 연결해주기 위해서 사진에서 노랗게 표시되어 있는 부분에 꽂아줍니다.
그럼 이제 보드 초기 준비는 끝~
① 시리얼 방식을 이용해 LED ON/OFF 시키기
동영상 같이 LED가 켜졌다 꺼졌다 반복하는 동작을 실행해봅시다 (੭•̀ᴗ•̀)੭ !
먼저 동작시키기 위해서는 ISP 포트의 번호가 몇 번으로 연결되었는지를 확인해주어야 합니다.
확인해주기 위해서 [Window] + 'X' 를 눌러 장치 관리자로 들어가 확인해줍니다.
이제 하드웨어 설정은 끝-
확인했으면! 이제 Microchip Studio를 이용해서 동작을 코딩해보도록 하겠습니다.
+) Microchip Studio 설치 방법은 저번 포스팅을 참고해주세요 ◡̈⋆*
2021.08.02 - [마이크로컨트롤러] - Microchip Studio 다운로드 방법
Microchip Studio 다운로드 방법
Microchip Studio 를 다운로드 받아보도록 하겠습니다~ 해당 프로그램을 설치하기 위해서는 1) 아래 링크를 눌러 들어가거나 https://www.microchip.com/en-us/development-tools-tools-and-software/microchip-s..
sroongzi.tistory.com
Microchip Studio 를 실행해서 먼저 새로운 프로젝트를 만들어줍니다.
조금 있다 할 동작에서 파일의 주소에 한글이 포함되어있으면 오류가 발생하기 때문에 파일 주소는 영어로 해줍니다.
(C를 사용하시면 C 파일을 , C++을 사용하시면 C++을 선택해주시면 됩니다!)
프로젝트 파일을 만들고 나면 다음과 같은 선택 창이 뜨게 됩니다.
여기에서는 사용하는 디바이스를 선택해주도록 합니다.
저는 ATmega2560을 사용하기 때문에 위와 같이 선택해주었습니다.
(스크롤로 찾아도 되고 저처럼 검색창을 이용하셔도 됩니다.)
이제 프로젝트 생성 끝!
이제 LED ON/OFF를 위한 동작 코드를 작성해주도록 합시다!
AVR (LED)
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 0x80;
/* Replace with your application code */
while (1)
{
PORTB &= ~0x80;
_delay_ms(500);
PORTB |= 0x80;
_delay_ms(500);
}
return 0;
}
참고 자료 : 따라 하면서 배우는 마이크로컨트롤러(ATmega2560으로 프로그래밍하기), 허경용 저, 한빛 아카데미, 2019
코드를 다 작성하고 나서 솔루션 빌드를 실행해주도록 합니다.
[Build] -> [Build Solution] (F7)
코드를 다 작성하고 나서는 이제 동작시킬 디바이스와 연결을 해주어야 합니다.
[Tools] -> [Add target] 메뉴창을 들어가면 오른쪽과 같은 창이 뜨게 됩니다.
Select tool 은 'STK500'을 선택해주고 나서 아까 장치 관리자에서 확인한 포트를 선택해주면 됩니다.
저는 'COM5'이었기 때문에 COM5를 선택해주었습니다.
자 이제 연결은 완료되었으니까 동작을 실행해주도록 합시다.
[Tools] -> [Device Programming] 을 눌러줍니다.
(혹은 Tools 에 들어갈 필요 없이 번개 그림 버튼을 눌러주셔도 됩니다⚡)
그러면 이런 창이 뜨는 것을 확인할 수 있습니다.
먼저 '1' 이 쓰여있는 네모 박스 부분을 설정해보도록 합시다.
Tool을 눌러서 아까 추가해주었던 target 즉, 포트 번호를 선택해주면 됩니다. (저는 STK500 COM5 선택했습니다!)
그리고 디바이스는 본인이 연결해주었던, 그래서 저는 ATmega2560을 선택해주었습니다.
그리고 초반에 연결해줬었던~ ISP로 설정을 해준 다음 'Apply'를 클릭해주고 나서
Device signature의 Read 버튼을 눌러주면 됩니다.
(여기서 가끔 디바이스 못 찾고 로딩이 오래되고 그러기도 하는데 그럴 때는 포트를 한 번씩 뽑고 다시 연결해주면...)
마지막으로!
왼쪽 네모 박스 'Memories'를 선택한 다음!
Program 버튼을 눌러주게 되면 동작이 실행됨을 확인할 수 있습니다.
(이 부분이 아까 말한 주소의 한글이 있으면 오류가 난다는 그런 부분입니당...)
② 문자열 'Hello World' 출력해보기
마이크로컨트롤러 프로그래밍에서는 컴퓨터 화면으로 결과를 확인하는 방법을 이용할 수 있습니다.
해당 과정을 위해서는 앞선 포스팅에서 봤던 UART 시리얼 통신을 이용해야 합니다.
따라서 이번에는 ISP 뿐 아니라 UART0번 포트도 연결해줍니다.
시리얼 통신을 위해서 USB2SERIAL 을 이용해보겠습니다.
UART0번 연결을 하기로 했으니까 왼쪽 이미지에서 노란 네모 부분과 연결을 해주도록 하겠습니다.
여기서 주의할 점⭐❗
왼쪽 하얀 부분과 오른쪽 USB의 선 연결은 다음과 같이 연결해주어야 합니다.
VCC- VCC
GND - GND
TX - RX
RX - TX
문자열 출력을 확인해보기 위해서 Putty 프로그램을 이용해보겠습니다.
그전에 앞서 했던 방법처럼 장치 관리자를 이용해서 연결한 포트 번호들을 확인해주도록 합니다.
ISP는 COM5으로, UART0 번은 COM6로 연결되었음을 확인할 수 있습니다.
이제 Putty를 실행해주도록 해봅시다!
Putty에서는 ISP가 아니라 UART0번을 연결해주어야 합니다.
먼저 Connection type에서 Serial을 선택해줍니다.
Serial line 은 UART0번이 연결된 COM6를 입력해주고, Speed는 곧 작성할 코드에서 지정한 9600을 입력해줍니다.
그리고 Open 해주면 Putty는 준비 완료 - ☆
이제 코드를 작성해보도록 합시다!
문자열 출력을 위해서는 헤더 파일 1개, UART 시리얼 통신을 위한 코드 1개, 화면 출력을 위한 main 코드 1개 총 3개가 필요합니다.
헤더 파일을 만들기 위해서는 아까 새로운 프로젝트를 만들던 것처럼 하는 것이 아니라
Solution Explorer에서 사용하는 프로젝트 명에 마우스 우측 버튼을 눌러 Add -> New item을 선택해서 만들어줍니다.
UART0.h
#ifndef _UART0_LIBRARY_
#define _UART0_LIBRARY_
#include <avr/io.h>
#include <stdlib.h>
void UART0_init();
uint8_t UART0_read();
void UART0_write(uint8_t data);
void UART0_print(char *str);
/*
정수를 문자열로 변환하는 부분 (지금은 사용 X)
void UART0_print(int no, int radix = 10);
void UART0_print(long no, int radix = 10);
*/
#endif
UART0.cpp
//UART 시리얼 통신을 위한 코드
#include "UART0.h"
void UART0_init(void){
UBRR0H = 0x00;
UBRR0L = 207;
UCSR0A |= _BV(U2X0);
UCSR0C |= 0x06;
UCSR0B |= _BV(RXEN0);
UCSR0B |= _BV(TXEN0);
}
void UART0_write(uint8_t data){
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
uint8_t UART0_read(void){
while(!(UCSR0A & (1 << RXC0)));
return UDR0;
}
void UART0_print(char *str){
while(*str)
UART0_write(*str++);
}
/*
정수를 문자열로 변환하는 부분 (지금은 사용 X)
void UART0_print(int no, int radix=10){
char buffer[sizeof(int) * 8 + 1];
itoa(no, buffer, radix);
UART0_print(buffer);
}
void UART0_print(long no, int radix=10){
char buffer[sizeof(int) * 8 + 1];
itoa(no, buffer, radix);
UART0_print(buffer);
}*/
main.cpp
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
#include "UART0.h"
int main(void){
UART0_init();
UART0_print("Hello world");
UART0_write('\n');
while(1){
//UART0_write(UART0_read());
}
return 0;
}
참고 자료 : 따라 하면서 배우는 마이크로컨트롤러(ATmega2560으로 프로그래밍하기), 허경용 저, 한빛 아카데미, 2019
코드를 다 작성하고 나서 솔루션 빌드를 실행해주도록 합니다. [Build] -> [Build Solution] (F7)
그리고나서 아까 1번 동작과 같은 방법으로 해주게되면 Putty에서 문자열이 출력됨을 확인 할 수 있습니다.
![](https://blog.kakaocdn.net/dn/cMlEKM/btrbgowmRxd/DxwufmXY7X8razk7ydLXw1/img.png)
![](https://blog.kakaocdn.net/dn/3nbIP/btrbbTDDItR/I08FfBBEsaKPFCTcQGwQQ1/img.png)
코드를 다 작성하고 나서는 이제 동작시킬 디바이스와 연결을 해주어야 합니다.
[Tools] -> [Add target] 메뉴창을 들어가면 오른쪽과 같은 창이 뜨게 됩니다.
Select tool 은 'STK500'을 선택해주고 나서 아까 장치 관리자에서 확인한 포트를 선택해주면 됩니다.
저는 'COM5'이었기 때문에 COM5를 선택해주었습니다.
![](https://blog.kakaocdn.net/dn/6Vv02/btrbbSkqH0X/kUh0hxrQoM9fcHfPhcqEL1/img.png)
자 이제 연결은 완료되었으니까 동작을 실행해주도록 합시다.
[Tools] -> [Device Programming] 을 눌러줍니다.
(혹은 Tools 에 들어갈 필요 없이 번개 그림 버튼을 눌러주셔도 됩니다⚡)
![](https://blog.kakaocdn.net/dn/5Gbct/btrbkWAO3bj/4Hh9K200uTXhOrkth664O0/img.png)
그러면 이런 창이 뜨는 것을 확인할 수 있습니다.
먼저 '1' 이 쓰여있는 네모 박스 부분을 설정해보도록 합시다.
Tool을 눌러서 아까 추가해주었던 target 즉, 포트 번호를 선택해주면 됩니다. (저는 STK500 COM5 선택했습니다!)
그리고 디바이스는 본인이 연결해주었던, 그래서 저는 ATmega2560을 선택해주었습니다.
그리고 초반에 연결해줬었던~ ISP로 설정을 해준 다음 'Apply'를 클릭해주고 나서
Device signature의 Read 버튼을 눌러주면 됩니다.
(여기서 가끔 디바이스 못 찾고 로딩이 오래되고 그러기도 하는데 그럴 때는 포트를 한 번씩 뽑고 다시 연결해주면...)
마지막으로!
왼쪽 네모 박스 'Memories'를 선택한 다음!
Program 버튼을 눌러주게 되면 동작이 실행됨을 확인할 수 있습니다.
(이 부분이 아까 말한 주소의 한글이 있으면 오류가 난다는 그런 부분입니당...)
'마이크로컨트롤러' 카테고리의 다른 글
[시리얼 통신] UART (0) | 2021.08.02 |
---|---|
Microchip Studio 다운로드 방법 (0) | 2021.08.02 |
마이크로컨트롤러에 대해 알아보자 ˙ᵕ˙ (0) | 2021.07.26 |