Tym razem chciałbym zaprezentować nowe oprogramowanie dla wyżej wymienionych kitów, za pomocą których możemy przekształcić posiadany stary napęd CD-ROM w funkcjonalny odtwarzacz płyt Audio CD. Szczegółowe opisy kitów znajdują się tutaj: http://sklep.avt.com.pl/photo/_pdf/AVT2660.pdf i http://sklep.avt.com.pl/photo/_pdf/AVT941.pdf. Oczywiście istnieje oryginalne oprogramowanie napisane przez autora lecz od początku nie było doskonałe (dostępne pod adresem http://www.edw.com.pl/ftp/avt2660soft.zip). Postanowiłem więc napisać swoje od początku (nie jestem autorem tych kitów) i zaimplementować funkcje, których nie posiada oryginalny program, a o których było niejednokrotnie wspominane na forum. Chodzi tutaj oczywiście o możliwość wyświetlania CD-TEXTu oraz obsługę dwóch napędów jednym sterownikiem w postaci zmieniarki CD, co nadaje większy sens takiej konstrukcji. W programie ponadto zaimplementowałem możliwość programowania przycisków pilota oraz opcjonalne sterowanie wzmacniaczem lub przedwzmacniaczem.
Historia zmian
Zanim jednak przejdę do bardziej szczegółowego opisu funkcji nowego programu słów kilka na temat samego kitu AVT2660. Został on opublikowany w miesięczniku EdW 3/2003. Pierwsza wersja programu zawierała błąd związany z zatrzymywaniem odtwarzania, ale dość szybko zostało to poprawione przez autora. Mimo tego postanowiłem wówczas rozbudować oryginalne oprogramowanie napisane w Bascomie. Wersja 2.0 została dołączona do archiwum z oryginalnymi źródłami, jednak nie dołączono listy dokonanych zmian. Później w EP 8/2006 opublikowany został ulepszony i rozbudowany nieco kit AVT941, który różni się głównie zastosowanym mikrokontrolerem, zmodyfikowanym blokiem zasilania (stabilizator impulsowy), dodatkowym włącznikiem zasilania, funkcją zegara RTC i możliwością tworzenia playlisty. Ponieważ część sprzętowa tego kitu odpowiedzialna za komunikację z napędem jest identyczna, istnieje możliwość wypróbowania lub używania na stałe opisywanego programu także w tym kicie, ale nowe funkcje, których nie posiadał kit AVT2660 nie będą dostępne w tym przypadku. Chcąc zebrać wszystkie informacje w jednym miejscu, poniżej dla zainteresowanych przedstawiam pełną historię zmian:
V2.0 (plik Odt_cd2NEW.bas)
Poprawione błędy i wprowadzone ulepszenia:
- W trakcie przewijania do przodu lub do tyłu wyświetlane są napisy "F.Fwd" i "Rew";
- Wyświetlane są symbole przed napisami "Stop", "Play", "Pause", "F.Fwd" i "Rew";
- Dodany czwarty tryb odtwarzania: "Repeat1" - ciągłe odtwarzanie tylko jednego utworu;
- Poprawione funkcjonowanie trybu "Random" - nie powtarza się ciąg losowych numerów przy takiej samej liczbie utworów po ponownym włączeniu sterownika;
- Poprawiony błąd nieprawidłowego przewijania do tyłu i do przodu (zerowanie czasu utworu), a także wprowadzona możliwość zatrzymania przewijania bezpośrednio przyciskiem "F.Fwd" lub "Rew" w zależności od aktualnego kierunku przewijania;
- Naciśnięcie przycisku "Poprzedni", gdy wybrany jest utwór pierwszy wybiera utwór ostatni, podobnie działa przycisk "Następny";
- Naciskanie przycisku "Time" zmienia tryb wyświetlania czasu tylko podczas odtwarzania lub pauzy;
- Poprawiony błąd wyświetlania czasu absolutnego płyty CD;
- Niektóre napisy są wyświetlane wielkimi literami;
- Dodatkowo wyeliminowane wszystkie zauważone błędy związane z nieprawidłowym funkcjonowaniem przycisków w różnych trybach odtwarzania, m.in. przycisk „Stop”;
- Nie jest odczytywana i wyświetlania nazwa modelu CD-ROMu przy uruchamianiu, aby uzyskać miejsce na wyżej wymienione ulepszenia programu.
Niepoprawione:
- Problem z samoczynnym odpauzowywaniem się utworu po kilku sekundach i przeskakiwaniu do następnego.
Przypadkowo wprowadzone nowe błędy:
- Przyciski na pilocie trzeba naciskać dwukrotnie, aby wywołać funkcję;
V3.0 (opisywana i dostępna poniżej)
Główne zmiany:
- Program napisany od nowa oraz wyeliminowane wszystkie powyższe błędy z zachowaniem ulepszeń wersji 2.0;
- Dodana automatyczna obsługa dekodowania i wyświetlania CD-TEXTu (tylko dla napędów obsługujących CD-TEXT) z możliwością wyłączenia, wyświetlane mogą być tytuł utworu i wykonawca oraz tytuł i wykonawca dla całej płyty;
- Obsługa dwóch napędów podłączonych jednocześnie w funkcji zmieniarki;
- Możliwość programowania dowolnych przycisków pilota pracującego w standardzie RC5;
- Wyprowadzone są dwa wyjściowe sygnały sterujące, jeden do wykorzystania jako sygnał mute/standby do wzmacniacza, drugi jako przełączanie selektora sygnałów audio z dwóch napędów;
- Problem z samoczynnym odpauzowywaniem się utworu został wyeliminowany;
- Zmieniony sposób przewijania na wzór stacjonarnych odtwarzaczy CD (lecz bez jednoczesnego podsłuchu);
- Możliwość wysuwania/wsuwania tacki z klawiatury i pilota (z pewnymi ograniczeniami);
- Poprawiona szybkość reakcji na przyciski klawiatury i pilota;
- Nie jest konieczna zmiana mikrokontrolera, program mieści się w istniejącym;
- Możliwość zastosowania nowszego mikrokontrolera ATmega8515;
- Możliwość użycia programu w kicie AVT941 (Sterownik CD z zegarem RTC).
W pliku .zip do pobrania poniżej znajdują się trzy wsady dla mikrokontrolera AT90S8515 dostarczanego razem z kitem AVT2660, ATmega8515 którym można bezpośrednio zastąpić poprzednika, gdyby ktoś budował samodzielnie sterownik oraz ATmega162 dla kitu AVT941. Program został napisany w języku C i skompilowany pod WinAVR’em. Pliki wynikowe są w formacie IntelHex. Pomiędzy nimi nie ma żadnych różnic w funkcjonalności z wyjątkiem wsadu dla kitu AVT941, w którym dodatkowo wysterowane są odpowiednio wyjścia włączające na stałe podświetlenie wyświetlacza oraz diodę LED ‘POWER’, aby nie były konieczne przeróbki na płytce sterownika. Źródeł do programu nie publikuję.
Uruchomienie i konfiguracja
Jeśli sami budujemy sterownik lub wymieniamy mikrokontroler na nowy w pierwszej kolejności konieczne jest odpowiednie zaprogramowanie fusebitów. Dla ATmega8515 - High = 0xC1, Low = 0x1F to znaczy: S8515C = 1, WDTON = 1, CKOPT = 0, EESAVE = 0, BOOTSZ1 = 0, BOOTSZ0 = 0, BOOTRST = 1, BODLEVEL = 0, BODEN = 0, SUT1 = 0, SUT0 = 1, CKSEL3 = 1, CKSEL2 = 1, CKSEL1 = 1, CKSEL0 = 1. Natomiast dla ATmega162 - Extended = 0xF9, High = 0xD1, Low = 0xDF to znaczy: M161C = 1, BODLEVEL2 = 1, BODLEVEL1 = 0, BODLEVEL0 = 0, OCDEN = 1, JTAGEN = 1, WDTON = 1, EESAVE = 0, BOOTSZ1 = 0, BOOTSZ0 = 0, BOOTRST = 1, CKDIV16 = 1, CKOUT = 1, SUT1 = 0, SUT0 = 1, CKSEL3 = 1, CKSEL2 = 1, CKSEL1 = 1, CKSEL0 = 1. Następnie trzeba skasować pamięć EEPROM w mikrokontrolerze, jeśli coś w niej było zapisywane, wówczas przy pierwszym uruchomieniu program wpisze do tej pamięci domyślną konfigurację przycisków pilota. Domyślna konfiguracja jest taka sama jak w oryginalnym programie, to znaczy przycisk numer 1 – Play, 2 – Pause, 3 – Stop, 4 – Previous Track, 5 – Time Mode, 6 – Next Track, 7 – Rewind, 8 – Play Mode, 9 – Fast Forward z tą różnicą, że tutaj sprawdzany jest także adres każdego przycisku, a nie tylko sam kod, więc musi to być pilot od telewizora z adresem 0. Ale to jest akurat mało istotne, ponieważ zawsze możemy zaprogramować dowolne przyciski pilota w standardzie RC5. Jak to zrobić? Naciskamy i przytrzymujemy przycisk S9 na klawiaturze (jest to przycisk do zmiany trybu odtwarzania - Play Mode), a następnie włączamy zasilanie, wtedy na wyświetlaczu powinien pojawić się napis 'IR SETUP' i dalej postępujemy według instrukcji na wyświetlaczu. Jeśli dany przycisk został już wykorzystany wyświetlony zostanie napis 'IN USE!', a jeśli został poprawnie zaprogramowany to 'OK'. Po zakończeniu programowania powinny działać wszystkie zaprogramowane przyciski. Domyślnie obsługa CD-TEXTu jest włączona w trybie automatycznym tzn. jeśli na płycie jest zapisany CD-TEXT, napęd go odczyta, a program go poprawnie zdekoduje to w dolnej linii będzie wyświetlany i ewentualnie przewijany jeśli jest dłuższy niż 16 znaków. Program może wyświetlać maksymalnie 160 znaków dzięki pominięciu funkcji przewijania wbudowanej w wyświetlacz i implementacji jej w sposób programowy. Myślę, że ta ilość jest w zupełności wystarczająca nawet dla najdłuższych napisów. Jest również możliwość całkowitego wyłączenia CD-TEXTu, w razie gdyby pojawiły się jakieś problemy itp. Procedura jest podobna do powyższej z tą różnicą, że trzeba nacisnąć i przytrzymać przycisk S3 (Pauza) i włączyć zasilanie. Na wyświetlaczu pojawi się napis 'CD-TEXT OFF' i nie powinien być już wyświetlany. Z powrotem włącza się w ten sam sposób - pojawi się napis 'CD-TEXT AUTO'. Dodałem również możliwość sprawdzenia wersji programu. Odbywa się to tak samo jak wyżej, tylko trzeba nacisnąć przycisk S4 (Stop) i dopóki będzie się go przytrzymywać na wyświetlaczu będzie wyświetlana wersja programu.
Funkcje programu
W przypadku funkcji CD-TEXTu dekodowane mogą być tytuł utworu i wykonawca dla ścieżki oraz tytuł i wykonawca dla całej płyty, ale pod warunkiem, że dany napęd w ogóle ma możliwość odczytu CD-TEXTu z płyty. Szczególnie starsze i niektóre nowe napędy nie posiadają takiej opcji. Powyższe napisy prezentowane są w postaci ‘Tytuł – Wykonawca’. Jest to odwrotnie niż typowo w programach komputerowych do odtwarzania. W taki sposób było trochę prościej zrealizować algorytm dekodowania CD-TEXTu, który nie wczytuje całego bloku danych do pamięci, ponieważ nie jest to możliwe – przeciętny blok CD-TEXTu jest prawie dwa razy większy niż dostępna pojemność pamięci RAM mikrokontrolera. Poza tym ma to tę zaletę, że jeśli dla przykładu mamy album jednego wykonawcy to najpierw wyświetlony zostanie tytuł utworu, a nie musimy czekać aż napis przewinie się do tytułu. Szybkość przewijania nie jest zbyt duża, ponieważ wyświetlacz LCD dość mocno by smużył i niewiele byłoby widać. W przypadku wykorzystywania funkcji „zmieniarki” napęd podłączony do taśmy ze zworką ustawioną na Master jest napędem CD1, a ze zworką na Slave jest CD2. Jeśli podłączymy tylko jeden napęd to w zależności od ustawienia zworki będzie on napędem CD1 lub CD2, a po przełączeniu się na drugi napęd, którego nie ma po prostu zostanie wyświetlony komunikat 'NO DISC', tak jakby nie było włożonej płyty. Może nie jest to doskonałe rozwiązanie, ale upraszcza program i samo sterowanie napędami. Oczywiście w przypadku jednego napędu najlepiej ustawić go na Master, bo nie trzeba będzie zawsze przełączać go po uruchomieniu - sterownik zawsze startuje z wybranym napędem CD1. Samo przełączanie pomiędzy napędami odbywa się za pomocą przycisku S8 (zmiana trybu wyświetlania czasu – Time Mode) lub na pilocie, ale można to zrobić tylko wtedy, gdy odtwarzanie jest zatrzymane lub wyświetlony jest napis 'NO DISC'. Podczas odtwarzania przycisk ten pełni swoją podstawową funkcję. Wyświetlanie informacji na wyświetlaczu podczas odtwarzania może odbywać się na dwa sposoby w zależności od tego, czy udało się zdekodować CD-TEXT czy nie, a program sam wybiera jak wyświetlać informacje. W przypadku, gdy CD-TEXT nie jest dostępny wygląda to praktycznie tak samo jak w oryginalnym programie z tą różnicą, że dodatkowo wyświetlana jest również ilość wszystkich utworów i numer dysku w prawym rogu. Jeśli natomiast CD-TEXT jest dostępny to zajmuje on całą dolną linię, a na górnej wyświetlane są numer utworu, stan odtwarzania już tylko w postaci symbolu, następnie numer dysku bez napisu 'CD', dalej czas i w prawym rogu tryb odtwarzania. Przykłady poniżej:
Bez CD-TEXTu:
Z CD-TEXTem:
Myślę, że ten układ jest w miarę optymalny zważywszy na tak małą ilość miejsca na wyświetlaczu. Pozostała funkcjonalność jest taka sama jak w oryginalnym programie, choć została napisana na nowo. Dostępne są cztery tryby odtwarzania i cztery tryby wyświetlania czasu. Zmieniony został natomiast sposób w jaki odbywa się przewijanie utworu. Działa dokładnie tak jak w stacjonarnych odtwarzaczach CD to znaczy, aby przewijać utwór trzeba przytrzymywać przycisk. Taki sposób wydaje mi sie bardziej naturalny niż zastosowany w poprzednich wersjach programu. Prędkość przewijania dobrałem taką jaka jest w odtwarzaczach CD, czyli w granicach 12x prędkości odtwarzania. Z jednej strony daje to możliwość przewinięcia utworu tylko o 2-3 sekundy przy bardzo krótkim naciśnięciu przycisku, a z drugiej nie trzeba zbyt długo czekać na przewiniecie całego utworu. Niestety podczas przewijania nie ma podsłuchu, ponieważ napędy nie obsługują w ogóle funkcji przewijania. Dokładnie to jest ona oznaczona w specyfikacji jako opcjonalna, więc nie można mieć pewności, że została zaimplementowana przez danego producenta. Przycisk Stop raz naciśnięty w trakcie odtwarzania zatrzymuje je, drugi raz wybiera pierwszy utwór na płycie, trzeci raz wysuwa tackę z napędu. Jeśli tacka została wysunięta w ten sposób, to można też ją wsunąć, ale już nie ma takiej możliwości, gdy przełączymy na drugi napęd i z powrotem. Ponieważ autor powyższych kitów przewidział możliwość opcjonalnego podłączenia procesora audio po magistrali I2C i wyprowadził na płytce sterownika dwa wyjścia pomyślałem, że skoro i tak nie są używane to można jest wykorzystać w inny sposób. I tak na pinie 16 (SCL) wyprowadzony jest sygnał wyboru napędu, +5V dla CD1 i 0V dla CD2, a na pinie 17 (SDA) sygnał mute/standby, +5V wyciszenie aktywne, 0V nieaktywne. W kicie AVT941 nazwy SCL i SDA są zamienione. Sygnały te można wykorzystać na przykład do przełączania selektora wejść w przedwzmacniaczu lub wyciszania wzmacniacza, gdy odtwarzanie jest zatrzymane. Jeśli do tych wyjść jest już podłączony jakiś układ należy go odłączyć przed uruchomieniem.
Nowa wersja była testowana z następującymi napędami:
- CD-ROM LG CRD-8483B
- CD-ROM LG CRD-8522B
- CD-ROM LG GCR-8523B (*)
- CD-RW LITE-ON LTR-32125W (*)
- DVD-RW SAMSUNG SH-S162L (*) – napęd czasami się zawiesza
- DVD-ROM LG GDR-8164B – nie współpracuje ze sterownikiem!
- CD-ROM ASUS CD-S520B2 (*)
- CD-RW LG GCE-8527B (*)
gdzie (*) oznacza, że funkcja CD-TEXTu jest dostępna
Mam nadzieję, że nowe oprogramowanie będzie lepiej spełniało swoje zadanie i działało możliwie niezawodnie z jak największą liczbą napędów. Wszelkie uwagi, komentarze i sugestie mile widziane. Na koniec podziękowania dla kolegi mdm150 za pomoc w testowaniu programu.
Fajne? Ranking DIY
