Schemat ideowy miniaturowej konsoli z interfejsem DMX pokazano na rysunku 1. Urządzenie jest zasilane z sieci 230 VAC. Transformator TR1 obniża napięcie do 9 V. Stabilizator U1 zapewnia +5 V DC na potrzeby mikrokontrolera i nadajnika RS485 stosowanego powszechnie w urządzeniach DMX. Układ U3 konwertuje sygnał standardu TTL na RS485. Rezystory włączone na wyjściu konwertera to terminatory linii.
Rozwiązanie z trzema rezystorami jest stosowane w sieciach RS485 w sytuacji, gdy magistrala jest dwukierunkowa i czasem nie jest do niej dołączony żaden nadajnik. Wtedy to rezystory dołączone do masy i zasilania zapewniają polaryzację magistrali.
W systemie DMX nadajnik jest cały czas dołączony do magistrali, więc można pominąć rezystory polaryzujące, a rezystor 240 Ω zamienić na 120 Ω (impedancja kabla). Mikrokontroler, za pośrednictwem wbudowanego przetwornika A/C, odczytuje napięcie z potencjometrów i umieszcza je w ramce nadawczej DMX w kanałach od 1 do 6. Dane z przetwornika A/C są uśredniane. W konsoli wykorzystano uśrednianie wykładnicze (listing 1). Zaletą takiego uśredniania jest mała zajętość pamięci RAM (trzeba pamiętać tylko poprzedni wynik przetwarzania).
Sygnały z przełączników są odczytywane przez porty cyfrowe i zależnie od ich stanu, w ramce DMX w kanałach od 7 do 12, zapisywana jest wartość 0 lub 255. Tak skompletowana ramka, po uzupełnianiu sygnałami BREAK, MAB i SC, jest wysyłana na magistralę (listing 2).
Wysyłane są 24 kanały DMX, ponieważ takie wymagania stawia norma. W kanałach od 14 do 24 na stałe jest zapisana wartość 0. Budowę ramki wysyłanej przez konsolę umieszczono w tabeli 1.
Naciśnięcie przycisku REC spowoduje zaświecenie diody REC oraz rozpocznie proces rejestracji nastaw potencjometrów i przełączników do pamięci EEPROM. Zapis kończy się po ponownym naciśnięciu przycisku REC lub zapełnieniu pamięci. Budowę rekordu zapisywanego w pamięci EEPROM opisuje tabela 2.
Ze względu na niewielką pojemność pamięci procesora przy próbkowaniu co 100 ms (10 razy na sekundę) w procesorze ATmega328 można zapisać tylko 14 sekund, co wynika z wyrażenia. W mikrokontrolerach ATmega168 lub ATmega88 jest to już tylko 7 sekund, ponieważ pamięć EEPROM ma pojemność 500 bajtów.
Aby wydłużyć czas zapisu zastosowano małą "sztuczkę". Dane zapisywane są do EEPROM co 80, 160, 320 lub 640 ms, zależnie od ustawienie przełączników KOMPRESJA i TEMPO. Dane o położeniu potencjometrów są wysyłane zawsze co 80 ms, ale pobierane są z EEPROM co 80 lub 160 ms, a dane pomiędzy próbkami są uśredniane (listing 3).
Zmienna FLdziel jest zmieniana po każdym odczycie z EEPROM, więc jeden odczyt zapisuje do bufora DMX wartość z EEPROM, drugi uśrednioną wartość wyliczoną z aktualnej i kolejnej próbki (listing 4).
Możliwe ustawienia przełączników KOMPRESJA i TEMPO pokazano w tabeli 3. Oczywiście można użyć innych algorytmów pakowania. Zakładając, że równocześnie zmieniają się nastawy kilku, a nie wszystkich potencjometrów można by użyć algorytmu ByteRun.
Długość zapisu można też zwiększyć przez zastosowanie mikrokontrolera z większą ilością pamięci ram lub użyć zewnętrznej pamięci RAM/EEPROM komunikującej się przez SPI lub IIC. Zaletą zewnętrznej pamięci byłaby możliwość zwiększenia częstotliwości próbkowania grubo poniżej 1 ms, co zwiększyło by płynność odtwarzania. Konsola miała być prosta, więc zrezygnowałem z tej opcji, bo prościej będzie zastosować komputer z przejściówką USB-DMX.
Jeśli w EEPROM znajduje się jakiś zapis, naciśnięcie przycisku PLAY spowoduje zaświecenie diody PLAY oraz rozpocznie się proces odtwarzania nastaw potencjometrów i przełączników z pamięci EEPROM. Odczyt kończy się po ponownym naciśnięciu przycisku PLAY lub odczytaniu całego zapamiętanego zapisu. Stan pracy konsoli jest sygnalizowany za pomocą diod LED (tabela 4).
Wykaz elementówRezystory: (1/8 W): Kondensatory: Półprzewodniki: Inne: |
Montaż i uruchomienie:
Schemat montażowy konsoli pokazano na rysunku 2. Montaż jest typowy i nie wymaga omawiania. Pod układy warto zastosować podstawki. Uruchomienie rozpoczynamy od zasilacza. Jeśli napięcie jest poprawne można umieścić układy w podstawkach.
Jeśli procesor nie jest zaprogramowany, możemy to zrobić przy wykorzystaniu załącza J2. Ustawienie bitów konfiguracyjnych przedstawiono na rysunku 3. Podczas programowania trzeba pamiętać, że ustawienie przełącznika SW10 "TEMPO" w pozycję On (zwarcie do masy), zablokuje możliwość programowania (zablokowana linia SCK).
Po włączeniu zasilania dioda D3 powinna migać z częstotliwością około 1 Hz. Elementy umieszczone w ramce znajdują się poza płytką i są z nią połączone taśmą. Urządzenie można zamknąć w obudowie KM-60. W materiałach dodatkowych, na FTP, znajduje się kod źródłowy i wynikowy dla Atmega88, Atmega168 i Atmega328.
Sławomir Skrzyński, EP