PT7313 Audio İşlemcisi Sürücü

Başlatan istinaf duvarı, 26 Mayıs 2025, 16:47:28

istinaf duvarı

Merhaba.

PT7313 audio işlemcisi için basit bir CCS-C sürücüsü yazdım. İşlemcinin çok fazla bir komut seti yok. Bu nedenle kullanması oldukça kolay. Entegrenin bazı gariplikleri var. Entegrenin ses seviyesi ile ilgili ayarları biraz ters çalışıyor. Volume en yüksek değerdeyken sesin en düşük seviyede olması gibi. Buraları kullanım kolaylığı için tersledim.

Ürünün ana kullanım alanı oto teypleri. Çoğu oto teybinde Kaset/Cd, Radyo, Aux girişleri, Bass - Tiz, Ses seviyesi, Fader gibi ayarları bu entegre yapar. Teyp kartının üzerinde anfi entegresine yakın bir yerde bu entegreyi görebilirsiniz. Sıfırını temin edemezseniz hurda teyp kartlarından sökerek kullanabilirsiniz.

Her ne kadar PT7313(E) için yazsam da PT2313, PT2314, PT7313, PT7314 ve bunların E versiyonlarına uyum sağlar. Aynı entegrelerin ST Microelectronics üretimi TDA serisi modelleri de  piyasada bulunabilir. Hepsinin komut seti aynıdır.

Sürücünün kullanımı:

pt7313_rst: İşlemcimizi ön tanımlı ayarlara getiren fonksiyon. Parametre almaz. Çağrıldığında işlemcinin ayarlarını önceden tanımlanmış değerlere getirir. Ön tanımlı ayarları sürücü içerisinden değiştirebilirsiniz.

set_master_vol: Enterenin ana ses seviyesini ayarlamak için kullanılır. 0 ile 63 arasında değer girebilirsiniz. 0 en kısık, 63 en yüksek ses ayarıdır.

set_attenuators: Dört ses çıkışının ses seviyesini düşürmeye yarar. İki parametre alır. Ayarlayacağımız çıkış kanalı, zayıflatma seviyesi.

Çıkış kanal numaraları:
1 = Ön Sol
2 = Ön Sağ
3 = Arka Sol
4 = Arka Sağ

PT2314 ve PT7314'te ön çıkışlar yoktur.

Zayıflatma seviyesi 0 ile 31 arasında ayarlanabilir. 0 zayıflatma yok, 31 çıkış kapalı (mute) konumudur.

set_input:Ses giriş kanalını seçmeye ve yapılandırmaya yarar. Üç parametre alır. Giriş kanalı, loudness, kazanç.

Giriş kanalları:
0 = Stereo 1
1 = Stereo 2
2 = Stereo 3
3 = Stereo 4 (Sadece PT2314(E) ve PT7314(E))

Loudness: 0 açık, 1 kapalı

Kazanç: 0 ila 3 arasında ayarlanabilir. 0 en düşük, 3 en yüksek.

set_bass_treb: Bass ve tiz ayarlarını yapmaya yarar. İki parametre alır. Bass/tiz, kazanç.
Bass/tiz : 0 bass, 1 tiz
Kazanç : 0 ile 15 arasında ayarlanabilir. 0 en düşük, 15 en yüksek.

/********************* PT7313 AUDIO PROCESSOR DRIVER *************************
* Simple driver for PT7313(E) and PT7314(E) series audio processors
* and their TDA series equivalents.
* Also compatible with PT2313(E) and PT2314(E) processors
* and their TDA series equivalents.
*
************************** Function definitions ******************************
* pt7313_rst(void):
* Resets PT7313 registers to default values.
*
* set_master_vol : Set master volume between 0 and 63 decimal
* 0 lowest, 63 highest.
*
* set_attenuators : set speaker attenuators. Usage:
* set_attenuators(channel, value)
* Channels:
* 1 = Front Left
* 2 = Front Right
* 3 = Rear Left
* 4 = Rear Right
* Value is 0 to 31. 0 is no attenuation, 31 is highest attenuation(mute).
* For PT2314(E) and PT7314(E) front channels non functional.
*
* set_input : select input channel. Usage:
* set_input(input channel, loudness, gain)
* Input channels:
* 0 = Stereo 1
* 1 = Stereo 2
* 2 = Stereo 3
* 3 = Stereo 4 (PT2314(E) and PT7314(E) only)
*
* Loudness:
* 0 = Loudness on
* 1 = Loudness off
* Gain: 0 to 3. 0 lowest, 3 highest.
*
* set_bass_treb(bass; gain)
* bass : 0 or 1. 0 bass, 1 treble.
* gain: 0 to 15 0 lowest(-14dB), 15 highest(+14dB).
*
* Note: If the entered value exceeds function's input limit,
* the excess part will be ignored.
*/
#define pt7313_addr    0x88
#define master_vol     0x00
#define spk_att_lr     0xC0
#define spk_att_rr     0xE0
#define spk_att_lf     0x80
#define spk_att_rf     0xA0
#define input_sw       0x40
#define bass_ctrl      0x60
#define treb_ctrl      0x70
void pt7313_send_byte(unsigned int8 data)
  {
      i2c_start();
      i2c_write(pt7313_addr);
      i2c_write(data);
      i2c_stop();     
  }
 
