MCU/IoT 실험 기말 과제 외부 인터럽트를 이용한 피아노 설계 (1) 설계목적 이 프로젝트의 목적은 AVR 마이크로컨트롤러를 사용하여 주파수 설정을 통한 음계를 재생 하고, 옥타브 변경 기능을 포함하는 간단한 멜로디 재생기를 피아노와 비슷한 형태로 만드는 것이다. 사용자가 스위치를 통해 다양한 음계를 선택하고 옥타브를 변경할 수 있으며, 그에 따라 LED가 시각적인 피드백을 제공한다. 이 프로젝트를 통해 마이크로컨트롤러의 입출력 제어와 타이머 및 인터럽트 활용에 대한 이해를 높이고, 동작 및 기능을 이해한다. (2) 실험에 사용한 도구 그림입니다. 원본 그림의 이름: 다운로드.jpg 원본 그림의 크기: 가로 500pixel, 세로 298pixel 그림입니다. 원본 그림의 이름: CLP00000d28947f.bmp 원본 그림의 크기: 가로 543pixel, 세로 272pixel 그림입니다. 원본 그림의 이름: CLP00000d280001.bmp 원본 그림의 크기: 가로 493pixel, 세로 286pixel 개발 보드(AB-M128PRO-A) 스피커(부저) 외부 인터럽트(AM-TS8) (3) 기능 및 설명 1. 음계 재생 기능 도, 레, 미, 파, 솔, 라, 시, 높은 도의 8가지 음계를 외부 인터럽트의 스위치를 통해 재생 할 수 있다. 인터럽트의 각 스위치는 PORTD와 케이블을 통해 연결되어있고, 해당 스위치 를 누르면 지정된 주파수의 음을 출력한다. 2. 옥타브 변경 기능 PG3 스위치를 통해 옥타브를 변경할 수 있다. 초기설정 옥타브는 3옥타브이며 스위치를 누를 때 마다 4옥타브, 5옥타브로 순차적으로 변 경된다. 5옥타브 이후에는 다시 3옥타브로 돌아온다. 3. LED 상태 표시 기능 PG2 스위치를 누르면 현재 설정된 옥타브의 상태에 따라 LED(PG0, PG1)가 점등된다. ㆍ3옥타브: 모든 LED가 꺼짐. ㆍ4옥타브: PG0 LED는 켜지고, PG1 LED는 꺼짐. ㆍ5옥타브: 모든 LED가 켜짐. 또한 외부 인터럽트를 통한 입력이 발생하면, 옥타브의 상태와 무관하게 모든 LED(PG0,PG1)가 점등된다. 이를 통해 스피커를 통한 소리로서의 피드백 뿐 아니라 시각적 인 피드백도 확인할 수 있다. (4) 코드 분석 #define F_CPU 16000000UL // CPU 주파수 설정 (16MHz) #include // AVR 입출력 정의 헤더 파일 포함 #include // AVR 인터럽트 정의 헤더 파일 포함 #include // 딜레이 함수 사용을 위한 헤더 파일 포함 // 음계 주파수 정의 #define C1 131 // 도 (기본 주파수: 131Hz) #define D1 147 // 레 (기본 주파수: 147Hz) #define E1 165 // 미 (기본 주파수: 165Hz) #define F1 175 // 파 (기본 주파수: 175Hz) #define G1 196 // 솔 (기본 주파수: 196Hz) #define A1 220 // 라 (기본 주파수: 220Hz) #define B1 247 // 시 (기본 주파수: 247Hz) #define C2 ( C1 * 2) // 높은 도 (기본 도(131Hz) 주파수의 2배) volatile int current_frequency = 0; // 현재 재생 주파수 volatile int current_octave = 3; // 현재 옥타브 (3옥타브부터 시작) // 특정 주파수로 음계 설정 void play_tone ( int frequency ) { if ( frequency == 0) { // 무음 처리 TCCR1B &= ~(1