티스토리 뷰
VS1003 문서를 보면 몇가지 자체적으로 시험을 해 볼수 있는 기능을 제공하는것을 알 수 있다.
이번 글에서는 그중에서 Sine파를 생성 시켜 보는 방법에 대해서 설명하도록 하겠다.
테스트 모드로 전환하기 위해서 SCI_MODE 레지스터에 있는 SM_TESTS비트를 1로 만든다. 이 상태에서 SDI 버스로 특정 데이터를 내 보내면 미리 설정된 시험 동작을 수행하게 된다.
Sine파를 생성하기 위한 데이터는 0x53 0xEF 0x6E n 0 0 0 0 이다. 여기에서 n은 다음과 같은 표를 참조하여 설정하면 된다.
n 바이트 값의 상위 3비트에 해당되는 FsIdx값에 따라 Fs값이 결정된다. 이 값에 n 값의 하위 5비트 값을 곱한다음 128로 나누면 그 값에 해당되는 주파수를 가지는 sine 파가 발생하게 된다.
즉, F = Fs * S / 128 로 표현된다.
VS1003에는 자체적으로 음량을 설정할 수 있는 SCI_VOL 레지스터가 있는데, 초기값으로 0을 가지며 최대 음량에 해당된다. 이 레지스터에 값을 써주면 해당 값에 -0.5dB를 곱한 값만큼 음량이 줄어 들게 된다. 볼륨은 좌, 우 각각 설정할 수 있으므로 원하는 음량으로 설정할 수 있다. 참고로 이 글에서는 좌,우 같은 값으로 설정하게 되어 있다.
음량 설정을 위한 코드는 위와 같이 매우 간단하다. 너무 큰 소리가 나지 않도록 적당한 초기값을 넣어서 시험 한 후, 알맞은 음량이 될 때까지 조금씩 음량을 크게 하면 좋을것 같다.
Sine 파를 생성하기 위한 테스트 데이터는 SDI 버스를 통해서 내 보내야 하므로 이를 위한 코드를 만들어야 한다.
DREQ 신호가 high로 되어 있는지 확인 한 후 DCS를 low로 만들어 SDI 버스를 enable 시킨다. SPI를 통해서 데이터를 내 보낸 후 다시 DCS를 high 만들어 SDI 버스를 disable 시켜주는 간단한 코드이다.
vs1003_gen_sinewave()를 이용하여 원하는 주파수의 sine파를 생성 시킬 수 있게 된다.
시험을 위한 코드를 위와 같이 만들어서 스피커에서 원하는 주파수의 소리가 나오는지 확인해 본다.
12번 줄에서 볼륨 설정을 위해서 20을 주었으므로 -10.0dB의 음량으로 설정될 것이고, vs1003_gen_sinewave() 함수 인자로 0xE3을 사용하였으므로, 이진수로 변환하면 11100011이 된다. 따라서 FsIdx가 7이 되므로 Fs값은 12000Hz가 되고, S는 3이 된다.
최종 주파수를 계산해 보면 12000 * 3 / 128 = 281.25Hz가 된다.
실제로 프로그램을 보드에서 실행 시켜, 스피커로 원하는 소리가 나오는지 확인해 본다.
스마트폰 앱을 이용하여 측정한 결과 279Hz가 나왔기 때문에 약간의 오차가 났지만, 제대로 동작되었다고 판단할 수 있겠다.
그러나 (12000 / 128) * 3 = 279가 나오는걸로 봐서는 제대로 된 결과값을 얻은것으로 보인다.
'프로젝트 > vs1003' 카테고리의 다른 글
vs1003 sample 데이타 재생 (0) | 2017.06.24 |
---|---|
Sine Wave 주파수 변경 (0) | 2017.06.24 |
Control register Read/Write (0) | 2017.06.18 |
VS1003 MP3 Codec (0) | 2017.06.18 |