<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; TDA7442]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=11&amp;type=atom" />
	<updated>2019-08-22T13:35:21Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=11</id>
		<entry>
			<title type="html"><![CDATA[TDA7442]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=13#p13" />
			<content type="html"><![CDATA[<p>ИМС TDA7442 представляет собой регулятор тембра и громкости с микроконтроллерным управлением.</p><p>Основные характеристики аудиопроцессора TDA7442:</p><p>Напряжение питания от 7 до 10.2 В (9 В — рекомендуемое)<br />Максимальная амплитуда входного сигнала 2 Vrms<br />Коэффициент гармоник на частоте 1 кГц и входном сигнале 1 Vrms не более 0,01%<br />Отношение сигнал/шум 106 дБ<br />Разделение каналов 90 дБ<br />Диапазон регулировки тембра ВЧ и НЧ ± 14 дБ<br />Диапазон регулировки громкости от -79 до 0 дБ<br />Электронный коммутатор входов (4 стерео входа)</p><p><a href="http://rcl-radio.ru/?p=62802">http://rcl-radio.ru/?p=62802</a></p><p>TDA7442.h</p><div class="codebox"><pre><code>#ifndef TDA7442_H
#define TDA7442_H

#define TDA7442_address 0x40

//Sub addresses
#define TDA7442_INPUT_ATT      0b00000000
#define TDA7442_SURR_OUT_EFF   0b00000001
#define TDA7442_REZ            0b00000010
#define TDA7442_BASS           0b00000011
#define TDA7442_TREBLE         0b00000100
#define TDA7442_ATT_L          0b00000101
#define TDA7442_ATT_R          0b00000110
#define TDA7442_INPUT_MULT     0b00001001

#include &lt;Arduino.h&gt;
class TDA7442
{
  public:
    TDA7442();
    void setInput_att(int in_att);  // int -63...0 = -31.5...0 dB step 0.5 dB
        void setSurr_sel(int surr, int out, int effect);/* int 0...2, int 0...1, int 0...15:
                                                           SIMULATED STEREO | MUSIC | OFF
                                                           VAR | FIX
                                                           EFFECT CONTROL -6...-21 dB  */
        void setRez(int rez);  // int 0...3 = 12, 14, 18, 37 kOm
        void setBass(int bass);   // int -7...7 = -14...+14 dB step 2 dB
        void setTreble(int treb); // int -7...7 = -14...+14 dB step 2 dB
        void setVol_L(int vol_l); // int -79...0 = -79...0 dB
        void setVol_R(int vol_r); // int -79...0 = -79...0 dB
        void setInput(int in);  // int 1...4 

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

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

void TDA7442::setInput_att(int in_att){
          in_att = 0b01000000 + abs(in_att);
      writeWire(TDA7442_INPUT_ATT, in_att);
}

void TDA7442::setSurr_sel(int surr, int out, int effect){
      switch(surr){
         case 0: surr = 0b00000000;break;
         case 1: surr = 0b00000001;break; 
         case 2: surr = 0b00000010;break;
}
      switch(out){
         case 0: out = 0b00000000;break;
         case 1: out = 0b00000100;break; 
}
      switch(effect){
         case 0:  effect = 0b00000000;break;
         case 1:  effect = 0b00001000;break; 
         case 2:  effect = 0b00010000;break; 
         case 3:  effect = 0b00011000;break; 
         case 4:  effect = 0b00100000;break; 
         case 5:  effect = 0b00101000;break; 
         case 6:  effect = 0b00110000;break; 
         case 7:  effect = 0b00111000;break; 
         case 8:  effect = 0b01000000;break; 
         case 9:  effect = 0b01001000;break; 
         case 10: effect = 0b01010000;break; 
         case 11: effect = 0b01011000;break; 
         case 12: effect = 0b01100000;break; 
         case 13: effect = 0b01101000;break; 
         case 14: effect = 0b01110000;break; 
         case 15: effect = 0b01111000;break; 
}
         int sum = surr + out + effect;
      writeWire(TDA7442_SURR_OUT_EFF, sum);
}

void TDA7442::setRez(int rez){
      switch(rez){
         case 0: rez = 0b00000000;break;
         case 1: rez = 0b00000001;break; 
         case 2: rez = 0b00000010;break;
         case 3: rez = 0b00000011;break;
}
     writeWire(TDA7442_REZ, rez);
}

void TDA7442::setBass(int bass){
      switch(bass){
         case -7: bass = 0b00010000;break;
         case -6: bass = 0b00010001;break; 
         case -5: bass = 0b00010010;break;
         case -4: bass = 0b00010011;break;
         case -3: bass = 0b00010100;break;
         case -2: bass = 0b00010101;break;
         case -1: bass = 0b00010110;break;

         case 0:  bass = 0b00011111;break;

         case 1:  bass = 0b00011110;break;
         case 2:  bass = 0b00011101;break;
         case 3:  bass = 0b00011100;break;
         case 4:  bass = 0b00011011;break;
         case 5:  bass = 0b00011010;break;
         case 6:  bass = 0b00011001;break;
         case 7:  bass = 0b00011000;break;
}
     writeWire(TDA7442_BASS, bass);
}

void TDA7442::setTreble(int treb){
      switch(treb){
         case -7: treb = 0b00001110;break;
         case -6: treb = 0b00011110;break; 
         case -5: treb = 0b00101110;break;
         case -4: treb = 0b00111110;break;
         case -3: treb = 0b01001110;break;
         case -2: treb = 0b01011110;break;
         case -1: treb = 0b01101110;break;

         case 0:  treb = 0b11111110;break;

         case 1:  treb = 0b11101110;break;
         case 2:  treb = 0b11011110;break;
         case 3:  treb = 0b11001110;break;
         case 4:  treb = 0b10111110;break;
         case 5:  treb = 0b10101110;break;
         case 6:  treb = 0b10011110;break;
         case 7:  treb = 0b10001110;break;
}
     writeWire(TDA7442_TREBLE, treb);
}

void TDA7442::setVol_L(int vol_l){     
      writeWire(TDA7442_ATT_L, abs(vol_l));
}

void TDA7442::setVol_R(int vol_r){     
      writeWire(TDA7442_ATT_R, abs(vol_r));
}

void TDA7442::setInput(int in){
      switch(in){
         case 2: in = 0b00000000;break;
         case 3: in = 0b00000010;break; 
         case 4: in = 0b00000100;break;
         case 1: in = 0b00000110;break;
}
     writeWire(TDA7442_INPUT_MULT, in);
}

void TDA7442::writeWire(char a, char b){
  Wire.beginTransmission(TDA7442_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2019-08-22T13:35:21Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=13#p13</id>
		</entry>
</feed>
