ODBIÓR SYGNAŁÓW TELEKOPIOWYCHSkoro zabieramy się do odbierania w domu obrazów z radia, dobrze wiedzieć co do nas z "eteru" przylatuje. Analiza wysyłanych obrazów odbywa się podobnie jak to ma miejsce w telewizji - tj. wysyłane są one linia po linii. W urządzeniach tradycyjnych obraz przeznaczony do "wysyłki" zakłada się na walec, który wiruje przed powoli przesuwającą się fotokomórką przetwarzającą zmiany stopnia zaczernienia obrazu na przebieg elektryczny. Każdy obrót to jedna wysłana linia obrazu. Walec wiruje ze stałą szybkością, najczęściej 60, 90 lub 120 obr/min, co odpowiada czasom trwania jednej linii odpowiednio 1, 0,666... lub 0,5 sekundy. Cały przekaz trwa zatem kilka minut. Przebieg elektryczny odpowiadający rozkładowi zaczernienia obrazu moduluje falę nośną nadajnika. Na wyjściu odbiornika dostrojonego do tej fali otrzymamy zatem przebieg, który można z powrotem przetworzyć na obraz na podobnym, wirującym z identyczną szybkością walcu. Wiele rozwiązań wymyślono do realizacji tego zadania, począwszy od sterowanych źródeł światła działających na papier światłoczuły, przez urządzenia z rylcami wydrapującymi ślad w specjalnym podłożu aż po elektrody działające bezpośrednio prądem elektrycznym na papier nasycony substancją ulegającą zaczernieniu w wyniku elektrolizy. Potraktujmy to jako ciekawostki z archiwum techniki, bo nas będzie interesować zastąpienie układów elektromechanicznych komputerem, a ew. kopię na papierze możemy sobie uwiecznić na drukarce. Podobnie jak opisywana wcześniej [3] transmisja RTTY, również przekaz nieruchomych obrazów drogą radiową na falach długich i krótkich wydaje się trącić myszką. A jednak w epoce telefaksów, modemów i światłowodów, te bardzo tradycyjne sposoby przekazu informacji mają się nieźle. Są w świecie dziesiątki stacji radiowych nadających mapy meteorologiczne, w tym również retransmisje obrazów satelitarnych. Jedna z najważniejszych stacji tego typu w Europie - w Offenbach koło Frankfurtu n/M nadaje ok. 30 map w ciągu doby [2]. Wszystkie większe stacje meteo posiadają sprzęt do odbioru takich map, chociaż to co widziałem jeszcze parę lat temu dzięki pana z miejscowej stacji, przypominało niż tak pospolity w literaturze [1], [2] pojawiają się opisy przystawek do dużych komputerów (klasy Atari ST, czy IBM/PC) umożliwiających dekodowanie wszystkich rodzajów emisji radiowych, w tym także mniej lub bardziej amatorski odbiór map pogody i innych obrazów. W swej istocie są takie przystawki samodzielnymi systemami mikrokomputerowymi i wykonują całą "czarną robotę" z obróbką sygnału. Skoro podstawową pracę wykonuje tam mikrokomputer jednoukładowy, a nie wielka maszyna 16-bitowa, to małe a sprytne Atari też sobie poradzi. Taki wniosek okazał się słuszny, chociaż trzeba było realnie podejść do granic możliwości technicznych komputerka. Chodzi tu przede wszystkim o możliwości graficzne - w trybie graficznym 8 mamy do dyspozycji 192 linie po 320 punktów, podczas gdy systemy "prawdziwe" pracują przy rozdzielczościach ok. 3-krotnie wyższych. Nie zmienia to faktu, że rezultaty na ekranie naszego monitora także potrafią być fascynujące. Można uzyskać zupełnie wyraźne zarysy map meteorologicznych. Odbiór telefoto też jest możliwy, choć brak jest półtonów. W trakcie odbierania obrazu też nie jest nudno, powstaje on bowiem na naszych oczach, linia po linii. Sygnał z odbiornika radiowego trzeba przetworzyć na postać strawną dla komputera, do tego zaś zupełnie dobrze się nadaje układ opisywany w |3]. Ze względu na potrzebę przenoszenia krótszych impulsów, niż to było w zastosowaniu pierwotnym, kondensator C11 powinien mieć wartość ok 1 - 2,2nF. Jakość odebranego obrazu jest zależna od wielu czynników. Siła odbieranego sygnału musi być dostateczna, ew. szumy widoczne są bowiem na obrazku w postaci znanego z TV "śniegu". Częstotliwość dostrojenia odbiornika musi być doskonale stabilna. Na falach krótkich niektóre stacje mimo, że silnie odbierane, dają wyniki marne, gdyż mimo dobrej stabilności odbiornika ich częstotliwość waha się nieprzyzwoicie w wyniku harców wyczynianych na niebiosach przez jonosferę. Najłatwiej o stabilność na częstotliwościach leżących poniżej fal długich - pracują tam stacje nadające zarówno RTTY jak i nasze obrazki. Wszystko to staje się dostępne po niewielkim przestrojeniu - chodzi o częstotliwości 110, 130, 140kHz. Problemem fal długich jest ogromnie zanieczyszczone środowisko elektromagnetyczne - przyczyniają się do tego również monitory naszych komputerów, o czym trzeba pamiętać ustawiając odbiornik. W swej istocie rola, jaką ma do spełnienia komputer, polega na przetworzeniu przebiegu elektrycznego na obraz. Z odbiornika otrzymuje się przebieg elektryczny przyjmujący tylko 2 stany odpowiadające czerni i bieli. Zakładamy, że pracować będziemy z maksymalną rozdzielczością grafiki 8+16, gdzie do dyspozycji mamy też 2 kolory - czarny i biały. Procedura odbioru została napisana w języku maszynowym i mieści się na stronie 6 pamięci. Zasada odbioru nie jest szczególnie złożona - w równych odcinkach czasu (odpowiadających 1/320 czasu rysowania linii) testowane jest wejście przycisku joysticka 1. Wynik testu umieszczany jest na ekranie w postaci jednego pixelka w grafice 8+16 (czarnego lub białego) Punkt po punkcie, linia po linii kreślony jest cały obraz, po czym następuje wyjście do Basica. Na każdy obraz przypada znacznie więcej linii, niż to jest w stanie pomieścić ekran Atari. Chcąc nieco poprawić tę niedogodność zdecydowałem, że na ekranie rysować się będzie co druga linia, zaś co druga będzie rysowana "na niby", żeby nie naruszyć subtelnych zależności czasowych w programie. Obraz w grafice 8+16 to wprawdzie 320x192 punkty, ale tylko 40x192 adresy w pamięci. Najmniejsza zatem pętelka programu to "stawianie kropek" wewnątrz jednego bajtu - trzeba było sobie jakoś radzić bez Basicowej instrukcji PLOT. Pewną istotną subtelnością w tej części programu jest to, że w przypadku kropki czarnej nie wystarczy po prostu jej nie postawić. Trzeba bowiem wykonać w obu przypadkach sekwencję rozkazów procesora o takiej samej liczbie cykli - w przeciwnym razie szybkość programu byłaby inna dla elementów czarnych i białych. Następny etap, to przejście do kolejnego bajtu, a więc zmiana adresu. Zamiast używania rejestrów indeksujących X i Y zastosowałem technikę modyfikowania adresów przez sam program. Po narysowaniu na ekranie całej linii aktywnej, następuje rysowanie linii "sztucznej". Na końcu każdej z nich sprawdzany jest stan przycisków konsoli, aby umożliwić wyjście do Basica przed narysowaniem całego obrazu. Po uruchomieniu program przez parę chwil przeładowuje kod maszynowy z linii DATA na szóstą stronę pamięci a następnie prosi o podanie nazwy obrazka, jaki będzie rysowany na ekranie. Nazwa ta zostanie wpisana w lewym górnym rogu po odebraniu wszystkich linii, będzie to też nazwa zbioru zapisanego w razie życzenia na dyskietce. Z tego względu trzeba przestrzegać nie tylko wymogu długości nazwy, ale i zasad narzucanych przez DOS. Po podaniu nazwy i wciśnięciu RETURN program dokonuje syntezy wiersza 180 służącego do ew. zapisu zbioru na dysk, a następnie prosi o podanie szybkości odbieranej transmisji. Jako wyjściowa ustawiana jest wartość 60 linii/min. Po każdym zgłoszeniu się tej planszy można albo podać liczbę 1-3 albo nacisnąć przycisk spacji zachowując szybkość aktualnie ustawioną w programie. Po wprowadzeniu szybkości transmisji obraz znika, komputer przechodzi do trybu graficznego 24 i oczekuje na wciśnięcie przycisku START. Transmisja telekopiowa jest asynchroniczna, a więc moment wciśnięcia określa położenie obrazu na ekranie - tu nic nie zastąpi odrobiny doświadczenia. Rysowanie obrazu na ekranie można przerwać przed czasem, naciskając jednocześnie START+SELECT+OPTION - trzeba odczekać do końca kreślonej właśnie linii. Po zakończeniu rysowania obrazu (zarówno samoczynnym jak i wymuszonym) następuje wpisanie podanej wcześniej nazwy na ekranie (lewy górny róg), rozlega się sygnał akustyczny i program oczekuje naszej decyzji, czy obrazek zapisać na dyskietkę. Jeśli widzi się nam, że jest tego wart, naciskamy "T". Jeśli zaś nacieszył oko i nie będzie rejestrowany (każdy obrazek to 62 sektory na dyskietce), wystarczy nacisnąć inny klawisz i program wraca do opisywanej już planszy z wyborem szybkości transmisji. Program włącza do nazwy numer kolejny obrazka o danej nazwie, co ułatwia wykonywanie całych serii zapisów na dysku bez potrzeby modyfikowania nazwy "na piechotę". Numer zwiększa się po wykonaniu zapisu na dyskietce. W wyniku braku możliwości synchronicznego rozpoczęcia odbioru obrazu bardzo często jest on przesunięty względem ekranu. Wygląda to tak, jakby płaski obrazek skleić w kształt cylindra, a następnie przeciąć go wzdłuż zupełnie przypadkowej linii. Z takim zniekształceniem można sobie poradzić łatwo z pomocą niezbyt złożonego programu, który został tu przedstawiony. Jego sercem jest napisana w języku maszynowym procedura przewijająca w lewo obraz o 1 bajt, tj. o 8 pixelków. Jako że cylinder jest tworem okrągłym, nie ma potrzeby przewijania w obie strony. Procedurę można wykorzystywać do rozmaitych innych celów, np. w trybie 0 (tekstowym), trzeba wówczas odpowiednio zmniejszyć liczbę w linii 360. Grafika 8+16 ma 192 linie, a np grafika 0 tylko 24. Po uruchomieniu i przeładowaniu części maszynowej na stronę 6 pamięci program odczytuje katalog aktualnie włożonej do napędu "D1:" dyskietki wyświetlając nazwy wszystkich zbiorów *.FAC. Teraz program oczekuje na wpisanie jednej z tych nazw (bez rozszerzenia) i wczytuje obraz na ekran w grafice 8. Przewijanie obrazu w lewo uzyskuje się naciskając przycisk "+". Obrazek po poprawkach można zapisać na dyskietkę pod niezmienioną nazwą po naciśnięciu "Z". Jeżeli nie trzeba nic zmieniać we wczytanym obrazku, wystarczy nacisnąć "N". W ten sposób można programu używać również do przeglądania zbiorów obrazków w GR.8 bez zmieniania ich treści. 1 REM ******************************* 2 REM *PROGRAM DO ODBIORU FACSIMILE * 3 REM * II.1992 * 4 REM * Witold Prokopowicz * 5 REM ******************************* 10 FOR A=1536 TO 1770:READ D:POKE A,D: NEXT A 20 CLR :DIM TX$(8),G$(6),L$(2):IO=848 30 GOSUB 580:CO=1 40 GOSUB 250 50 GRAPHICS 8+16:COLOR 1 60 POKE 709,15:POKE 710,0 70 Q=USR(1536,TEM1,TEM2,TEM3,TEM4) 80 GOSUB 760 90 SOUND 1,99,10,10:SOUND 2,96,10,10 100 FOR N=1 TO 80:NEXT N 110 SOUND 1,99,10,0:SOUND 2,96,10,0 120 CLOSE #1:OPEN #1,4,0,"K:" 130 GET #1,S 140 IF CHR$(S)="T" THEN GOSUB 170 150 GOSUB 680:GOTO 40 160 REM *************************** 170 REM WYPIS GRAFIKI 8 NA DYSK 180 CLOSE #1:OPEN #1,8,128,"D:A23450.F AC" 190 L=L+1:IF L>99 THEN L=0 200 POKE IO+2,11:POKE IO+8,255 210 POKE IO+9,29:POKE IO+4,PEEK(88) 220 POKE IO+5,PEEK(89):I=USR(1765) 230 CLOSE #1:RETURN 240 REM *************************** 250 REM NADAWANIE PARAMETROW 260 GRAPHICS 0:POKE 709,11:POKE 710,0 270 ? " .........................." 280 ? " . WYBIERZ ." 290 ? " .TEMPO ODBIORU FACSIMILE ." 300 ? " . ." 310 ? " .........................." 320 ? " . ." 330 ? " . 1 --> 60 linii/min ." 340 ? " . 2 --> 90 linii/min ." 350 ? " . 3 --> 120 linii/min ." 360 ? " . SPC-> tyle ile jest ." 370 ? " . (a jest ) ." 380 ? " . ." 390 ? " .........................." 400 ? " . wybierz 1/2/3/SPC ." 410 ? " . naciskaj >START< ." 412 ? " . ." 420 ? " .........................." 430 POSITION 24,10:? CO:COT=CO 440 CLOSE #1:OPEN #1,4,0,"K:" 450 GET #1,CO:CO=CO-48 460 IF CO=-16 THEN CO=COT 470 IF CO>3 OR CO<1 THEN GOTO 440:RETU RN 480 ON CO GOTO 540,550,560 490 RETURN 500 REM *************************** 510 REM TEM3 WARTOSCI OD 1 DO 17 520 REM TEM4 ->TYLKO 236,157,14,30,161 530 REM KOLEJNO OD 4 DO 8 CYKLI ZEGARA 540 TEM1=255:TEM2=255:TEM3=243:TEM4=23 6:RETURN 550 TEM1=255:TEM2=226:TEM3=15:TEM4=236 :RETURN 560 TEM1=255:TEM2=93:TEM3=19:TEM4=30:R ETURN 570 REM *************************** 580 REM NAZWA OBRAZKA 590 REM DO ZAPISU NA DYSK 600 REM I DO WPISANIA NA EKRAN 610 GRAPHICS 0:POKE 709,11:POKE 710,0 620 ? :? :? " NAZWA OBRAZKA" 630 ? " max. 5 znakow" 640 POSITION 12,12 650 INPUT TX$:IF LEN(TX$)>5 THEN GOTO 610 660 G$=TX$ 670 REM SYNTEZA WIERSZA 180 680 GRAPHICS 0:POSITION 2,2:BUF=PEEK(7 09):POKE 709,PEEK(710) 690 ? "180 CLOSE#1:OPEN#1,8,128,";CHR$ (34);"D:";TX$;L;".FAC";CHR$(34) 700 ? "CONT" 710 POSITION 2,0:POKE 842,13 720 STOP 730 POKE 842,12:POKE 709,BUF 740 RETURN 750 REM **************************** 760 REM NAPIS NA OBRAZKU W GR.8 770 TX$=G$:L$=STR$(L) 780 TX$(LEN(TX$)+1)=L$ 790 FOR LI=1 TO LEN(TX$) 800 K=ASC(TX$(LI,LI)) 810 SM=PEEK(88)+256*PEEK(89) 820 ADRES=SM+LI 830 FOR Q=0 TO 7 840 POKE ADRES+Q*40,PEEK(57344+(K-32)* 8+Q) 850 NEXT Q 860 NEXT LI:TX$=G$ 870 RETURN 880 REM *************************** 890 DATA 104,104,104,141,195,006,104,1 04,141,200,006,104,104,141,205,006,104 ,104,141,209 900 DATA 006,173,031,208,201,006,208,2 49,120,165,088,141,061,006,141,074,006 ,141,226,006 910 DATA 165,089,141,062,006,141,075,0 06,169,192,141,228,006,169,040,141,227 ,006,162,008 920 DATA 173,080,129,029,217,006,172,0 16,208,240,008,208,000,141,080,129,076 ,087,006,141 930 DATA 255,255,234,234,076,087,006,0 32,194,006,202,208,223,032,164,006,206 ,227,006,208 940 DATA 213,173,031,208,240,056,169,0 40,141,227,006,162,008,173,080,129,029 ,217,006,172 950 DATA 016,208,240,008,208,000,141,2 55,255,076,138,006,141,255,255,076,138 ,006,032,194 960 DATA 006,202,208,225,032,179,006,2 06,227,006,208,215,173,031,208,240,005 ,206,228,006 970 DATA 208,147,088,096,238,061,006,2 38,074,006,208,006,238,062,006,238,075 ,006,096,238 980 DATA 255,255,238,226,006,208,006,2 38,255,255,238,255,255,096,160,255,032 ,213,006,160 990 DATA 100,032,213,006,160,008,032,2 13,006,234,234,234,096,136,208,253,096 ,000,001,002 1000 DATA 004,008,016,032,064,128,000, 000,000,104,162,016,076,086,228 1 REM ****************************** 2 REM * SCROLL GRAFIKI 8 * 3 REM * Witold Prokopowicz * 4 REM ****************************** 10 FOR A=1536 TO 1661:READ D:POKE A,D: NEXT A 20 DIM F$(20),COTO$(9):IO=848 30 REM WYDRUK KATALOGU DYSKU 40 REM TYLKO ZBIOROW *.FAC 50 ? CHR$(125):TRAP 70:CLOSE #1:OPEN # 1,6,0,"D:*.FAC" 60 INPUT #1,F$:? F$,:INPUT #1,F$:? F$: GOTO 60 70 ? :? " PODAJ NAZWE PLIKU DO ODCZYTU ":? "(BEZ ROZSZERZENIA)":INPUT COTO$ 100 F$="D:":F$(3)=COTO$:F$(LEN(F$)+1)= ".FAC" 140 K=4:GOSUB 310 150 GRAPHICS 8+16:COLOR 1 160 POKE 709,15:POKE 710,0 170 POKE IO+2,7:POKE IO+8,0:POKE IO+9, PEEK(742)-PEEK(145):POKE IO+4,PEEK(88) :POKE IO+5,PEEK(89) 180 S=USR(1656):CLOSE #1 190 CLOSE #1:OPEN #1,4,0,"K:" 200 GET #1,S 210 IF CHR$(S)="+" THEN S=USR(1536) 220 IF CHR$(S)="Z" THEN GOTO 250 230 IF CHR$(S)="N" THEN GOTO 50 240 GOTO 190 250 K=8:GOSUB 320 260 POKE IO+2,11:POKE IO+8,255 270 POKE IO+9,29:POKE IO+4,PEEK(88) 280 POKE IO+5,PEEK(89):I=USR(1656) 290 CLOSE #1:GOTO 50 300 REM *************************** 310 TRAP 50 320 CLOSE #1:OPEN #1,K,128,F$ 330 RETURN 340 DATA 104,165,088,141,035,006,141,0 50,006,141,053,006,141,067,006,165,089 ,141,036,006 350 DATA 141,051,006,141,054,006,141,0 68,006,169 360 DATA 192 370 DATA 141,109,006,173,255,255,141,1 07,006 380 DATA 169,040,141,108,006,162,000,1 60,001,185,255,255,157,255,255,232,200 ,206,108,006 390 DATA 208,243,173,107,006,202,157,2 55,255,024,173,035,006,105,040,141,035 ,006,141,050 400 DATA 006,141,053,006,141,067,006,1 44,012,238,036,006,238,051,006,238,054 ,006,238,068 410 DATA 006,206,109,006,208,184,096,0 00,000,000 420 DATA 006,206,109,006,208,184,096,0 00,000,000 430 DATA 104,162,016,076,086,228 Witold Prokopowicz 1. Pernsteiner P., Funk-telefax - Bilduebertragung mit komfort Funkschau nr 23/1988, str.68 2. Wetterbilder im. Arbeitszimmer, Funkschau nr 19/1991 str.124 3. Prokopowicz W., Atari inaczej - Odbiór Transmisji RTTY Tajemnice Atari nr 8/91 str. 11 4. Materiały informacyjne SONY (odbiornik CRF-V21) i AOR (WX2000 - Radio Facsimile Terminal). |