Для тех кто купил цап, но не имеет рефлекса или модуля управления, но имеет ардуино, предлагаю скетч. Цап в асинхронном режиме с кварцем на 100мгц или модулем DSPO 49.125мгц . Опробовал на ардуино уно, но и с нано и мини тоже работать будет.
Внимание!!!! Ардуино плата должна быть с питанием +3.3 вольта!!!! Можно использовать ардуино с питанием 5 вольт, подключить вместо 5 вольт 3.3 вольта и она будет работать, НО!!!!!! нельзя ее програмировать когда она подключенна по шине I2C к плате цапа, то есть, подключили ардуинку к компу, запрограмировали, отключили от компа и вот после этого можно подключать к цапу!!!
#define Vol_pot A0
#include <Wire.h>
// Данные для инициализации //
byte AutoSelect = 0xC0;
byte AutomuteTime = 0x12;
byte DoPenable = 0x4A;
byte GpioConf = 0x88;
byte SpdifSel1 = 0x30;
byte SpdifSel2 = 0x40;
byte LockSpeedMax = 0x00;
byte VolumeL = 0xFF;
byte VolumeR = 0xFF;
byte SoftStart = 0x8A;
// Адрес ЦАПА //
#define ES90381 0x48
//#define ES90381 0x49
// Регистры для инициализации //
#define Mad_AutoSelect 0x01
#define Mad_AutomuteTime 0x04
#define Mad_DoPenable 0x06
#define Mad_GpioConf 0x08
#define Mad_SpdifSel1 0x0B
#define Mad_SpdifSel2 0x0B
#define Mad_LockSpeedMax 0x0A
#define Mad_VolumeL 0x0F
#define Mad_VolumeR 0x10
#define Mad_SoftStart 0x0E
// Настройки //
void setup() {
pinMode(Vol_pot, INPUT);
Serial.begin(9600);
Wire.begin();
delay(1000);
Wire.beginTransmission(ES90381);
Wire.write(Mad_AutoSelect);
Wire.write(AutoSelect);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_AutomuteTime);
Wire.write(AutomuteTime);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_DoPenable);
Wire.write(DoPenable);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_GpioConf );
Wire.write(GpioConf);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_SpdifSel1);
Wire.write(SpdifSel1);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_SpdifSel2);
Wire.write(SpdifSel2);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_LockSpeedMax);
Wire.write(LockSpeedMax);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_VolumeL);
Wire.write(VolumeL);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_VolumeR);
Wire.write(VolumeR);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_SoftStart);
Wire.write(SoftStart);
Wire.endTransmission();
}
void loop() {
// Регулировка громкости потенциометром //
int rotat, VolumeALL;
rotat = analogRead(Vol_pot);
VolumeALL = rotat / 2;
Wire.beginTransmission(ES90381);
Wire.write(Mad_VolumeL);
Wire.write(VolumeALL);
Wire.endTransmission();
Wire.beginTransmission(ES90381);
Wire.write(Mad_VolumeR);
Wire.write(VolumeALL);
Wire.endTransmission();
}
В скетче используется стандартная библиотека Wire. Собственно примитив, но работает без нареканий. Вход А0 регулировка громкости, к нему подключается потенциометр 10-50ком. Вход аудиопотока I2S.