Automatyczny przełącznik audio




Prosty mikser do automatycznego przełączania sygnałów audio. Układ został stworzony z myślą o rozwiązaniu uciążliwego problemu przełączania kabli pomiędzy urządzeniami multimedialnymi, np. MP3, tabletem czy telefonem a wzmacniaczem i głośnikami. Pozwala na automatyczny wybór jednego z 4 wejść w zależności od występowania sygnałów wejściowych.

Regulacja głośności powinna odbywać się za pomocą wzmacniacza. Poziom sygnału z urządzeń multimedialnych powinien być ustawiony na średnią wartość.


 

Opis

Urządzenie sprawdza w pętli na którym wejściu występuje sygnał audio. Po stwierdzeniu istnienia sygnału układ zatrzaskuje się – zmiana wejścia możliwa jest jedynie po zaniku obecnego sygnału i odczekania ustalonego przez nas czasu. Aktywne wejście sygnalizowane jest przez świecącą diodę LED. Czas oczekiwania powinien wynosić minimum kilka sekund, ponieważ zapobiegnie to niepożądanej zmianie wejścia, np. podczas przejść pomiędzy utworami.

 

Wykaz elementów

rezystory:
  • R1, R3, R6, R10…13 100k   0,25zł
  • R2, R5 1k   0,25zł
  • R4 2,2k   0,25zł
  • R7, R8 4,7k   0,25zł
  • R9 330   0,25zł


kondensatory:
  • C1 1u   0,70zł
  • C2, C3, C4, C10, C11 10u   0,80zł
  • C5…9 100n   0,80zł


półprzewodniki:
  • IC1 4052   1,00zł
  • IC2 LM358   0,50zł
  • IC3 ICL7660   3,00zł
  • IC4 Attiny 2313   7,00zł
  • LED1...4   0,80zł


inne:
  • listwa kątowa goldpin   1,00zł
  • 10x gniazdo cinch do druku   8,00zł
  • podstawki pod układy scalone (20pin, 16pin, 2x 8pin)   0,59zł
  • laminat 90x100mm   1,90zł


suma: 27,34zł
Ceny wyznaczone na podstawie cennika jednego z popularniejszych sklepów internetowych. Pod uwagę nie wzięto kosztów wykonania płytki PCB oraz obudowy.

 

Schemat

 

Schemat ideowy układu

Układ składa się z kilku bloków, m. in.:

 

Zasilanie

 


Całe urządzenie zasilane jest napięciem 5V. Wzmacniacz zasilamy napięciem niesymetrycznym, ponieważ interesuje nas jedynie dodatnia część sygnału. Kłopot może stanowić kostka 4052, która to wymaga zasilania symetrycznego. Z tego powodu w projekcie użyto układu ICL7660. Połączenie kondensatorów elektrolitycznych o pojemności 10uF pomiędzy nóżkami: 2 i 4 (oznaczenie CAP) oraz 5 i 3, czyli odpowiednio wyjściem i masą układu, pozwala na osiągnięcie napięcia wyjściowego równego wejściowemu ze znakiem minus.

 

Multiplekser

 


Multiplekser zrealizowany jest na kostce 4052. Układ posiada 4 dwukanałowe wejścia, które mogą być sterowane sygnałem z mikrokontrolera (MUXA i MUXB).



Wejście INH zwieramy do masy, dzięki czemu układ zawsze jest aktywny. Detektor pobiera sygnał z wyjścia X, dlatego też na odpowiednich wejściach (X0…3) musimy dać rezystory (R10…13), dzięki czemu w przypadku braku sygnału lub podłączonego kabla, układ nie wzbudza się z powodu zakłóceń. Kondensatory C10 i C11 eliminują (możliwą) składową stałą.

 

Detektor sygnału

 


Detektor sygnału powstał w oparciu o detektor amplitudy. Moduł składa się 2 wzmacniaczy operacyjnych (LM358), diody oraz kilku kondensatorów i rezystorów. Sygnał pobierany jest z wyjścia multipleksera. Kondensator C1 przepuszcza jedynie składową zmienną. Rezystor R1 zabezpiecza wzmacniacz przed wzbudzaniem w przypadku braku sygnału na wejściu. Powinien mieć stosunkowo dużą wartość, aby nie stanowić znacznego obciążenia. Układ LM358 wraz z rezystorami R2 i R3 stanowi wzmacniacz nieodwracający o sporym wzmocnieniu (około 100). Wzmocnieniu ulega tylko dodatnia część sygnału (ujemna część jest tracona, ze względu na niesymetryczne zasilanie). Na tym etapie, dzięki znacznemu wzmocnieniu, sygnał jest zbliżony do przebiegu prostokątnego.




