PCM1792 DAC Board

Compact
PCM1792 DAC Board + (PCM2707C + MSP430G2553)

PCM1792 I2S DAC Board
PCM1792 DAC Board, TL072 DC Divider, OPA2132 OP-Amp.
I2S -> Analog Audio

USB-DAC, PCM1792 I2S Digital Audio & Volume Control

FaderBox 만들기의 USB-DAC 버전 두번째 버전 입니다.
USB DAC FADER VOLUME CONTROL
왼쪽부터 PCM2707C(USB-I2S), PCM1792(I2S DAC), OPA2132 & TL072 (Audio Amp.) 그리고 아래쪽의 빨간 것은 MSP430 Launchpad

PCM2707은 SPI 신호를 통해 볼륨 컨트롤이 가능하지만, VolUp/VolDown 방식으로 동작합니다. 내가 원하는 지점의 볼륨값을 딱! 하고 지정하는게 아니라 지금 보다 한 눈금 위로, 한 눈금 아래로 움직이는 컨트롤입니다. 하이파이쪽에서는 이 방식이 더 세련되어 보일 수 있지만, 프로장비에서 사용하는 페이더로 처럼 동작시키기에는 뭔가 어색한 감이 있는거죠. PCM270x 시리즈 4가지 모두 Volume 컨트롤은 Up/Down 방식을 사용하고 있습니다.

USB DAC FADER VOLUME CONTROL

PCM2706, 2707은 시리즈 중에서 I2S 디지털 시그널을 출력합니다. 그리고 PCM1792는 I2S 시그널을 아날로그 오디오로 바꿔주는 DAC 기능을 합니다. 그리고 PCM1792에는 0.5dB 간격으로 내가 원하는 볼륨으로 딱! 찍어서 값을 지정할 수 있습니다. 예를들면, -10dB 혹은 -14.5dB 이런 식으로 지정한 수치를 그대로 적용할 수 있습니다. 현재 볼륨값을 읽을 수도 있구요. Left/Right 채널 볼륨값을 각각 지정할 수도 있습니다. 그렇다면 Fader 동작과 일치 시키기에도 좋습니다. Fader 위치값에 따라 지정한 볼륨값을 전달하면 되니까요. 그리고 또 이 방식의 장점은 MIDI나 OSC, DMX 같은 신호로 연동하기에도 좋습니다. 지정한 값만큼 볼륨값으로 변환이 되니까, MIDI나 DMX, OSC 같은 신호 프로토콜로 볼륨값을 전달할 수도 있는거죠.

USB DAC FADER VOLUME CONTROL

PCM1792로 신호를 넘기는 것은 SPI 프로토콜인데, 이 프토로콜이 16bit로 구성되어 있어서 MSP430이나 Arduino의 기존 라이브러리로는 전달하기가 안 되었습니다. 그쪽은 8bit SPI 신호로 구성되어 있으니 안 맞는거죠. 명령어를 16비트로 구성하여 전송하기, PCM1792의 레지스터 값을 읽고 쓰기 등 몇가지 생각지 못했던 난관이 있었습니다. 몇 달 지나면 또 잊어버릴 것 같아서 소스코드는 제작 과정별로 잘 저장하고 있습니다.

USB DAC FADER VOLUME CONTROL

이번 작업은 “기대-실망-좌절-의문-희망-탐색” 이라는 루프에 빠지는 일이 많았습니다. 몇 종류의 칩들을 연동하는 작업이다 보니 그냥 LED를 On/Off 할 때와는 다른 차원의 문제들이 발생하더군요. 어디까지가 제대로인가에 대한 믿음이 필요한 작업이었습니다. 옆에서 누가 “그건 이렇게 하는게 좋아~” 하고 말해주는 사람이 있으면 좋겠다는 생각을 많이 했습니다.

사진에 보이는 LogicAnalyzer 효과를 톡톡히 봤습니다. 비트 수준에서 On/Off가 보이니 어디서 잘 못 되었는지, 내 코드에는 문제가 없는지 알 수 있었습니다. 내 작업에는 좀 과하다 싶은 스펙의 아날라이저이긴 해도, 정확한 자료를 바탕으로 프로그래밍을 하니 내가 틀린게 아니라는 자신을 가질 수 있었지요.

막혔던 문제들은 항상 데이터시트에서 답이 나옵이다. 궁금 할 때는 안 보이던 내용들이 한참 어려움을 겪고 나면 그제서야 슬며시 나타납니다. 데이터시트는 참으로 오묘~ 합니다. ^^