wtorek, 16 sierpnia 2016

Cyfrowa regulacja (kontroler) głośności - PT2257

Układ scalony PT2257 to elektroniczny kontroler głośności (stereo), sterowany poprzez magistralę I2C. Można też na niego patrzeć, jako na cyfrowy potencjometr. Taka funkcjonalność może się przydać w sytuacji, gdy zależy nam na cyfrowej regulacji głośności bez stosowania tradycyjnego analogowego potencjometru. Koszt takiego kontrolera to niecałe 3 zł. Kupiłem go z myślą o regulacji głośności na wyjściu modułu radiowego TEA5767, który takiej regulacji nie posiada (ma jedynie możliwość wyciszenia wyjściowego sygnału audio).

PT2257 w obudowie DIP-8


Specyfikacja
  • napięcie zasilania 3 - 9 V. Układ uruchamiałem przy napięciu 3,3V
  • zakres tłumienia sygnału: 0 to -79 dB
  • zmiana tłumienia z krokiem 1dB
  • dwa kanały wejściowe/wyjściowe
  • stosunek sygnału do szumu (S/N Ratio)  > 100dB
  • sterowanie po I2C, domyślny adres 0x88

Funkcje
  • Wyłączenie układu (-79dB)
  • Ustawianie wartości tłumienia obu kanałów od 0 do -79dB
  • Niezależne ustawianie wartości tłumienia każdego z kanałów od 0 do -79dB
  • Wyciszanie obu wyjść (typowo -95dB)

Schemat elektryczny
Schemat jest bardzo prosty. Na elementy dodatkowe, niezbędne do pracy US, składają się kondensatory i oczywiście sterujący mikrokontroler.
Schemat elektryczny
Przykład praktycznego użycia kontrolera PT2257, wpiętego w konkretny układ,  można znaleźć w poście poświęconym modułowi radia FM TEA5767.

Kod
Do sterowania układem PT2257 użyłem biblioteki Evc_pt2257 dostępnej na githubie. Biblioteka dostarcza API dające możliwość sterowania układem. Znajdziemy tu takie funkcje jak:
  • inicjalizacja układu, uruchamiana w funkcji setup()
    void evc_init();
  • ustawienie głośności obu kanałów:
    void evc_setVolume(uint8_t dB);
  • ustawienie głośności prawego kanału:
    void evc_setVolumeRight(uint8_t dB);
  • ustawienie głośności lewego kanału:
    void evc_setVolumeLeft(uint8_t dB);
  • wyciszenie układu:
    void evc_mute(bool toggle);
  • wyłączenie układu:
    void evc_off();
Parametr dB przyjmuje wartości od 0 do 79 i określa tłumienie sygnału wejściowego.

To czego brakuje mi w układzie, to brak zapamiętywania ostatnio wybranej wartości tłumienia dla obu kanałów. To oznacza, że w funkcji setup() poza inicjalizacją, trzeba także ustawić domyślną wartość tłumienia. Znacznie wygodniej jednak jest zapisać poprzednio ustawioną wartość (dla obu kanałów lub dwie odrębne wartości każdego z kanałów) w pamięci EEPROM i ją ustawiać (przywracać).



Źródła:
1) Specyfikacja PT2257
2) Biblioteka dla PT2257 w Arduino

2 komentarze:

  1. Hej, próbuje zrobić podobny projekt na PT2257, mógłbyś mi powiedzieć jak podłączyłeś masę przewodów audio? Nie bardzo wiem czy powinna ona byc razem z Arduino, PT, iRDa itp czy jakoś oddzielnie? Mógłbyś pokazać schemat całości jakiś? ;)

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki za zwrócenie uwagi, schemat w całości mam w planach dodać we wpisie o radiu FM TEA5767, gdzie użyłem tego kontrolera. Moduł radia FM ma dwa wyjścia audio L i R, które odpowiednio podłączyłem do wejść audio IN-L i IN-R kontrolera PT2257. Z kolei wyjścia audio OUT-L i OUT-R PT2257 podłączyłem odpowiednio do wejść INL i INR wzmacniacza mocy audio PAM8403. Wszystkie masy układów/modułów są połączone ze sobą. Nie ma tu jakiejś oddzielnej masy przewodów audio. Na wyjściu PAM8403 (gdybyś używał) są wyjścia głośników oznaczone minusem: -OUT_L i -OUT_R których nie należy łączyć z masą układu.

      Usuń