Następnie w urządzeniu znajduje się detektor amplitudy, który podtrzymuje sygnał w stanie wysokim. Elementy C2 i R4 wyznaczają stałą czasową. Kolejny wzmacniacz LM358 wraz z rezystorami R6 i R5 filtruje zakłócenia, które występują przy braku sygnału, zabezpieczając w ten sposób urządzenie przed niekontrolowanymi zmianami wejść. Na wyjściu wzmacniacza dostaniemy stan wysoki w przypadku wystąpienia wzmocnionego sygnału audio lub stan niski, jeżeli napięcie na wejściu nieodwracającym jest niższe niż wynikające z dzielnika R5 i R6. W rezultacie jest to układ prostego komparatora napięcia.



Uwaga! Napięcie wyjściowe z komparatora w logicznym stanie wysokim nie jest równe napięciu zasilania! Wynika to z budowy samego wzmacniacza. Na szczęście spadek ten nie jest duży i mieści się w normach dla układu procesora wynoszącymi minimum 0.6 napięcia zasilania. Z tego powodu stosowanie układu z wyjściem typu open-collector nie jest konieczne.

 

Płytka PCB

 

 

Automatyczny przełącznik audio - widok na układ.







Urządzenie zrealizowane jest na 6 PCB – 5 na wejścia oraz wyjście, 1 na układ wykonawczy. W projekcie użyto laminatu jednostronnego, a nadruki naniesiono metodą termotransferu. Z tego powodu w niektórych miejscach musimy wlutować zworki.



Na płytkach odpowiadających za wejście znajdują się rezystory R10…13. Na płytce odpowiadającej za wyjście nie musimy wykonywać dodatkowych otworów pod rezystor.



Układ wykonawczy znajduje się na osobnej, największej płytce.
Elementy SV1…5 to listwy kątowe typu goldpin. Należy wlutować je najpierw na płytkach z gniazdami cinch, a następnie dopasować na płycie głównej układu.

Odstęp oraz grubość ścieżek jest stosunkowo duża, dodatkowo w projekcie użyto wyłącznie elementów przewlekanych. Z tego powodu wykonanie urządzenia nie powinno sprawić problemu nawet początkującym elektronikom.



Całość od strony ścieżek należy pokryć lakierem kopalowym, czyli rozpuszczoną w spirytusie żywicą lub kalafonią, która zabezpieczy płytkę przed zwarciami i korozją, a przy tym pozwoli na bezpieczne wprowadzenie ewentualnych zmian.


Kod programu

Program został napisany w uproszczonym języku C – Arduino.

Aby zaprogramować dowolny mikroprocesor AVR (z rodziny ATtiny) w środowisku Arduino IDE musimy pobrać archiwum i rozpakować je w folderze: ...\Arduino\hardware\

Po wypakowaniu powstaną pliki i foldery: \Arduino\hardware\tiny\boards.txt \Arduino\hardware\tiny\bootloaders\ \Arduino\hardware\tiny\cores\

Dostępne procesory widoczne są w okienku:



Przed zaprogramowaniem układu musimy wgrać bootloader, który ustala fusebity mikrokontrolera. Po wykonaniu powyższych instrukcji możemy zaprogramować procesor podobnie jak Arduino (należy jeszcze wybrać programator, którym dysponujemy).

Uwaga! Przed napisaniem programu i wgraniu go do procesora musimy sprawdzić, które piny układu odpowiadają pinom platformy Arduino.




