티스토리 뷰

프로젝트/vs1003

Sine Wave 생성

Just4Fun 2017. 6. 19. 22:09

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.zip


'프로젝트 > 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함