<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; Библиотеки]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;fid=6&amp;type=atom" />
	<updated>2024-10-27T14:48:10Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/index.php</id>
		<entry>
			<title type="html"><![CDATA[Ошибка при прошивке ESP32]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=679&amp;action=new" />
			<summary type="html"><![CDATA[<p>&#039;ledcSetup&#039; was not declared in this scope</p>]]></summary>
			<author>
				<name><![CDATA[Falcon33]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2883</uri>
			</author>
			<updated>2024-10-27T14:48:10Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=679&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TDA7439 тестовый скетч]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=657&amp;action=new" />
			<summary type="html"><![CDATA[<p><a href="http://rcl-radio.ru/wp-content/uploads/2019/01/TDA7439.zip">http://rcl-radio.ru/wp-content/uploads/ … DA7439.zip</a></p><div class="codebox"><pre><code>#include &lt;Wire.h&gt;
#include &lt;TDA7439.h&gt;
  TDA7439 tda;
 
 void setup() { 
  delay(200);
  audio();
 }
 
 void loop() {}

 void audio(){
  tda.setInput(1); // 1 to 4 // номер канала
  tda.inputGain(0); // 0 to 15 // усиление 
  tda.setVolume(48); // 0 to 48 ( 0 is mute) // громкость
  tda.setSnd(0, 1); //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble
  tda.setSnd(0, 2);
  tda.setSnd(0, 3); 
  tda.spkAtt(0, 0); // баланс R L от 0 to 79 (db) 
 }</code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2024-07-17T11:32:05Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=657&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TDA7461]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=606&amp;action=new" />
			<summary type="html"><![CDATA[<p><a href="http://forum.rcl-radio.ru/uploads/images/2024/01/36dfaccab4da068b2379641a7d7e1373.pdf">http://forum.rcl-radio.ru/uploads/image … 7e1373.pdf</a></p><br /><p>Требуется тестирование!!!</p><p>TDA7461.h</p><div class="codebox"><pre><code>// liman324@yandex.ru
// rcl-radio.ru

#ifndef TDA7461_H
#define TDA7461_H
// address 7 bit
#define TDA7461_address 0b1000110

//Sub addresses
#define TDA7461_INPUT          0b0000 // Input selector
#define TDA7461_LOUD           0b0001 // Loudness / Auto-Zero
#define TDA7461_VOLUME         0b0010 // Volume
#define TDA7461_SOFT_MUTE      0b0011 // Softmute / Beep
#define TDA7461_BASS_TREB_ATT  0b0100 // Bass / Treble Attenuator
#define TDA7461_BASS_TREB_CONF 0b0101 // Bass / Treble Configuration
#define TDA7461_LF_ATT         0b0110 // Speaker attenuator LF
#define TDA7461_LR_ATT         0b0111 // Speaker attenuator LR
#define TDA7461_RF_ATT         0b1000 // Speaker attenuator RF
#define TDA7461_RR_ATT         0b1001 // Speaker attenuator RR / Blank time adjust
#define TDA7461_STEREO_DEC     0b1010 // Stereo decoder
#define TDA7461_NOISE_BLANKER  0b1011 // Noise blanker
#define TDA7461_FIELD_CONTR    0b1100 // Fieldstrength Control
#define TDA7461_CONF           0b1101 // Configuration
#define TDA7461_STEREO_DEC_ADJ 0b1110 // Stereo decoder Adjustment
#define TDA7461_TEST           0b1111 // Testing

#include &lt;Arduino.h&gt;
class TDA7461
{
  public:
    TDA7461();
     ///  Input selector          
     void setInput(int source, bool cd, int am_fm, int in_gain); 
// int source = 0...7 &gt;&gt;&gt; CD
//                        Cassette
//                        Phone
//                        AM
//                        Stereo Decoder
//                        Input FM
//                        Mute
//                        AC inputs  
// bool cd = 0...1 &gt;&gt;&gt; CD Full-differential...CD Quasi-diff   
// int am_fm = 0...3 &gt;&gt;&gt; AM mono
//                       AM stereo
//                       AM through Stereo decoder
//                       FM- Stereo decoder
// int in_gain = 0...7 &gt;&gt;&gt;  14...0 dB step 2 dB
     ///  Loudness         
     void setLoudness(int loud_att, bool loud_filter, bool loud_f, bool loud_q); 
// int loud_att = 0...15 &gt;&gt;&gt; 0...-15 dB
// bool loud_filter = 0...1 &gt;&gt;&gt; on...off
// bool loud_f = 0...1 &gt;&gt;&gt; 200...400 Hz
// bool loud_q = 0...1 &gt;&gt;&gt; low...normal
     ///   Mute, Beep and Mixing        
     void setSoftmute(bool mute, int mute_time, bool stereo_dec, bool beep, bool mixing_0, int mixing_1);    
// int mute = 0...1 &gt;&gt;&gt; Softmute = Enable...Disable 
// int mute_time 0...3 &gt;&gt; Mute time = 0.48, 0.96, 40.4, 324 ms
// bool stereo_dec = 0...1 &gt;&gt;&gt; Stereo decoder softmute influence = off...on
// bool beep = 0...1 &gt;&gt;&gt; Beep Frequency = 600 Hz...1.2 kHz
// bool mixing_0 = 0...1 &gt;&gt;&gt; Mix-Source = Beep...Phone
// bool mixing_1 = 0...3 &gt;&gt;&gt; Full Mix Signal
//                           Source -12 dB + Mix-Signal -2.5 dB
//                           Source -6 dB + Mix-Signal -6 dB
//                           Full Source
     ///   Volume       
     void setVolume(int vol, bool soft_step); 
// int vol = 0...111 &gt;&gt;&gt; +32...-79 dB
// bool soft_step = 0...1 &gt;&gt;&gt; Soft step volume = off...on
     ///   Bass and treble attenuation       
     void setBassTreb(int bass, int treb); 
// int bass = -14...14 &gt;&gt;&gt; -14...+14 dB step 2 dB
// int treb = -14...14 &gt;&gt;&gt; -14...+14 dB step 2 dB
     ///   Bass and treble filter characteristics      
     void setBassTrebConf(int treb_f, int bass_f, int bass_q, bool dc_gain, bool ac_coupling);
// int treb_f = 0...3 &gt;&gt;&gt; 10, 12.5, 15, 17.5 kHz
// int bass_f = 0...4 &gt;&gt;&gt; 60, 70, 80, 100, 150 Hz
// int bass_q = 0...3 &gt;&gt;&gt; 1, 1.25, 1.5, 2 
// bool dc_gain 0...1 &gt;&gt;&gt; DC-Gain = 0 dB ... ±4.4 dB
// bool ac_coupling = 0...1 &gt;&gt;&gt; For External Connection...Internally Connection
     /// ATT (LF, LR, RF, RR)
     void attLF(int lf); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     void attLR(int lr); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     void attRF(int rf); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     void attRR(int rr); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     ///  Stereo decoder
     void setStereo(bool std, int in_gain_dec, bool dec, bool mono_stereo, bool pilot, bool emp);
// bool std = 0..1 &gt;&gt;&gt; STD unmuted...muted
// int in_gain_dec = 0...3 &gt;&gt;&gt; IN-Gain 11, 8.5, 6, 3.5 dB
// bool dec = 0...1 &gt;&gt;&gt; Stereo decoder Unmuted with Stdec. 
//                      Stereo decoder Unmuted whichever is the selected source.
// bool mono_stereo = 0...1 &gt;&gt;&gt; Forced mono...Mono/stereo switch automatically
// bool pilot = 0...1 &gt;&gt;&gt; Pilot threshold high...low
// bool emp = 0...1 &gt;&gt;&gt; De-emphasis 50...75 μs
     ///  Noise blanker
     void setBlanker(int threshold_0, int threshold_1, bool blank, int over);
// int threshold_0 = 0...7 &gt;&gt;&gt; Low threshold 65, 60, 55, 50, 45, 40, 35, 30 mV
// int threshold_1 = 0...3 &gt;&gt;&gt; Noise controlled threshold 320, 260, 200, 140 mV
// bool blank = 0...1 &gt;&gt;&gt; Noise blanker off...on
// int over = 0...3 &gt;&gt;&gt; Over deviation adjust 2.8V, 2.0V, 1.2V, off
     /// Field strength control
     void setField(int adj, int vsbl, int vhch, bool vhcl, bool cut);
// int adj = 0...3 &gt;&gt;&gt; Noise blanker Field strength Adj 2.3V, 1.8V, 1.3V, off
// int vsbl = 0...3 &gt;&gt;&gt; VSBL at 33%, 42%, 50%, 58%
// int vhch = 0...3 &gt;&gt;&gt; VHCH at 42%, 50%, 58%, 66%
// bool vhcl = 0...1 &gt;&gt;&gt; VHCL at 17%, 33%
// bool cut = 0...1 &gt;&gt;&gt; High cut OFF...ON
     /// Configuration
     void setConf(int rez, int band_gain, bool mult, int mult_gain);
// int rez = 0...3 &gt;&gt;&gt; infinite, 56kOm, 33kOm, 18kOm
// int band_gain = 0...3 &gt;&gt;&gt; 6, 16, 12, 18 dB
// bool mult = 0...1 &gt;&gt;&gt; Multipath detector internal influence On...Off
// int mult_gain = 0...3 &gt;&gt;&gt; Gain = 7.6 dB 4.6 dB, 0 dB, Off
     /// Stereo decoder adjustment
     void setSDecoder(int compens, int level_gain, bool temp);
// int compens = 0...7 &gt;&gt;&gt; not...31%
// int level_gain = 0...15 &gt;&gt;&gt; 0...10 dB step 0.66dB
// bool temp = 0...1 &gt;&gt;&gt; TC = 0...16.7 mV/K (3300 ppm)
     /// Testing
     void setTest(byte test);
// default test = 0b11111110 (Table 25)

  private:
	void writeWire(byte a, byte b);
};
	
#endif //TDA7461_H</code></pre></div><p>TDA7461.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;TDA7461.h&quot;

TDA7461::TDA7461(){
	Wire.begin();
}

void TDA7461::setInput(int source, bool cd, int am_fm, int in_gain){
  byte data_ = (in_gain &lt;&lt; 5)+(am_fm &lt;&lt; 4)+(cd &lt;&lt; 3)+source;
  writeWire(TDA7461_INPUT,data_);
}

void TDA7461::setLoudness(int loud_att, bool loud_filter, bool loud_f, bool loud_q){
  byte data_= 0b10000000+(loud_q &lt;&lt; 6)+(loud_f &lt;&lt; 5)+(loud_filter &lt;&lt; 4)+loud_att;
  writeWire(TDA7461_LOUD,data_);
}

void TDA7461::setSoftmute(bool mute, int mute_time, bool stereo_dec, bool beep, bool mixing_0, int mixing_1){
  byte data_= (mixing_1 &lt;&lt; 6)+(mixing_0 &lt;&lt; 5)+(beep &lt;&lt; 4)+(stereo_dec &lt;&lt; 3)+(mute_time &lt;&lt; 1)+mute;
  writeWire(TDA7461_SOFT_MUTE,data_);
}

void TDA7461::setVolume(int vol, bool soft_step){
  byte data_= (soft_step &lt;&lt; 7)+vol;
  writeWire(TDA7461_VOLUME,data_);
}

void TDA7461::setBassTreb(int bass, int treb){
  switch(treb){
   case -14: treb = 0b0000;break;
   case -12: treb = 0b0001;break;
   case -10: treb = 0b0010;break;
   case -8 : treb = 0b0011;break;
   case -6 : treb = 0b0100;break;
   case -4 : treb = 0b0101;break;
   case -2 : treb = 0b0110;break;
   case -0 : treb = 0b0111;break;
   case  2 : treb = 0b1110;break;
   case  4 : treb = 0b1101;break;
   case  6 : treb = 0b1100;break;
   case  8 : treb = 0b1011;break;
   case  10: treb = 0b1010;break;
   case  12: treb = 0b1001;break;
   case  14: treb = 0b1000;break;
}
  switch(bass){
   case -14: bass = 0b0000;break;
   case -12: bass = 0b0001;break;
   case -10: bass = 0b0010;break;
   case -8 : bass = 0b0011;break;
   case -6 : bass = 0b0100;break;
   case -4 : bass = 0b0101;break;
   case -2 : bass = 0b0110;break;
   case -0 : bass = 0b0111;break;
   case  2 : bass = 0b1110;break;
   case  4 : bass = 0b1101;break;
   case  6 : bass = 0b1100;break;
   case  8 : bass = 0b1011;break;
   case  10: bass = 0b1010;break;
   case  12: bass = 0b1001;break;
   case  14: bass = 0b1000;break;
}
  byte data_ = (bass &lt;&lt; 4)+treb;
  writeWire(TDA7461_BASS_TREB_ATT,data_);
}

void TDA7461::setBassTrebConf(int treb_f, int bass_f, int bass_q, bool dc_gain, bool ac_coupling){
  byte data_ = (ac_coupling &lt;&lt; 7)+(dc_gain &lt;&lt; 6)+(bass_q &lt;&lt; 4)+(bass_f &lt;&lt; 2)+treb_f;
  writeWire(TDA7461_BASS_TREB_CONF,data_);
}

void TDA7461::attLF(int lf){byte data_ = 0b11000000+lf;writeWire(TDA7461_LF_ATT,data_);}
void TDA7461::attLR(int lr){byte data_ = 0b11000000+lr;writeWire(TDA7461_LR_ATT,data_);}
void TDA7461::attRF(int rf){writeWire(TDA7461_RF_ATT,rf);}
void TDA7461::attRR(int rr){writeWire(TDA7461_RR_ATT,rr);}

void TDA7461::setStereo(bool std, int in_gain_dec, bool dec, bool mono_stereo, bool pilot, bool emp){
  byte data_ = (emp &lt;&lt; 7)+(pilot &lt;&lt; 6)+(mono_stereo &lt;&lt; 5)+(1 &lt;&lt; 4)+(dec &lt;&lt; 3)+(in_gain_dec &lt;&lt; 1)+std;
  writeWire(TDA7461_STEREO_DEC,data_);
}

void TDA7461::setBlanker(int threshold_0, int threshold_1, bool blank, int over){
  byte data_ = (over &lt;&lt; 6)+(blank &lt;&lt; 5)+(threshold_1 &lt;&lt; 3)+threshold_0;
  writeWire(TDA7461_NOISE_BLANKER,data_);
}

void TDA7461::setField(int adj, int vsbl, int vhch, bool vhcl, bool cut){
  byte data_ = (cut &lt;&lt; 7)+(vhcl &lt;&lt; 6)+(vhch &lt;&lt; 4)+(vsbl &lt;&lt; 2)+adj;
  writeWire(TDA7461_FIELD_CONTR,data_);
}

void TDA7461::setConf(int rez, int band_gain, bool mult, int mult_gain){
  byte data_ = (mult_gain &lt;&lt; 6)+(1 &lt;&lt; 5)+(mult &lt;&lt; 4)+(band_gain &lt;&lt; 2)+rez;
  writeWire(TDA7461_CONF,data_);
}

void TDA7461::setSDecoder(int compens, int level_gain, bool temp){
  byte data_ = (temp &lt;&lt; 7)+(level_gain &lt;&lt; 3)+compens;
  writeWire(TDA7461_STEREO_DEC_ADJ,data_);
}

void TDA7461::setTest(byte test){writeWire(TDA7461_TEST,test);}


void TDA7461::writeWire(byte a, byte b){
  Wire.beginTransmission(TDA7461_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}  </code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt;
#include &lt;TDA7461.h&gt;
TDA7461 tda;

void setup(){ 
  Serial.begin(9600);
  Wire.begin();
}

void loop(){
  audio();
  delay(1000);
}

void audio(){
  ///  Input selector          
     tda.setInput(0, 0, 0, 0); 
// int source = 0...7 &gt;&gt;&gt; CD
//                        Cassette
//                        Phone
//                        AM
//                        Stereo Decoder
//                        Input FM
//                        Mute
//                        AC inputs  
// bool cd = 0...1 &gt;&gt;&gt; CD Full-differential...CD Quasi-diff   
// int am_fm = 0...3 &gt;&gt;&gt; AM mono
//                       AM stereo
//                       AM through Stereo decoder
//                       FM- Stereo decoder
// int in_gain = 0...15 &gt;&gt;&gt;  14...0 dB step 2 dB
     ///  Loudness         
     tda.setLoudness(0, 0, 0, 0); 
// int loud_att = 0...15 &gt;&gt;&gt; 0...-15 dB
// bool loud_filter = 0...1 &gt;&gt;&gt; on...off
// bool loud_f = 0...1 &gt;&gt;&gt; 200...400 Hz
// bool loud_q = 0...1 &gt;&gt;&gt; low...normal
     ///   Mute, Beep and Mixing        
     tda.setSoftmute(1, 0, 1, 0, 0, 0);    
// int mute = 0...1 &gt;&gt;&gt; Softmute = Enable...Disable 
// int mute_time 0...3 &gt;&gt; Mute time = 0.48, 0.96, 40.4, 324 ms
// bool stereo_dec = 0...1 &gt;&gt;&gt; Stereo decoder softmute influence = off...on
// bool beep = 0...1 &gt;&gt;&gt; Beep Frequency = 600 Hz...1.2 kHz
// bool mixing_0 = 0...1 &gt;&gt;&gt; Mix-Source = Beep...Phone
// bool mixing_1 = 0...3 &gt;&gt;&gt; Full Mix Signal
//                           Source -12 dB + Mix-Signal -2.5 dB
//                           Source -6 dB + Mix-Signal -6 dB
//                           Full Source
     ///   Volume       
     tda.setVolume(32, 1); 
// int vol = 0...111 &gt;&gt;&gt; +32...-79 dB
// bool soft_step = 0...1 &gt;&gt;&gt; Soft step volume = off...on
     ///   Bass and treble attenuation       
     tda.setBassTreb(0, 0); 
// int bass = -14...14 &gt;&gt;&gt; -14...+14 dB step 2 dB
// int treb = -14...14 &gt;&gt;&gt; -14...+14 dB step 2 dB
     ///   Bass and treble filter characteristics      
     tda.setBassTrebConf(0, 0, 0, 0, 0);
// int treb_f = 0...3 &gt;&gt;&gt; 10, 12.5, 15, 17.5 kHz
// int bass_f = 0...4 &gt;&gt;&gt; 60, 70, 80, 100, 150 Hz
// int bass_q = 0...3 &gt;&gt;&gt; 1, 1.25, 1.5, 2 
// bool dc_gain 0...1 &gt;&gt;&gt; DC-Gain = 0 dB ... ±4.4 dB
// bool ac_coupling = 0...1 &gt;&gt;&gt; For External Connection...Internally Connection
     /// ATT (LF, LR, RF, RR)
     tda.attLF(0); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     tda.attLR(0); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     tda.attRF(0); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     tda.attRR(0); // int 0...31 &gt;&gt;&gt; 0...-50 dB
     ///  Stereo decoder
     tda.setStereo(0, 0, 0, 1, 1, 0);
// bool std = 0..1 &gt;&gt;&gt; STD unmuted...muted
// int in_gain_dec = 0...3 &gt;&gt;&gt; IN-Gain 11, 8.5, 6, 3.5 dB
// bool dec = 0...1 &gt;&gt;&gt; Stereo decoder Unmuted with Stdec. 
//                      Stereo decoder Unmuted whichever is the selected source.
// bool mono_stereo = 0...1 &gt;&gt;&gt; Forced mono...Mono/stereo switch automatically
// bool pilot = 0...1 &gt;&gt;&gt; Pilot threshold high...low
// bool emp = 0...1 &gt;&gt;&gt; De-emphasis 50...75 μs
     ///  Noise blanker
     tda.setBlanker(0, 0, 0, 3);
// int threshold_0 = 0...7 &gt;&gt;&gt; Low threshold 65, 60, 55, 50, 45, 40, 35, 30 mV
// int threshold_1 = 0...3 &gt;&gt;&gt; Noise controlled threshold 320, 260, 200, 140 mV
// bool blank = 0...1 &gt;&gt;&gt; Noise blanker off...on
// int over = 0...3 &gt;&gt;&gt; Over deviation adjust 2.8V, 2.0V, 1.2V, off
     /// Field strength control
     tda.setField(3, 0, 0, 0, 0);
// int adj = 0...3 &gt;&gt;&gt; Noise blanker Field strength Adj 2.3V, 1.8V, 1.3V, off
// int vsbl = 0...3 &gt;&gt;&gt; VSBL at 33%, 42%, 50%, 58%
// int vhch = 0...3 &gt;&gt;&gt; VHCH at 42%, 50%, 58%, 66%
// bool vhcl = 0...1 &gt;&gt;&gt; VHCL at 17%, 33%
// bool cut = 0...1 &gt;&gt;&gt; High cut OFF...ON
     /// Configuration
     tda.setConf(0, 0, 1, 3);
// int rez = 0...3 &gt;&gt;&gt; infinite, 56kOm, 33kOm, 18kOm
// int band_gain = 0...3 &gt;&gt;&gt; 6, 16, 12, 18 dB
// bool mult = 0...1 &gt;&gt;&gt; Multipath detector internal influence On...Off
// int mult_gain = 0...3 &gt;&gt;&gt; Gain = 7.6 dB 4.6 dB, 0 dB, Off
     /// Stereo decoder adjustment
     tda.setSDecoder(0,0, 1);
// int compens = 0...7 &gt;&gt;&gt; not...31%
// int level_gain = 0...15 &gt;&gt;&gt; 0...10 dB step 0.66dB
// bool temp = 0...1 &gt;&gt;&gt; TC = 0...16.7 mV/K (3300 ppm)
     /// Testing
     tda.setTest(0b11111110);
// default test = 0b11111110 (Table 25)
  }</code></pre></div><p><span class="attention-yellow"></span></p>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2024-01-17T02:15:49Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=606&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[BD3473KS2]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=570&amp;action=new" />
			<summary type="html"><![CDATA[<p><a href="https://datasheet-pdf.com/PDF/BD3473KS2-Datasheet-ROHM-1088560">https://datasheet-pdf.com/PDF/BD3473KS2 … HM-1088560</a></p><p>BD34701KS2.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef BD3473KS2_H
#define BD3473KS2_H

#define ADDR_0 0b0000
#define ADDR_1 0b0001
#define ADDR_2 0b0010
#define ADDR_3 0b0011
#define ADDR_4 0b1000
#define ADDR_5 0b1001
#define ADDR_6 0b1010
#define ADDR_7 0b1011


#include &lt;Arduino.h&gt;
class BD3473KS2
{
  public:
    BD3473KS2(uint8_t cl, uint8_t da);
    void set0(int in_main, int rec1, int rec2, int rec3, int rec4_0, int rec4_1, int rec5); 
  // int in_main 1...18 === IN1_MAIN...IN18_MAIN | in_main 0 === MUTE
  // int rec1 0...1 === (REC1) ON OFF
  // int rec2 0...1 === (REC2) ON OFF
  // int rec3 0...1 === (REC3) ON OFF
  // int rec4_0 0...1 === (REC4) ON OFF
  // int rec4_1 0...1 === REC4 SUB2
  // int rec5 0...1 === (REC4/SUB2) ON OFF
    void set1(int in_sub1, int in_sub2);
  // int in_sub1 0...18 === IN1_SUB1...IN18_SUB1 | 0b010011...0b111111 - prohibition
  // int in_sub2 0...18 === IN1_SUB2...IN18_SUB2 | 0b010011...0b111111 - prohibition
    void set2(int mode_sel_fl_fr, int mode_sel_c_sw, int mode_sel_sl_sr, int mode_sel_sbl_sbr, int adc_att);
  // int mode_sel_fl_fr 0...3 === MUTE MAIN MULTI1 MULTI2
  // int mode_sel_c_sw 0...3 === MUTE prohibition MULTI1 MULTI2
  // int mode_sel_sl_sr 0...3 === MUTE prohibition MULTI1 MULTI2
  // int mode_sel_sbl_sbr 0...7 === MUTE prohibition MULTI1 MULTI2 SUB1 SUB2 prohibition
  // int adc_att 0...7 === MUTE 0dB -6dB -6.5dB -7.5dB -9dB -12dB prohibition
    void set3(int sec_ch, int volume);
  // int sec_ch 0...7 === FR FL SW C SR SL SBR SBL
  // int volume -190...48 === -95.0dB...+24db , step 0.5dB
    void set4(int tone, int bass_reg);
  // int tone 0...1 === ON OFF
  // int bass_reg -10...10 === -10dB...+10dB  
    void set5(int sw_ch_mix, int front_ph, int sb_front, int treb_reg);
  // int sw_ch_mix 0...1 === ON OFF
  // int front_ph 0...1 === 0&#039;... 180&#039;
  // int sb_front 0...1 === sb...front
  // int treb_reg -10...10 === -10dB...+10dB 
    void set7(int a_b, int b_a, int base_clk);
  // int a_b 0...3 === 11 5 7 15 ms
  // int b_a 0...3 === 11 5 7 15 ms
  // int base_clk === x1 x1/2 x1/4 prohibition

	
  private:
	void write(char data);
        uint8_t CL;
        uint8_t DA;
};
	
#endif //BD3473KS2_H</code></pre></div><br /><p>BD3473KS2.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;BD3473KS2.h&gt;

BD3473KS2::BD3473KS2(uint8_t cl, uint8_t da){
	CL = cl;
        DA = da;
      pinMode(CL,OUTPUT);
      pinMode(DA,OUTPUT);
      digitalWrite(CL,LOW);digitalWrite(DA,LOW);
}

void BD3473KS2::set0(int in_main, int rec1, int rec2, int rec3, int rec4_0, int rec4_1, int rec5){
  write((in_main&lt;&lt;10)|(rec1&lt;&lt;9)|(rec2&lt;&lt;8)|(rec3 &lt;&lt; 7)|(rec4_0&lt;&lt;6)|(rec4_1&lt;&lt;5)|(rec5&lt;&lt;4)|ADDR_0);
}

void BD3473KS2::set1(int in_sub1, int in_sub2){
  write((in_sub1&lt;&lt;10)|(in_sub2&lt;&lt;4)|ADDR_1);
}

void BD3473KS2::set2(int mode_sel_fl_fr, int mode_sel_c_sw, int mode_sel_sl_sr, int mode_sel_sbl_sbr, int adc_att){
  write((mode_sel_fl_fr&lt;&lt;14)|(mode_sel_c_sw&lt;&lt;12)|(mode_sel_sl_sr&lt;&lt;10)|(mode_sel_sl_sr&lt;&lt;10)|(mode_sel_sbl_sbr&lt;&lt;7)|(adc_att&lt;&lt;4)|ADDR_2);
}

void BD3473KS2::set3(int sec_ch, int volume){
  int vol_dig;
  if(volume&lt;=0){vol_dig=abs(volume);}
  else{vol_dig=volume|1&lt;&lt;12;}
  write((sec_ch&lt;&lt;13)|(vol_dig&lt;&lt;4)|ADDR_3);
}

void BD3473KS2::set4(int tone, int bass_reg){
  int bass_dig;
  if(bass_reg&lt;=0){bass_dig=abs(bass_reg);}
  else{bass_dig=bass_reg+0b10000;}
  write((tone&lt;&lt;15)|(1&lt;&lt;13)|(bass_dig&lt;&lt;4)|ADDR_4);
}

void BD3473KS2::set5(int sw_ch_mix, int front_ph, int sb_front, int treb_reg){
  int treb_dig;
  if(treb_reg&lt;=0){treb_dig=abs(treb_reg);}
  else{treb_dig=treb_reg+0b10000;}
  write((sw_ch_mix&lt;&lt;15)|(front_ph&lt;&lt;14)|(sb_front&lt;&lt;13)|(treb_dig&lt;&lt;4)|ADDR_5);
}

void BD3473KS2::set7(int a_b, int b_a, int base_clk){
  write((a_b&lt;&lt;13)|(b_a&lt;&lt;10)|(base_clk&lt;&lt;8)|ADDR_7);
}

void BD3473KS2::write(char data){
    for(int i = 0; i &lt;= 15; i++){     
        digitalWrite(DA, (data &lt;&lt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        if(i==15){digitalWrite(DA,HIGH);}else{digitalWrite(DA,LOW);}
        digitalWrite(CL,LOW);
        } 
   digitalWrite(CL,LOW);
   digitalWrite(DA,LOW);
   delay(10);
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;BD3473KS2.h&gt;

BD3473KS2 bd(2,3); // cl,da

void setup(){
  delay(500);
  audio();
  }

void loop(){
  
  }

void audio(){
  bd.set0(1, 0, 0, 0, 0, 0, 0); 
  // int in_main 1...18 === IN1_MAIN...IN18_MAIN | in_main 0 === MUTE
  // int rec1 0...1 === (REC1) ON OFF
  // int rec2 0...1 === (REC2) ON OFF
  // int rec3 0...1 === (REC3) ON OFF
  // int rec4_0 0...1 === (REC4) ON OFF
  // int rec4_1 0...1 === REC4 SUB2
  // int rec5 0...1 === (REC4/SUB2) ON OFF
  bd.set1(0, 0);
  // int in_sub1 0...18 === IN1_SUB1...IN18_SUB1 | 0b010011...0b111111 - prohibition
  // int in_sub2 0...18 === IN1_SUB2...IN18_SUB2 | 0b010011...0b111111 - prohibition
  bd.set2(1, 0, 0, 0, 1);
  // int mode_sel_fl_fr 0...3 === MUTE MAIN MULTI1 MULTI2
  // int mode_sel_c_sw 0...3 === MUTE prohibition MULTI1 MULTI2
  // int mode_sel_sl_sr 0...3 === MUTE prohibition MULTI1 MULTI2
  // int mode_sel_sbl_sbr 0...7 === MUTE prohibition MULTI1 MULTI2 SUB1 SUB2 prohibition
  // int adc_att 0...7 === MUTE 0dB -6dB -6.5dB -7.5dB -9dB -12dB prohibition
  bd.set3(0, 0);
  bd.set3(1, 0);
  bd.set3(2, 0);
  bd.set3(3, 0);
  bd.set3(4, 0);
  bd.set3(5, 0);
  bd.set3(6, 0);
  bd.set3(7, 0);
  // int sec_ch 0...7 === FR FL SW C SR SL SBR SBL
  // int volume -190...48 === -95.0dB...+24db , step 0.5dB
  bd.set4(0, 0);
  // int tone 0...1 === ON OFF
  // int bass_reg -10...10 === -10dB...+10dB  
  bd.set5(1, 0, 1, 0);
  // int sw_ch_mix 0...1 === ON OFF
  // int front_ph 0...1 === 0&#039;... 180&#039;
  // int sb_front 0...1 === sb...front
  // int treb_reg -10...10 === -10dB...+10dB 
  bd.set7(0, 0, 0);
  // int a_b 0...3 === 11 5 7 15 ms
  // int b_a 0...3 === 11 5 7 15 ms
  // int base_clk === x1 x1/2 x1/4 prohibition
  }  
  </code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2023-07-21T07:20:37Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=570&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[NJW1153]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=565&amp;action=new" />
			<summary type="html"><![CDATA[<p>GENERAL DESCRIPTION <br />NJW1153 is a 6-channel electronic volume IC. It includes Input selector, tone control, volume, mute, input selector gain control, volume output gain control and 3 REC outputs. Each mode and conditions are set by the 3-wired serial control data.</p><p><a href="http://forum.rcl-radio.ru/uploads/images/2023/06/fbf5824b54d0ee372b06850dcb91fb07.pdf">http://forum.rcl-radio.ru/uploads/image … 91fb07.pdf</a></p><br /><p>NJW1153.h</p><div class="codebox"><pre><code>//  NJW1153 MITSUBISHI SOUND PROCESSOR ICs
//  Alexander Liman
//  liman324@yandex.ru
//  rcl-radio.ru

#ifndef  NJW1153_H
#define  NJW1153_H

#define VOL_1   0B00000101
#define VOL_2   0B00010101
#define VOL_3   0B00100101
#define VOL_4   0B00110101
#define VOL_5   0B01000101
#define VOL_6   0B01010101
#define SETUP1  0B01100101
#define SETUP2  0B01110101
#define SETUP3  0B10000101
#define SETUP4  0B10010101

#include &lt;Arduino.h&gt;


class  NJW1153
  {
    public:
 NJW1153(uint8_t,uint8_t,uint8_t); 
 void init();  
 void volume1(byte vol1);
 void volume2(byte vol2);
 void volume3(byte vol3);
 void volume4(byte vol4);
 void volume5(byte vol5);
 void volume6(byte vol6);
 void setup1(byte in_gain, byte out_gain, bool bsw, bool ssw);
 void setup2(int treb, bool tsw);
 void setup3(int bass);
 void setup4(byte input, byte multi_sel, bool rec2, bool rec1, bool rec0);
    private:

  uint8_t REQ_PIN;
  uint8_t SCK_PIN;
  uint8_t DATA_PIN;
  void Write(byte reg, byte dout);
  };
#endif</code></pre></div><p>NJW1153.cpp</p><div class="codebox"><pre><code>#include &lt;NJW1153.h&gt;

NJW1153::NJW1153(uint8_t req, uint8_t sck, uint8_t data){
          REQ_PIN = req;
          SCK_PIN = sck;
          DATA_PIN = data;
      pinMode(REQ_PIN,OUTPUT);
      pinMode(SCK_PIN,OUTPUT);
      pinMode(DATA_PIN,OUTPUT);
      digitalWrite(REQ_PIN,HIGH);
      digitalWrite(SCK_PIN,HIGH);
      digitalWrite(DATA_PIN,HIGH);
      delay(100);
}
void NJW1153::init(){// INITIAL CONDITION
   Write(255,VOL_1);
   Write(255,VOL_2);
   Write(255,VOL_3);
   Write(255,VOL_4);
   Write(255,VOL_5);
   Write(255,VOL_6);
   Write(0,SETUP1);
   Write(0,SETUP2);
   Write(0,SETUP3);
   Write(0,SETUP4);
}
/*
     INITIAL CONDITION
D15 ......................... D0
1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1
1 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1
1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1
1 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1
1 1 1 1 1 1 1 1 0 1 0 0 0 1 0 1
1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1
0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1
0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1
0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1
0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1
*/

void NJW1153::volume1(byte vol1){Write(vol1&lt;&lt;1,VOL_1);}
void NJW1153::volume2(byte vol2){Write(vol2&lt;&lt;1,VOL_2);}
void NJW1153::volume3(byte vol3){Write(vol3&lt;&lt;1,VOL_3);}
void NJW1153::volume4(byte vol4){Write(vol4&lt;&lt;1,VOL_4);}
void NJW1153::volume5(byte vol5){Write(vol5&lt;&lt;1,VOL_5);}
void NJW1153::volume6(byte vol6){Write(vol6&lt;&lt;1,VOL_6);}

void NJW1153::setup1(byte in_gain, byte out_gain, bool bsw, bool ssw){
 byte set1 = in_gain &lt;&lt; 5 | out_gain &lt;&lt; 2 | bsw &lt;&lt; 1 | ssw;
 Write(set1,SETUP1);
}
 
void NJW1153::setup2(int treb, bool tsw){
   bool cb_treb;
   if(treb&gt;0){cb_treb=1;}else{cb_treb=0;}
   byte set2 = cb_treb &lt;&lt; 7 | abs(treb) &lt;&lt; 3 | tsw &lt;&lt; 2;
   Write(set2,SETUP2);
}
void NJW1153::setup3(int bass){
   bool cb_bass;
   if(bass &gt; 0){cb_bass=1;}else{cb_bass=0;}
   byte set3 = cb_bass &lt;&lt; 7 | abs(bass) &lt;&lt; 3;
   Write(set3,SETUP3);
}
 
void NJW1153::setup4(byte input, byte multi_sel, bool rec2, bool rec1, bool rec0){
   byte set4 = input &lt;&lt; 5 | multi_sel &lt;&lt; 3 | rec2 &lt;&lt; 2 | rec1 &lt;&lt; 1 | rec0;
   Write(set4,SETUP4);
}

void NJW1153::Write(byte reg, byte dout){  // WRITE_REG 
   digitalWrite(SCK_PIN,HIGH);
   digitalWrite(REQ_PIN,LOW);
     for(int i = 7; i &gt;= 0; i--){
        digitalWrite(DATA_PIN, (dout &gt;&gt; i) &amp; 0x01);
        digitalWrite(SCK_PIN,LOW);digitalWrite(SCK_PIN,HIGH);
        }
     for(int i = 7; i &gt;= 0; i--){
        digitalWrite(DATA_PIN, (reg &gt;&gt; i) &amp; 0x01);
        digitalWrite(SCK_PIN,LOW); digitalWrite(SCK_PIN,HIGH);
        } 
   digitalWrite(REQ_PIN,HIGH); 
   delay(1);       
 }  </code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#define REQ    2
#define SCK    3
#define DATA   4

#include &lt;NJW1153.h&gt;

NJW1153 njw(REQ,SCK,DATA);


void setup(){
  delay(100);
  //init();
  audio();
  }

void loop(){
  
  }

void audio(){
  njw.volume1(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.volume2(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.volume3(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.volume4(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.volume5(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.volume6(0);//  0...-100dB === byte 0...100 | mute = byte 127
  njw.setup1(0, 0, 1, 0);
  // in_gain 0|-3|-6|-9|-12dB === byte 0...4
  // out_gain 0|+3|+6|+9|+12|+15|+18 === byte 0...6
  // bsw (SWch Output add to L/Rch Output) off|add === bool 0...1
  // ssw (SW Output ON/OFF) sw output on|sw output off === bool 0...1
  njw.setup2(0, 1);
  // treb +-10dB === int -10...+10
  // tsw (Tone Control) off|on === bool 0...1
  njw.setup3(0);
  // bass +-10dB === int -10...+10
  njw.setup4(0, 0,  0,0,0);
  // input 1...8 === byte 0...7
  // multi_sel (Multi Channel Selector):
  //       Input Selector Output Signal === byte 0
  //       Multi channel Input Signal A === byte 1   
  //       Multi channel Input Signal B === byte 2
  // rec2 on|off === bool 0...1
  // rec1 on|off === bool 0...1
  // rec0 on|off === bool 0...1
  }    </code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2023-06-01T05:16:47Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=565&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TDA7416]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=457&amp;action=new" />
			<summary type="html"><![CDATA[<p>Библиотека: <span class="attention-yellow"></span> </p><p><span class="attention-yellow"></span> </p><p><span class="attention-yellow"></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/02/69a634fbf8a4f434378bd26cd9eb34e9.gif" alt="http://forum.rcl-radio.ru/uploads/images/2022/02/69a634fbf8a4f434378bd26cd9eb34e9.gif" /></span> </p><br /><p>Тестовый скетч:</p><div class="codebox"><pre><code>#include &lt;TDA7416.h&gt;
#include &lt;Wire.h&gt;
TDA7416 tda;

void setup() {
 audio();
}

void loop() {
 
}

void audio(){
  tda.set_input(0, 0, 0); 
// Source selector 1...4 === byte 0...3
// Input gain 0...15 dB === byte 0...15
// Mute bool 0=off, 1=on
        tda.set_loudness(0, 0, 1);   
// Attenuation 0...-19 dB === byte 0...19
// Center frequency 200/400/600/800 Hz === byte 0...3
// Loudness order bool 0 = First order, bool 1 = Second order 
        tda.set_volume(0);
// Volume +32.0...-79.5 dB step 0.5 dB === int +64...-159 /// int 1 = 0.5 dB
        tda.set_eq1(0, 0, 0);
// 62/100 Hz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
// Equalizer center frequency 62/100 Hz === bool 0...1
        tda.set_eq2(0, 0);
// 157 Hz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
        tda.set_eq3(0, 0);
// 396 Hz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
        tda.set_eq4(0, 0);
// 1 kHz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
        tda.set_eq5(0, 0);
// 2.51 kHz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
        tda.set_eq6(0, 0, 0);
// 4/6.34 kHz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
// Equalizer center frequency 4/6.34 kHz === bool 0...1
        tda.set_eq7(0, 0, 0);
// 15/16 kHz
// Equalizer cut/boost level -15...+15 dB === int -15...+15
// Equalizer Q-Factor 2.2/1.8/1.4/1.0 === byte 0...3
// Equalizer center frequency 15/16 kHz === bool 0...1
        tda.set_miz_prog(0, 3, 0, 0, 1, 1);
// Mixing mute/eneble === bool 0...1
// Rear Source Selector input 1...4 === byte 0...3
// Mixing Target Speaker LF off/on === bool 0...1
// Mixing Target Speaker RF off/on === bool 0...1
// ZeroCross on HPF2 on/off === bool 0...1
// Spectrum Analyzer Detect Point  After EQ/Before EQ === bool 0...1
        tda.set_soft_mute(0, 2, 1, 10);
// Soft-mute on/off === bool 0...1
// Soft-mute time 0.48/0.96/123 ms === byte 0...2
// Secondary high-pass enable Filter available/No Filter (Gain) === bool 0...1
// Secondary high-pass effect (with ZeroCross) 4/6/8/10/12/14/16/18/20/22/0 dB === byte 0...10
        tda.set_sub(2, 1, 1, 1, 3);
// Subwoofer Filter off/80/120/160 Hz === byte 0...3
// Subwoofer Coupling  AC using SWIn pin/DC === bool 0...1
// Spectrum Analyzer Q-Factor 3.5/1.8 === bool 0...1
// High-pass enable off/on === bool 0...1
// High-pass cut-off frequency 90/135/180/225 === byte 0...3
        tda.set_conf_audio(0, 1, 1, 3, 1, 1, 1);
// PD input mode  single ended/pseudo differential === bool 0...1
// PD Input Gain -6/0 dB === bool 0...1
// Soft-step volume off/on === 0...1
// Soft-step time 0.32/1.28/5.12/20.4 ms === byte 0...3
// Loudness  flat/filter On === bool 0...1 
// Front AC speaker  AC coupling (ACin)/DC coupling === bool 0...1
// Rear effect  No effect signal/Equalizing signal === bool 0...1
        tda.set_mix_att(0);
// Gain/Attenuation +15...-79 dB === int 15...-79
        tda.set_lf_att(0, 1);
// Gain/Attenuation -79...+15 dB === int -79...15
// Soft-step on/off === bool 0...1
        tda.set_rf_att(0, 1);
// Gain/Attenuation -79...+15 dB === int -79...15
// Soft-step on/off === bool 0...1
        tda.set_lr_att(0, 1);
// Gain/Attenuation -79...+15 dB === int -79...15
// Soft-step on/off === bool 0...1
        tda.set_rr_att(0, 1);
// Gain/Attenuation -79...+15 dB === int -79...15
// Soft-step on/off === bool 0...1
        tda.set_sub_att(0, 1);
// Gain/Attenuation -79...+15 dB === int -79...15
// Soft-step on/off === bool 0...1
        tda.set_test(0);// 0b10000000 SC-Clock Normal mode
// off === byte 0

  }</code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-02-21T14:57:57Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=457&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[LC75341]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=447&amp;action=new" />
			<summary type="html"><![CDATA[<p>Протестировано.</p><p><span class="attention-yellow"></span> </p><br /><p><span class="attention-yellow"></span> </p><p>test.ino</p><div class="codebox"><pre><code>#include &lt;LC75341.h&gt;

LC75341 lc(3,4,2);   // CE,DI,CL

void setup(){
  Serial.begin(9600);
  delay(100);
  audio();

  }

void loop(){}

void audio(){
  lc.addr();
  lc.set_input(0);   // input 1...4 = byte 0...3 (byte 4...7 = All switches off)
  lc.set_gain(0);    // gain 0...30 dB step 2 dB = byte 0...15
  lc.set_volume(0);  // volume 0...-79 dB = byte 0...79
  lc.set_treble(0);  // treble -10...10 dB step 2 dB = int -5...5 
  lc.set_bass(0);    // bass 0...20 dB step 2 dB = int 0...10
  lc.set_ch(3);      // Channel Selection RCH = byte 2, LCH = byte 1, Left and right together = byte 3 
  lc.test();
  }</code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-01-19T16:44:35Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=447&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[LC75342]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=446&amp;action=new" />
			<summary type="html"><![CDATA[<p><span class="attention-yellow"></span> </p><p>LC75342.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru
// 15.01.2022

#ifndef LC75342_H
#define LC75342_H

#include &lt;Arduino.h&gt;
class LC75342
{
  public:
    LC75342(uint8_t ce, uint8_t di, uint8_t cl);

    void addr();
    void set_input(byte in);
    // input 1...4 = byte 0...3 (byte 4...7 = All switches off)
    void set_gain(byte gain); 
    // gain 0...30 dB step 2 dB = byte 0...15
    void set_volume(byte vol);
    // volume 0...-79 dB = byte 0...79
    void set_treble(int treb);
    // treble 10...-10 dB step 2 dB = int 5...-5 
    void set_bass(int bass);
    // bass 20...-20 dB step 2 dB = int 10...-10 
    void set_ch(byte ch);
    // Channel Selection RCH = byte 2, LCH = byte 1, Left and right together = byte 3
    void test();
    	
  private:
        uint8_t CE;
        uint8_t DI;
        uint8_t CL;
};
	
#endif //LC75342_H</code></pre></div><p>LC75342.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &quot;LC75342.h&quot;

LC75342::LC75342(uint8_t ce, uint8_t di, uint8_t cl){
	CE = ce;
        DI = di;
        CL = cl;
        pinMode(CE,OUTPUT);
        pinMode(DI,OUTPUT);
        pinMode(CL,OUTPUT);
        digitalWrite(CL,LOW);
        digitalWrite(CE,LOW);
        digitalWrite(DI,LOW);
}

void LC75342::addr(){
       digitalWrite(CL,LOW);
       digitalWrite(CE,LOW);
       byte addr = 0b01000001; // 0x82
    for(int i = 7; i &gt;= 0; i--){
       digitalWrite(CL,LOW);
       digitalWrite(DI, (addr &gt;&gt; i) &amp; 0x01);
       digitalWrite(CL,HIGH);
       }  
       digitalWrite(CE,HIGH); 
}

void LC75342::set_input(byte in){
    for(int i = 0; i &lt;= 3; i++){
       digitalWrite(CL,LOW);
    switch(i){
       case 0: digitalWrite(DI, (in &amp; 0b0001)&gt;&gt;0);break;
       case 1: digitalWrite(DI, (in &amp; 0b0010)&gt;&gt;1);break;
       case 2: digitalWrite(DI, (in &amp; 0b0100)&gt;&gt;2);break;
       case 3: digitalWrite(DI, (in &amp; 0b1000)&gt;&gt;3);break;
} 
       digitalWrite(CL,HIGH);
       }
}

void LC75342::set_gain(byte gain){
    for(int i = 0; i &lt;= 3; i++){
       digitalWrite(CL,LOW);
    switch(i){
       case 0: digitalWrite(DI, (gain &amp; 0b0001)&gt;&gt;0);break;
       case 1: digitalWrite(DI, (gain &amp; 0b0010)&gt;&gt;1);break;
       case 2: digitalWrite(DI, (gain &amp; 0b0100)&gt;&gt;2);break;
       case 3: digitalWrite(DI, (gain &amp; 0b1000)&gt;&gt;3);break;
} 
       digitalWrite(CL,HIGH);
       }
}

void LC75342::set_volume(byte vol){
    for(int i = 0; i &lt;= 7; i++){
       digitalWrite(CL,LOW);
    switch(i){
       case 0: digitalWrite(DI, (vol &amp; 0b00000001)&gt;&gt;0);break;
       case 1: digitalWrite(DI, (vol &amp; 0b00000010)&gt;&gt;1);break;
       case 2: digitalWrite(DI, (vol &amp; 0b00000100)&gt;&gt;2);break;
       case 3: digitalWrite(DI, (vol &amp; 0b00001000)&gt;&gt;3);break;
       case 4: digitalWrite(DI, (vol &amp; 0b00010000)&gt;&gt;4);break;
       case 5: digitalWrite(DI, (vol &amp; 0b00100000)&gt;&gt;5);break;
       case 6: digitalWrite(DI, (vol &amp; 0b01000000)&gt;&gt;6);break;
       case 7: digitalWrite(DI, (vol &amp; 0b10000000)&gt;&gt;7);break;
} 
       digitalWrite(CL,HIGH);
       }
}

void LC75342::set_treble(int treb){
      switch(treb){
        case 5:  treb = 0b1010;break;//10dB
        case 4:  treb = 0b0010;break;//8dB
        case 3:  treb = 0b1100;break;//6dB
        case 2:  treb = 0b0100;break;//4dB
        case 1:  treb = 0b1000;break;//2dB
        case 0:  treb = 0b0000;break;//0dB
        case -1: treb = 0b1001;break;//-2dB
        case -2: treb = 0b0101;break;//-4dB
        case -3: treb = 0b1101;break;//-6dB
        case -4: treb = 0b0011;break;//-8dB
        case -5: treb = 0b1011;break;//10dB
        }
      for(int i = 3; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (treb &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }
}

void LC75342::set_bass(int bass){
      switch(bass){
        case 10:  bass = 0b010100;break;//20dB
        case 9 :  bass = 0b100100;break;//18dB
        case 8 :  bass = 0b000100;break;//16dB
        case 7 :  bass = 0b111000;break;//14dB
        case 6 :  bass = 0b011000;break;//12dB
        case 5 :  bass = 0b101000;break;//10dB   
        case 4 :  bass = 0b001000;break;//8dB  
        case 3 :  bass = 0b110000;break;//6dB 
        case 2 :  bass = 0b010000;break;//4dB  
        case 1 :  bass = 0b101000;break;//2dB
        case 0 :  bass = 0b000000;break;//0dB
        case -1:  bass = 0b100010;break;//-2dB
        case -2:  bass = 0b010010;break;//-4dB
        case -3:  bass = 0b110010;break;//-6dB
        case -4:  bass = 0b001010;break;//-8dB
        case -5:  bass = 0b101010;break;//-10dB
        case -6:  bass = 0b011010;break;//-12dB
        case -7:  bass = 0b111010;break;//-14dB
        case -8:  bass = 0b000110;break;//-16dB
        case -9:  bass = 0b100110;break;//-18dB
        case -10: bass = 0b010110;break;//-20dB
        }
      for(int i = 5; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (bass &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }
}

void LC75342::set_ch(byte ch){
      switch(ch){
        case 1: ch = 0b01;break;
        case 2: ch = 0b10;break;
        case 3: ch = 0b11;break;
      }
      for(int i = 1; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (ch &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }
}

void LC75342::test(){
      byte test = 0;
      for(int i = 3; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DI, (test &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }
      digitalWrite(CL,LOW);
      digitalWrite(CE,LOW); 
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;LC75342.h&gt;

LC75342 lc(2,3,4);   // CE,DI,CL

void setup(){
  audio();
  }

void loop(){}

void audio(){
  lc.addr();
  lc.set_input(0);   // input 1...4 = byte 0...3 (byte 4...7 = All switches off)
  lc.set_gain(0);    // gain 0...30 dB step 2 dB = byte 0...15
  lc.set_volume(0);  // volume 0...-79 dB = byte 0...79
  lc.set_treble(0);  // treble 10...-10 dB step 2 dB = int 5...-5 
  lc.set_bass(0);    // bass 20...-20 dB step 2 dB = int 10...-10
  lc.set_ch(3);      // Channel Selection RCH = byte 2, LCH = byte 1, Left and right together = byte 3 
  lc.test();
  }</code></pre></div><div class="quotebox"><blockquote><p>Скетч использует 1214 байт (3%) памяти устройства. Всего доступно 32256 байт.<br />Глобальные переменные используют 12 байт (0%) динамической памяти, оставляя 2036 байт для локальных переменных. Максимум: 2048 байт.</p></blockquote></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-01-15T05:33:31Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=446&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[BD34701KS2]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=442&amp;action=new" />
			<summary type="html"><![CDATA[<p>Требуется тестирование!!!</p><p>BD34701KS2&nbsp; - <span class="attention-yellow"></span> </p><p>BD34701KS2.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef BD34701KS2_H
#define BD34701KS2_H

#define ADDR_0 0
#define ADDR_1 1
#define ADDR_2 2
#define ADDR_3 3
#define ADDR_7 11


#include &lt;Arduino.h&gt;
class BD34701KS2
{
  public:
    BD34701KS2(uint8_t cl, uint8_t da);
    void set0(int chip, int sub, int rec, int input_main); 
    // Input Selector (MAIN)
    // chip &gt;&gt; 0 (0...1)
    // sub &gt;&gt; 0 (0...1)
    // rec &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
    void set1(int chip, int input);
    // IInput Selector (SUB)
    // chip &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
    void set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch);
    // chip &gt;&gt; 0 (0...1)
    // adc_att &gt;&gt; 0 (0...8)
    // mode_sbl_sbrch &gt;&gt; 1 (0...3)
    // mmode_sl_srch &gt;&gt; 1 (0...3)
    // mode_c_swch &gt;&gt; 1 (0...3)
    // mode_fr_frch &gt;&gt; 1 (0...3)
    void set3(int chip, int volume, int ch_vol_sel);
    // chip &gt;&gt; 0 (0...1)
    // volume &gt;&gt; 0 (-190...64)
    // ch_vol_sel &gt;&gt; 0,1,2,3,4,5,6,7
    void set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab);
    // chip &gt;&gt; 0 (0...1)
    // reset &gt;&gt; 0 (0...1)
    // base_clock &gt;&gt; 0 (0...1)
    // sw_ba &gt;&gt; 0 (0...7)
    // sw_ab &gt;&gt; 0 (0...7)

	
  private:
	void writeBD(char data);
        uint8_t CL;
        uint8_t DA;
};
	
#endif //BD34701KS2_H</code></pre></div><br /><p>BD34701KS2.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &quot;BD34701KS2.h&quot;

BD34701KS2::BD34701KS2(uint8_t cl, uint8_t da){
	CL = cl;
        DA = da;
      pinMode(CL,OUTPUT);
      pinMode(DA,OUTPUT);
}


void BD34701KS2::set0(int chip, int sub, int rec, int input_main){
  writeBD(ADDR_0 + (2 &lt;&lt; chip) + (6 &lt;&lt; sub) + (9 &lt;&lt; rec) + (10 &lt;&lt; input_main) );
}

void BD34701KS2::set1(int chip, int input){
  writeBD(ADDR_1 + (2 &lt;&lt; chip) + (10 &lt;&lt; input) );
}

void BD34701KS2::set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch){
  writeBD(ADDR_2 + (2 &lt;&lt; chip) + (4 &lt;&lt; adc_att) + (8 &lt;&lt; mode_sbl_sbrch) + (10 &lt;&lt; mode_sl_srch) + (12 &lt;&lt; mode_c_swch) + (14 &lt;&lt; mode_fr_frch) );
}

void BD34701KS2::set3(int chip, int volume, int ch_vol_sel){
    int vol_d;
    if(volume &gt; 0) {vol_d = 0;}
    if(volume &lt;= 0) {volume = abs(volume);vol_d = 1;}
  writeBD(ADDR_3 + (2 &lt;&lt; chip) + (4 &lt;&lt; volume) + (13 &lt;&lt; ch_vol_sel) + (12 &lt;&lt; vol_d) );
}

void BD34701KS2::set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab){
   writeBD(ADDR_7 + (2 &lt;&lt; chip) + (6 &lt;&lt; reset) + (9 &lt;&lt; base_clock) + (10 &lt;&lt; sw_ba) + (13 &lt;&lt; sw_ab) );
}


void BD34701KS2::writeBD(char data){
   
   for(int i = 15; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DA, (data &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }  
   digitalWrite(CL,LOW);
   digitalWrite(DA,LOW);
   delay(100);
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;BD34701KS2.h&gt;

  BD34701KS2 bd(2,3); // CL, DA

void setup() {
  audio();

}

void loop() {
  // put your main code here, to run repeatedly:

}

void audio(){
   bd.set0(0, 0, 0, 1); 
    // Input Selector (MAIN)
    // chip &gt;&gt; 0 (0...1)
    // sub &gt;&gt; 0 (0...1)
    // rec &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
     bd.set1(0, 1);
    // IInput Selector (SUB)
    // chip &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
     bd.set2(0,0,1,1,1,1);
    // chip &gt;&gt; 0 (0...1)
    // adc_att &gt;&gt; 0 (0...8)
    // mode_sbl_sbrch &gt;&gt; 1 (0...3)
    // mmode_sl_srch &gt;&gt; 1 (0...3)
    // mode_c_swch &gt;&gt; 1 (0...3)
    // mode_fr_frch &gt;&gt; 1 (0...3)
     bd.set3(0, 0, 0);
     bd.set3(0, 0, 1);
     bd.set3(0, 0, 2);
     bd.set3(0, 0, 3);
     bd.set3(0, 0, 4);
     bd.set3(0, 0, 5);
     bd.set3(0, 0, 6);
     bd.set3(0, 0, 7);
    // chip &gt;&gt; 0 (0...1)
    // volume &gt;&gt; 0 (-190...64)
    // ch_vol_sel &gt;&gt; 0,1,2,3,4,5,6,7
     bd.set7(0, 0, 0, 0, 0);
    // chip &gt;&gt; 0 (0...1)
    // reset &gt;&gt; 0 (0...1)
    // base_clock &gt;&gt; 0 (0...1)
    // sw_ba &gt;&gt; 0 (0...7)
    // sw_ab &gt;&gt; 0 (0...7)

  }</code></pre></div><p>Скетч использует 1184 байт (3%) памяти устройства. Всего доступно 32256 байт.<br />Глобальные переменные используют 11 байт (0%) динамической памяти, оставляя 2037 байт для локальных переменных. Максимум: 2048 байт.</p>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-01-12T18:15:19Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=442&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[BD34701KS2]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=441&amp;action=new" />
			<summary type="html"><![CDATA[<p>BD34701KS2&nbsp; - <span class="attention-yellow"></span> </p><p>BD34701KS2.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef BD34701KS2_H
#define BD34701KS2_H

#define ADDR_0 0
#define ADDR_1 1
#define ADDR_2 2
#define ADDR_3 3
#define ADDR_7 11


#include &lt;Arduino.h&gt;
class BD34701KS2
{
  public:
    BD34701KS2(uint8_t cl, uint8_t da);
    void set0(int chip, int sub, int rec, int input_main); 
    // Input Selector (MAIN)
    // chip &gt;&gt; 0 (0...1)
    // sub &gt;&gt; 0 (0...1)
    // rec &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
    void set1(int chip, int input);
    // IInput Selector (SUB)
    // chip &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
    void set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch);
    // chip &gt;&gt; 0 (0...1)
    // adc_att &gt;&gt; 0 (0...8)
    // mode_sbl_sbrch &gt;&gt; 1 (0...3)
    // mmode_sl_srch &gt;&gt; 1 (0...3)
    // mode_c_swch &gt;&gt; 1 (0...3)
    // mode_fr_frch &gt;&gt; 1 (0...3)
    void set3(int chip, int volume, int ch_vol_sel);
    // chip &gt;&gt; 0 (0...1)
    // volume &gt;&gt; 0 (-190...64)
    // ch_vol_sel &gt;&gt; 0,1,2,3,4,5,6,7
    void set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab);
    // chip &gt;&gt; 0 (0...1)
    // reset &gt;&gt; 0 (0...1)
    // base_clock &gt;&gt; 0 (0...1)
    // sw_ba &gt;&gt; 0 (0...7)
    // sw_ab &gt;&gt; 0 (0...7)

	
  private:
	void writeBD(char data);
        uint8_t CL;
        uint8_t DA;
};
	
#endif //BD34701KS2_H</code></pre></div><br /><p>BD34701KS2.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &quot;BD34701KS2.h&quot;

BD34701KS2::BD34701KS2(uint8_t cl, uint8_t da){
	CL = cl;
        DA = da;
      pinMode(CL,OUTPUT);
      pinMode(DA,OUTPUT);
}


void BD34701KS2::set0(int chip, int sub, int rec, int input_main){
  writeBD(ADDR_0 + (2 &lt;&lt; chip) + (6 &lt;&lt; sub) + (9 &lt;&lt; rec) + (10 &lt;&lt; input_main) );
}

void BD34701KS2::set1(int chip, int input){
  writeBD(ADDR_1 + (2 &lt;&lt; chip) + (10 &lt;&lt; input) );
}

void BD34701KS2::set2(int chip, int adc_att, int mode_sbl_sbrch, int mode_sl_srch, int mode_c_swch, int mode_fr_frch){
  writeBD(ADDR_2 + (2 &lt;&lt; chip) + (4 &lt;&lt; adc_att) + (8 &lt;&lt; mode_sbl_sbrch) + (10 &lt;&lt; mode_sl_srch) + (12 &lt;&lt; mode_c_swch) + (14 &lt;&lt; mode_fr_frch) );
}

void BD34701KS2::set3(int chip, int volume, int ch_vol_sel){
    int vol_d;
    if(volume &gt; 0) {vol_d = 0;}
    if(volume &lt;= 0) {volume = abs(volume);vol_d = 1;}
  writeBD(ADDR_3 + (2 &lt;&lt; chip) + (4 &lt;&lt; volume) + (13 &lt;&lt; ch_vol_sel) + (12 &lt;&lt; vol_d) );
}

void BD34701KS2::set7(int chip, int reset, int base_clock, int sw_ba, int sw_ab){
   writeBD(ADDR_7 + (2 &lt;&lt; chip) + (6 &lt;&lt; reset) + (9 &lt;&lt; base_clock) + (10 &lt;&lt; sw_ba) + (13 &lt;&lt; sw_ab) );
}


void BD34701KS2::writeBD(char data){
   
   for(int i = 15; i &gt;= 0; i--){
        digitalWrite(CL,LOW);
        digitalWrite(DA, (data &gt;&gt; i) &amp; 0x01);
        digitalWrite(CL,HIGH);
        }  
   digitalWrite(CL,LOW);
   digitalWrite(DA,LOW);
   delay(100);
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;BD34701KS2.h&gt;

  BD34701KS2 bd(2,3); // CL, DA

void setup() {
  audio();

}

void loop() {
  // put your main code here, to run repeatedly:

}

void audio(){
   bd.set0(0, 0, 0, 1); 
    // Input Selector (MAIN)
    // chip &gt;&gt; 0 (0...1)
    // sub &gt;&gt; 0 (0...1)
    // rec &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
     bd.set1(0, 1);
    // IInput Selector (SUB)
    // chip &gt;&gt; 0 (0...1)
    // input &gt;&gt; 1 (1...12 = in1...in12 , 0 = MUTE)
     bd.set2(0,0,1,1,1,1);
    // chip &gt;&gt; 0 (0...1)
    // adc_att &gt;&gt; 0 (0...8)
    // mode_sbl_sbrch &gt;&gt; 1 (0...3)
    // mmode_sl_srch &gt;&gt; 1 (0...3)
    // mode_c_swch &gt;&gt; 1 (0...3)
    // mode_fr_frch &gt;&gt; 1 (0...3)
     bd.set3(0, 0, 0);
     bd.set3(0, 0, 1);
     bd.set3(0, 0, 2);
     bd.set3(0, 0, 3);
     bd.set3(0, 0, 4);
     bd.set3(0, 0, 5);
     bd.set3(0, 0, 6);
     bd.set3(0, 0, 7);
    // chip &gt;&gt; 0 (0...1)
    // volume &gt;&gt; 0 (-190...64)
    // ch_vol_sel &gt;&gt; 0,1,2,3,4,5,6,7
     bd.set7(0, 0, 0, 0, 0);
    // chip &gt;&gt; 0 (0...1)
    // reset &gt;&gt; 0 (0...1)
    // base_clock &gt;&gt; 0 (0...1)
    // sw_ba &gt;&gt; 0 (0...7)
    // sw_ab &gt;&gt; 0 (0...7)

  }</code></pre></div><p>Скетч использует 1184 байт (3%) памяти устройства. Всего доступно 32256 байт.<br />Глобальные переменные используют 11 байт (0%) динамической памяти, оставляя 2037 байт для локальных переменных. Максимум: 2048 байт.</p>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-01-12T18:15:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=441&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[SI4703]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=421&amp;action=new" />
			<summary type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/09/0921f97ae2f4000fe5477b43e61299a2.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/09/0921f97ae2f4000fe5477b43e61299a2.png" /></span> </p><p>Библиотека - <span class="attention-yellow"></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/01/99dae35c6da6b4530455b7f6b56ee66e.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/01/99dae35c6da6b4530455b7f6b56ee66e.png" /></span> </p><br /><br /><p>Тестовый скетч</p><div class="codebox"><pre><code>#include &lt;si4703.h&gt;
 si4703 radio(3,2,4,5); // SDIO, SCLK, SEN, RST
 int f_cannel = 1019;

void setup() {
  radio.init();
  Serial.begin(9600); 
  
  radio.fm_start(f_cannel-760);
  radio.si_volume(10);// 0...15
}

void loop() {
  if(Serial.available()){
    char serial = Serial.read();
    if(serial == &#039;u&#039;){radio.seek_up();}
    if(serial == &#039;d&#039;){radio.seek_down();}
    }  
        
Serial.print(&quot; F = &quot;);
Serial.print(float((radio.nom_ch()+760.00)/10),2);
Serial.print(&quot; RDS =&quot;);
Serial.print(radio.readRDS());
Serial.print(&quot; STC =&quot;);
Serial.print(radio.seach());
Serial.print(&quot; RSSI =&quot;);
Serial.print(radio.rss());
Serial.print(&quot; ST =&quot;);
Serial.println(radio.st_mn());
}</code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-09-22T17:46:51Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=421&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[PT2329]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=420&amp;action=new" />
			<summary type="html"><![CDATA[<p><span class="attention-yellow"></span> </p><p>PT2329.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef PT2329_H
#define PT2329_H

#define PT2329_address 0b1000001

#define LCH_VOL      0b00000000
#define RCH_VOL      0b00000001
#define BASS         0b00000010
#define TREB         0b00000011
#define IN_GAIN      0b00000100
#define IN_SEL       0b00000101

#include &lt;Arduino.h&gt;
class PT2329
{
  public:
    PT2329();
      void LCH_Volume(byte l_volume); 
// l_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      void RCH_Volume(byte r_volume); 
// r_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      void setBass(char set_bass);
// set_bass &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      void setTreb(char set_treb);
// set_treb &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      void setIn_gain(byte in_gain);
// in_gain &gt;&gt;&gt; byte 0...12 === 0...12 dB step 1 dB
      void setIn_sel(byte in_sel, byte rec, byte rec_gain, byte surr, byte mode);
// in_sel &gt;&gt;&gt; byte 1..6 === in1...in6, int 0 === mute
// rec &gt;&gt;&gt; byte 0...1 === If A=0 means IN6 output OFF, than A=1 means IN6 output ON
// rec_gain &gt;&gt;&gt; byte 0 === -2 dB, 1 === 0 dB
// surr &gt;&gt;&gt; byte 0 === Surround Low, 1 === Surround High
// mode &gt;&gt;&gt; byte 0 === Bypass, 1 === Tone, 2 === Tone &amp; Sur
		
 private:
	void writeWire(byte a, byte b);
};
	
#endif //PT2329_H</code></pre></div><p>PT2329.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;PT2329.h&quot;

PT2329::PT2329(){
	Wire.begin();
}

void PT2329::LCH_Volume(byte l_volume){
  writeWire(LCH_VOL, l_volume &lt;&lt; 1);	
}
void PT2329::RCH_Volume(byte r_volume){
  writeWire(RCH_VOL, r_volume &lt;&lt; 1);	
} 

void PT2329::setBass(char set_bass){
  int bass_f;
  if(set_bass&gt;=0){bass_f = set_bass + 0b10000;}
   else{bass_f = abs(set_bass);}
  writeWire(BASS, bass_f &lt;&lt; 3);	
}
void PT2329::setTreb(char set_treb){
  int treb_f;
  if(set_treb&gt;=0){treb_f = set_treb + 0b10000;}
   else{treb_f = abs(set_treb);}
  writeWire(TREB, treb_f &lt;&lt; 3);	
}

void PT2329::setIn_gain(byte in_gain){
  writeWire(IN_GAIN, in_gain &lt;&lt; 4);
}

void PT2329::setIn_sel(byte in_sel, byte rec, byte rec_gain, byte surr, byte mode){
  writeWire(IN_SEL, (in_sel &lt;&lt; 5) + (rec &lt;&lt; 4) + (rec_gain &lt;&lt; 3) + (surr &lt;&lt; 2) + (mode));
}


void PT2329::writeWire(byte a, byte b){
  Wire.beginTransmission(PT2329_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt;
#include &lt;PT2329.h&gt;
 PT2329 pt;

void setup() {
  Wire.begin();
  audio();
}

void loop() {
 

}

void audio(){
      pt.LCH_Volume(0); 
// l_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.RCH_Volume(0); 
// r_volume &gt;&gt;&gt; byte 87...0 === -87...0 dB step 1 dB || int 127 === mute
      pt.setBass(0);
// set_bass &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setTreb(0);
// set_treb &gt;&gt;&gt; char -15...+15 === -15...+15 dB step 1 dB
      pt.setIn_gain(0);
// in_gain &gt;&gt;&gt; byte 0...12 === 0...12 dB step 1 dB
      pt.setIn_sel(1, 1, 0, 1, 2);
// in_sel &gt;&gt;&gt; byte 1..6 === in1...in6, int 0 === mute
// rec &gt;&gt;&gt; byte 0...1 === If A=0 means IN6 output OFF, than A=1 means IN6 output ON
// rec_gain &gt;&gt;&gt; byte 0 === -2 dB, 1 === 0 dB
// surr &gt;&gt;&gt; byte 0 === Surround Low, 1 === Surround High
// mode &gt;&gt;&gt; byte 0 === Bypass, 1 === Tone, 2 === Tone &amp; Sur
  }</code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-08-30T05:18:52Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=420&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TDA7433]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=419&amp;action=new" />
			<summary type="html"><![CDATA[<p><span class="attention-yellow"></span> </p><br /><p>TDA7433.h</p><div class="codebox"><pre><code>// liman324@yandex.ru rcl-radio.ru


#ifndef TDA7433_H
#define TDA7433_H

#define TDA7433_address 0b1000101

#define INPUT      0b00000000
#define VOLUME     0b00000001
#define BASS_TREB  0b00000010
#define ATT_LF     0b00000011
#define ATT_LR     0b00000100
#define ATT_RF     0b00000101
#define ATT_RR     0b00000110


#include &lt;Arduino.h&gt;
class TDA7433
{
  public:
    TDA7433();
        void setInput(byte in, byte bass_cut, byte bass_range, int bass); 
// in &gt;&gt;&gt; 0=in2, 1=in1, 2=mono, 3=mute
// bass_cut &gt;&gt;&gt; 0=non-symmetrical bass cut, 1=symmetrical bass cut
// bass_range &gt;&gt;&gt; 0=extended bass range, 1=standard bass range ±14dB
// bass &gt;&gt;&gt; -18...+18 (-18...+18 dB)
        void setVolume(int vol);
// vol &gt;&gt;&gt; -79...+32 (-79...+32 dB)
        void setBass_Treb(int bass, int treb);
// bass &gt;&gt;&gt; -18...+18 (-18...+18 dB)
// treb &gt;&gt;&gt; -14...+14 (-14...+14 dB)
        void setAtt_LF(int lf);
// lf &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
        void setAtt_LR(int lr);
// lr &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
        void setAtt_RF(int rf);
// rf &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
        void setAtt_RR(int rr);
// rr &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
		
 private:
	void writeWire(byte a, byte b);
};
	
#endif //TDA7433_H</code></pre></div><p>TDA7433.cpp<br /></p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;TDA7433.h&quot;

TDA7433::TDA7433(){
	Wire.begin();
}

void TDA7433::setInput(byte in, byte bass_cut, byte bass_range, int bass){
  if(bass&gt;-16&amp;&amp;bass&lt;16){bass_range = 1;}else{bass_range = 0;}
  writeWire(INPUT, in + (bass_cut &lt;&lt; 3) + (bass_range &lt;&lt; 4));	
} 

void TDA7433::setVolume(int vol){
  byte vol_digit;
  if(vol&lt;=0){vol_digit = abs(vol)+32;}
  if(vol&gt;0){vol_digit = 32-vol;}
  writeWire(VOLUME, vol_digit);
}

void TDA7433::setBass_Treb(int bass, int treb){
  switch(treb){
   case -14: treb = 0b00000000;break;
   case -12: treb = 0b00000001;break;
   case -10: treb = 0b00000010;break;
   case -8 : treb = 0b00000011;break;
   case -6 : treb = 0b00000100;break;
   case -4 : treb = 0b00000101;break;
   case -2 : treb = 0b00000110;break;
   case  0 : treb = 0b00000111;break;
   case  2 : treb = 0b00001110;break;
   case  4 : treb = 0b00001101;break;
   case  6 : treb = 0b00001100;break;
   case  8 : treb = 0b00001011;break;
   case  10: treb = 0b00001010;break;
   case  12: treb = 0b00001001;break;
   case  14: treb = 0b00001000;break;
}
  switch(bass){
   case -18: bass = 0b00000001;break;
   case -16: bass = 0b00000000;break;
   case -14: bass = 0b00000000;break;
   case -12: bass = 0b00000001;break;
   case -10: bass = 0b00000010;break;
   case -8 : bass = 0b00000011;break;
   case -6 : bass = 0b00000100;break;
   case -4 : bass = 0b00000101;break;
   case -2 : bass = 0b00000110;break;
   case  0 : bass = 0b00000111;break;
   case  2 : bass = 0b00001110;break;
   case  4 : bass = 0b00001101;break;
   case  6 : bass = 0b00001100;break;
   case  8 : bass = 0b00001011;break;
   case 10 : bass = 0b00001010;break;
   case 12 : bass = 0b00001001;break;
   case 14 : bass = 0b00001000;break;
   case 16 : bass = 0b00001000;break;
   case 18 : bass = 0b00001001;break;
}
  writeWire(BASS_TREB, treb + (bass &lt;&lt; 4));
}

void TDA7433::setAtt_LF(int lf){
  writeWire(ATT_LF, lf);
}
void TDA7433::setAtt_LR(int lr){
  writeWire(ATT_LR, lr);
}
void TDA7433::setAtt_RF(int rf){
  writeWire(ATT_RF, rf);
}
void TDA7433::setAtt_RR(int rr){
  writeWire(ATT_RR, rr);
}

void TDA7433::writeWire(byte a, byte b){
  Wire.beginTransmission(TDA7433_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;TDA7433.h&gt;

TDA7433 tda;

void setup(){
  audio();
  }

void loop(){
  
  }
void audio(){
        tda.setInput(1, 0, 0, 0); 
// in &gt;&gt;&gt; 0=in2, 1=in1, 2=mono, 3=mute
// bass_cut &gt;&gt;&gt; 0=non-symmetrical bass cut, 1=symmetrical bass cut
// bass_range &gt;&gt;&gt; 0=extended bass range, 1=standard bass range ±14dB
// bass &gt;&gt;&gt; -18...+18 (-18...+18 dB) step 2
        tda.setVolume(0);
// vol &gt;&gt;&gt; -79...+32 (-79...+32 dB)
        tda.setBass_Treb(0, 0);
// bass &gt;&gt;&gt; -18...+18 (-18...+18 dB) step 2
// treb &gt;&gt;&gt; -14...+14 (-14...+14 dB) step 2
        tda.setAtt_LF(0);
// lf &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute 
        tda.setAtt_LR(0);
// lr &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
        tda.setAtt_RF(0);
// rf &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
        tda.setAtt_RR(0);
// rr &gt;&gt;&gt; 0...31 (0...-31 dB), 32=mute
  }
  </code></pre></div>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-08-26T17:58:46Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=419&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TDA7303]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=296&amp;action=new" />
			<summary type="html"><![CDATA[<p>Digital controlled stereo audio processor with loudness</p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/04/68ceb6de277e5cd86031bf3caa11856f.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/04/68ceb6de277e5cd86031bf3caa11856f.png" /></span> </p><p>The TDA7303 is a volume, tone (bass and treble)<br />balance (left/right) and fader (front/rear)<br />processor for quality audio applications in car<br />radio, Hi-Fi and portable systems. </p><p><span class="attention-yellow"></span> </p><p>TDA7303.h</p><div class="codebox"><pre><code>// ALEXSANDER LIMAN
// liman324@yandex.ru
// rcl-radio.ru
// 09.04.21

#ifndef TDA7303_H
#define TDA7303_H

#define TDA7303_address 0b1000100 

#include &lt;Arduino.h&gt;
class TDA7303
{
  public:
    TDA7303();
    void volume(byte vol); // byte 0...63 === 0...-78.75 dB (step 1.25 dB) 
    void att_lr(byte lr);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    void att_rr(byte rr);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    void att_lf(byte lf);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    void att_rf(byte rf);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    void audio_sw(byte in, bool loud, byte loud_gain);
      // byte 0...2 === input 0...2, byte 3 === Not allowed
      // bool 0...1 === loudness_on...loudness_off
      // byte 0...3 === loudness_gain 11.25...0 dB
    void set_bass(char bass); // int -7...7 === bass -14...+14 dB
    void set_treb(char treb); // int -7...7 === treble -14...+14 dB
	
  private:
	void writeWire(byte a);
};
	
#endif //TDA7303_H</code></pre></div><p>TDA7303.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;TDA7303.h&quot;

TDA7303::TDA7303(){
	Wire.begin();
}

void TDA7303::volume(byte vol){
     writeWire(0b00000000 + vol); 
}

void TDA7303::att_lr(byte lr){
     writeWire(0b11000000 + lr); 
}

void TDA7303::att_rr(byte rr){
     writeWire(0b11100000 + rr); 
}

void TDA7303::att_lf(byte lf){
     writeWire(0b10000000 + lf); 
}

void TDA7303::att_rf(byte rf){
     writeWire(0b10100000 + rf); 
}

void TDA7303::audio_sw(byte in, bool loud, byte loud_gain){
     writeWire(0b01000000 + in + (loud &lt;&lt; 2) + (loud_gain &lt;&lt; 3));
}

void TDA7303::set_bass(char bass){
      if(bass &gt;= 0){writeWire(0b01100000 + 15 - bass);}
      if(bass &lt; 0){writeWire( 0b01100000 + 7 + bass);}
}

void TDA7303::set_treb(char treb){
      if(treb &gt;= 0){writeWire(0b01110000 + 15 - treb);}
      if(treb &lt; 0){writeWire( 0b01110000 + 7 + treb);}
}

void TDA7303::writeWire(byte a){
  Wire.beginTransmission(TDA7303_address);
  Wire.write (a);
  Wire.endTransmission();
}</code></pre></div><p>test.ino (протестировано)</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;TDA7303.h&gt;

TDA7303 tda;
 
void setup(){}

void loop(){
  audio();
  delay(1000);
}
  
void audio(){
    tda.volume(0);  // byte 0...63 === 0...-78.75 dB (step 1.25 dB) 
    tda.att_lr(0);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_rr(0);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_lf(0);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.att_rf(0);  // byte 0...30 === 0...-37.5 dB (step 1.25 dB), byte 31 === mute
    tda.audio_sw(0, 1, 3);
      // byte 0...2 === input 0...2, byte 3 === Not allowed
      // bool 0...1 === loudness_on...loudness_off
      // byte 0...3 === loudness_gain 11.25...0 dB
    tda.set_bass(2); // char -7...7 === bass -14...+14 dB
    tda.set_treb(0); // char -7...7 === treble -14...+14 dB
}</code></pre></div><p><span class="attention-yellow"></span></p>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-04-09T17:52:22Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=296&amp;action=new</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[R2S15900SP]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?id=277&amp;action=new" />
			<summary type="html"><![CDATA[<p>Description<br />The R2S15900SP is an optimum audio signal processor IC for TV. It has a 5ch input selector, surround/pseudo stereo tone control(2band), output gain control and 2ch master volume. It can control all of these functions with I2 C bus.</p><p>Features<br />• Volume 0 to –84dB, –∞/ 1dB step | Each channel is independence control.<br />• 5 input selector + MUTE<br />• 2 Rec output<br />• Tone control Bass: –15dB to +15dB/ 1dB step | Treble: –15dB to +15dB/ 1dB step<br />• Surround &lt;Low/ High&gt; / Pseudo Stereo<br />• Mode selector Bypass/ Tone / Tone &amp; Pseudo Stereo or Surround<br />• Output gain control 0dB/ +4.5dB<br />• I2C-BUS control<br />• Package 28pin SOP </p><p>Даташит - <span class="attention-yellow"></span> </p><p>Библиотека - <span class="attention-yellow"></span> </p><p>R2S15900SP.h</p><div class="codebox"><pre><code>// Алксандр Лиман
// liman324@yandex.ru

#ifndef R2S15900SP_H
#define R2S15900SP_H
#define R2S15900SP_address 0b1000001 

#define R2S15900SP_VOL_L   0x00
#define R2S15900SP_VOL_R   0x01
#define R2S15900SP_INPUT   0x02
#define R2S15900SP_BASS    0x03
#define R2S15900SP_TREB    0x04

#include &lt;Arduino.h&gt;
class R2S15900SP
{
  public:
    R2S15900SP();
              
        void setVol_l(int vol_l);  // volume left &gt;&gt; int 84...0 === -84...0 dB
        void setVol_r(int vol_r);  // volume_right &gt;&gt; int 84...0 === -84...0 dB
        void setIn(int in, int gain, int mute);     
             // input &gt;&gt; int 0 === all off | int 1...5 === input 1...5 
             // gain &gt;&gt; int 0...1 === 0 dB...+4.5 dB
             // mute &gt;&gt; int 0...1 === mute on...mute off
        void set_Bass(int surr, int mode, int bass);
             // surround mode &gt;&gt; int 0...1 === low level...high level
             // mode selector &gt;&gt; int 0...3 === bypass tone tone&amp;Pseudo_stereo tone&amp;Surround
             // tone control bass &gt;&gt; int -15...15 === -15dB...+15dB
        void set_Treb(int treb);   // tone control treble &gt;&gt; int -15...15 === -15dB...+15dB

  private:
	void writeWire(char a, char b);
};
	
#endif //R2S15900SP_H</code></pre></div><br /><p>R2S15900SP.cpp</p><div class="codebox"><pre><code>#include &lt;Arduino.h&gt;
#include &lt;Wire.h&gt;
#include &quot;R2S15900SP.h&quot;

R2S15900SP::R2S15900SP(){
	Wire.begin();
}

void R2S15900SP::setVol_l(int vol_l){
      byte vol_l10 = vol_l/10;
      byte vol_l1 = vol_l%10;
  writeWire(R2S15900SP_VOL_L, (vol_l10 &lt;&lt; 4) + vol_l1);
}

void R2S15900SP::setVol_r(int vol_r){
      byte vol_r10 = vol_r/10;
      byte vol_r1 = vol_r%10;
  writeWire(R2S15900SP_VOL_R, (vol_r10 &lt;&lt; 4) + vol_r1);
}

void R2S15900SP::setIn(int in, int gain, int mute){
      switch(in){
       case 0: in = 0b00011;break;
       case 1: in = 0b00111;break;
       case 2: in = 0b01011;break;
       case 3: in = 0b01111;break;
       case 4: in = 0b10011;break;
       case 5: in = 0b10111;break;
}
  writeWire(R2S15900SP_INPUT, (in &lt;&lt; 3) + (gain &lt;&lt; 2) + (mute &lt;&lt; 1) + mute);
}

void R2S15900SP::set_Bass(int surr, int mode, int bass){
       if(bass &gt;= 0){bass = bass + 0b10000;}
       if(bass &lt;  0){bass = abs(bass);}
  writeWire(R2S15900SP_BASS, (bass &lt;&lt; 3) + (surr &lt;&lt; 2) + mode);
}

void R2S15900SP::set_Treb(int treb){
       if(treb &gt;= 0){treb = treb + 0b10000;}
       if(treb &lt;  0){treb = abs(treb);}
  writeWire(R2S15900SP_TREB, (treb &lt;&lt; 3));
}

void R2S15900SP::writeWire(char a, char b){
  Wire.beginTransmission(R2S15900SP_address);
  Wire.write(a);
  Wire.write(b);
  Wire.endTransmission();
}</code></pre></div><p>test.ino</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt;
#include &lt;R2S15900SP.h&gt;
  R2S15900SP r2s;

void setup() {
  audio();
}

void loop() {
  
}

void audio(){             
  r2s.setVol_l(0);  // volume left &gt;&gt; int 84...0 === -84...0 dB
  r2s.setVol_r(0);  // volume_right &gt;&gt; int 84...0 === -84...0 dB
  r2s.setInput(1, 0, 0);     
             // input &gt;&gt; int 0 === all off | int 1...5 === input 1...5 
             // gain &gt;&gt; int 0...1 === 0 dB...+4.5 dB
             // mute &gt;&gt; int 0...1 === mute off...mute on
  r2s.set_Bass(0, 0, 0);
             // surround mode &gt;&gt; int 0...1 === low level...high level
             // mode selector &gt;&gt; int 0...3 === bypass tone tone&amp;Pseudo_stereo tone&amp;Surround
             // tone control bass &gt;&gt; int -15...15 === -15dB...+15dB
  r2s.set_Treb(0);   // tone control treble &gt;&gt; int -15...15 === -15dB...+15dB
}</code></pre></div><div class="quotebox"><blockquote><p>Скетч использует 2054 байт (6%) памяти устройства. Всего доступно 32256 байт.<br />Глобальные переменные используют 219 байт (10%) динамической памяти, оставляя 1829 байт для локальных переменных. Максимум: 2048 байт.</p></blockquote></div><p>Библиотека zip - <span class="attention-yellow"></span></p>]]></summary>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-02-27T12:36:49Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?id=277&amp;action=new</id>
		</entry>
</feed>