Kod programu automatycznego przełącznika audio jest bardzo prosty. Składa się z kliku pętli i instrukcji warunkowych.


   /*     
   Automatyczny przełącznik audio     
   autor: Daniel Turbasa     
   data: 18-02-2014     
   */       
          
   int LED = 10;       
   #define MUXA 14       
   #define MUXB 15       
   #define WE 9       
   #define czas 3000       
          
   void setup() //konfiguracja wejść oraz wyjść układu       
   {       
    pinMode(10, OUTPUT);       
    pinMode(11, OUTPUT);       
    pinMode(12, OUTPUT);       
    pinMode(13, OUTPUT);       
    pinMode(MUXA, OUTPUT);       
    pinMode(MUXB, OUTPUT);       
    pinMode(WE, INPUT);       
   }       
          
   void fMUX() //funkcja badająca stan sygnału wyjściowego       
   {       
    if ( digitalRead(WE) == HIGH ) //dalsza część instrukcji dostępna po wystąpieniu stanu wysokiego       
    {       
     digitalWrite(LED, HIGH); //zapalenie diody LED odpowiedniego wejścia       
     do //pętla nieskończona - stan niski, utrzymujący się dłużej niż czas zadeklarowany w funkcji delay(), wstrzymuje działanie       
     {       
      do {} while ( digitalRead(WE) == HIGH ); //pętla - oczekiwanie mikrokontrolera na wystąpienie stanu niskiego       
      delay(czas); //czas oczekiwania na ponowne pojawienie się sygnału       
      if ( digitalRead(WE) == LOW ) //wyjście z nieskończonej pętli przy stanie niskim       
      {       
       break;       
      }       
     } while(1);       
    digitalWrite(LED, LOW); //zgaszenie diody LED odpowiedniego wejścia       
    }       
   }       
          
   void loop() //główna pętla programu       
   {       
    do       
    {       
     for(LED = 10; LED < 14; LED++) //pętla wybierająca pin sterujący diodą LED       
     {       
     switch(LED) //wybór wejść multipleksera       
     {       
      case 10:       
       digitalWrite(MUXA, LOW); //sygnał sterujący multiplekserem       
       digitalWrite(MUXB, LOW); //sygnał sterujący multiplekserem           
       break;       
      case 11:       
       digitalWrite(MUXA, HIGH);       
       digitalWrite(MUXB, LOW);       
       break;       
      case 12:       
       digitalWrite(MUXA, LOW);       
       digitalWrite(MUXB, HIGH);       
       break;       
      case 13:       
       digitalWrite(MUXA, HIGH);       
       digitalWrite(MUXB, HIGH);       
       break;       
      default:       
       break;       
     }       
     delay(50); //opóźnienie przełączania       
     fMUX(); //przejście do funkcji sterującej pracą multipleksera       
     }       
    } while(1);       
   }     


Zasadę działania programu przedstawia poniższy graf:




   void setup() //konfiguracja wejść oraz wyjść układu   
   {   
    pinMode(10, OUTPUT);   
    pinMode(11, OUTPUT);   
    pinMode(12, OUTPUT);   
    pinMode(13, OUTPUT);   
    pinMode(MUXA, OUTPUT);   
    pinMode(MUXB, OUTPUT);   
    pinMode(WE, INPUT);   
   }   


Na samym początku w funkcji setup() konfigurujemy wejścia oraz wyjścia mikrokontrolera.



   void loop() //główna pętla programu   
   {   
    do   
    {   
     for(LED = 10; LED < 14; LED++) //pętla wybierająca pin sterujący diodą LED   
     {   
     switch(LED) //wybór wejść multipleksera   
     {   
      case 10:   
       digitalWrite(MUXA, LOW); //sygnał sterujący multiplekserem   
       digitalWrite(MUXB, LOW); //sygnał sterujący multiplekserem       
       break;   
      case 11:   
       digitalWrite(MUXA, HIGH);   
       digitalWrite(MUXB, LOW);   
       break;   
      case 12:   
       digitalWrite(MUXA, LOW);   
       digitalWrite(MUXB, HIGH);   
       break;   
      case 13:   
       digitalWrite(MUXA, HIGH);   
       digitalWrite(MUXB, HIGH);   
       break;   
      default:   
       break;   
     }   
     delay(50); //opóźnienie przełączania   
     fMUX(); //przejście do funkcji sterującej pracą multipleksera   
     }   
    } while(1);   
   }   

