START
_______________

Atari 16-bit

Floppy Drive
DIN14-IDC34
adapter


ACSI-SCSI interface

Video digitizer faST

MegaSTe SCSI
internal interface


ST RAMcart

Peter Putnik's
ACSI-CF Interface


Sack's PC-speed
remake project


Vortex AT-ONCE
remake project


Sack's AT-speed
remake project


MagicSAC+
remake project


ICD ST Hard Drive
Adapter BD
remake project


ICD Advantage SCSI+
remake project


ICD AdSCSI Micro
remake project


Realtime
Clocks


Matrix M110
GAL Pack


ICD Advantage SCSI
remake project


ICD Micro MegaSTe
adaptation project


Emagic LOG3
Interface remake


 

 Video digitizer faST

   Prezentowany poniżej projekt został ukończony w 1996 roku. Powstały dwie wersje.
Wiem, że czasu minęło wiele, technologia poszła do przodu i sens budowy takich
urządzeń gdzieś zanikł. Jednakże zamieszczam go tu z powodów sentymentalnych
oraz z nadzieją, że może się komuś przyda. Zrobiony "na piechotę" na TTL, bo takie
były ledwie dostępne w tamtych czasach, działał obłędnie sprawnie i dał mi wiele
satysfakcji ponieważ został przemyślany i zrobiony przeze mnie "od zera". Rysunki
powstawały na Atari ST choć już nie wiem w jakim programie. Widać w opisach
czcionkę Chicago.

   Schematy istnieją tylko w tym formacie. Brak zaprojektowanych PCB ponieważ
nie byłem w stanie w tamtym okresie zdobyć odpowiednio dużego laminatu, a i byłby
problem z wykonaniem tak precyzyjnej i "gęstej" konstrukcji. Wprawdzie już znano
tzw. prasowanki, ale mimo wszystko to pozostawało poza zasięgiem.

   Prototyp powstawał na uniwersalnych płytkach, gdzie układy były łączone cynarem.
Sporo przewodzików było ale się opłaciło...


Wersja druga - zmieniona

Digitalizer Video dla Atari  ST(e)


           Opisane poniżej urządzenie daje możliwość zamiany analogowego
        sygnału wizyjnego CVBS (Y) na ruchomy obraz cyfrowy oglądany
        na ekranie komputera w czasie prawie rzeczywistym.

           Od dłuższego już czasu jestem zadowolonym posiadaczem Atari ST.
       
