3일간 arm project를 진행했다. Music Controller
MP3, 장난감 등에 활용될 수 있는 음악재생 컨트롤러로 주제를 정했다.
기능
- 다이얼 버튼을 통해 음악 변경 및 일시정지
- 음량조절기능
- LCD에 재생 음악, 정지, 음량 등의 정보 표시
cpu가 주변장치와 상호작용하는데는 다음과 같은 방식들이 있다.
프로젝트에서 버튼의 즉각적인 반응을 원하므로 인터럽트 방식을 사용했고, ADC의 데이터가 실시간으로 받으면서 cpu의 리소스를 줄이기 위해 DMA 방식을 선택했다.
버튼을 누르면 음악이 정지되야 하지만 간혹 정상적으로 정지되지 않는 문제가 발생했다. 문제의 원인으로 chattering현상이 있었고, 해결방법으로는 HW적 방법으로 cap을 통해 지연시켜 debouncing하거나, SW적 방법으로는 인터럽트가 발생할 때 두개의 변수를 만들어 각각 인터럽트가 발생하는 시간차이로 구분한다. 이전 시간과 인터럽트 발생시간 차이가 크면 특정 if문을 실행하고, 발생시간 차이가 작은 경우 chattering에 의한 인터럽트라 판단하여 if를 무시하고 넘어간다.
음량조절을 위해 가변저항과 ADC를 이용하였으며 이때 가변저항의 데이터 변화를 계속해서 받아내기 위해 DMA방식을 사용하였다.
프로젝트를 진행하면서 여러 Peripheral의 기능들을 적용해 볼 수 있었으며 특히 코드를 작성할 때 원할한 scan rate을 유지하며 원하는 기능을 수행할 수 있게 만드는 것이 중요하다고 생각되었다.