Tajemnice ATARI

ATARI JAKO UNIWERSALNY STEROWNIK
URZĄDZEŃ ELEKTRYCZNYCH


    Jako zagorzały majsterkowicz, od pierwszego spotkania z małym ATARI chciałem znaleźć sposoby jego praktycznego wykorzystania. Standardowe urządzenia służące do komunikacji komputera z otoczeniem nie umożliwiają "namacalnego" oddziaływania na przedmioty martwe. Wykonanie bardzo prostego interfejsu pozwoli na włączanie i wyłączanie dowolnego urządzenia elektrycznego.

Złącza joysticków związane są z jednobajtowym rejestrem (portem) pod adresem 54016, znanym jako PORT A. Sygnały od styków kierunku w joystickach mają wpływ na poszczególne bity rejestru tak, jak opisuje to poniższa tabelka:

Nr Gniazdo 1 Gniazdo 2
1 joystick do góry (bit 0) joystick do góry (bit 4)
2 joystick w dół (bit 1) joystick w dół (bit 5)
3 joystick w lewo (bit 2) joystick w lewo (bit 6)
4 joystick w prawo (bit 3) joystick w prawo (bit 7)
5 paddle 1 paddle 3
6 przycisk przycisk
7 +5V +5V
8 masa masa
9 paddle 0 paddle 2
   Normalnie wszystkie bity PORT A są ustawione. Pochylenie joysiccka powoduje skasowanie odpowiedniego bitu.

   Tajemnica rejestru PORT A polega na tym, że pod tym samym adresem znajdują się dwa rejestry: rejestr danych, ten opisany powyżej, oraz rejestr kierunku przepływu danych, którego bity decydują o tym, czy odpowiedni bit rejestru danych pracuje jako wejście, czy jako wyjście. Normalnie pod adresem 54016 znajduje się rejestr danych. Aby uzyskać dostęp do rejestru kierunku, należy wyzerować drugi bit bajtu 54018. Ponieważ normalnie jest tam wartość 60, więc piszemy

10 POKE 54018,56

Teraz można określić kierunek przepływu danych:

20 POKE 54016,255

ustawia wszystkie bity portu A jako wyjścia. Na koniec należy przywrócić dostęp do rejestru danych:

30 POKE 54018,60

Od tej pory każdy rozkaz

40 POKE 54016,X

spowoduje pojawienie się na odpowiednich końcówkach złączy joysticków sygnałów w standardzie TTL zgodnych z bitami liczby X.

   Po zastosowaniu odpowiedniego interfejsu (dekoder kodu BCD np. na układach UCY 74154) jesteśmy w stanie sterować nawet 256 urządzeniami!

   W tym artykule zajmiemy się rozwiązaniem najprostszym - sterowaniem jednym urządzeniem elektrycznym przy użyciu minimalnej liczby dodatkowych elementów - możliwym do wykonania przez najmniej wtajemniczonych. Warto w tym miejscu nadmienić, że ATARI jest komputerem dość odpornym na różne próby zniszczenia go. Dlatego nie należy się specjalnie obawiać manipulowania przewodami przy gniazdkach joysticków. Przypadkowe, krótkotrwałe zwarcie lub omyłkowe połączenie nie powinno uszkodzić komputera. Wszystkie wyjścia układu PIA na joysticki oraz FIRE są zabezpieczone rezystorami 220 ohm, wejścia paddle (O..3) są doprowadzone przez rezystancje 1.8kohm. Najbardziej niebezpieczne jest wyprowadzenie zasilania +5V, sąsiadujące z wyprowadzeniem masy - bardzo łatwo o zwarcie! Co prawda nie uszkodzimy żadnego układu komputera, ale awaria zasilacza lub nawet przepalenie ścieżki na płytce drukowanej nie należy do przyjemności.

Oto schemat naszego interfejsu:


   Jakież to proste! Tranzystor może być praktycznie dowolny, typu n-p-n np.: BC 107..9. BC 237..9. BC 211. Dioda krzemowa, impulsowa lub prostownicza dowolnego typu. Przekaźnik powinien mieć cewkę na napięcie 5 lub 6V i o rezystancji nie mniejszej niż 50 ohm (by zbytnio nie obciążać zasilacza komputera). Jeżeli będziemy sterować urządzenia zasilane napięciem sieciowym, to styki przekaźnika muszą być do tego przystosowane (te wymagania spełnia dostępny obecnie w sklepach przekaźnik typu RM-81P). Podłączenie do gniazdka joysticka można wykonać przy pomocy gniazda ELTRA 881 lub podobnych, dostępnych w sklepach UNITRY i na giełdach. UWAGA!!! Wszystkie połączenia po stronie napięcia sieciowego muszą być wykonane i zaizolowane bardzo starannie!

   Zastosowania tego prostego układu są bardzo liczne. Przy pomocy krótkich programów możemy włączać i wyłączać np. radio o określonych godzinach lub z określoną częstotliwością. Jako pierwszy przykład przedstawię program "BUDZIK" dla wyjątkowo opornych śpiochów. Program pozwala ustawić aktualny czas (OPTION) oraz godzinę budzenia (SELECT). Radło włączone na pełną moc oraz światło zbudzi chyba każdego...