void pt7313_rst()
  {
      i2c_start();
      i2c_write(pt7313_addr);
      i2c_write(0x00);    // Reset volume to 0 dB.
      i2c_write(0x80);    // Reset attenuators to 0dB.
      i2c_write(0xA0);
      i2c_write(0xC0);
      i2c_write(0xE0);
      i2c_write(0x58);    // Select input 1, loud on and gain 0dB.
      i2c_write(0x67);    // Reset tone control.
      i2c_write(0x77);
      i2c_stop();
  }
void set_master_vol(unsigned int8 vol)
  {
      unsigned int8 output;
      if(vol > 63) vol = 63;
      unsigned int8 vol_inv= 63-vol;    // Invert volume scale from 63 to 0 to 0 to 63.
      output = master_vol | vol_inv;
      pt7313_send_byte(output);
  }
void set_attenuators(unsigned int8 spk, unsigned int8 gain)
  {
      unsigned int8 output;
      if(gain > 31) gain = 31;
      switch(spk)
        {
            case 1:
            output = spk_att_lr | (31-gain); // Invert gain scale from 31 to 0  to 0 to 31.
            break;
   
            case 2:
            output = spk_att_rr | (31-gain);
            break;
   
            case 3:
            output = spk_att_lf | (31-gain);
            break;
   
            case 4:
            output = spk_att_rf | (31-gain);
            break;
        }
       
      pt7313_send_byte(output);
  }
void set_input(unsigned int8 ch, unsigned int8 loud, unsigned int8 gain)
  {
      unsigned int8 output;
      unsigned int8 gain_inv;
      if(gain > 3) gain = 3;
      if(ch > 3) ch = 3;
      if(loud > 1) loud = 1;
      gain_inv = 3 - gain;
      output = input_sw | ch | (loud << 2)| (gain_inv << 3);
      pt7313_send_byte(output);
  }
void set_bass_treb(short bass, unsigned int8 gain)
  {
      unsigned int8 output;
      unsigned int8 gain_inv;
      if(gain > 15) gain = 15;
   
      if(gain > 7)
        {
            gain_inv = (7-(gain & 0x07)) | 0x08;
        }
      else
        {
            gain_inv = gain;
        }
       
      switch(bass)
        {
            case 0 :
            output = bass_ctrl | gain_inv;
            break;
       
            case 1 :
            output = treb_ctrl | gain_inv;
            break;
        }
   
      pt7313_send_byte(output);
     
  }

Epsilon

#1
@istinaf duvarı üstadım,
Programın nasıl yüklendiğini ve çalışmasınıda gösteren kısa bir videoda ,varsa çok güzel olurdu

istinaf duvarı

Sürücüyü proje klasörüne c uzantısı ile kaydediyorsunuz. Projenizin ana dosyasında include komutu ile sürücüyü projeye ekliyorsunuz.

Ardından programı yazabilirsiniz. Mesela ses seviyesini 30 yapacaksınız diyelim. set_master_vol(30); yazdığınızda ses seviyesi 30'a ayarlanır. Bu otuzu nasıl elde edersiniz orası size kalmış.
 

Sadece sürücünün işlevlerini küçük programlarla ayrı ayrı test ettim.

Tüm işlevleri barındıran bir komplike bir program yapmadım henüz. LCD ekran, rotary encoder ile güzel bir uygulama yapılabilir.


Epsilon

#3
Mesela burada Arduino ile yapılmış bir örnek var.

* Videonun açıklama kısmında dosyalar için drive linkinide eklemiş.Detaylı incelemedim ama PCB,LIB,CODE diye klasörlerde dosyaları var .Bazı youtuberların yaptığı gibi boş link değil , konuyla ilgili dosyalar var.

* Videonun Türkçe dil seçeneği var.