(tekst pochodzi z 1996 roku ale dalej jestem zadowolonym atarowcem)
        Komputer ten, w porównaniu z konkurencją, nie ma zbyt dobrej grafiki,
        ale mając talent malarski można także na jego ekranie tworzyć całkiem
        udane obrazki. W moim przypadku braki w umięjętnościach malarskich
        postanowiłem nadrobić elektroniką. Posiłkując się różnoraką literaturą
        wziąłem się do pracy i uzyskałem taki oto efekt końcowy:

           - podłączenie do komputera przez złącze cartridge
           - czterobitowa kwantyzacja sygnału video (16 odcieni szarości)
           - obraz całoekranowy  (320x200) ale nie overscan
           - bufor 32 kB na dane video
           - minimum 12 ramek w ciągu sekundy (w realu zdecydowanie więcej)
           - digitalizacja sekwencji do RAM komputera
           - zapis pojedyńczych obrazów na dysk w formacie DEGAS'a
           - bardzo prosta obsługa.

           Źródłem sygnału może być dowolne urządzenie video wysyłające
        standardowy sygnał wizyjny CVBS, S-VHS itp. Nie jest wymagana
        statyczność sceny. Dalszą obróbkę uzyskanego przez digitalizację
        obrazu można wykonać dowolnym programem graficznym.

           Założenia sprzętowe

           Obraz telewizyjny, według standardu PAL, składa się z 50 półobrazów
        transmitowanych w ciągu sekundy, poprzedzonych impulsami synchronizacji
        pionowej - VSYNC. Każdy z półobrazów zawiera 312,5 linii wraz z
        synchronizacją - HSYNC. Impulsy te są niezbędne do zapewnienia stabilnego
        odtwarzania obrazu we wszystkich odbiornikach - także w przypadku
        opisywanego układu.
           Dla procesu digitalizacji istotne jest to, że faktyczna ilość linii
        niosących informację wizyjną wynosi 288 co daje czas ok. 18,5 ms -
        1,5 ms zajmuje VSYNC oraz powrót plamki. Także w przypadku pojedyńczej
        linii trwającej 64 mikrosekundy - 52 mikrosekundy są przeznaczone
        dla sygnału użytecznego a reszta odpowiada za synchronizację HSYNC
        oraz wygaszanie poziome.
           W jednym cyklu jest digitalizowany jeden półobraz. Z wymagań na
        proporcje TV równe 4:3, dla 288 linii są pobierane 384 próbki sygnału
        wejściowego.
           Ze względu na to, że układ wideo - SHIFTER w Atari ST jest w stanie
        wyświetlić w niskiej rozdzielczości obraz o wymiarach 320x200 przyjąłem
        co następuje:

           - ekran Atari ST jest oknem 320x200 rzutowanym na pole obrazu
             384x288
           - zmiana położenia okna w polu odbywa się poprzez zmiany czasów
             opóźnienia synchronizacji układów digitalizera względem VSYNC i HSYNC.

           Aby powyższe założenia były spełnione - digitalizacja dla okna 320x200
        musi być wykonywana z okresem obliczonym dla pola 384x288. Jeżeli
        w ciągu 52 mikrosekund mają zostać pobrane 384 wartości, to czas ten dla
        320 próbek wynosi ok. 43,3 mikrosekundy co daje częstotliwość przetwarzania
        7.407 MHz. Pozostaje jeszcze czas ok. 8,5 mikrosekundy - w granicach
        którego można przesuwać okno w poziomie, sterując momentem wyzwalania
        od HSYNC.
           Analogiczna sytuacja występuje dla ramki synchronizowanej impulsem
        VSYNC z tym, że liczba linii jest stała - 200, a dla różnicy 88 linii zmiana
        momentu wyzwalania dokonywana jest w zakresie co najmniej 6 ms.
        Umożliwia to przesuwanie okna w pionie.
        Założenia te zostały przedstawione na rysunku 1.


           Opis układu

        Digitalizer składa się z czterech części :
           - układu wydzielania impulsów synchronizacji z przetwornikiem A/D -
             SDA 9087 używanym w PIP (rys.2)


           - bloku rejestrów wejściowych U1-U16, dzięki którym jest dokonywana
             sprzętowa konwersja danych z przetwornika A/D na format bezpośrednio
             akceptowany przez SHIFTER w Atari ST (rys.3)


           - wyzwalania digitalizacji oraz  generowania adresów (rys.4)


           - pamięci wraz z interfejsem I/O (rys.5)



           Sygnał wejściowy jest podawany równolegle na wtórnik dopasowujący
        oraz na układ wydzielania synchronizacji zrealizowany na LM1881 (U39)
        w schemacie zalecanym przez producenta. Zamiast impulsu HSYNC do
        synchronizacji linii użyłem /BURST dostępny na wyjściu tego układu.
        Impulsy /VS  oraz /BURST są podane na wejścia bramek Schmitta (U40)
        gdzie ulegają inwersji. Dodatkowo BURST steruje przetwarzaniem w
        układzie SDA 9087 (U41) poprzez wejście ISC - sandcastle. Z wyjścia
        wtórnika sygnał jest podany na pin19 U41 - Yin będący wejściem
        5-bitowego przetwornika "flash". SDA 9087 został zastosowany w układzie
        aplikacyjnym z tą różnicą, że wprowadziłem regulację napięć odniesienia
        przetwarzania opartą na potencjometrach: P1 - dolny próg i P2 - górny,
        aby umożliwić dopasowanie do poziomu sygnału wejściowego. Z wyjść
        Y01-Y04, próbki w postaci cyfrowej trafiają do bloku rejestrów wejściowych.

           Układ zrealizowany przy użyciu rejestrów SIPO 74164 oraz D 74374 służy
        do zamiany szesnastu czterobitowych próbek binarnych w 4 szesnastobitowe
        słowa danych odpowiadające planom wyświetlania SHIFTER'a poprzez
        synchroniczne z zegarem SysClock przesuwanie zawartości i zatrzaskiwanie
        co 16 taktów w przerzutnikach D, skąd informacja jest przepisywana do RAM
        digitalizera.

           W części wyzwalania digitalizacji i generowania adresów znajdują się m.in.
        układy formowania impulsów :
           - U18 tworzy z VS impuls RCNA, o zmiennym opóźnieniu względem VS
             regulowanym potencjometrem P3 - przesuwanie obrazu w pionie. Impuls ten
             powoduje też zerowanie licznika adresów RAM (U32,U33) digitalizera oraz
             przygotowanie obwodu kasowania licznika próbek U21,U22
           - U19 tworzy z BURST impuls /HRES, o zmiennym opóźnieniu względem
             BURST regulowanym potencjometrem P4 - przesuwanie obrazu w poziomie.
             /HRES kasuje licznik próbek i wstrzymuje okresowo pracę zegara SysClock.

           Przerzutniki U28 służą do przygotowania digitalizacji - U28a jest ustawiany
        z komputera, iloczyn sygnału Q (U28a)z RCNA ustawia U28b. Taktowanie całości
        zostało zrealizowane w postaci generatora START-STOP na bramce Schmitta
        U26d. Reszta elementów służy do tworzenia sygnałów odczytu z rejestrów oraz
        zapisu do RAM urządzenia - co zostanie omówione przy opisie działania.

           Pamięć buforową zbudowano z dwóch układów 62256-100 (32kx8) pracujących
        w konfiguracji 32kx16. Interfejs I/O jest zbudowany z U34,U35 i U36. RAM jest
        sterowana z licznika U32,U33 na dwa sposoby: w czasie digitalizacji impuls
        incADR, a w momencie odczytu sygnał wyboru /ROM3 sel. z portu cartridge ST,
        powodują zwiększenie adresu po zapisie albo odczycie danych. Bramka U31
        pracuje w układzie autozerowania licznika po osiągnięciu stanu 16000.

           Przebieg próbkowania

           Ze względu na to, że konstruktorzy Atari ST zabronili zapisywania
        czegokolwiek do obszaru cartridge (ROM!), a także z powodu niedostępności
        innych linii sterujących (np.IRQ) na złączu, został wybrany dosyć udziwniony
        sposób uruchamiania digitalizacji.
           Start przetwarzania jest sygnalizowany stanem niskim na linii adresowej A15
        cartridge przy adresowaniu obszaru $FAXXXX, co powoduje ustawienie
        przerzutnika U28a. Po nadejściu impulsu RCNA zostaje ustawiony U28b ustalając
        stan niski na wejściu bramki U30a. Zostaje wyzerowany licznik U32,U33,
        następuje oczekiwanie na pojawienie się pierwszego impulsu /HRES, który
        powoduje wyzerowanie licznika U21,U22 ustawiając wyjście bramki U25a w stan
        wysoki i w momencie jego zakończenia poprzez bramkę AND, stanem wysokim,
        uruchomienie generatora SysClock - następuje przetwarzanie danych pierwszej
        linii. Wykresy czasowe stanów układu są przedstawione na rys.6.



           Pierwsze, narastające zbocze SysClock powoduje zamknięcie i przesunięcie
        w prawo informacji z przetwornika A/D w rejestrach U1-U8. Po szesnastu taktach
        zostaje ustawiony przerzutnik U28a zezwalający na wykonywanie zapisu do RAM.
        Zanegowany stan linii D (ZAP) licznika próbek, co 16 taktów zatrzaskuje przednim
        zboczem informację z rejestrów 74164 w przerzutnikach D 74374. Poziom niski na
        wyjściu /Q U28a odblokowuje dekoder U23, który wraz z bramkami U24 wytwarza
        impulsy /OE1-/OE4 odblokowywujące kolejno dostęp do wejść danych RAM dla
        przerzutnikom U9-U16. Na bramce U26b jest formowany impuls inkrementacji
        adresu /incADR, a na U25b sygnał wpisu do pamięci /WE. Po początkowych
        16 taktach przez kolejne 320 trwa zapis danych jednej linii. Osiągnięcie stanu 336
        przez licznik próbek powoduje zatrzymanie pracy SysClock aż do momentu
        pojawienia się następnego impulsu /HRES i wznowienia procesu dla następnej linii.
        Po przyjęciu 16000 próbki i jej zapisie w pamięci - licznik adresów przyjmuje stan
        16000, który zostaje zdekodowany przez bramkę U31. Poziom niski na jej wyjściu
        (/END) zeruje licznik adresów - przygotowując RAM do odczytu, a także powoduje
        ustawienie stanu początkowego przerzutników U20a i U20b zatrzymując w ten
        sposób proces digitalizacji. Na wyjściu /Q U20a pojawia się stan wysoki
        oznaczający koniec przetwarzania (/DDIR). Ten sygnał jest skierowany przez
        bramkę U36d na linię danych cartridge D0 w obszarze $FAXXXX do odczytu
        i oznacza koniec przetwarzania ramki oraz dane gotowe do odczytu przez
        komputer. Jedynie prawidłowe przetwarzanie można uzyskać odpytując
        programowo stan tej linii.
           Jak wspomniałem wcześniej, licznik adresów digitalizera jest wykorzystany
        zarówno przy zapisie jak i odczycie, dlatego też jego taktowanie jest
        przełączane, korzystając z bramek U36a i U36b, pomiędzy digitalizerem
        a komputerem. Przy odczycie danych rolę impulsu inkrementacji spełnia
        zanegowany strob dostępu do obszaru $FBXXXX - /ROM3sel. cartridge,
        jednocześnie sterując dostępem buforów U34,U35 do szyny danych Atari ST.
        Pamięć, w trakcie odczytu, ma stale otwarte wyjścia stanem niskim na liniach
        /OE co skraca czas dostępu do danych. Po odczytaniu 16000 słów 16-bitowych
        można ustawić linię adresową A15 w stan niski i zacząć digitalizację kolejnej
        ramki.
           Na rys.8 znajduje się schemat układu sygnalizacji pracy urządzenia,
        który został dołączony opcjonalnie, gdyż nie ma żadnego wpływu na digitalizację.


           Konstrukcja

           Układ został zaprojektowany na maksimum efektu, dlatego jest tak bardzo
        rozbudowany. Osiągane szybkości nie są olbrzymie ale najprawdopodobniej
        graniczne - przy zegarze 8 MHz w Atari ST nie jest możliwe pokonanie
        ograniczeń prędkościowych. Należy zadbać o właściwe blokowanie zasilania
        kondensatorami tłumiącymi zakłócenia szpilkowe a także o rozdzielenie
        napięć zasilających część analogową i cyfrową przez zastosowanie dwóch
        stabilizatorów 7805 zasilanych z zewnętrznego źródła prądu stałego 12V.
        Modelowy digitalizer został wykonany z elementów TTLLS w związku z czym
        całkowity pobór prądu wynosi ok. 800 mA. Przy zastosowaniu układów serii
        HC,HCT moc pobierana zmaleje do rozsądnych wartości.
           Na płycie czołowej zostały umieszczone potencjometry regulacyjne P1-P4,
        gniazdo wejściowe CINCH oraz (opcjonalnie) diody LED obrazujące przetwarzanie.

        Rys.7 przedstawia widok i numerację styków w złączu cartridge


           Wbrew pozorom przedstawione schematy mogą być dostosowane również
        do innych komputerów, np. Atari 8-bit, ponieważ rozwiązania konstrukcyjne są
        uniwersalne. Wystarczy tylko przeliczyć dane wyjściowe do projektu i dopasować
        postać zapisu danych w RAM digitalizera oraz jej wielkość do posiadanego
        komputera. Oczywiście - jeśli wymagana jest większa liczba bitów na pixel - to
        również możliwe jest do zmiany i dostosowania.

           Oprogramowanie digitalizera

           Podstawową konstrukcją programową jest pętla:
          
    /-> sys_run:
    |              move.l    #$FB0000,A0      ; skąd
    |              move.l    #adr_ekranu,A1   ; dokąd
    |              tst.b      $FA0000              ; start
    |   wait:
    |              cmp.w    #$FFFF,$FAFF00   ; D0=1 (koniec?)
    |              bne        wait                       ; jeśli nie, pytaj dalej...
    |
    |              rept       16000              ; 16000 razy
    |              move.w   (A0),(A1)+       ; <-- ten rozkaz
    |              endr                             ; rozmnóż
    |
    \----------<<< bra        sys_run        ; ...od początku.

           Ten fragment będzie w nieskończoność uruchamiał digitalizer i
        przepisywał dane z jego RAM bezpośrednio do pamięci ekranu Atari ST.

           Do projektu załączam plik
