LIGHTPEN - Kendi Işıklı Kalemini Kendin Yap
Ayhan KALAYLIOĞLU
Teleteknik, Commodore Aylık Bilgisayar Dergisi, Sayı 12, Şubat 1987, Sayfa: 27-30
Bu yazımızda CONTROL-PORT 1 ile ilgili bir uygulama yapacağız. Bu giriş yalnızca JOYSTICK kabul etmiyor. Yapılabilecek başka uygulamalara örnek olarak biz burada size kendinizin yapıp çalıştırabileceği bir LIGHTPEN'den bahsedeceğiz.
Commodore 64'ümüzün birinci CONTROL-PORT'unun pek çoğumuzun bilmediği bir fonksiyonu daha var. Gerçekten de pek fazla kullanım alanı bulamayan bu fonksiyon aslında oldukça ilginç özellikler taşıyor ve bilgisayar kullanımına yeni bir
bakış açısı getirebilir.
Bahsettiğimiz fonksiyonu gerçekleştiren 6 numaralı pin'den başkası değil. Bu pin'in iki değişik fonksiyonu var. Birincisi JOYSTICK'in ateş etme tuşu ile ilgili bilgiyi taşımak. İkincisine ve daha ilginç olanına aşağıda değineceğiz.
Belki daha evvel duymuş veya görmüş olabileceğiniz bir uygulamadan söz edeceğiz. Bu uygulama bir YAZILIM + DONANIM ünitesi ve yaptığı iş ise monitör veya televizyon ekranını doğrudan bir bilgi giriş aracı olarak kullanabilmeyi mümkün
kılmak. Bu uygulama yardımıyla ekranın üzerine kâğıda çizer gibi aynı rahatlıkla çizim yapmanızı veya ekrandan, doğrudan üzerine götürüp seçmek suretiyle bir programın menü veya değişik alt-fonksiyonlarının seçimini rahatça yapmanızı
sağlıyor. Bu görevi gören aletlere LIGHTPEN denip aynı zamanda C-64 ve VIC 20'ye uygulanabilen modelleri de mevcut. Gerek donanım gerekse yazılım açısından incelendiğinde oldukça basit olduğu gözlenen bu uygulamayı kendimiz de yapabiliriz.
Zaten yazımızın asıl konusu da bu.
LIGHTPEN'in donanım kısmının en önemli parçası fototransistör veya fotodiyot diye adlandırılan elektronik bir ünite. Fototransistör görev itibarıyla gelen ışığın şiddetine göre elektriksel sinyaller üretiyor. Fototransistör'ü uyaran
ışık ise ekrandan gelen elektron ışınlarından başkası değil. Ekranın önünde duran fototransistör ise elektron ışını önünden geçerken oluşan kısa süreli ışık darbesini algılar ve diğer elektronik ünitelere işlenmek üzere elektriksel
sinyaller olarak gönderir. LIGHTPEN'in çalışması için ekranın belli bir ölçünün üzerinde parlaklığa sahip olması gereği de bundandır. LIGHTPEN'den bilgisayara bir sinyal geldiğinde bilgisayar, elektron ışını hangi pozisyonda iken sinyalin
gönderildiğini kaydeder. Böylece bilgisayar herhangi bir programın kullanabilmesi için LIGHTPEN'in ekran üzerindeki X- ve Y- koordinatlarını belirlemiş olur.
Herhangi bir program yazmaya kalkışmadan önce kendimize bir LIGHTPEN bulup bilgisayarımıza bağlamalıyız. Yukarıda da dediğimiz gibi öncelikle bir fototransistör'e ihtiyacımız olacak. Biz burada verdiğimiz devrede TIL78 model
fototransistör'ü kullandık. Devremizde kullanılacak tüm parçalar şu anda piyasada elektronik malzeme satan mağazalardan rahatça temin edilebilecek biçimde seçilmiştir. Bu devrede fototransistör yerine LDR adlı elektronik malzeme tipini
kullanmanızı önerenler olursa kesinlikle dinlemeyin. Her ne kadar bu iki tip elektronik elemanın görevleri ve fonksiyonları birbirine benzerse de karakteristikleri oldukça farklıdır. Şayet devremizde LDR kullanacak olursak bu parça oldukça
yüksek hızda hareket eden elektron ışınını takip etmek için çok yavaş kalacak ve devremiz yüzde yüz çalışmayacaktır.
Şayet şans eseri daha evvelden beri bir LIGHTPEN'e sahipseniz; buradaki devreyi yapmanıza gerek kalmadan aynı üniteyi kullanıp burada anlatacağımız denemeleri yapabilirsiniz.
Şimdi fototransistör'ü nasıl kullanıp, nasıl bağlayacağınızı anlatalım. TIL78 model fototransistör'ün iki bacağı vardır. Bunlar "Kollektör" ve "Emiter" diye adlandırılır. Bu bacaklardan hangisi hangisidir ve ne işe yarar? Bunu öğrenmek
için üç yol var. Bunlardan birincisi acemi bir elektronikçiyseniz sizin için en uygun olanı: Fototransistör'ü satın aldığınız dükkandaki kimselere sorup anlattıracaksınız. Geriye kaldı iki çözüm: Fototransistör'ün üst kılıfının kollektör
tarafı biraz düzleşmiş bir şekle sahiptir. Bundan başka kollektör bacağı ötekine göre daha kısadır. Gelelim üçüncü yönteme: Bu yöntemi daha evvel de duymuş olmalısınız. Adı deneme yanılma yöntemi. Devrenin fototransistör dışında geri kalan
kısmı monte edilir ve fototransistör iki ihtimale tâbi tutulur. Şayet herhangi bir kısa devreye sebep olmazsanız devrenin hiçbir bölgesi gerek doğru gerek yanlış bağlantıdan zarar görmeyecektir. Fakat bu yönteme çok zorda kalmadıkça
başvurmamanızı öneririz.
Deneme ve gösteri amacıyla "LIGHTPEN DEMO" adlı bir program yazdım. Joystick Demo programlarına oldukça benzeyen bu program LIGHTPEN vasıtasıyla ekrana noktalar basmakta. LIGHTPEN'i ekranın neresine götürürseniz o koordinatta noktalar
oluşmakta. Böylece doğrudan (dolaysız olarak) ekran sizin bilgi giriş aracı oluyor ve doğrudan o'nun üzerine çizim yapabiliyorsunuz.
Programı yazın, bir yerde saklayın (SAVE edin); daha sonra da çalıştırın. Program çalışır çalışmaz ilk olarak size basılan noktaların kalıcı olup olmaması gerektiğini soracaktır. Orada belirtilen harflerle cevabınızı bilgisayara
bildirin. Birkaç saniye sonra ekran tümüyle silinip beyaza bürünecektir. Ekranın rastgele bir yerinde ise küçük bir dörtgen belirecektir. Fototransistör'ü elinize alıp ekrana değdirin. Küçük dörtgenimiz LIGHTPEN'imizi takip edecektir.
Dikkat edilmesi gereken bir husus da tuş takımı ve LIGHTPEN'in birbirlerini daimi rahatsız ettikleri (bunun nedeni joystick-port'un tuş takımı ile aynı chip'e bağlı olması). Rastgele birkaç tuşa dokunduğunuzda göreceksiniz ki küçük
dörtgenimiz çılgın gibi oraya buraya zıplamakta. Benzer şekilde bilgisayar direkt mod'dayken LIGHTPEN'i takılı vaziyette ekran üzerinde gezdirirseniz ekrana bilumum saçma-sapan karakterler çıkacaktır. VIC 20 kullanıcıları bu sorunla
karşılaşmayacaklardır. Çünkü VIC20'de tuş takımı ve Lightpen ayrı kanallarda çalışmaktadır.
Şayet ilk çıkan dörtgeni hareket ettiremiyorsanız bunun birçok nedeni olabilir: Programı doğru yazmış ve LIGHTPEN'i kusursuz monte etmiş olsanız bile ekrandan LIGHTPEN'imize yeterli ışık gelmiyor olabilir. Ekranınızın parlaklık ayarını
arttırın; bunun LIGHTPEN'inizi çalıştırabilmesi gerekir.
Buna rağmen program çalışmıyorsa suçu devrede olabilecek küçük bir kısa devrede aramak gerekir. Şayet elektronikten pek anlamıyorsanız anlayan birine başvurmanız önerilir; bunun sizin probleminizin çözümünde faydalı olacağına
inanıyorum. Parça listesinde tüm parçaların isimleri verilmiştir. Fakat bu yazı içindeki tüm açıklama ve anlatımlar öğreticilikten çok elektronikten anlayan kimseler seviyesindedir. Size tavsiyemiz şimdiden daha sorunlar çıkmadan böyle
birini bulup yardım istemenizdir. Yoksa işi iyice çorba edip ortalığa zarar verir, geri dönülmeyecek yerlere gelebilirsiniz.
Gelelim devreye: NE555 tipinde bir IC (Integrated Circuit = Entegre devre) içermekte. NE555 devremizde monoflop görevi yapmakta. Monoflop'un 2 numaralı bacağına kısa bir negatif impuls geldiğinde, monoflop kısa bir süre çalışma
durumunda kalır ve hemen peşinden (pasif) duruma geçer. 2 numaralı bacağa (trigger bacağına) gelecek darbeleri demin değindiğimiz fototransistör sağlar. Elektron ışını ekranda fototransistör'ün bulunduğu pozisyondan geçerken fototransistör
kısa süreli bir negatif impuls gönderir, bu impuls monoflop tarafından bilgisayarın değerlendirebileceği sinyallere çevrilir, bu sinyal bir transistor tarafından kuvvetlendirilerek bilgisayara gönderilir.
En sonda bulunan kuvvetlendirici kat sayesinde LIGHTPEN'imizin karanlık ekranlarda da çalışabilmesi sağlanmıştır. Fakat gene de değişik karakteristikteki ortamlarda devremizin hâlâ çalışmasını sağlamak için bir de ayar (kalibrasyon)
noktası koyduk. Bir megaohm'luk trimpot tipi direncin sağladığı bir ayarla oynayıp optimal sonucu elde etmeye çalışın. Ayar yapmak oldukça basit: Trimpot'unuzu LIGHTPEN'inizin düzenli çalıştığı bir noktaya kadar çevirin. Bir kiloohm'luk
direnç, kuvvetlendirici transistörümüz için bir öndirençtir. Devrede geri kalan elemanların görevi ise monoflop'un çalışma seviyesinde kalıp geriye (pasif seviyeye) düşmesi arasında geçecek zamanı ayarlamaktır. Şimdi de programımızı daha
yakından görelim. 390 ve 400'üncü satırlarda renk hafızası sıfırlarla doldurulup boş ekranın siyah renk alması sağlanıyor. LIGHTPEN'in pozisyonu bilgisayar tarafından gerek X- gerek Y-koordinatları olarak dokuz bit hassasiyetle
algılanmakta. X- koordinatının üst sekiz biti 53267 adresli hafızada bulunmaktadır (VIC 20'de 36871). X-değerinin sıfır numaralı bit'ine ulaşamıyoruz. Bu yüzden LIGHTPEN'le yapılan çizimin hassasiyeti hiçbir zaman iki bitişik noktanın
altına inemiyor. Fakat bu hassasiyet düşük çözünürlüklü grafik (bir karakter = bir nokta) için yetip de artıyor bile. 440'tan 470'inci satıra kadar olan bölümde X- ve Y- koordinatları beşer kere okunup aritmetik olarak toplanıyor ve
480'inci satırda bu toplamlar beşe bölünüyor. Yani kısacası beş noktalık örnek okunup bunların ortalaması alınıyor. Bu işlem okunan değerleri stabil hale getirmek için kullanılıyor, çünkü yapılan denemeler göstermiştir ki bilhassa X-
değeri aşırı derecede oynamaktadır. Bunun yanında Y- koordinatı daha sakin bir davranış örneği göstermektedir.
510 ve 520'inci satırlarda okunan değerler ekran koordinatlarına çevriliyor. Şayet kendiniz başka bir program yazıp, o programı LIGHTPEN'inizle çalıştırmak istiyorsanız bilhassa bu programın bu kısımlarını değiştirip bazı denemeler
yapmanız gerekmektedir. 540'ıncı satırda ise okunan değerler kontrol edilmekte. Bu kontrolün yapılması bilhassa aşırı derecede oynayan X- değeri yüzünden ayrı bir önem kazanıyor. Geri kalan satırlar ise oldukça tanıdık tipte olduğu için
açıklamaya gerek duymuyorum.
İkinci programımız LIGHTPEN ile yapılan başka bir uygulamayı gösteriyor. Burada LIGHTPEN çizmek için değil de bir programın menülerini seçmekte kullanılıyor. Y- değerimiz daha bir güvenilir olduğundan burada yalnızca onu kullanacağız;
yani bizim için önemli olan yalnızca vertikal pozisyon. Bu programın yaptığı iş ise C64/VIC 20'nin üç ses kanalından birini seçmenizi sağlıyor. Her kanal değişik frekansa ayarlanmış durumda olduğu için seçmenizi aynı zamanda kulağınızla da
hissedebilirsiniz. İstediğiniz kanalı ekranda o kanala ait alam LIGHTPEN'inizle işaretleyip belirtebilirsiniz.
470'inci satırda LIGHTPEN'in Y-pozisyonu okunuyor. 490'ıncı satır ve devamında seçilen kanal ve ona ait frekans belirleniyor. Şayet aynı kanalı bir kere daha seçerseniz 550'inci satır sayesinde o kanalın bir kere daha çalışması
engelleniyor. Böylece kanalın susup yeniden çalışmasından oluşabilecek gürültüler engelleniyor.
Şayet LIGHTPEN'inizi kendi yazdığınız programlarda da bol miktarda kullanmak istiyorsanız, fototransistör kısmını düzgün bir kılıf içine yerleştirmeniz gerekiyor. Bunun için eski bir tükenmezkalem veya dolmakalem kılıfını kullanmak en
rahatı olacaktır. Kılıfın içini boşaltın (yani kalemi katledin), fototransistörünüzün bacaklarına uzatma amacıyla çift hatlı bir kabloya lehimleyin; lehimlenen uçları ve çevresini izole edin ki herhangi bir kısa devreye sebep vermesin.
Kısa devre herhangi bir zarar vermeyecektir. Fakat böyle bir durum fototransistörü devre dışı bırakacağından devremiz çalışmayacaktır. Fototransistörü kılıfa sokun ve nazikçe arka tarafından itin. İtme işlemini fototransistör diğer uçtan
görününceye kadar sürdürün. Bu arada fototransistorun ve bağlantılarının zarar görmemesine dikkat edin. Dikkat etmeniz gereken başka bir husus da fototransistörün "gören" yüzünün dışarı doğru dönük olmasıdır. Fototransistörü bu pozisyona
getirdikten sonra sabitleyin (yapıştırmak veya sıkıştırmak vasıtasıyla). Gelelim kalemimizin ışık alacak ağzının büyüklüğüne: Bu delik ne kadar küçük olursa LIGHTPEN'imiz koordinatları o kadar doğru algılar. Fakat bu delik gene de
LIGHTPEN'imize çalışması için gerekli ışığı geçirmelidir. Gerek bu deliği büyüterek gerek monitörümüzün veya televizyonumuzun parlaklık ayarıyla oynayıp uygun bir çalışma noktası bulun. Böylece gerçek bir LIGHTPEN'e sahip olunuz.
|
PROGRAM ADI: LIGHTPEN. PRG1
100 REM ******************************
110 REM * *
120 REM * LIGHTPEN *
130 REM * -------- *
140 REM * *
150 REM * DEMO *
160 REM * ---- *
170 REM * *
180 REM * AYHAN KALAYLIOGLU *
190 REM * *
200 REM * 26. 10. 1986 PAZAR *
210 REM * *
220 REM * COMMODORE DERGISI ICIN *
230 REM * *
240 REM ******************************
250 :
260 REM *********** BILGI ** *********
270 PRINT "<CLR><4DOWN>CIZILEN NOKTALAR HER"
280 PRINT "<DOWN>DEFASINDA SILINSIN MI?<DOWN>"
290 PRINT "<RVSON>E<RVSOFF>VET ";
295 PRINT "VEYA <RVSON>H<RVSOFF>AYIR"
300 GET A$: IF A$ = "" THEN 300
310 IF A$ = "H" THEN L = 1
320 :
330 REM ********** HAZIRLIK **********
340 POKE 53280, 0: POKE 53281, 1
350 PRINT "<CLR>": A = 1024: B = 40
360 C = 24: D = 53267
370 :
380 REM ***** RENK BELLEGINI BOYA ****
390 FOR I = 55296 TO 56295
400 POKE I, 0: NEXT I
410 :
420 REM ***** DEGERLERI OKUMA ********
430 REM ******* VE SABITLEME *********
440 FOR I = 1 TO 5
450 X = X + PEEK (D)
460 Y = Y + PEEK (D+1)
470 NEXT I
480 X = INT (X/5): Y = INT (Y/5)
490 :
500 REM *** KOORDINATLARA CEVIRME ***
510 KX = INT ((X-50)/180*(B-1))
520 KY = INT ((Y-45)/190*C)
530 :
540 REM **** KOORDINATLARI DUZELT ****
550 IF KX < 0 THEN KX = 0
560 IF KY < 0 THEN KY = 0
570 IF KX > B-1 THEN KX = B-1
580 IF KY > C THEN KY =C
590 :
600 REM ******** NOKTA KOY/SIL ********
610 IF L = 0 THEN POKE A+XA+YA*B, 32
620 POKE A+KX+KY*B, 160
630 :
640 REM **** YENI DEGER & DEVAM ****
650 XA = KX: YA = KY: X = 0: Y = 0
660 GOTO 420
670 :
680 :
690 :
700 REM *****************************
710 REM *** VIC20 ICIN DEGISIKLIK ***
720 REM *****************************
730 REM
740 REM BU SATIRLARI DEGISTIRIN
750 REM
760 REM 340 POKE 36879, 24
770 REM 350 PRINT "<CLR>": A=7680: B=22
780 REM 360 C=22: D=36870
790 REM 390 FOR I = 38400 TO 38905
800 REM 510 KX = INT ((X-55)/95*(B-1))
810 REM 520 KY = INT ((Y-38)/89*C)
820 REM
830 REM BU PROGRAMI KAYDETMEZDEN
840 REM ONCE 270-290 ARASI
850 REM SATIRLARI DUZELTMELISINIZ
PROGRAM ADI: LIGHTPEN. PRG2
100 REM ******************************
110 REM * *
120 REM * LIGHTPEN *
130 REM * -------- *
140 REM * *
150 REM * SES *
160 REM * --- *
170 REM * *
180 REM * AYHAN KALAYLIOGLU *
190 REM * *
200 REM * 26. 10. 1986 PAZAR *
210 REM * *
220 REM * COMMODORE DERGISI ICIN *
230 REM * *
240 REM ******************************
250 :
260 REM ******** EKRANI HAZIRLA*******
270 POKE 53281, 1: POKE 53280, 3
280 PRINT "<CLR><DOWN><2SPACE>LUTFEN SECINIZ!"
290 PRINT "<2SPACE>---------------<DOWN>"
300 FOR I = 1 TO 3
310 PRINT "<2SPACE>A*S"
320 PRINT "<2SPACE>B B SES KANALI #"; I
330 PRINT "<2SPACE>Z*X<2DOWN>"
340 NEXT I
350 :
360 REM **** SID YONGASINI HAZIRLA ****
370 T1 = 4: SI = 54272
380 FOR I = 1 TO 10
390 READ A, B
400 POKE SI+A, B
410 NEXT I
420 DATA 24, 15, 0, 207, 1, 50, 7, 207
430 DATA 8, 100, 14, 207, 15, 150, 6, 240
440 DATA 13, 240, 20, 240
450 :
460 REM *** ISIK KALEMI KONUMU ***
470 Y = PEEK (53268)
480 :
490 REM ****** KONUMU DENETLE *******
500 IF Y > 79 AND Y < 91 THEN T2= 4
510 IF Y > 119 AND Y < 131 THEN T2= 11
520 IF Y > 159 AND Y < 171 THEN T2= 18
530 :
540 REM ** SES KANALINI DEGISTIR **
550 IF T2 = T1 THEN 460
560 POKE SI+T1, 0
570 POKE SI+T2, 17
580 :
590 REM ** YENI DEGERLER & DEVAM **
600 T1 = T2
610 GOTO 460
620 :
630 :
640 :
650 REM *****************************
660 REM *** VIC20 ICIN DEGISIKLIK ***
670 REM *****************************
680 REM
690 REM 370-440! ARASINI SILIN
700 REM
710 REM SUNLARI GIRIN:
720 REM
730 REM 270 POKE 36879, 27
740 REM 370 T2 = 36874: POKE 36878, 15
750 REM 470 Y = PEEK (36871)
760 REM 500 IF Y < 63 THEN T2=36874: GOTO 540
770 REM 510 IF Y < 85 THEN T2=36875: GOTO 540
780 REM 526 IF Y < 103 THEN T2=36876: GOTO 540
790 REM 560 POKE T1, 0
800 REM 570 POKE T2, (T2-36871)*50
Teleteknik, Commodore Aylık Bilgisayar Dergisi, Sayı 12, Şubat 1987, Sayfa: 27-30'den 27 Temmuz 2005 tarihinde tarandı.
ilker Fıçıcılar
|