DZIAŁY:

   8051
   PIC
   AVR

 

   GŁÓWNA


      Programy
      Download
      Linki

 

 

 


Projekt testera unilink

 

Unilink jest to system komunikacji między tunerem a innymi urządzeniami systemu nagłośnienia samochodu, opracowany i stosowany przez firmę SONY. Najczęściej jest wykorzystywany do sterowania zmieniarkami CD umieszczonymi w bagażniku samochodu. W przypadku uszkodzenia jednego z urządzeń zachodzi konieczność wymontowania przynajmniej jednego sprzętu i sprawdzenia go w warunkach warsztatowych. Jeśli usterka nie występuje w tym sprzęcie trzeba wymontować drugi. Zaprojektowany przeze mnie tester umożliwia szybsze stwierdzenie, w którym urządzeniu tkwi przyczyna. Można już w warsztacie sprawdzić działanie sterownika w radiu, jeśli nie mamy zmieniarki. Tunery z funkcją obsługi zewnętrznej zmieniarki mają wejścia do podłączenia sygnału audio. Nie można go jednak wykorzystać do podłączenia innych źródeł sygnału, takich jak np. odtwarzacz MP3, discmen, itp. Wynika to stąd, iż funkcja ta jest nie aktywna, jeśli do szyny unilink nie jest podpięte żadne urządzenie. Podłączenie mojego testera umożliwi wykorzystanie tego wejścia dla własnych celów, gdyż sterownik stwierdzi obecność zmieniarki i uaktywni wejście. Na wyświetlaczu będzie wyświetlany numer płyty, numer utworu oraz czas trwania utworu, który generowany jest przez tester.

Krótki opis systemu


- poziomy sygnałów zgodne z TTL 0V(LOW) 5V(HIGH)
- jest tylko jeden układ nadrzędny (MASTER)
-szyna unilink ma trzy sygnały: BUS, DATA i CLOCK
złącze posiada jeszcze dodatkowe przewody, przez które mogą być przesyłane pomocnicze sygnały oraz zasilanie.

Szyna znajduje się zawsze w jednym z trzech stanów:

- off               - BUS ON = 0    CLOCK i DATA są nie aktywne

- idle             - BUS ON = 1    CLOCK = 0, DATA 8ms low następnie 8ms high


Przebiegi sygnałów data (A) i clock (B) dla stanu idle

- aktywny     - BUS ON = 1     przebieg, tak jak w idle, przedzielony okresami przesyłania danych


Przebiegi sygnałów data (A) i clock (B) dla stanu aktywny


Wygląd oraz rozmieszczenie pinów w złączu przedstawia poniższy rysunek


Złącze unilink


Transmisja danych jest synchronizowana sygnałem zegara nadawanym przez master. Zmieniarka (slave) jest, co jakiś czas, „odpytywana” przez master odnośnie stanu jej pracy oraz, w zależności od odpowiedzi, o inne parametry. Jeśli slave chce pilnie przesłać dane do master komunikuje to przez wymuszenie stanu niskiego podczas trwania wysokiego stanu w cykli idle. Ponieważ do szyny może być podłączonych kilka różnych układów slave, każdy z nich ma inne okienko czasowe, w którym może sygnalizować żądanie obsługi przez master.


Sposób zgłaszania żądania obsługi przez slave (C)


Formaty danych


krótkie słowo

RAD|TAD|CMD1|CMD2|Parity| Error
 
Średnie słowo

RAD|TAD|CMD1|CMD2|Parity|D1|D2|D3|D4|Parity2| Error
 
długie słowo

RAD|TAD|CMD1|CMD2|Parity|D1|D2|D3|D4|D2_1|D2_2|D2_3|D2_4|D2_5|Parity2| Error
 

gdzie:
RAD             - adres odbiorcy
TAD             - adres urządzenia nadającego
CMD1           - pierwsze bajty komendy
CMD2           - uzupełniające bajty komendy

Parity           - bajt parzystości
                     Wartość bajtu parzystości jest sumą wszystkich wcześniejszych bajtów
D1-D2_4       - dodatkowe bajty komendy w słowie średnim i długim
Error            - bajt błędu, jeśli nie ma błędu 00

W adresie cztery wyższe bity zależą od rodzaju urządzenia natomiast cztery młodsze są nadawane przez master podczas cyklu nawiązywania transmisji po resecie zestawu. 

Przyporządkowanie adresów poszczególnym urządzeniom

 Grupy IDs: 

0x3     CD odtwarzacz/zmieniarka
0x5     Tuner
0x6     Odtwarzacz kasetowy
0x7     Wyświetlacz
0xc     Zegar
0xD     MD odtwarzacz/zmieniarka 

Inne: 

0x11 - Klawiatura
0x21 - Keypad(Controll)
0x91 - DSP(Vol,Tone,etc)
  

Specjalne adresy: 

0x10    Master
0x18    Broadcast ? 