dfast.zip z programem digitalizacji oraz
        plikiem źródłowym w formacie assemblera DEVPAC. Poniżej zamieszczam
        kilka obrazków uzyskanych przy jego pomocy. Niestety - tylko z niedoskonałej
        wersji pierwszej. Dyski z digitalizacjami uzyskanymi z prezentowanej wersji
        gdzieś mi się zapodziały niestety - nad czym ubolewam niezmiernie... Obrazki
        z wersji pierwszej posiadają zakłócenia objawiające się białymi pixlami powstałymi
        z powodu zastosowania do taktowania niesynchronizowanego generatora
        kwarcowego. Problem ten został naprawiony w wersji drugiej poprzez zamianę
        generatora wolnobieżnego na synchronizowany z początkiem obrazu i obrazy oraz
        sekwencje były digitalizowane bezbłędnie.

           Obrazki uzyskane przy pomocy faST (widoczne białe, błędne pixele).
        Kolory (szaroniebieskie) są ustalone jako jedna z palet w programie obsługi.












           Poniższy obrazek został poprawiony w pogramie graficznym na Atari ST.
           Pochodzi z anime Gunsmith Cats.




           Program DFAST.PRG jest programem autorskim,napisanym wyłącznie
        w celu obsługi digitalizera i ze względu na szybkość całkowicie w assemblerze.

           Funkcje jakie spełnia to:

           - wyświetlanie na ekranie Atari ST ruchomego obrazu
           - naciśnięcie spacji w dowolnym momencie powoduje zapytanie
             o nazwę pliku. Nie trzeba dodawać rozszerzenia .PI1 - program
             dopisuje je automatycznie. Gdy nazwa osiągnie długość 8 znaków,
             następuje zapis bez potwierdzenia <RETURN>
           - klawisze funkcyjne służą do zmiany 10 palet kolorów, które zostały
             dobrane eksperymentalnie i są stałe, co nie znaczy, że nie można
             ich zmienić w tekscie źródłowym
           - wczytanie sekwencji jest uruchamiane klawiszem S, w tym momencie
             dane są wczytywane pod kolejne adresy w Atari ST, ekran się nie
             zmienia. Zakończenie jest sygnalizowane sygnałem dźwiękowym oraz
             odtworzeniem utworzonej sekwencji, której długość jest zależna od
             ilości pamięci.
       
           W tym trybie jest możliwe:

           - używając klawiszy "+" i "-" na klawiaturze numerycznej przeglądanie
               kolejnych ramek sekwencji (zbytnie manewrowanie po pamięci może
               skończyć się bardzo boleśnie... BOMBY!!!, ponieważ nie są pilnowane
               dozwolone zakresy pamięci Atari)
           - odtworzenie sekwencji klawiszem R
           - klawiszem spacji - zapis konkretnej ramki na dysk 
           - przełączenie palety klawiszami F1-F10
           - zakończenie pracy z sekwencją klawiszem Esc.

        Uwaga! W trybie ciągłej digitalizacji naciśnięcie Esc bez ostrzeżenia
        kończy pracę programu.

        Oprogramowanie nie umożliwia zapisu sekwencji na dysk twardy. Po prostu -
        w tym czasie nie miałem jeszcze dysku twardego i nie widziałem sensu włączenia
        takiej opcji do programu choć z pewnością byłaby przydatna w późniejszym
        okresie.

           Oprogramowanie umożliwia więc tylko sprawy podstawowe - do obróbki obrazu
        należy użyć, jak zaznaczyłem na wstępie, konkretnego programu graficznego
        np. shareware "CRACKART".
       
           Uruchomienie

           Prawidłowo zmontowany układ działa bez żadnych dodatkowych zabiegów.
        Po uruchomieniu programu DFAST.PRG można wykonać test polegający na tym,
        że kolejno na wejścia A,B,C,D bloku rejestrów wejściowych podajemy stan
        wysoki - przy włączonym odtwarzaczu i odłączonych wyjściach przetwornika
        A/D - na ekranie Atari będą pojawiały się kolory w zależności od końcówki
        oraz ustawionej palety.
           Przy podaniu przebiegu wewnątrzukładowego, np.: /incADR na ekranie bedą
        pojawiały się pionowe pasy. W trakcie pracy digitalizera, trymerem C19
        ustala się optymalną geometrię obrazu. Przy digitalizowaniu sygnału
        CVBS będą widoczne efekty tzw. mory - czyli zakłóceń związanych z podnoś-
        nymi chrominancji. W celu wyeliminowania tychże można obrabiać sygnał
        monochromatyczny lub na wyjściu wtórnika wejściowego włączyć pułapkę
        chrominancji.
                      

           Wykaz elementów:

        Rezystory:

        R1: 680k
        R2, R11, R15, R17, R19, R20: 2,2k
        R3: 75
        R4: 22k
        R5: 27k
        R6, R7: 220
        R8: 56k
        R9, R10, R21: 470
        R12, R13, R14, R22: 1k
        R16, R18: 2,7k
        R23, R24: 4,7k
        R25, R26, R27, R28, R29: 330

        Kondensatory:

        C1, C2, C5, C8, C10, C12, C23, C24: 100nF
        C3, C9, C11, C13: 47uF/16V
        C4: 10nF
        C6: 47nF
        C7, C21: 470pF
        C14: 1uF
        C16: 2,2nF
        C15, C17: 33pF
        C18: 150 pF
        C19: trymer cer. 3-15pF
        C20, C22: 1nF
       
        Półprzewodniki:

        U1, U2, U3, U4, U5, U6, U7, U8: 74LS164
        U9, U10, U11, U12, U13, U14, U15, U16: 74LS374
        U17: 74S08
        U18, U19: 74LS123
        U20, U28: 74LS74
        U21, U22, U32, U33: 74LS393
        U23: 74LS155
        U24: 74LS32
        U25: 74LS10
        U26: 74LS132
        U27, U37: 74LS14
        U30: 74LS02
        U31: 74LS30
        U34, U35: 74LS244
        U36: 74LS125
        U38: 7406       
        U39: LM 1881N
        U40: 74LS132
        U41: SDA 9087
        S1, S2: 7805
        T1: BC 547
        D1, D2, D3, D4, D5: dowolne LED

        Inne:

        L1, L2, L3: ferryt 10uH

Zakończenie

           Prototyp sprzedałem komuś za niewielkie pieniądze. Pozostały mi tylko opisy
oraz schematy. Być może projekt okaże się dla kogoś na tyle interesujący, że spróbuje
sobie układ zmontować i uruchomić chociażby dla frajdy z tym związanej. Polecam!
 

i jeszcze jedno...

           Na Forum padło pytanie ze strony Cypriana - czy nie dałoby się zmienić
digitizera w analizator cyfrowy. Oczywiście - jest to jak najbardziej możliwe, jednakże
należy dokonać sporo zmian, ponieważ digitizer został stworzony specjalnie do
zapisu zcyfryzowanych analogowych danych obrazu. W analizatorze wystarczy
jeden długi licznik liniowy bez podziału na licznik linii i licznik próbek oraz dużo
szybsze pamięci (np. cache) i wyzwalany generator zegarowy o kilku częstotliwościach
taktujących próbkowanie. Bardzo ważnym elementem całości jest porządny program
wyświetlania i analizy spróbkowanych danych.

           W dwóch słowach:

da się.