Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR

szulat 16 Kwi 2013 18:44 17040 9
  • Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR
    Jest to bardzo specyficzna konstrukcja i prawie na pewno nikomu oprócz mnie nie przyda się w tej konkretnej postaci jaką tu opisuję, ale zawsze pozostają walory edukacyjne, nauczenie się jak coś zrobić albo jak czegoś w żadnym wypadku nie robić :D

    Urządzenie jest protezą dzięki której omijam niektóre wady chińskiego rejestratora wideo, model CVXR-I273
    Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR

    Rejestrator w "normalnych" warunkach pracuje dobrze i przy tym jest bardzo mały i przenośny (to było najważniejsze kryterium wyboru), ale ma dwie dziwne cechy:

    - jeżeli w ciągu kilku sekund po włączeniu zasilania na wejściu nie pojawi się poprawny sygnał wideo to rejestrator zupełnie rezygnuje z dalszych prób nagrywania czegokolwiek i można tylko odtwarzać wcześniejsze nagrania. (za to jeżeli na początku sygnał będzie to potem już można go odłaczać i podłączać i nagrywanie działa)

    - "poprawny sygnał wideo" w jego rozumieniu musi zawierać impulsy sychronizacji koloru (color burst), w przeciwnym razie odmawia współpracy (ale tak jak poprzednio, chodzi tylko o początkową inicjalizację, jeżeli po włączeniu "zobaczy" poprawny sygnał zawierający color burst to potem może już nie być koloru i będzie się nagrywało dobrze. może to dlatego że robią na początku wykrywanie rodzaju sygnał PAL/NTSC i potem się tego trzymają?)

    Niestety, kamera, z którą chciałem go wykorzystać generuje sygnał czarnobiały bez synchronizacji koloru a jakby tego było mało, zaczyna wysyłać sygnał dopiero po 50 sekundach od włączenia zasilania. Na upartego mógłbym więc jej użyć pod warunkiem że przy każdym włączeniu miałbym pod ręką drugą kamerę lub dowolne inne źródło sygnału kolorowego żeby dać go rejestratorowi żeby łaskawie zaakceptował że sygnał jest dobry, po czym przełączałbym na właściwy sygnał czarnobiały. Troche niewygodne :P





    Dlatego właśnie powstała ta dziwna konstrukcja, która automatyzuje to całe przełączanie. Gdy na wejściu nie ma sygnału (kamera jeszcze nie jest gotowa), to generowany jest zastępczy sygnał "testowy" - dzięki temu rejestrator można włączyć od razu i od razu widzi dobry sygnał. Gdy na wejściu pojawi się sygnał, to jest przekazywany na wyjście a dodatkowo dodawane są do niego impulsy color burst, dzięki temu można rejestrator włączyć w dowolnym momencie i w czasie swojej inicjalizacji zawsze zobaczy poprawny sygnał (poprawny według jego spaczonych kryteriów).

    Schemat:
    Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR

    Sterownikiem i generatorem sygnału jest atmega 8 taktowana 7,15909 MHz (dwukrotność częstotliwości color burst w NTSC).

    PB0, PB3 - generacja sygnału wideo (dzielnik z R12, R13, R14). w niektórych momentach PB3/MOSI jest używane w trybie SPI do generowania liter (tak naprawdę nie jest to potrzebne bo sygnał testowy może być dowolny ale chciałem zbadać co się da wygenerować atmegą)

    PB1(OC1A) - generacja color burst (timer1 w trybie CTC)

    Sygnał z generatora i z wejścia są przełączane za pomocą kluczy analogowych 4066 sterowane przez PC0 i PC1.
    Color burst jest podłączony na samym końcu (wspólny dla obu torów bo może byc albo generowany albo dodawany do istniejącego sygnału) przez R10/C12.
    Przełaczanie kluczami analogowymi jest chyba przekombinowane bo powinien wystarczyć jeden klucz (przy wejściu wideo) - generator i tak jest wyłaczany gdy nie jest potrzebny. Ale uznałem to że to będzie pewniejsze bo wtedy traktuję oba źródła sygnału wideo w taki sam sposób.

    Obecność sygnału wejściowego jest wykrywana przez LM1881 (który jest tu użyty na wyrost bo korzystam tylko z jednego jego wyjścia oddzielającego całkowity sygnał sychronizacji (wchodzi do PD3/INT1). Jakiś prosty układ z komparatorem byłby równie dobry ale nie wiem jaki). W niektórych sytuacjach LM1881 reagował na generowany color burst który przedostaje się aż do wejścia - chyba powinna być dodatkowa separacja. Ale zostawiłem tak jak jest i zakłócenia są eliminowane przez program napisany tak że ignoruje sygnał z LM1881 jeżeli pojawiłby się w okolicach generowanego color bursta.

    Na końcu mamy wzmacniacz wideo na AD810 w typowym układzie - chociaż wbrew intencjom producenta zasilany trochę zbyt niskim napięciem. Nie chciałem komplikować konstrukcji dlatego wszystko jest na 5V (ale wcześniej sprawdziłem że przy tym napięciu działa wystarczająco dobrze jak do tego zastosowania).

    Dwa LEDy czerwony i zielony pokazują aktualny tryb pracy - brak sygnału i działa generator lub sygnał ok przekazywany na wyjście
    Przycisk tak naprawdę nie jest potrzebny, był do testowania i przełaczania różnych trybów pracy (w obecnej postaci programu wyłącza generację color burst czyli obraz testowy staje się czarnobiały a do sygnału wyjściowego nie dodaje synchronizacji koloru)

    Od strony programowej najwięcej dzieje się w generatorze, synchronizowanym przez timer2. Ciekawostka: adres obsługi przerwania jest zmienny ;) bo w handlerze jest skok pod adres ze wskaźnika:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    "Program główny" (w sensie kodu który nie jest przerwaniem) to zapętlony sleep po to żeby zapewnić jednakowy czas obsługi przerwania, co jest bardzo ważne bo nawet najmniejsze opóźnienie do razu widać w sygnale wideo jako przeskoki i nierówności.
    Skoro "program główny" nic nie robi to przerwanie nigdy nie może zepsuć jego stanu, a więc nie ma powodu żeby obsługa przerwan zapisywała rejestry czy cokolwiek - dlatego ISR_NAKED.

    Poszczególne warianty funkcji obsługującej przerwanie odpowiadają za różne rodzaje linii - z animacją, z tekstem, pusta, z różnymi impulsami synchronizacji. Odpowiednio wybierając kolejny handler i czas jego zadziałania (OCR2, w programie jako #define TIMER_TOP) uzyskujemy poprawny sygnał wideo i to nawet z przeplotem, czyli 480 linii w pionie, co widać na "ikonce" 1//2 (1 jest w pierwszym półobrazie, 2 w drugim) oraz na ukośnym boku czarnego trójkąta:
    Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR

    Rozdzielczość pozioma przy tej częstotliwości zegara jest ograniczona do około 300 pikseli (co pokazują kolorowe "fale" mierzone delayami z pojedynczych nopów (funkcja delay2)) a przy korzystaniu z SPI (generacja tekstu) do około 150 pikseli (bo wtedy jest zegar/2).

    W czasie generacji sygnału nie wolno korzystać z przerwań o priorytecie wyższym niż timer bo zakłóciłoby to synchronizację, dlatego wykrywanie sygnału wejściowego jest co prawda na INT1 ale w czasie generacji nie jest używany handler tylko sprawdzana flaga (podobnie INT0 dla przycisku). Handler INT1 jest włączany w trybie dodawania color burst do sygnału wejściowego, wtedy on jest tym który wykonuje główną pracę a timer2 staje się licznikiem czasu po przekroczeniu którego uznajemy że sygnał wejściowy sie skończył (przestały przychodzić impulsy synchronizacji) - program wraca wtedy do trybu generatora.

    Kolejna ciekawostka (dla niektórych oczywistość) - w programie nie ma ani jednej zmiennej volatile mimo że przecież tyle przerwań ;)

    Efekt końcowy - płytka zrobiona termotransferem, obudowa to pudełko po dużych tiktakach. Kondensatory są specjalnie nie-smd bo skoro się okazało że kwarc jest taki duży i LM1881 też nie będzie smd to i tak płytka nie będzie płaska więc można tam też dać duże baniaczki i wszystkie duże elementy lądują po tej samej stronie.

    Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR Generator impulsów synchronizacji koloru i przełącznik wideo dla chińskiego DVR

    W załącznikach źródła: videoswitch.c (program) fala.h (wygenerowane wartości sinusa do animowanych fal obrazu testowego) font_sliced.h (bitmapa fonta podzielona tak że najpierw jest linia 0 wszystkich znaków, potem linia 1 wszystkich znaków itd. co ułatwia wyznaczanie adresu przy generowaniu znaków - ten trik znalazłem na jakiejś stronie o tvout na avr ale już nie pamiętam na której)


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 16 Kwi 2013 21:55
    ja.czekanski
    Poziom 12  

    szulat napisał:
    "Program główny" (w sensie kodu który nie jest przerwaniem) to zapętlony sleep po to żeby zapewnić jednakowy czas obsługi przerwania, co jest bardzo ważne bo nawet najmniejsze opóźnienie do razu widać w sygnale wideo jako przeskoki i nierówności.
    Skoro "program główny" nic nie robi to przerwanie nigdy nie może zepsuć jego stanu, a więc nie ma powodu żeby obsługa przerwan zapisywała rejestry czy cokolwiek - dlatego ISR_NAKED.


    Ten problem można rozwiązać w całkiem łatwy sposób, mianowicie na początku obsługi przerwania (zaraz po zapisaniu statusu procesora na stos lub do zmiennej pomocniczej) wczytujemy aktualną wartość timera i porównujemy ją do pewnej stałej. W idealnym przypadku miałaby ona wartość 0, ale sam skok do przerwania zajmuje 4 cykle + od 1 do 3 w zależności od wykonywanej instrukcji (AVR musi skończyć wykonywać instrukcję aby obsłużyć przerwanie, instrukcje mają od 1 do 3 cykli).

    Mój kod wyglądał tak:
    Kod: asm
    Zaloguj się, aby zobaczyć kod

    Te dziwnie wyglądające skoki służą jako minimalne opóźnienie w przypadku, gdy wykonywana instrukcja trwała mniej niż 3 cykle, aby wykonywany kod przerwania miał zawsze takie samo opóźnienie.

  • #3 16 Kwi 2013 22:24
    szulat
    Poziom 23  

    kubx napisał:
    Te dziwnie wyglądające skoki służą jako minimalne opóźnienie w przypadku, gdy wykonywana instrukcja trwała mniej niż 3 cykle, aby wykonywany kod przerwania miał zawsze takie samo opóźnienie.

    O, ciekawy sposób, czyli dzięki temu możesz mieć program główny który coś robi a nie tylko sleep.
    Nawet nie myślałem o takim sposobie bo uznałem że nie ma szans zeby tak dobrze wycyrklować z czasem wykonywania instrukcji żeby zawsze uzyskać to samo opóźnienie dla wszystkich przypadków. Fajnie że się da :)

  • #4 19 Kwi 2013 17:03
    kris6661991
    Poziom 25  

    Z tego co rozumiem (to, w jaki sposób działa to wszystko) nie łatwiejszym rozwiązaniem było by wykonanie prostego timera na NE555 odliczającego określony czas (np minutę) po czym resetowanie bądź opóźnione załączanie rejestratora? :) I tak z tego co piszesz - kamera przez pierwsze 50 sekund jest nieużyteczna.

  • #5 19 Kwi 2013 21:03
    szulat
    Poziom 23  

    kris6661991 napisał:
    nie łatwiejszym rozwiązaniem było by wykonanie prostego timera na NE555 odliczającego określony czas (np minutę) po czym resetowanie bądź opóźnione załączanie rejestratora?

    Najprostsze rozwiązania są najlepsze :) i na początku myślałem że opóźnienie wystarczy, ale wtedy okazało się że z braku color burst oryginalny sygnał z kamery jest niewystarczający do uruchomienia rejestratora i potrzebne jest albo przełączanie na dodatkowe źródło sygnału albo modyfikacja tego sygnału.
    Ostatecznie z tych dwóch opcji wybrałem... obie :D bo wzrost komplikacji układu był już niewielki (tzn. i tak okazało się że nie może być "prosty"). Przy okazji uzyskałem możliwość niezależnego włączania kamery i rejestratora w dowolnej kolejności z gwarancją że zawsze dobrze wystartuje (normalnie wszystko włącza się równocześnie ale nie można wykluczyć że jedno z urządzeń, zwłaszcza rejestrator, mógłby się niespodziewanie sam zrestartować, skoro jest taki niedorobiony (dotychczas się to nie zdarzyło, więc może nie jest taki zły! a tylko producent nigdy nie testował go w mniej typowych konfiguracjach))

  • #6 24 Kwi 2013 00:10
    bobeer
    Poziom 28  

    Przy okazji kwestii z dokładnością czasową avr, podpowiem, że można uzyskiwać idealne sygnały bez jitteru wynikającego ze zróżnicowania czasów wykonywania instrukcji w głównej pętli. Wystarczy użyć dwóch następujących po sobie przerwań. Pierwsze przerwanie wykonuje tylko jednocyklowe instrukcje i oczywiście włącza zezwolenie na przerwanie od którego oczekujemy dokładnego wystąpienia w czasie. Użyłem tej metody w odtwarzaczu audio i działa bezbłędnie.

  • #7 24 Kwi 2013 11:57
    Belialek
    Poziom 22  

    Witam,

    Czy do wygenerowania zwykłego sygnału typu "czarna plansza" potrzebna jest równie złożona konstrukcja, czy można coś uprościć?

    Szukam materiałów do zaprojektowania urządzenia podającego wyłącznie sygnał z czarnym ekranem (PAL, złącze antenowe). Mam świetnie wyświetlający panoramiczny CRT, ale niestety występują przebicia sygnału na złączu EURO - po wyłączeniu sygnału analogowego przebijający "śnieg" fatalnie psuje obraz podłączonego dekodera tv sat...

  • #8 24 Kwi 2013 12:14
    szulat
    Poziom 23  

    bobeer napisał:
    Wystarczy użyć dwóch następujących po sobie przerwań. Pierwsze przerwanie wykonuje tylko jednocyklowe instrukcje

    też dobry pomysł, nawet początkowo robiłem coś podobnego - w pętli głównej sprawdzałem timer czy zbliża się do wartości przy której jest przerwanie i wtedy robiłem serię nopów, ale koncepcja ze sleepem była prostsza więc porzuciłem te próby.

    Belialek napisał:
    Czy do wygenerowania zwykłego sygnału typu "czarna plansza" potrzebna jest równie złożona konstrukcja

    do tak prostego efektu wystarczy jeden dowolny pin mikrokontrolera ustawiony jako wyjście + dwa rezystory (dzielnik napięcia) bo generujesz wtedy tylko dwa stany - synchronizacja i poziom czerni.

  • #9 06 Maj 2013 00:18
    misiupan
    Poziom 35  

    Czy jako źródło obrazu kontrolnego nie mógł by być zastosowany modulator od magnetowidu? Wyświetla on dwa pionowe pasy na czarnym tle. Wystarczyło by się w środku podpiąć w odpowiednie miejsce.
    Nie wiem jak zareagował by twój rejestrator na taki sygnał.

  • #10 06 Maj 2013 01:41
    szulat
    Poziom 23  

    misiupan napisał:
    Czy jako źródło obrazu kontrolnego nie mógł by być zastosowany modulator od magnetowidu? Wyświetla on dwa pionowe pasy na czarnym tle. Wystarczyło by się w środku podpiąć w odpowiednie miejsce.
    Nie wiem jak zareagował by twój rejestrator na taki sygnał.

    Aaaaa, pamiętam z dawnych czasów te dwa pasy jak się dostrajało kanał do widea :D a potem i tak wszyscy mieli eurozłącze i pasów już nikt nie widział :P
    Taki generator wyciągnięty z magnetowidu mógłby zadziałać o ile wysyła synchronizację koloru, ale czy to by miało jakieś zalety? Pewnie nie, bo teraz układ sterujący (mikrokontroler) jest równocześnie generatorem - mniej elementów - prosta budowa.