Każde słowo danych nadawane przez master zaczyna się po wysokim stanie idle, niskim stanem trwającym przez 3 ms, następnie pojawia się pierwszy impuls sygnału zegarowego, a na szynie danych są ustawiane stany bitów danych. Odczyt danych następuje przy opadającym zboczu sygnału zegarowego. Czas trwania niskiego stanu na początku słowa rozkazu jest zawsze równy 3ms. Częstotliwość sygnału zegarowego jest różna dla poszczególnych typów sterowników. Nie znam wartości granicznych przewidywanych przez specyfikację systemu. Przykładowe zmierzone zamieściłem na poniższym  rysunku.


Budowa słowa danych nadawanego przez master


Po nadaniu słowa rozkazu master, jeśli oczekuje odpowiedzi od slave, wysyła po okresie kilku milisekund sygnał zegarowy. W odpowiedzi slave wysyła dane na szynę, które są odbierane przez master.
W systemie unilink można teoretycznie sterować do stu zmieniarek lub innych urządzeń tego typu. Aby to było możliwe po starcie, system przeprowadza procedurę inicjalizacji, w czasie której master sprawdza, ile i jakich urządzeń jest z nim połączonych. Poniżej zamieściłem dwa rysunki. Pierwszy przedstawia teoretyczny cykl inicjalizacji systemu, oparty na materiałach firmy Sony. Drugi natomiast dane odczytane z szyny po resecie tunera, z podłączonym moim urządzeniem.

 Procedura inicjalizacji z materiałów firmy SONY


18 10 01 00 29 00 00 
18 10 01 02 2B 00 00 
18 10 01 02 2B 00 00 
18 10 01 02 2B 00 
10 30 8C 41 0D 25 A8 00 00 DA 00 
31 10 02 14 57 00 
10 31 8C 41 0E 24 A8 00 00 DA 00 
18 10 01 04 2D 00 00 
18 10 01 02 2B 00 00 
18 10 01 02 2B 00 00 
18 10 01 02 2B 00 00 
18 10 01 03 2C 00 00 
18 91 8C 00 35 00 0D C0 0C 0E 00 00 
18 21 8C 00 C5 01 0D 00 00 D3 00 00 
18 71 8C 00 15 80 01 08 01 9F 00 00 
18 71 8D 06 1C 06 11 00 00 33 00 00 
18 C1 8C 00 65 00 04 00 00 69 00 00 
18 61 8C 00 05 04 00 60 00 69 00 00 
18 51 8C 06 FB 84 E3 80 02 E4 00 00 
18 51 8D 10 06 00 00 00 00 06 00 00 
18 10 8C 00 B4 01 00 00 00 B5 00 00  

Procedura inicjalizacji odbiornika XR-CA410 z przystawką

Opis wykonania

Projekt został wykonany w oparciu o mikrokontroler firmy ATMEL AT89C4051 z kilkoma elementami dyskretnymi koniecznymi do jego pracy. Napięcie konieczne do jego pracy jest uzyskiwane ze stabilizatora 5V, zasilanego z tunera poprzez kabel unilink. Wejścia są zabezpieczone diodami zenera a całość została zmontowana na płytce uniwersalnej i umieszczona w zamkniętej obudowie ze standartowym złączem systemu unilink.

 

Schemat testera

Program procesora

Program został napisany w asemblerze, a jego główne procedury to:
- odbiór danych
- nadawanie danych

;******************************************************************************
;* Odbiór danych z szyny "DATA"                                               *
;******************************************************************************
Clock:    PUSH      ACC                 ; akumulator na stos
          CLR       TR1                 ; timer "1" zatrzymany 
          MOV       A,Dane              ; Zapis bajtu do akumulatora
          RL        A                   ; przesuń akumulator w lewo
          JB        DataIn,Clock1       ; skocz jeśli jedynka
          ORL       A,#01h              ; dodaj 01h do akumulatora
Clock1:                                 ;
          MOV       Dane,A              ; zapisz zawartość akumulatora
          DEC       BitCount            ; odejmij jeden od licznika bitów
          MOV       A,BitCount          ; licznik bitów do akumulatora
          JZ        ReadData            ; jeśli akumulator zero skok
          POP       ACC                 ; pobierz ze stosu zawartość akumulatora
          RETI                          ; wyjście z obsługi przerwania
;
;******************************************************************************
;* Jeden Bajt Danych jest kompletny                                           *
;******************************************************************************
ReadData: MOV       @R1,Dane            ; zapis bajtu do bufora na pozycje @R1
          CJNE      R1,#Bufor,ReadData1 ; porównaj R1 i Bufor i skocz jeśli różne
          CJNE      @R1,#00h,ReadData1  ; skocz jeśli bajt o adresie R1 nie 00h
          JMP       ReadData3           ; skok
                                        ;                                        