W pętli głównej programu – loop(), zmieniamy kolejno wejścia multipleksera oraz badamy sygnał wyjściowy. Zastosowanie opóźnienia - funkcja delay(50), jest konieczne. W przeciwnym wypadku układ nie działa prawidłowo i występują błędy podczas przełączania. Po każdej zmianie wejścia multipleksera, program wchodzi do funkcji fMUX(), która sprawdza stan logiczny na wyjściu.



 void fMUX() //funkcja badająca stan sygnału wyjściowego    
 {    
  if ( digitalRead(WE) == HIGH ) //dalsza część instrukcji dostępna po wystąpieniu stanu wysokiego    
  {    
   digitalWrite(LED, HIGH); //zapalenie diody LED odpowiedniego wejścia    
   do //pętla nieskończona - stan niski, utrzymujący się dłużej niż czas zadeklarowany w funkcji delay(), wstrzymuje działanie   
   {    
    do {} while ( digitalRead(WE) == HIGH ); //pętla - oczekiwanie mikrokontrolera na wystąpienie stanu niskiego    
    delay(czas); //czas oczekiwania na ponowne pojawienie się sygnału    
    if ( digitalRead(WE) == LOW ) //wyjście z nieskończonej pętli przy stanie niskim    
    {    
     break;    
    }    
   } while(1);    
  digitalWrite(LED, LOW); //zgaszenie diody LED odpowiedniego wejścia    
  }    
 }   

Funkcja fMUX() sprawdza stan sygnału wyjściowego po zmianie wejścia multipleksera.
W przypadku pojawienia się stanu wysokiego zapala się dioda LED odpowiedzialna za dane wejście, a układ „zatrzaskuje się” do czasu pojawienia się stanu niskiego na wyjściu. Po zmianie stanu, procesor oczekuje krótką chwilę (określoną w funkcji delay()) na pojawienie się stanu wysokiego. Jeżeli nastąpi zmiana, układ ponownie zatrzaskuje się. Przez ten czas dane wejście cały czas jest aktywne. Utrzymujący się stan niski prowadzi do wyjścia z pętli, wygaszenie diody oraz przejście do dalszego sprawdzania sygnału z wejść multipleksera w głównej pętli układu.

 

Do pobrania

Schemat układu oraz płytki PCB zrobione w programie Eagle oraz kod programu można pobrać tutaj.

 

Dodatkowe wyposażenie

Ze względu na zastosowanie gniazd audio typu cinch, konieczne jest zaopatrzenie się w przejściówki typu mini-jack -> cinch.



 

Możliwości zmian

Niewykorzystane piny mikrokontrolera możemy wykorzystać dokładając obsługę przycisku, który niezależnie zmieniałby kanały. Pozwoli to na wybór konkretnego wejścia, a urządzenie będzie pełniło funkcję prostego miksera audio.
Ponieważ detektor pobiera sygnał z wyjścia multipleksera, urządzenie ma charakter zatrzasku – zmiana wejść możliwa jest jedynie po całkowitym wygaszeniu sygnału z aktywnego wejścia.
Aby była możliwość zmiany źródła sygnału podczas, gdy jest on aktywny, detektor musiałby pobierać informacje bezpośrednio z wejść urządzenia. Można to zrealizować na dwa sposoby. Poprzez zwielokrotnienie detektorów, co niestety wiąże się ze znacznym wzrostem elementów oraz kosztów lub poprzez dodanie drugiego multipleksera, działającego w sposób ciągły i sprawdzającego aktualny stan wyjść.

Schemat ulepszonego przełącznika mógłby wyglądać tak:


 

Komentarz

Urządzenie choć proste, pozwoliło mi zdobyć dużo doświadczenia i wiedzę dotyczącą projektowania urządzeń elektronicznych. Podczas projektowania używałem prostego symulatora układów elektronicznych, który wyeliminował część problemów, bez ponoszenia żadnych kosztów i zmarnowanych elementów.
Już po wykonaniu układu natrafiłem na problemy podobne do opisanych w tym artykule. Wymusiło to stosowanie wielu rezystorów 100k, które zwierają wejścia do masy w przypadku braku sygnału.
Podsumowując – prezentowany przeze mnie artykuł ukazuje jedynie wierzchołek góry lodowej. Na wykonanie całego urządzenia potrzeba było wielu godzin spędzonych na rozmyślaniach, szkicach, konsultacjach, projektowaniu i testowaniu. Nie uważam tego czasu za stracony, jednocześnie mam nadzieję, że układ przypadnie Wam do gustu i znajdzie się osoba chcąca wykonać to urządzenie dla siebie :-)


Projekt można znaleźć również na stronie: Mikrokontrolery - Jak zacząć? -> tutaj

Brak komentarzy:

Prześlij komentarz