임베디드 개발을 하기 위해서 하드웨어 보드를 간단하게 만들 수 있는 방법이 많다.
대표적으로 아두이노, 라즈베리파이 등 교육용 개발보드를 빵판이랑 연결해서 만들 수 있다.
이렇게 교육용 보드로 쉽게 원하는 작업을 만들 수는 있지만
제품을 양산하기 위해서는 프로젝트에 맞는 칩을 선정하고 보드를 직접 제작을 해야한다.
pcb설계를 하면 반드시 테스트를 거치고 양산을 해야 한다.
따라서 제품을 만들기까지 개발과정은 다음과 같다.
1. pcb설계 후 테스트보드에 납땜하기
연구보안상의 이유로 보드사진은 모자이크처리를 하였다.
간략한 목표 동작은 Atmega8 칩 위에 적외선 센서를 연결하여 리모컨으로 수신을 받을 수 있도록 구현시켜야 한다.
이번 프로젝트에서는 타이머 인터럽트(카운터), 외부인터럽트(적외선 신호 수신)를 사용한다.
따라서 외부인터럽트는 PD2(INT0)에 연결을 한다.
(납은 240도에서 녹기 시작하며 솔더링 페이스트를 묻히면서 작업하면 보다 깔끔하게 납땜을 할 수 있다.)
적외선 센서와 연결방법은 다음과같은 표로 나타낼 수 있다.
적외선센서 | MCU |
Vcc | Vcc |
GND | GND |
OUT | PD2(INT0) |
2. 테스트 하기
1) 멀티미터 사용
납땜을 했으면 제대로 동작을 하는지 테스트를 해야 한다.
제대로 납땜이 되었는지 멀티미터로 단선여부를 확인한다.
서로 연결된선끼리 측정을 해보고 단선이 되어있다면 무음이 나고 연결되어있으면 '삐~'소리가 난다.
2) 파워서플라이 사용
정상적으로 쇼트된것도 없는게 확인되면 전원인가를 해야한다.
파워서플라이와 보드점퍼선에 전원(5V)과 접지(gnd)를 연결 후 5V를 인가해준다.
3) 오실로스코프 사용
파워서플라이로 전원인가를 한 후 정상적으로 전원인가가 되고있는지 직접 오실로스코프로 각 단자를 찍어보면서 3.3V혹은 5V 변화를 확인한다.
3. 프로그램 업로드 & 디버깅
오실로스코프로 무사히 쇼트된것 없이 전원을 관찰했다면 마지막으로 프로그램을 업로드 하면 된다.
그러나 업로드를 하기 위해 다시 점퍼선을 연결해야 하며 전원선도 따로 연결해줘야 한다.
왼쪽 아래 케이플은 안쓰는 usb케이블을 이용해서 전원포트를 만들었고
오른쪽 단자는 프로그램 업로드 및 디버깅을 위한 포트를 만들었다.
이번 프로젝트는 pickit4를 이용해서 업로드를 하며 mplab을 설치후 펌웨어 업데이트를 해야 인식을 할 수 있다.
디버깅 포트 구성은 다음과 같으며 avr모드로 진행하기 때문 6개의 선만 이용하고 이에 맞게 납땜을 한다.
최종 보드 완성
이로써 개발하기위한 테스트 보드를 만들었다.
적외선(IR)센서까지 연결하면 최종개발환경이 다음과 같은 모습을 보인다.
동작여부 먼저 확인하기 위해서 간단하게 led를 토글시키는 코드를 작성해 보았다.
기본적인 동작을 확인하기때문에 타이머는 사용하지 않는다.
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
int main(void){
DDRB = 0x80; //7번비트 활성화
while(1){
PORTB = (1<<PB7); //7번비트 on
_delay_ms(100);
PORTB = (0<<PB7); //7번비트 off
_delay_ms(100);
}
}
컴파일 후 Tools - Device Programming - Apply - Memories - Program 을 통해 업로드를 진행할 수 있다.
프로그램 업로드를 한 후 PB7과 연결된 포트에 오실로스코프에 찍어보면 다음과 같은 파형을 관측 할 수 있다.
다음시간에는 적외선 리모컨을 통해 수신된 신호를 오실로스코프로 파형을 관찰 후 해당 신호를 해킹하여 원하는 동작을 만들어보도록 하자.
참고자료
ATMEGA8 Datasheet(PDF) - ATMEL Corporation (alldatasheet.com)
[pickit4 user gide]
MPLAB PICkit 4 In-Circuit Debugger User's Guide (microchip.com)
'AVR(Microchip Studio)' 카테고리의 다른 글
[AVR] Atmega328P 외부 인터럽트 (0) | 2022.01.12 |
---|---|
[AVR] Atmega328P UART통신 & 헤더파일 나누기(putty) (0) | 2021.12.29 |
[AVR] 아두이노를 이용한 AVR코딩 & 버튼 채터링(Microchip Studio) (0) | 2021.12.25 |
[AVR] Atmel Studio7 레지스터 제어, Simulator 디버깅 (0) | 2021.12.23 |
[µ-Processor] 내부구조(ALU) (1) | 2021.07.20 |