ReadData1:INC       R1                  ; zwiększ licznik bajtów
                                        ;
ReadData3:MOV       Dane,#00h           ;
          MOV       BitCount,#08h       ; licznik bitów
          MOV       TL1,#1Eh            ; ustawianie timera
          MOV       TH1,#0EDh           ;
          SETB      TR1                 ; timer "1" start 
          POP       ACC                 ;
          RETI                          ; wyjście z obsługi przerwania

Listing podprogramu odczytu bajtu z szyny

;******************************************************************************
;* Nadawanie polecenia na UniLink-Bus                                         *
;******************************************************************************
SendB:    ANL	    TCON,#10101111B	; Zatrzymanie timerów
	  CLR       EA                  ; Przerwania wylączone
          ANL       Status,#0FCh        ; ustawienie statusu
          MOV       A,#00h              ;
          MOVC      A,@A+DPTR           ; zapisz do akumulatora bajt z adresu @A+DPTR
          MOV       R2,A                ; Liczba przesyłanych bajtow
          MOV       R4,#00h             ; Liczba wysłanych bajtow
          MOV       R5,#00h             ; parzystość
SendB2:   INC       DPTR                ; zieksz o jeden rejestr
          MOV       A,#00h              ;
          MOVC      A,@A+DPTR           ;	
SendB6:	  MOV       R3,#08h             ; ustaw licznik bitów
SendB3:   JB        ClockIn,SendB3      ; czekaj dopóki zegar "H"
          JNB       ACC.7,SendBH        ; skok jeśli bit 7 akumulatora "0"
          CLR       DataOut             ; ustaw port wyjścia DataOut na "L"
          JMP       SendB4              ; 
SendBH:   SETB      DataOut             ; ustaw port na "H"
SendB4:   JNB       ClockIn,SendB4      ; czekaj na "H" zegara
          RL        A                   ; obrót akumulatora
          DJNZ      R3,SendB3           ; zmniejsz licznik bitów
Czas5s:   MOV       R7,#0Ah             ; Opóźnienie aż master zacznie czytać
Czas51:   DJNZ      R7,Czas51           ;
          SETB      DataOut             ; 
          INC       R4                  ;
          DJNZ      R2,SendB2           ;
          MOV       Dane,#00h           ;
          MOV       BitCount,#08h       ; licznik bitów
          MOV       TL1,#1Eh            ; Ustawienie timera "1"
          MOV       TH1,#0EDh           ;
          CLR       IE0                 ; Przerwanie zewnętrzne "0" zerowanie flagii
          SETB      EA                  ; Wlączenie przerwań
          ORL	    TCON,#01010000B	; Start timerów
          RET                           ; wyjscie z poprogramu
SendBC:	  ANL	    TCON,#10101111B	; Zatrzymanie timerów
	  CLR	    EA		        ; 
	  MOV	    R2,#01h
	  CJNE	    R4,#04h,Parity	; pomiń jeśli parzysty
	  JMP	    SendB6
Parity:	  XCH	    A,R5
	  ADD	    A,R5		; aktualizacja parzystości
	  XCH	    A,R5
	  JMP	    SendB6

 Listing podprogramu nadawania bajtu na szynę

 Odbiór danych jest realizowany jako obsługa przerwania zewnętrznego INT0. Następnie odbiór poszczególnych bitów jest synchronizowany poziomem zewnętrznego sygnału zegarowego, nadawanego przez master. Po odebraniu pełnego bajtu program powraca do oczekiwania na kolejny bajt rozkazu. Nadawanie jest realizowane jako podprogram z inicjatywy programu głównego, jeśli zostaną spełnione warunki np. odliczenie czasu lub konieczność odpowiedzi na polecenie master. Przesyłanie informacji o czasie powoduje konieczność wyliczenia bajtów parzystości, dlatego nadawanie czasu zaczyna się od etykiety "SendBC". Ze względu na synchronizację zewnętrznym zegarem obie procedury muszą trwać krócej niż okres tego sygnału, co przy częstotliwości kwarcu 20 MHz udało się zrealizować. Odebrane bajty są przechowywane w buforze od adresu 70h pamięci RAM do czasu zakończenia odbierania rozkazu. Następnie program odczytuje kolejne bajty sprawdzając przede wszystkim, czy odebrana komenda została zaadresowana do niego. Jeśli tak, to z bufora są odczytywane kolejne bajty a następnie wykonywane jest polecenie. Rozkazy, jakie urządzenie przesyła do master podczas procedury inicjalizacji oraz inne standartowe, są umieszczone jako tabela w pamięci programu na samym końcu programu.

Listing testera Unilink

Schemat

Linki do stron o systemie unilink
     http://www.cus.org.uk/~cleggy/protocol.htm
     http://users.ntplx.net/~andrew/unilink/unilink
     http://members.home.nl/r.aerts/unilink.htm
     http://gnunilink.sourceforge.net                                                                                                        do góry