10 GRAPHICS 2:CA=54018:PA=54016:H=732
20 POKE CA,56:POKE PA,255:POKE CA,60
30 GOSUB 700:POKE H,0:GOSUB 900
40 GOSUB 800:K=PEEK(53279)
50 ON K GOSUB 140,140,500,140,600,700
60 IF  NOT PEEK(H) THEN 40
70 POKE CA,56:POKE PA,0:POKE CA,60
80 POKE H,0:GRAPHICS 0:END 
100 REM --- odczyt zegara ---
110 T=256*PEEK(18)+PEEK(19)
120 T=256*T+PEEK(20)
130 IF T>=4320000 THEN T=0:GOSUB 400
140 RETURN 
200 REM --- konwersja na g,m,s ---
210 S=INT(T/50):M=INT(S/60):S=S-60*M
220 G=INT(M/60):M=M-60*G:RETURN 
300 REM --- konwersja na t ---
310 T=50*(S+60*(M+60*G)):RETURN 
400 REM --- zapis zegara ---
410 Y=INT(T/256):Z=T-256*Y
420 X=INT(Y/256):Y=Y-256*X:POKE 18,X
430 POKE 19,Y:POKE 20,Z:RETURN 
500 REM --- wprowadzenie czasu ---
510 ? :? :? "Aktualny czas (G,M,S) ";
520 TRAP 510:INPUT G,M,S:TRAP 40000
530 GOSUB 300:GOSUB 400:GOTO 900
600 REM --- wpr. czasu budzenia ---
610 ? :? :? "Czas budzenia (G,M) ";
620 TRAP 610:INPUT G,M:TRAP 40000
630 S=0:GOSUB 300:TB=T:B=1:GOTO 900
700 REM --- blokada budzenia ---
710 B=0:POKE PA,B:RETURN 
800 REM --- wy$wietlanie ---
810 GOSUB 100:GOSUB 200:POSITION 0,4
820 ? #6;"CZAS  ";G;":";M;":";S;"   "
830 IF  NOT B THEN 870
840 IF T>=TB THEN POKE PA,B
850 T=TB:GOSUB 200
860 ? #6;"ALARM ";G;":";M;"  ":RETURN 
870 ? #6;"           ":RETURN 
900 REM --- informacje ---
910 ? CHR$(125):POKE 752,1
920 ? "OPTION - ustaw czas"
930 ? "SELECT - ustaw budzenie"
940 ? "START  - kasuj budzenie"
950 ? "HELP   - koniec";
960 POKE 752,0:RETURN 

   Drugi programik przeznaczony jest dla fotoamatorów. "AUTOMAT DO NAŚWIETLANIA" jest bardzo precyzyjnym zegarem ciemniowym, a w połączeniu z fotorezystorem także światłomierzem. Fotorezystor (np. RPP 130) należy podłączyć do nóżki 7 (+5V) i 9 (paddle 0). Wejścia paddle - "wiosełka" są obsługiwane przez układ POKEY (POtentiometr and KEYboard interface), a właściwie jego część - przetwornik analogowo-cyfrowy. Zamienia on napięcie dostarczone na wejście na sygnał cyfrowy przyjmujący wartości z zakresu 0..228. Można je odczytać z rejestrów POT0..POT3 (53760..53763).

10 GRAPHICS 18:CA=54018:PA=54016
20 POKE CA,56:POKE PA,255:POKE CA,60
30 CH=764:HLP=732:POKE HLP,0:S0=5
40 SETCOLOR 0,4,6
50 POKE PA,0:S=S0:GOSUB 400
60 K=PEEK(CH):IF K-255 THEN GOSUB 200
70 IF  NOT PEEK(HLP) THEN 50
80 POKE CA,56:POKE PA,0:POKE CA,60
90 POKE H,0:GRAPHICS 0:END 
100 REM --- odczyt zegara ---
110 T=256*PEEK(18)+PEEK(19)
120 T=256*T+PEEK(20):RETURN 
200 REM --- reakcja na klawisz ---
210 POKE CH,255:S0=S0-(K=6)+(K=7)
220 IF S0<1 THEN S0=1
230 IF K<>33 THEN 280
240 GOSUB 100:T1=T+50*S:POKE PA,1
250 GOSUB 100:S=INT((T1-T+49)/50)
260 GOSUB 400:IF T12 THEN RETURN 
290 POKE PA,1:POSITION 5,7
300 ? #6;"MROK=";PADDLE(0);"  "
310 IF PEEK(CH)=255 THEN 290
320 POKE CH,255:POKE PA,0:RETURN 
400 REM --- wy$wietlanie ---
410 POSITION 5,5:? #6;"CZAS=";S;" "
420 RETURN 
   Posługiwanie się światłomierzem wymaga trochę doświadczenia. Przy fotografii czarno-białej najlepiej ustalić pewien czas naświetlania na stałe, a za pomocą "gołego" fotorezystora mierzyć jasność podobnych motywów np. bieli i dokonywać korekty wielkością przysłony. Wskazane jest wykonanie specjalnej obudowy dla fotoelementu. Jedno z możliwych rozwiązań przedstawione jest na rysunku.



Wojciech Mściwujewski

Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001