kayan yazı programı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
kayan yazı programı
iyi günler ben pc kontrollu ledler üzerinde kayan yazı projesi aldım 74164 entegreleriyle devreyi yaptım fakat delphi de programda yazdığım yazı yada sayılar paralel port aracılığıyla ledler üzerinde yanacak bana yardımcı olacak birileri var mı aranızda paralel porta xp de çalışacak şekilde veri yazdığım yazıyı 8 bitlik jkaydediciye gönderecekkod lazım teşekkürler
http://www.beysehirchat.com sizin siteniz
http://www.antrak.org.tr/gazete/102002/metin.htm
http://www.antrak.org.tr/gazete/092003/metin.htm
burda gerekli bilgiler var niye sürekli aynı şeyi soruyorsunuz

http://www.antrak.org.tr/gazete/092003/metin.htm
burda gerekli bilgiler var niye sürekli aynı şeyi soruyorsunuz


.-.-.-.-.-.-.-. ^_^
Ohhoo bu ne biçim forum, ne biçim admin kardeşimmege yazdı:http://www.antrak.org.tr/gazete/102002/metin.htm
http://www.antrak.org.tr/gazete/092003/metin.htm
burda gerekli bilgiler var niye sürekli aynı şeyi soruyorsunuz![]()

Üyeye hizmet böyle mi olur


teşekkürler ilerde benim gibi proje alacakalra yardım olur i
bu başlığı açtığımdan bu yana araştırmalar yaptım ve sonunda herşeyiyle pojeyi bitirdim
herkez faydalansın diye siteme yükledim
http://www.beysehirchat.com/proje
Açık devre şeması kablo karmaşası hiç birşey yok program
da
inrenetten otamatik doviz bilgileri alarak yapmış olduğum
ledler üzerinde kayan yazı şeklinde görüntüleme olanağıda vardır
xp de sorunsuz çalışmaktadır.
yararlı olması dileğiyle
herkez faydalansın diye siteme yükledim


Açık devre şeması kablo karmaşası hiç birşey yok program
da
inrenetten otamatik doviz bilgileri alarak yapmış olduğum
ledler üzerinde kayan yazı şeklinde görüntüleme olanağıda vardır
xp de sorunsuz çalışmaktadır.
yararlı olması dileğiyle
http://www.beysehirchat.com sizin siteniz
Re: teşekkürler ilerde benim gibi proje alacakalra yardım ol
http://www.beysehirchat.com/pages.asp?id=6askadami yazdı:bu başlığı açtığımdan bu yana araştırmalar yaptım ve sonunda herşeyiyle pojeyi bitirdim
herkez faydalansın diye siteme yükledim
http://www.beysehirchat.com/pages.asp?id=6
![]()
Açık devre şeması kablo karmaşası hiç birşey yok program
da
inrenetten otamatik doviz bilgileri alarak yapmış olduğum
ledler üzerinde kayan yazı şeklinde görüntüleme olanağıda vardır
xp de sorunsuz çalışmaktadır.
yararlı olması dileğiyle
http://www.beysehirchat.com sizin siteniz
alın kodları ve çalışma prensibi
GİRİŞ
Bu proje 74164 entegresiyle tasarlanmıştır. Devrede 74164 entegresinin kullanma sebebi en ucuz 8bitlik kaydedici içermesidir. Bu proje bilgisayarla beraber çalışmaktadır yani bilgisayar olmadan devrenin çalışması mümkün değildir. Devre dört kolondan oluşmakta ve yaklaşık 6 harf göstermektedir. İstenilirse seri bağlamak şartıyla kolon sayısı sonsuza kadar uzatıla bilir.
Bu projeyi yazmada delphi 7.0 kullanılmış ve XP işletim sistemindeki porta veri gönderme sorunu araştırmalar sonucunda giderilmiştir çünkü yeni işletim sistemi porta direk erişime izin vermemektedir.
BİLGİSAYAR KONTROLLÜ KAYAN YAZI DEVRESİ
1.Her Satir İçin Oluşturulacak Kaydedici Devresi:
2.Kayan Yazı Devresinin Bağlantısı:
3.Kullanılan Malzemeler
Tablo 1. Devrede kullanılan elemanlar
Adet Eleman Açıklaması
7x1 74164 entegresi 8 bit kaymalı kaydedici içerir.
8x1 1 k£l direnç Bilgi Girişinde kullanılır.(Biri CLK' da)
7x8 LED diyot Bilginin gözükmesi için
7x8 220H direnç Ledler için akim sınırlama direnci
1 D25 erkek konnektor Bilgisayarın paralel portuna bağlamak için
Toplam Kullanılan Malzemeler
Adet Eleman Açıklaması
7x4 74164 entegresi 8 bit kaymalı kaydedici içerir.
8x4 1 kΩ direnç Bilgi Girişinde Kullanılır.
7x32 Led diyot Bilginin Gözükmesi için
7x32 220Ω direnç Ledler İçin akım Sınırlama Direnci
1 D25 Erkek Konnektor Bilgisayarın Paralel Portuna Bağlamak için
1 D25 Dişi Konnektor Devre İle Bilgisayar Arasındaki iletişim için
4 Plaket 16x20 Ebadında Plaket
1 Usb Kablosu Bilgisayardan Devreye elektirik Aktarmak İçin
Tablo2.74164 8 bit kaymalı kaydedici entegresinin bacak bağlantısı
Pin Sembolü Açıklaması
1-2 A,B Bilgi girişleri
8 CP Clock girişi (yükselen kenar tetiklemeli)
9 MR' Master reset (Aktif sıfır) girişi
14 Vcc +Vcc5v (%10)
7 Gnd Toprak hattı
3-6 Qo Qı Q2 Q3 Çıkışlar (High 10 U.L.)
10-13 Q4 Q5 Q6 Q7 Çıkışlar (High 10 U.L.)
4.Devrenin Çalışması ve Bilgisayara Montajı
Devre yedi ayri kaymali kaydediciden oluşur. Bu kaydedicilerin tetikleme girişleri birleştirilir ve paralel portun Do hattina baglanilir. Diğer her bir kaydedici çikisi yukaridan asagiya doğru paralel portun D1-D7 çikislarina baglanir. Bu çikislar asagidaki şekilde gösterilmiştir.
Bilgi girişlerindeki ve tetikleme girişindeki dirençler gerilim duşumu oluşturmak için kullanilir. Ayrica devre için kullanilan guç kaynaginin şasesi bilgisayarin guç kaynaginin şasesi ile birlestirilmelidir. Bunun için paralel portun yuvasinin metal aksami veya paralel portun toprağa bagli olan 18-25 arasi terminalleri de kullanilabilir.
5. Devrenin Bilgisayar ile Kontrolü
Devreyi bilgisayardan kontrol etmek için sırayla su işlemler yapılır.
• Devrenin bağlandığı port adresi öğrenilir
• Port adresine gönderilecek veriler kolaylık olması bakımından bir diziye aktarılır
• Bir döngü açılır
• Belirlenen porta ilk veri gönderilir.
• Tetikleme işlemi için veriye bir eklenerek tekrar porta gönderilir.
• Devre her ne kadar hizli olsa da herhangi bir atlamaya karsi bir milisaniye kadar
bu değer portta tutulur.
• ilk veri tekrar porta gönderilir(tetiklemeyi düşürmek için)
• Kaymanın gözle gözükmesi için bir sure bekletilir (200-300 mili saniye kadar).
Yoksa yazi çok hızla kayacaktır.
• Döngü geri çağrılır ve yeni değere geçilir.
Bu söylediklerimizi akis diyagramına aktarırsak;
6. Porta Gönderilecek Verilerin Hesaplanması
Porta göndermek istediğimiz yazıların kodlarını çözeriz. Bu işlemi bir örnekle açıklayalım. Örneğin kaydediciye A harfini göndermek istiyoruz
• A harfinin haç sütun seklinde ledlere aktaracağımızı buluruz ve bulduğum adet
sutunlu ve yedi satirli bir tablo çizeriz. A harfi için 4 sütun yeterlidir.
• Bu tablo üzerinde hangi ledlerin yanacagini karalariz.
Porta sıra ile gönderilecek veriler 252,34,34,252 'dır.
En sol sütuna yukarıdan aşağıya doğru 2,4,8,16,32,64,128 yazarız ve bu değerlere karşılık gelen karalı hücrelere bu değeri yazarız. Ve her sütun için bu değerleri toplarız.
DİKKAT:
Programlarda değişken olarak girilen port adresi desimaldir. Bunu ya bir fonksiyonla hexadesimale çevirmeli yada kullanıcıya seçim sunulmalıdır. Örneğin port 378 isimle anılan adres esasında hexadesimaledir. Bunun desimal karşılığı 888'dir
Eğer devrenin şasesi bilgisayarın şasesi ile birleştirilmezse devre çalışmaz
Devrede veya harici guç kaynağında meydana gelebilecek arizalar bilgisayarın ana kartına zarar verebilir. Bu yüzden güç kaynağı özenle seçilmelidir.
Devrenin aynısından clocklar ortak olarak seri eklenerek sütun şayisi sonsuza kadar uzatılabilir. Bu programı etkilemez.
Daha önceki dokümanda anlattığım gibi devre ardışıl kaymalı kaydedicilerden oluşmaktadır. Bu devreyi J-K veya D tipi Flip-Flop kullanarak da yapılabilirdi. Benim 74164 entegresini kullanma nedenim en ucuz 8bit kaydedici içermesi idi.
Dijital elektronikle uğraşanlar bilirler, kaymalı kaydedicilerde ortak clock bağlanarak devre (hafıza dizisi) sonsuza kadar uzatılabilir. Aşağıda yapılan da budur. Şekil 1 de her bir hücre şeması ve şekil 2’de de bunların ardışıl olarak nasıl bağlanacağı ve uzatılacağı açık bir şekilde gösterilmiştir.
Yukarıdaki bağlantıdan da anlaşılabileceği gibi tüm devrelerin clockları ortaktır. (N+1). sütunun bilgi girişi ise N. sütunun 8. bitinden gelmektedir.
3. Devreyi bilgisayardan elektriksel olarak nasıl izole edebilirim?
Parça Değerleri :
Optokuplörler : 6n139 , 4n27 veya Til 111
5 ve 5' : PNP örneğin 2n2219 veya BC557
6 ve 6' : NPN örneğin 2n2222 veya BC 547
1 ve 1' : 270 Ohm
2 ve 2' : 3300 Ohm
3 ve 3' : 1800 Ohm
4 ve 4' : 1000 Ohm
2. Devre bilgisayardan nasıl bağımsız olarak nasıl çalışır?
Bu sorunun yüzlerce farklı cevabı vardır. Önemli olan nasıl bir şey istendiğidir. Şu anki programdan aldığı verileri EEPROM’ DA saklayıp devre bağlantısı kesilince kendisi ledleri kontrol edecek bir pic’den oluşan devre yapmak.
Bilgisayardan Veri Çıkışı:
Ne olursa olsun, bilgisayara veri girişi ve çıkışı bu işin temeli denebilir. Yapacağımız robotu yönetebilmek için bunun nasıl olduğunu bilmemiz gerekir. Robot tasarlama kısmına gelene kadar, paralel portu programlamayı iyi bir şekilde öğrenmemiz gerekecek. Evimizdeki cihazları kontrol edeceğiz. Daha sonra adım motorların nasıl çalıştığını ve nerelerde kullanıldıkları göreceğiz ve programlayacağız.
1 ler ve 0 lar:
Bilgisayarda temel olan iki değer vardır. Bilgisayar içerisinde veri bu iki değer üzerinden akmaktadır. Temel olarak elektronikte, "1" devrenin kapalı (aktif) "0" ise açık (pasif) olduğunu gösterir. Bilgisayarda bu birler ve sıfırların her birine "BIT" bunlardan sekiz tanesinin yanyana gelmiş şekline "1 BYTE" diyoruz. Kafanızı elektronik terimler ile karıştırmak istemediğimden bu değerler ile paralel portu nasıl programlayabileceğimizi bir örnek ile anlatmak istiyorum.
Paralel port bilgisayarın en kolay programlanabilen portudur. Üzerinde 25 Pin vardır 8 BIT veri aktarabilir ve 5 Volt ile çalışır ve tabiki enerjisini bilgisayardaki ana karttan alır. Bu voltaj büyük bir elektronik eşyayı çalıştırmak için yeterli olmayabilir ancak, böyle bir cihazı çalıştırabilecek basit bir devreyi tetiklemek için yeterli olabilir. Aşağıdaki şekilde görüldüğü gibi paralel port 8 BIT olduğundan veri 8 PIN üzerinden akacaktır. Bu pinler sırası ile örnek program ekranındaki gibidir. Bizim diğer pinler ile şimdilik bir işimiz olmayacak. Bu sekiz pinin dışında aşağıda TOPRAK olarak gösterdiğimiz pinlerin dışındaki kısımda kullanmamız gerekecek.
İlk olarak paralel porttan veri çıkışını öğreneceğiz. Yukarıdaki bu 8 pin özel bir durum olmadığı sürece değerleri "0" dır. Biz bu pinlerden istediğimizi "1" durumuna getirebileceğiz. Paralel port üzerindeki bir data pininin "1" olması o pinin +5 Volt olması anlamına gelir. Bilgisayar sistemlerinde temel rakamlar bunlar olduğundan, yazdığımız diğer veri ve adresler bilgisayar içerisinde ikilik sayı sisteminde işlenir.
Bu ve bundan sonra gerçekleştireceğimiz projeler ve devreler için gerekecek bazı temel araç ve gereçler var bu araçları oldukça ucuz bir fiyata bir elektronikçi dükkanından edinebilirsiniz.
Voltmetre
Krokodil Kablo
Montaj Kablosu (Tek Tel)
Yan Keski (Montaj için ufak boy)
Delikli Montaj Plakası (Board)
Printer Kablosu (Eğer isterseniz bu kabloyu bir paralel port ucu alarak kendinizde yapabilirsiniz fakat bu durum havya ve leğim teli kullanmanızı gerektirecektir. İlk aşamada kabloyu hazır almak daha kolay ve sağlıklı olacaktır.)
İlk örnek devremiz için gerekenler,
8 adet 1.5 Voltluk Led Diyot
8 adet 220 Ohm Direnç
Yapıcağımız ilk örnek uygulamada paralel portu programlayarak 8 tane ledi istediğimiz şekilde yakıp söndüreceğiz. Daha öncede bahsettiğim gibi paralel port +5Volt ile çalışır. Aldığımız bu led diyotları doğrudan paralel portun bahsettiğimiz data çıkışlarına bağlayamıyoruz. Bunun nedeni aldığımız ledlerin 1,5Volt ile çalışması. Diyecekseniz neden 5 Voltluk led almadık o zaman? Bunun sebebi devrelerde sık kullanılan dirençlerin kullanımına alışmak ve tabiki 5 Voltluk ledlerin biraz pahalı olması.
Temel amacımız her pine önce bir direnç, peşinede ledi bağlamak. İlk önce direnç kullanmamızın sebebi ise kullanıcağımız 1.5 Voltuk ledin paralel porttan gelen 5 Voltluk akım sebebiyle arızalanmaması. Yapacağımız bağlantı her data pini üzerinde örnek programın ekranındaki gibi olmalı.
Devremiz şu şekilde çalışacak;
Paralel port üzerindeki data pinlerinden bir tanesini "1" yapacağız, dolayısı ile o pinin elektriksel değeri +5Volt olacak. Buradan çıkan 5 Voltu direnç üzerinden geçirerek üzerindeki akımın değerini ledi bozmayacak değere düşürüyoruz ve bunuda led diyotun (+) ucuna bağlıyoruz. Ledin diğer ucunuda TOPRAK kısmına bağlayarak devreyi kapatacağız.
İkilik sayı sisteminden bahsetmiştim. Şimdi yapıcağımız devre ile bu sayı sisteminin bilgisayar ile ilişkisini çok iyi anlayacaksınız. Toplam sekiz data pinine bağlı sekiz tane ledimiz var. Aşağıdaki tabloda porta gönderdiğimiz 8 bitlik hangi veri ile hangi ledlerin yandığına dair birkaç örnek göreceksiniz.
VERİ D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0 1
4 0 0 0 0 0 0 1 0
16 0 0 0 1 0 0 0 0
25 0 0 0 1 1 0 0 1
70 0 1 0 0 0 1 1 0
Yukarıdaki data sütunundaki verileri paralel porta göndereceğiz. Şimdi biraz orta okul dönemlerimize geri dönüp ikilik sayı sistemlerini hatırlıyalım. Dikkat ederseniz tabloda dataya karşılık gelen sayının ikilik sistemdeki değeri, o dataya ait satırdaki pin değerlerini soldan sağa doğru okuduğunuz değerine eşittir.Örneğin 25 sayısının 2 lik sistemdeki değeri 11001 dir.
Hazırlayacağımız devrede gönderdiğimiz data değerlerine göre hangi pinin değeri "1" ise o pine bağlı olan led yanacaktır. Şimdi devremizi yapmaya çalışalım.
İlk olarak almış olduğumuz yazıcı kablosunu malesef kesmemiz gerekiyor. Kabloyu kestikten sonra içerisinden çıkan 25 tane kabloyu ayıralım ve uçlarını soyalım. Daha öncede söylediğim gibi bu kablolardan bize sadece sekiz tanesi gerekli. Bize gerekli olan sekiz kablo, data pinlerine gelen kablolar. Bu kabloların renkleri her yazıcı kablosu için değişik olabileceğinden, bu pinleri bulmak için voltmetreyi kullanacağız. Voltmetrenizi BEEPER kısmına getirin. Bazı voltmetrelerde bunun ismi değişik olabilir. Bu seçenek bize voltmetrenin probları (uçları) nın birbirine temas ettiği sırada bir sinyal vermesini sağlar. Problardan bir ucu data pinlerinden birine diğer ucunuda soyduğumuz kablolara değdirerek voltmetreden bir sinyal almaya çalışın. Bu sayede data uçlarına gelen kabloları sırası ile bulun ve diğerlerinden ayırın. Bir diğer kablo ise bu kabloların dışından gelen kaplanmamış TOPRAK kablosu. Bunuda ayırdıktan sonra diğer kabloları karışmasın diye daha kısa kesebilirsiniz. Ayırdığınız kabloları yukarıdaki data pin uçlarının numarasına ve renklerine göre 0 den 7 ye kadar kağıt üzerinde numaralandırın çünkü bu uçları her seferinde voltmetre ile tespit etmek zor olabilir. Eğer bu işlemler zor geliyorsa, kablonun port olan ucundaki plastiği çıkarın ve data pinlerine bağlı olan kabloların renklerine dikkatle bakın, çünkü renkler birbirine benzer olabilir.
Montaj plakası (board) birbirine değişik şekillerde alttan bağlı küçük deliklerden oluşur. Bu sayede kullanacağımız devre elemanlarını bu deliklere sokarak istediğimiz bağlantı şeklini leğim kullanmadan elde edebiliyoruz. Aldığınız montaj plakasının deliklerinin nasıl bağlı olduğunu voltmetreniz ile az önce anlattığımız kablo testini uygulayarak anlayabilirsiniz.
Montaj plakasını kullanarak data pinlerine giden kablolardan her birinin ucuna bir direnç ve ledi bağlıyoruz. Dikkat etmemiz gereken ledin (+) olan kısmını bağlamamız. Dirençlerin ise belli bir yönü yoktur istediğiniz yönde takabilirsiniz. Genelde led diyotlarda bir bacak daha uzun olur. İşte o uzun bacak (+) olan tarafıdır. Bunu anlamak için bir kalem pil alın ve ledi yakmayı deneyin. Böylece kutupları bulabilirsiniz. Ledin diğer bacağını ise kablodan gelen açık TOPRAK kablosuna birleştireceğiz.
Devremizi tamamladık. Şimdi bilgisayarımızdaki paralel portun adresini bulmamız gerekli. Bunun için Denetim Masasından Sisteme, oradanda aygıt yöneticisine girin. Portlara (Bağlantı Noktaları) gelin ve LPT portunun Kaynaklarından Giriş-Çıkış aralığındaki değerin ilk kısmındaki değer yazıcı portunuzun adresidir. Benim bilgisayarımda bu değer 0378 idi.
Artık yapmamız gereken paralel porta veri göndermek. Bunun için Visual Basic kullanacağız. Visual Basic ile paralel porta veri gönderebilmek için inpout32.dll dosyasına ihtiyacımız olacak. Programı çalıştırdığınızda ilk yapmanız gereken az önce okuduğumuz değeri Paralel Port Adresi kısmına yazıp AYARLA 'ya tıklamak. Benim okuduğum değer 0378 idi bu sebeple buraya &h378 yazıyorum. Sizde okuduğunuz bu değerin son üç hanesini başına &h ekleyerek buraya yazın ve Ayarla'ya tıklayın.
Daha sonra porta veri göndermek için "0" yazan kutulara tıklayın. Zaten sistemin nasıl çalıştığını şekilden çok iyi anlayacaksınız. Yukarıdaki tabloda DATA değeri, kutucukların içerisindeki değerleri soldan sağa okuduğunuzda çıkan sayının onluk sayı tabandaki karşılığıdır.
Yapmış olduğumuz işlem ile paralel porttan 8 bitlik veri çıkışı almış olduk. Paralel porta göndereceğimiz bu 5 Voltluk değerler ile dışarıdaki cihazları kontrol edebileceğiz. Adım motor kontrolü gibi biraz komplike programlamalara geçmeden önce. Bu porttan verinin nasıl çıktığını iyi anlamış olmalıyız.
Paralel porta veri göndermek için OUT komudunu kullandık. Bu komutun kullanım şekli aşağıdaki gibidir.
OUT Adres , Data
Adres verisi yukarıda nasıl bulabileceğinizi anlattığım değer yani printer portunuzun adresinin değeri olmalıdır. Data verisi ise yukarıdaki tabloda belirtildiği gibi porta göndermek istediğiniz benzer sayısal değerler olacaktır. Bu sayısal değer 0-255 arasında olmalıdır. Çünkü 256 değerinin ikilik sistemdeki karşılığı "11111111" olduğundan port daha fazla bir değer alamayacaktır. Bunun sebebi ise portumuz üzerinde 8 data pini bulunması. Dolayısı ile 8 adet "1" değerinin yanyana gelmesi demek bu 8 pinin her birinin +5Volt olması anlamına gelir. Dokuzuncu data pini olmadığından, dokuzuncu "1" değeride olmayacaktır.
LPT yapısı ve genel özellikleri
Paralel port, bilgisayar ile dış dünya arasında iletişim kurmak için kullanılabilecek programlanması en kolay portudur. 25 pinden oluşan paralel portun genel yapısını aşağıda görebilirsiniz.
Resim 1*
Görüldüğü üzere paralel port kendi içinde 3 ayrı yazmaca (register) sahiptir. DATA, STATUS ve CONTROL yazmaçları. Porta hükmetmek, bu yazmaç adreslerine gerekli verileri göndermek veya gerekli verileri okumak ile mümkündür. 3 yazmacın adreslerini belirlemek için ise sadece, portun taban adresi ile aynı olan, DATA yazmacının adresini bilmek yeterlidir. DATA yazmacının adresi çoğu zaman “0378h” dır. Ender de olsa farklı Pc konfigürasyonlarında bu değer çeşitlilik göstermektedir. Bu nedenle kendi yazmaç adreslerinizi “Aygıt yöneticisi”nden “Yazıcı Bağlantı Noktası“ ayarlarına girerek kontrol etmelisiniz.
Aşağıda Win98 SE ‘de yapılan bu işlemin ekran görüntüsü yer almakta. Farklı işletim sistemleri için benzer yollar izlenerek paralel port adresi belirlenebilir.
Resim 2
Bu adresi kontrol ettikten sonra sonra yapmamız gereken diğer yazmaçlar olan STATUS ve CONTROL ‘un adreslerini belirlemek. Bu ise;
STATUS adresi = DATA adresi + 1
CONTROL adresi = STATUS adresi + 1
işlemleri ile belirlenir. DATA = 0378h için hesaplama yaparsak ;
STATUS = 0378 + 1 = 0379h
CONTROL = 0379 + 1 = 037Ah olur.
Şimdi de tek tek 25 pinin ne iş yaptığını gösteren bir tablo verelim ardından DATA, STATUS ve CONTROL yazmaçlarını inceleyelim.
Resim 3
Resim 4
LPT portu printer ile Pc arasında iletişim için tasarlandığından pinler, gereken görevleri yerine getirebilmek için bu yönde özelleştirilmiştir (Paper End, Auto Feed vs). Fakat biz portu tamamen farklı bir amaç için kullanacağımızdan bu bilgilerin bizim için fazlaca bir önemi yok, sadece genel bilgi olsun diye verdim.
Yazmaçları inceleyelim;
DATA :
Bu yazmaç 8 bitlik çıkış olarak kullanılan bir yazmaçtır. Bu yazmaçın her bir bitinde lojik 1 değeri analog olarak +5V, lojik 0 değeri ise analog olarak 0 V a eşittir (TTL seviyesi). Bir başka deyişle D1 biti “1” ise gerçek dünya için bu değer aslında “+5V”, “0” ise “0V” tur.
Bu yazmacı kullanarak 3 farklı bite bağlı 3 farklı cihazı kontrol ettiğimizi ve cihazların sırası ile D0 (1. cihaz), D3 (2.cihaz), D7 (3.cihaz) pinlerine bağlandığını farzedelim. Bu 3 cihazdan 1. ve 3. sine lojik “1” , 2. sine lojik ”0” sinyali yollayacağımızı düşünürsek,
8 bitlik DATA yamacına ;
Resim 5
değerini yüklememiz gerekir. Bu değer de 89 Hex veya 137 Decimal değerlerine eşittir.
STATUS :
Bu yazmaç da aslında 8 bitlik bir yazmaçtır fakat yanlızca üst 5 bit kullanılmaktadır. Bu yazmaç aracılığı ile portu, Pc’ye veri girmek için kullanabiliriz. Normalde STATUS pinlerinde lojik 1 sinyali vardır. Biz veri girişi yapmak istediğimizde, pinlere buton bağlayarak bu pinleri toprağa yani 0 V a çekerek pinde lojik 0 sinyali oluşmasını sağlarız. Bu yazmaç için dikkat edilmesi gereken S7 pininin terslenmiş (inverted) olmasıdır. Bunun anlamı eğer bu pini toprağa buton ile çekersek yazmaçda bu pini temsil eden bitte lojik 0 sinyali yerine lojik 1 sinyalinin oluşmasıdır. Yazılım ile bu yazmaçdan değer okunurken buna dikkat edilmesi gerekir, ya bu bit en baştan maskeleme yolu ile tekrar tersi alınarak diğer pinlerle aynı konuma getirilir yada okunan değer bu özellikler dikkate alınarak yorumlanır.
Yazmaç Adresi : DATA adresi + 1
Resim 6
CONTROL :
Bu port da 8 bitliktir fakat düşük 4 biti kullanılır. Veri girişi ve çıkışı için kullanılabilir. Veri gönderme ve alma işlemleri yukarıda bahsedilenlerle aynı biçimde gerçekleştirilir. Dikkat edilmesi gereken yazmaca ulaşılırken kullanılan adres ve yazmaç içinde terslendirilimiş pinlerdir. Bu pinlerde (C0,C1,C3) veri gönderilmediğinde C2’nin aksine +5V vardır, veri gönderildiğinde ise sinyal 0V’a çekilir.
Yazmaç Adresi : STATUS adresi + 1
Resim 7
Paralel port görüldüğü üzere basit yapısı ile karmaşık olmayan uygulamalarda iletişim için en ideal seçenektir. Bu projemizde başlangıç için 1 pin kullanarak sadece veri çıkışı yapacak ve tasarladığımız "oda lambasını açma - kapama devresi"ni kontrol edeceğiz.
DONANIM
Devre olarak çok basit bir transistör - röle anahtarlama devresi kullanacağız. Önceki projemizden hatırlayacağınız röle kontrol devresini aynen bu projeye uyarlayabiliriz.
Resim 8
Devrede dikkat edilmesi gereken beslemelerdir. Devrenin DC beselemesinin toprağı ile paralel portun toprak pinlerinden biri (18-25) birbirine bağlanmalıdır. DC besleme için harici bir kaynak (adaptör vs.) kullanılabileceği gibi, Pc’lerin kasalarındaki güç kaynakları da kullanılabilir (Hdd, CD sürücü gibi cihazlara giden besleme kablosunda siyah olan uç GND (toprak) sarı olan uç ise 12V’tur) . Lambanın beslemesi ise bildiğimiz 220 V’luk şehir cereyanıdır. Bu cereyan için fazladan birşey yapmanıza gerek yok, sadece başta yaptığımız uyarılara dikkat ederek, sigortalar kapalıyken, anahtarda cereyan yokken bağlantıları yapacaksınız. Diyot, röle ve transistör ile ilgili bilgiler vermiyorum zaten bunan önceki projelerin asıl amacı bunların kullanımı hakkında size bilgiler vermekti. Sadece BC337 transistörün pin bağlantılarına ihtiyaç duyacaksınız onu da aşağıda verdim.
Resim 9
Paralel port ile olan bağlantı için de ya bir yazıcı veya laplink kablosu edinip onu feda edeceksiniz, ya da zor ama daha ekonomik yolu seçip bir LPT konnektörü alıp tek tek uçlarına kablo lehimleyeceksiniz. Ben elimde hale hazırda bulunduğundan lapink kablosu kullandım. Yanlız lapink kablosu kullanırsanız dikkat etmeniz gereken bir uçtaki düşük bitli data bitlerinin diğer uçtaki status bitlerine sırasıyla bağlı olmasıdır. Bu tip kablolar 2 Pc nin iletişimi için kullanıldığından bir Pc'deki DATA çıkışları diğer Pc'nin STATUS girişlerine gitmektedir. O yüzden aşağıda vereceğim tabloya göre pinleri devreye bağlarsanız , iletişim sorunu yaşamazsınız.
Resim 10
Paralel porta kabloyu takareken veya çıkartırken devrede gerilim olmadığından, devreyi kurarken hata yapmadığınızdan, portta kısa devre olmadığından emin olun, yoksa portunuzu uçurabilirsiniz.
Baskı Devre Şeması
Programın Kodları
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, Buttons, jpeg, StdCtrls, ToolWin, ComCtrls,
DB, DBCtrls, ADODB;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
SpeedButton3: TSpeedButton;
DateTimePicker1: TDateTimePicker;
Label1: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
Timer1: TTimer;
SpeedButton5: TSpeedButton;
Timer2: TTimer;
ScrollBar1: TScrollBar;
Edit2: TEdit;
Edit3: TEdit;
MainMenu1: TMainMenu;
Dosya1: TMenuItem;
ayarlar1: TMenuItem;
Haknda1: TMenuItem;
k1: TMenuItem;
Elence1: TMenuItem;
Yardm1: TMenuItem;
Timer3: TTimer;
Memo1: TMemo;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label2: TLabel;
Label3: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
alver: TADOQuery;
DBCheckBox1: TDBCheckBox;
alverkuladi: TStringField;
alversifre: TStringField;
procedure CheckBox1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure dizile;
procedure OpenClose;
procedure Timer2Timer(Sender: TObject);
procedure k1Click(Sender: TObject);
procedure Haknda1Click(Sender: TObject);
procedure ayarlar1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure Edit5Change(Sender: TObject);
private
{ Private declarations }
public
Port_Adr: string;
serkan:string;
end;
const kardizi:array[1..189]of integer=
(4, 0, 0, 0, 0,0,0, {Boşluk 32}
6, 252, 18, 18, 18, 252, 0, {A 64}
6, 130, 254, 146, 146, 108, 0,{B}
6, 124, 130, 130, 130, 68, 0, {C}
6, 130, 254, 130, 130, 124, 0,{D}
6, 254, 146, 146, 146, 130, 0,{E}
6, 254, 18, 18, 18, 2, 0 , {F}
6, 124, 130, 146, 146, 114, 0,{G 71}
6, 254, 16, 16, 16, 254, 0, {H}
4, 130, 254, 130, 0,0,0, {I}
5, 64, 128, 128, 126, 0,0, {J}
6, 254, 16, 40, 68, 130, 0, {K}
5, 254, 128, 128, 128, 0,0, {L}
6, 254, 4, 24, 4, 254, 0 , {M 77}
6, 254, 4, 8, 16, 254, 0 , {N}
6, 124, 130, 130, 130, 124, 0,{O}
5, 254, 18, 18, 12, 0,0, {P}
6, 124, 130, 162, 66, 188, 0, {Q}
6, 254, 18, 50, 82, 140, 0, {R}
6, 68, 138, 146, 162, 68, 0, {S 83}
6, 2, 2, 254, 2, 2, 0, {T}
6, 126, 128, 128, 128, 126, 0,{U}
6, 14, 48, 192, 48, 14, 0, {V}
6, 127, 128, 112, 128, 127, 0,{W}
6, 198, 40, 16, 40, 198, 0, {X}
6, 6, 8, 240, 8, 6, 0, {Y}
6, 194, 162, 146, 138, 134, 0);{Z 90}
var
Form1: TForm1;
porta:array[1..1500]of integer;
sira,sayac:integer;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure tform1.dizile; (*copyright Serkan Alver*)
label sona;
var i,j,karakter:integer;
function ascbul(giren:wideString ):integer;
var i,sonuc:longint;
begin sonuc:=0;
for i:=1 to 999 do if wchar(i)=giren then sonuc:=i;
ascbul:=sonuc;
end;
begin
form1.memo1.text:=uppercase(form1.memo1.text);sira:=0;
for i:=1 to length(form1.memo1.text) do begin
karakter:=ascbul(copy(form1.memo1.Text ,i,1));
if karakter=32 then karakter:=64;
if not((karakter>63) and (karakter<91)) then goto sona;
for j:=1 to kardizi[(karakter-64)*7+1] do begin
sira:=sira+1;
porta[sira]:=kardizi[(karakter-64)*7+1+j];
end;{j'nin endi}
sona:end; {i'nin endi}
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked = True Then
begin
Label1.Enabled := True;
DateTimePicker1.Enabled := True;
DateTimePicker1.Time := Time;
SpeedButton5.Enabled := True;
end
else
begin
Label1.Enabled := False;
DateTimePicker1.Enabled := False;
If SpeedButton5.Caption = 'Otomatik çalıştırmayı durdur' Then
begin
SpeedButton5.Click
end;
SpeedButton5.Enabled := False;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
sayac:=1;
DateTimePicker1.Time := Time;
end;
procedure TForm1.OpenClose;
begin
if SpeedButton3.Caption ='Çalıştır' then begin
SpeedButton3.Font.Color := clRed;
SpeedButton3.Caption:='Durdur';
image1.Visible :=false;
memo1.Enabled := false;
dizile;
timer2.Enabled :=true;
timer3.Enabled :=true;
end
else begin
memo1.Enabled := true;
SpeedButton3.Font.Color := clgreen;
SpeedButton3.Caption:='Çalıştır';
image1.Visible :=true;
timer2.Enabled :=false;
timer3.Enabled :=true;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(Time);
If TimeToStr(DateTimePicker1.Time) = Label1.Caption Then
If SpeedButton5.Caption = 'Otomatik çalıştırmayı durdur' Then
SpeedButton3.Click;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
If SpeedButton5.Caption = 'Otomatik çalıştırmayı başlat' Then
begin
SpeedButton5.Caption := 'Otomatik çalıştırmayı durdur';
SpeedButton5.Font.Color := clRed;
DateTimePicker1.Enabled := False;
end
else
begin
SpeedButton5.Caption := 'Otomatik çalıştırmayı başlat';
SpeedButton5.Font.Color := clGreen;
DateTimePicker1.Enabled := True;
end;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Timer2.Interval :=ScrollBar1.Position ;
alver.Close;
alver.SQL .Clear;
alver.SQL.Add('update sayi set enson=artir where sayi=5');
alver.Parameters.ParamByName('artir').Value :=scrollbar1.Position ;
alver.ExecSQL ;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var dat,datarti:integer;
begin
timer3.Enabled :=false;
dat:=porta[sayac];
datarti:=porta[sayac]+1 ;
edit2.Text:=inttostr(dat) ;
edit3.Text:=inttostr(datarti)
;
portwritel(StrToInt('$' + Port_Adr), dat);
portwritel(StrToInt('$' + Port_Adr), datarti);
sayac:=sayac+1;
if sayac>sira then begin
sayac:=1;
end;
end;
procedure TForm1.k1Click(Sender: TObject);
begin
Application.MessageBox('Çıkmak İstediğinizden eminmisiniz?','Bilgi',mb_iconinformation+mb_ok);
openclose;
form1.Close;
end;
procedure TForm1.Haknda1Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
Form3.Show;
end;
procedure TForm1.ayarlar1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
OpenClose;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
var dat,datarti:byte;
begin
sayac:=1;
dat:=0;
datarti:=1 ;
portwritel(StrToInt('$' + Port_Adr), dat);
portwritel(StrToInt('$' + Port_Adr), datarti);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((ssAlt in Shift) and (Key = VK_F4)) then
Key := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Width :=345;
form1.Height :=175;
Timer2.Interval :=ScrollBar1.Position ;
KeyPreview := true;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
edit4.Text:=inttostr( length(form1.memo1.text));
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
if (edit5.Text <>'') and (edit6.text <>'') then speedbutton1.Click
else Application.MessageBox('Kullanıcı Adı ve şifrenizi Girmediniz','Uyarı',mb_iconinformation+mb_ok);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (edit5.Text<>'')or(edit6.Text<>'')then begin
if alver.RecordCount <> 0 then begin
if (edit5.Text=alverkuladi.AsString)and(edit6.Text=alversifre.AsString) then
begin
form1.caption:='Bilgisayar Kontrollü Kayan Yazı versiyon 1.1' ;
form1.Width :=550;
form1.Height :=375;
edit2.Visible :=true;
edit3.Visible :=true;
edit4.Visible :=true;
datetimepicker1.Visible :=true;
groupbox1.Visible :=true ;
checkbox1.Visible :=true;
label1.Visible :=true;
speedbutton5.Visible :=true;
label2.Visible :=true;
label3.Visible :=true;
memo1.Visible :=true;
scrollbar1.Visible :=true;
speedbutton3.Visible :=true;
dosya1.Visible :=true;
ayarlar1.Visible :=true;
elence1.Visible :=true;
image1.Visible :=true;
image2.Visible :=true;
speedbutton1.Visible:=false;
dbcheckbox1.Visible :=false ;
speedbutton2.Visible:=false;
edit5.Visible :=false;
edit6.Visible :=false;
label2.Visible :=false;
label3.Visible :=false;
form1.BorderStyle:=bstoolwindow;
end else begin
Application.MessageBox('Lütfen Şİfrenizi Giriniz','Şİfre Girilmedi',mb_iconinformation+mb_ok);
end;
end else begin
Application.MessageBox('Kullanıcı Adı Veya Şifre Yanlış','Uyarı i',mb_iconinformation+mb_ok);
end;
end else begin
Application.MessageBox('Lütfen Kullanıcı Adı ve Şifrenizi Giriniz','Uyarı',mb_iconinformation+mb_ok);
end;
end;
procedure TForm1.Edit5Change(Sender: TObject);
begin
alver.Close;
alver.SQL .Clear;
alver.SQL.Add('Select * From sifre');
alver.SQL.Add('Where kuladi like:K');
alver.Parameters[0].Value:=edit5.Text;
alver.Open;
end;
end.
Sonuç
Bu proje ile bilgisayar kontrolü ile her türlü elektronik devrenin kontrol edile bileceğini Bilgisayardan devrelere veri gönderme mantığı ve çalışma prensibini öğrendik.
Bu projenin kolonları sonsuza kadar çoğaltıla bilir. Proje sayesinde ilerdeki iş imkanları için iyi bir referans olabilmektedir.
Bu proje sayesinde araştırarak her şeyin yapılabileceğini projede kullandığımız programı yazmış olduğumuz Delphi dillini geliştirerek her türlü programın yazıla bileceğini öğrendik.
Kaynaklar
1. Elektronik kitaplar
2. Internet Siteleri
3. Daha önce yapılmış kayan yazı projeleri
4. Sprint-Layout 3.0 Çizim Programı
5. Delphi 7.0
http://www.beysehirsurucukursu.com/beysehirchat/proje
web sitemden programdaki değişiklikleri al bilir baskı devre şemasını programın çalışır halini indire bilirsiniz?
Bu proje 74164 entegresiyle tasarlanmıştır. Devrede 74164 entegresinin kullanma sebebi en ucuz 8bitlik kaydedici içermesidir. Bu proje bilgisayarla beraber çalışmaktadır yani bilgisayar olmadan devrenin çalışması mümkün değildir. Devre dört kolondan oluşmakta ve yaklaşık 6 harf göstermektedir. İstenilirse seri bağlamak şartıyla kolon sayısı sonsuza kadar uzatıla bilir.
Bu projeyi yazmada delphi 7.0 kullanılmış ve XP işletim sistemindeki porta veri gönderme sorunu araştırmalar sonucunda giderilmiştir çünkü yeni işletim sistemi porta direk erişime izin vermemektedir.
BİLGİSAYAR KONTROLLÜ KAYAN YAZI DEVRESİ
1.Her Satir İçin Oluşturulacak Kaydedici Devresi:
2.Kayan Yazı Devresinin Bağlantısı:
3.Kullanılan Malzemeler
Tablo 1. Devrede kullanılan elemanlar
Adet Eleman Açıklaması
7x1 74164 entegresi 8 bit kaymalı kaydedici içerir.
8x1 1 k£l direnç Bilgi Girişinde kullanılır.(Biri CLK' da)
7x8 LED diyot Bilginin gözükmesi için
7x8 220H direnç Ledler için akim sınırlama direnci
1 D25 erkek konnektor Bilgisayarın paralel portuna bağlamak için
Toplam Kullanılan Malzemeler
Adet Eleman Açıklaması
7x4 74164 entegresi 8 bit kaymalı kaydedici içerir.
8x4 1 kΩ direnç Bilgi Girişinde Kullanılır.
7x32 Led diyot Bilginin Gözükmesi için
7x32 220Ω direnç Ledler İçin akım Sınırlama Direnci
1 D25 Erkek Konnektor Bilgisayarın Paralel Portuna Bağlamak için
1 D25 Dişi Konnektor Devre İle Bilgisayar Arasındaki iletişim için
4 Plaket 16x20 Ebadında Plaket
1 Usb Kablosu Bilgisayardan Devreye elektirik Aktarmak İçin
Tablo2.74164 8 bit kaymalı kaydedici entegresinin bacak bağlantısı
Pin Sembolü Açıklaması
1-2 A,B Bilgi girişleri
8 CP Clock girişi (yükselen kenar tetiklemeli)
9 MR' Master reset (Aktif sıfır) girişi
14 Vcc +Vcc5v (%10)
7 Gnd Toprak hattı
3-6 Qo Qı Q2 Q3 Çıkışlar (High 10 U.L.)
10-13 Q4 Q5 Q6 Q7 Çıkışlar (High 10 U.L.)
4.Devrenin Çalışması ve Bilgisayara Montajı
Devre yedi ayri kaymali kaydediciden oluşur. Bu kaydedicilerin tetikleme girişleri birleştirilir ve paralel portun Do hattina baglanilir. Diğer her bir kaydedici çikisi yukaridan asagiya doğru paralel portun D1-D7 çikislarina baglanir. Bu çikislar asagidaki şekilde gösterilmiştir.
Bilgi girişlerindeki ve tetikleme girişindeki dirençler gerilim duşumu oluşturmak için kullanilir. Ayrica devre için kullanilan guç kaynaginin şasesi bilgisayarin guç kaynaginin şasesi ile birlestirilmelidir. Bunun için paralel portun yuvasinin metal aksami veya paralel portun toprağa bagli olan 18-25 arasi terminalleri de kullanilabilir.
5. Devrenin Bilgisayar ile Kontrolü
Devreyi bilgisayardan kontrol etmek için sırayla su işlemler yapılır.
• Devrenin bağlandığı port adresi öğrenilir
• Port adresine gönderilecek veriler kolaylık olması bakımından bir diziye aktarılır
• Bir döngü açılır
• Belirlenen porta ilk veri gönderilir.
• Tetikleme işlemi için veriye bir eklenerek tekrar porta gönderilir.
• Devre her ne kadar hizli olsa da herhangi bir atlamaya karsi bir milisaniye kadar
bu değer portta tutulur.
• ilk veri tekrar porta gönderilir(tetiklemeyi düşürmek için)
• Kaymanın gözle gözükmesi için bir sure bekletilir (200-300 mili saniye kadar).
Yoksa yazi çok hızla kayacaktır.
• Döngü geri çağrılır ve yeni değere geçilir.
Bu söylediklerimizi akis diyagramına aktarırsak;
6. Porta Gönderilecek Verilerin Hesaplanması
Porta göndermek istediğimiz yazıların kodlarını çözeriz. Bu işlemi bir örnekle açıklayalım. Örneğin kaydediciye A harfini göndermek istiyoruz
• A harfinin haç sütun seklinde ledlere aktaracağımızı buluruz ve bulduğum adet
sutunlu ve yedi satirli bir tablo çizeriz. A harfi için 4 sütun yeterlidir.
• Bu tablo üzerinde hangi ledlerin yanacagini karalariz.
Porta sıra ile gönderilecek veriler 252,34,34,252 'dır.
En sol sütuna yukarıdan aşağıya doğru 2,4,8,16,32,64,128 yazarız ve bu değerlere karşılık gelen karalı hücrelere bu değeri yazarız. Ve her sütun için bu değerleri toplarız.
DİKKAT:
Programlarda değişken olarak girilen port adresi desimaldir. Bunu ya bir fonksiyonla hexadesimale çevirmeli yada kullanıcıya seçim sunulmalıdır. Örneğin port 378 isimle anılan adres esasında hexadesimaledir. Bunun desimal karşılığı 888'dir
Eğer devrenin şasesi bilgisayarın şasesi ile birleştirilmezse devre çalışmaz
Devrede veya harici guç kaynağında meydana gelebilecek arizalar bilgisayarın ana kartına zarar verebilir. Bu yüzden güç kaynağı özenle seçilmelidir.
Devrenin aynısından clocklar ortak olarak seri eklenerek sütun şayisi sonsuza kadar uzatılabilir. Bu programı etkilemez.
Daha önceki dokümanda anlattığım gibi devre ardışıl kaymalı kaydedicilerden oluşmaktadır. Bu devreyi J-K veya D tipi Flip-Flop kullanarak da yapılabilirdi. Benim 74164 entegresini kullanma nedenim en ucuz 8bit kaydedici içermesi idi.
Dijital elektronikle uğraşanlar bilirler, kaymalı kaydedicilerde ortak clock bağlanarak devre (hafıza dizisi) sonsuza kadar uzatılabilir. Aşağıda yapılan da budur. Şekil 1 de her bir hücre şeması ve şekil 2’de de bunların ardışıl olarak nasıl bağlanacağı ve uzatılacağı açık bir şekilde gösterilmiştir.
Yukarıdaki bağlantıdan da anlaşılabileceği gibi tüm devrelerin clockları ortaktır. (N+1). sütunun bilgi girişi ise N. sütunun 8. bitinden gelmektedir.
3. Devreyi bilgisayardan elektriksel olarak nasıl izole edebilirim?
Parça Değerleri :
Optokuplörler : 6n139 , 4n27 veya Til 111
5 ve 5' : PNP örneğin 2n2219 veya BC557
6 ve 6' : NPN örneğin 2n2222 veya BC 547
1 ve 1' : 270 Ohm
2 ve 2' : 3300 Ohm
3 ve 3' : 1800 Ohm
4 ve 4' : 1000 Ohm
2. Devre bilgisayardan nasıl bağımsız olarak nasıl çalışır?
Bu sorunun yüzlerce farklı cevabı vardır. Önemli olan nasıl bir şey istendiğidir. Şu anki programdan aldığı verileri EEPROM’ DA saklayıp devre bağlantısı kesilince kendisi ledleri kontrol edecek bir pic’den oluşan devre yapmak.
Bilgisayardan Veri Çıkışı:
Ne olursa olsun, bilgisayara veri girişi ve çıkışı bu işin temeli denebilir. Yapacağımız robotu yönetebilmek için bunun nasıl olduğunu bilmemiz gerekir. Robot tasarlama kısmına gelene kadar, paralel portu programlamayı iyi bir şekilde öğrenmemiz gerekecek. Evimizdeki cihazları kontrol edeceğiz. Daha sonra adım motorların nasıl çalıştığını ve nerelerde kullanıldıkları göreceğiz ve programlayacağız.
1 ler ve 0 lar:
Bilgisayarda temel olan iki değer vardır. Bilgisayar içerisinde veri bu iki değer üzerinden akmaktadır. Temel olarak elektronikte, "1" devrenin kapalı (aktif) "0" ise açık (pasif) olduğunu gösterir. Bilgisayarda bu birler ve sıfırların her birine "BIT" bunlardan sekiz tanesinin yanyana gelmiş şekline "1 BYTE" diyoruz. Kafanızı elektronik terimler ile karıştırmak istemediğimden bu değerler ile paralel portu nasıl programlayabileceğimizi bir örnek ile anlatmak istiyorum.
Paralel port bilgisayarın en kolay programlanabilen portudur. Üzerinde 25 Pin vardır 8 BIT veri aktarabilir ve 5 Volt ile çalışır ve tabiki enerjisini bilgisayardaki ana karttan alır. Bu voltaj büyük bir elektronik eşyayı çalıştırmak için yeterli olmayabilir ancak, böyle bir cihazı çalıştırabilecek basit bir devreyi tetiklemek için yeterli olabilir. Aşağıdaki şekilde görüldüğü gibi paralel port 8 BIT olduğundan veri 8 PIN üzerinden akacaktır. Bu pinler sırası ile örnek program ekranındaki gibidir. Bizim diğer pinler ile şimdilik bir işimiz olmayacak. Bu sekiz pinin dışında aşağıda TOPRAK olarak gösterdiğimiz pinlerin dışındaki kısımda kullanmamız gerekecek.
İlk olarak paralel porttan veri çıkışını öğreneceğiz. Yukarıdaki bu 8 pin özel bir durum olmadığı sürece değerleri "0" dır. Biz bu pinlerden istediğimizi "1" durumuna getirebileceğiz. Paralel port üzerindeki bir data pininin "1" olması o pinin +5 Volt olması anlamına gelir. Bilgisayar sistemlerinde temel rakamlar bunlar olduğundan, yazdığımız diğer veri ve adresler bilgisayar içerisinde ikilik sayı sisteminde işlenir.
Bu ve bundan sonra gerçekleştireceğimiz projeler ve devreler için gerekecek bazı temel araç ve gereçler var bu araçları oldukça ucuz bir fiyata bir elektronikçi dükkanından edinebilirsiniz.
Voltmetre
Krokodil Kablo
Montaj Kablosu (Tek Tel)
Yan Keski (Montaj için ufak boy)
Delikli Montaj Plakası (Board)
Printer Kablosu (Eğer isterseniz bu kabloyu bir paralel port ucu alarak kendinizde yapabilirsiniz fakat bu durum havya ve leğim teli kullanmanızı gerektirecektir. İlk aşamada kabloyu hazır almak daha kolay ve sağlıklı olacaktır.)
İlk örnek devremiz için gerekenler,
8 adet 1.5 Voltluk Led Diyot
8 adet 220 Ohm Direnç
Yapıcağımız ilk örnek uygulamada paralel portu programlayarak 8 tane ledi istediğimiz şekilde yakıp söndüreceğiz. Daha öncede bahsettiğim gibi paralel port +5Volt ile çalışır. Aldığımız bu led diyotları doğrudan paralel portun bahsettiğimiz data çıkışlarına bağlayamıyoruz. Bunun nedeni aldığımız ledlerin 1,5Volt ile çalışması. Diyecekseniz neden 5 Voltluk led almadık o zaman? Bunun sebebi devrelerde sık kullanılan dirençlerin kullanımına alışmak ve tabiki 5 Voltluk ledlerin biraz pahalı olması.
Temel amacımız her pine önce bir direnç, peşinede ledi bağlamak. İlk önce direnç kullanmamızın sebebi ise kullanıcağımız 1.5 Voltuk ledin paralel porttan gelen 5 Voltluk akım sebebiyle arızalanmaması. Yapacağımız bağlantı her data pini üzerinde örnek programın ekranındaki gibi olmalı.
Devremiz şu şekilde çalışacak;
Paralel port üzerindeki data pinlerinden bir tanesini "1" yapacağız, dolayısı ile o pinin elektriksel değeri +5Volt olacak. Buradan çıkan 5 Voltu direnç üzerinden geçirerek üzerindeki akımın değerini ledi bozmayacak değere düşürüyoruz ve bunuda led diyotun (+) ucuna bağlıyoruz. Ledin diğer ucunuda TOPRAK kısmına bağlayarak devreyi kapatacağız.
İkilik sayı sisteminden bahsetmiştim. Şimdi yapıcağımız devre ile bu sayı sisteminin bilgisayar ile ilişkisini çok iyi anlayacaksınız. Toplam sekiz data pinine bağlı sekiz tane ledimiz var. Aşağıdaki tabloda porta gönderdiğimiz 8 bitlik hangi veri ile hangi ledlerin yandığına dair birkaç örnek göreceksiniz.
VERİ D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0 1
4 0 0 0 0 0 0 1 0
16 0 0 0 1 0 0 0 0
25 0 0 0 1 1 0 0 1
70 0 1 0 0 0 1 1 0
Yukarıdaki data sütunundaki verileri paralel porta göndereceğiz. Şimdi biraz orta okul dönemlerimize geri dönüp ikilik sayı sistemlerini hatırlıyalım. Dikkat ederseniz tabloda dataya karşılık gelen sayının ikilik sistemdeki değeri, o dataya ait satırdaki pin değerlerini soldan sağa doğru okuduğunuz değerine eşittir.Örneğin 25 sayısının 2 lik sistemdeki değeri 11001 dir.
Hazırlayacağımız devrede gönderdiğimiz data değerlerine göre hangi pinin değeri "1" ise o pine bağlı olan led yanacaktır. Şimdi devremizi yapmaya çalışalım.
İlk olarak almış olduğumuz yazıcı kablosunu malesef kesmemiz gerekiyor. Kabloyu kestikten sonra içerisinden çıkan 25 tane kabloyu ayıralım ve uçlarını soyalım. Daha öncede söylediğim gibi bu kablolardan bize sadece sekiz tanesi gerekli. Bize gerekli olan sekiz kablo, data pinlerine gelen kablolar. Bu kabloların renkleri her yazıcı kablosu için değişik olabileceğinden, bu pinleri bulmak için voltmetreyi kullanacağız. Voltmetrenizi BEEPER kısmına getirin. Bazı voltmetrelerde bunun ismi değişik olabilir. Bu seçenek bize voltmetrenin probları (uçları) nın birbirine temas ettiği sırada bir sinyal vermesini sağlar. Problardan bir ucu data pinlerinden birine diğer ucunuda soyduğumuz kablolara değdirerek voltmetreden bir sinyal almaya çalışın. Bu sayede data uçlarına gelen kabloları sırası ile bulun ve diğerlerinden ayırın. Bir diğer kablo ise bu kabloların dışından gelen kaplanmamış TOPRAK kablosu. Bunuda ayırdıktan sonra diğer kabloları karışmasın diye daha kısa kesebilirsiniz. Ayırdığınız kabloları yukarıdaki data pin uçlarının numarasına ve renklerine göre 0 den 7 ye kadar kağıt üzerinde numaralandırın çünkü bu uçları her seferinde voltmetre ile tespit etmek zor olabilir. Eğer bu işlemler zor geliyorsa, kablonun port olan ucundaki plastiği çıkarın ve data pinlerine bağlı olan kabloların renklerine dikkatle bakın, çünkü renkler birbirine benzer olabilir.
Montaj plakası (board) birbirine değişik şekillerde alttan bağlı küçük deliklerden oluşur. Bu sayede kullanacağımız devre elemanlarını bu deliklere sokarak istediğimiz bağlantı şeklini leğim kullanmadan elde edebiliyoruz. Aldığınız montaj plakasının deliklerinin nasıl bağlı olduğunu voltmetreniz ile az önce anlattığımız kablo testini uygulayarak anlayabilirsiniz.
Montaj plakasını kullanarak data pinlerine giden kablolardan her birinin ucuna bir direnç ve ledi bağlıyoruz. Dikkat etmemiz gereken ledin (+) olan kısmını bağlamamız. Dirençlerin ise belli bir yönü yoktur istediğiniz yönde takabilirsiniz. Genelde led diyotlarda bir bacak daha uzun olur. İşte o uzun bacak (+) olan tarafıdır. Bunu anlamak için bir kalem pil alın ve ledi yakmayı deneyin. Böylece kutupları bulabilirsiniz. Ledin diğer bacağını ise kablodan gelen açık TOPRAK kablosuna birleştireceğiz.
Devremizi tamamladık. Şimdi bilgisayarımızdaki paralel portun adresini bulmamız gerekli. Bunun için Denetim Masasından Sisteme, oradanda aygıt yöneticisine girin. Portlara (Bağlantı Noktaları) gelin ve LPT portunun Kaynaklarından Giriş-Çıkış aralığındaki değerin ilk kısmındaki değer yazıcı portunuzun adresidir. Benim bilgisayarımda bu değer 0378 idi.
Artık yapmamız gereken paralel porta veri göndermek. Bunun için Visual Basic kullanacağız. Visual Basic ile paralel porta veri gönderebilmek için inpout32.dll dosyasına ihtiyacımız olacak. Programı çalıştırdığınızda ilk yapmanız gereken az önce okuduğumuz değeri Paralel Port Adresi kısmına yazıp AYARLA 'ya tıklamak. Benim okuduğum değer 0378 idi bu sebeple buraya &h378 yazıyorum. Sizde okuduğunuz bu değerin son üç hanesini başına &h ekleyerek buraya yazın ve Ayarla'ya tıklayın.
Daha sonra porta veri göndermek için "0" yazan kutulara tıklayın. Zaten sistemin nasıl çalıştığını şekilden çok iyi anlayacaksınız. Yukarıdaki tabloda DATA değeri, kutucukların içerisindeki değerleri soldan sağa okuduğunuzda çıkan sayının onluk sayı tabandaki karşılığıdır.
Yapmış olduğumuz işlem ile paralel porttan 8 bitlik veri çıkışı almış olduk. Paralel porta göndereceğimiz bu 5 Voltluk değerler ile dışarıdaki cihazları kontrol edebileceğiz. Adım motor kontrolü gibi biraz komplike programlamalara geçmeden önce. Bu porttan verinin nasıl çıktığını iyi anlamış olmalıyız.
Paralel porta veri göndermek için OUT komudunu kullandık. Bu komutun kullanım şekli aşağıdaki gibidir.
OUT Adres , Data
Adres verisi yukarıda nasıl bulabileceğinizi anlattığım değer yani printer portunuzun adresinin değeri olmalıdır. Data verisi ise yukarıdaki tabloda belirtildiği gibi porta göndermek istediğiniz benzer sayısal değerler olacaktır. Bu sayısal değer 0-255 arasında olmalıdır. Çünkü 256 değerinin ikilik sistemdeki karşılığı "11111111" olduğundan port daha fazla bir değer alamayacaktır. Bunun sebebi ise portumuz üzerinde 8 data pini bulunması. Dolayısı ile 8 adet "1" değerinin yanyana gelmesi demek bu 8 pinin her birinin +5Volt olması anlamına gelir. Dokuzuncu data pini olmadığından, dokuzuncu "1" değeride olmayacaktır.
LPT yapısı ve genel özellikleri
Paralel port, bilgisayar ile dış dünya arasında iletişim kurmak için kullanılabilecek programlanması en kolay portudur. 25 pinden oluşan paralel portun genel yapısını aşağıda görebilirsiniz.
Resim 1*
Görüldüğü üzere paralel port kendi içinde 3 ayrı yazmaca (register) sahiptir. DATA, STATUS ve CONTROL yazmaçları. Porta hükmetmek, bu yazmaç adreslerine gerekli verileri göndermek veya gerekli verileri okumak ile mümkündür. 3 yazmacın adreslerini belirlemek için ise sadece, portun taban adresi ile aynı olan, DATA yazmacının adresini bilmek yeterlidir. DATA yazmacının adresi çoğu zaman “0378h” dır. Ender de olsa farklı Pc konfigürasyonlarında bu değer çeşitlilik göstermektedir. Bu nedenle kendi yazmaç adreslerinizi “Aygıt yöneticisi”nden “Yazıcı Bağlantı Noktası“ ayarlarına girerek kontrol etmelisiniz.
Aşağıda Win98 SE ‘de yapılan bu işlemin ekran görüntüsü yer almakta. Farklı işletim sistemleri için benzer yollar izlenerek paralel port adresi belirlenebilir.
Resim 2
Bu adresi kontrol ettikten sonra sonra yapmamız gereken diğer yazmaçlar olan STATUS ve CONTROL ‘un adreslerini belirlemek. Bu ise;
STATUS adresi = DATA adresi + 1
CONTROL adresi = STATUS adresi + 1
işlemleri ile belirlenir. DATA = 0378h için hesaplama yaparsak ;
STATUS = 0378 + 1 = 0379h
CONTROL = 0379 + 1 = 037Ah olur.
Şimdi de tek tek 25 pinin ne iş yaptığını gösteren bir tablo verelim ardından DATA, STATUS ve CONTROL yazmaçlarını inceleyelim.
Resim 3
Resim 4
LPT portu printer ile Pc arasında iletişim için tasarlandığından pinler, gereken görevleri yerine getirebilmek için bu yönde özelleştirilmiştir (Paper End, Auto Feed vs). Fakat biz portu tamamen farklı bir amaç için kullanacağımızdan bu bilgilerin bizim için fazlaca bir önemi yok, sadece genel bilgi olsun diye verdim.
Yazmaçları inceleyelim;
DATA :
Bu yazmaç 8 bitlik çıkış olarak kullanılan bir yazmaçtır. Bu yazmaçın her bir bitinde lojik 1 değeri analog olarak +5V, lojik 0 değeri ise analog olarak 0 V a eşittir (TTL seviyesi). Bir başka deyişle D1 biti “1” ise gerçek dünya için bu değer aslında “+5V”, “0” ise “0V” tur.
Bu yazmacı kullanarak 3 farklı bite bağlı 3 farklı cihazı kontrol ettiğimizi ve cihazların sırası ile D0 (1. cihaz), D3 (2.cihaz), D7 (3.cihaz) pinlerine bağlandığını farzedelim. Bu 3 cihazdan 1. ve 3. sine lojik “1” , 2. sine lojik ”0” sinyali yollayacağımızı düşünürsek,
8 bitlik DATA yamacına ;
Resim 5
değerini yüklememiz gerekir. Bu değer de 89 Hex veya 137 Decimal değerlerine eşittir.
STATUS :
Bu yazmaç da aslında 8 bitlik bir yazmaçtır fakat yanlızca üst 5 bit kullanılmaktadır. Bu yazmaç aracılığı ile portu, Pc’ye veri girmek için kullanabiliriz. Normalde STATUS pinlerinde lojik 1 sinyali vardır. Biz veri girişi yapmak istediğimizde, pinlere buton bağlayarak bu pinleri toprağa yani 0 V a çekerek pinde lojik 0 sinyali oluşmasını sağlarız. Bu yazmaç için dikkat edilmesi gereken S7 pininin terslenmiş (inverted) olmasıdır. Bunun anlamı eğer bu pini toprağa buton ile çekersek yazmaçda bu pini temsil eden bitte lojik 0 sinyali yerine lojik 1 sinyalinin oluşmasıdır. Yazılım ile bu yazmaçdan değer okunurken buna dikkat edilmesi gerekir, ya bu bit en baştan maskeleme yolu ile tekrar tersi alınarak diğer pinlerle aynı konuma getirilir yada okunan değer bu özellikler dikkate alınarak yorumlanır.
Yazmaç Adresi : DATA adresi + 1
Resim 6
CONTROL :
Bu port da 8 bitliktir fakat düşük 4 biti kullanılır. Veri girişi ve çıkışı için kullanılabilir. Veri gönderme ve alma işlemleri yukarıda bahsedilenlerle aynı biçimde gerçekleştirilir. Dikkat edilmesi gereken yazmaca ulaşılırken kullanılan adres ve yazmaç içinde terslendirilimiş pinlerdir. Bu pinlerde (C0,C1,C3) veri gönderilmediğinde C2’nin aksine +5V vardır, veri gönderildiğinde ise sinyal 0V’a çekilir.
Yazmaç Adresi : STATUS adresi + 1
Resim 7
Paralel port görüldüğü üzere basit yapısı ile karmaşık olmayan uygulamalarda iletişim için en ideal seçenektir. Bu projemizde başlangıç için 1 pin kullanarak sadece veri çıkışı yapacak ve tasarladığımız "oda lambasını açma - kapama devresi"ni kontrol edeceğiz.
DONANIM
Devre olarak çok basit bir transistör - röle anahtarlama devresi kullanacağız. Önceki projemizden hatırlayacağınız röle kontrol devresini aynen bu projeye uyarlayabiliriz.
Resim 8
Devrede dikkat edilmesi gereken beslemelerdir. Devrenin DC beselemesinin toprağı ile paralel portun toprak pinlerinden biri (18-25) birbirine bağlanmalıdır. DC besleme için harici bir kaynak (adaptör vs.) kullanılabileceği gibi, Pc’lerin kasalarındaki güç kaynakları da kullanılabilir (Hdd, CD sürücü gibi cihazlara giden besleme kablosunda siyah olan uç GND (toprak) sarı olan uç ise 12V’tur) . Lambanın beslemesi ise bildiğimiz 220 V’luk şehir cereyanıdır. Bu cereyan için fazladan birşey yapmanıza gerek yok, sadece başta yaptığımız uyarılara dikkat ederek, sigortalar kapalıyken, anahtarda cereyan yokken bağlantıları yapacaksınız. Diyot, röle ve transistör ile ilgili bilgiler vermiyorum zaten bunan önceki projelerin asıl amacı bunların kullanımı hakkında size bilgiler vermekti. Sadece BC337 transistörün pin bağlantılarına ihtiyaç duyacaksınız onu da aşağıda verdim.
Resim 9
Paralel port ile olan bağlantı için de ya bir yazıcı veya laplink kablosu edinip onu feda edeceksiniz, ya da zor ama daha ekonomik yolu seçip bir LPT konnektörü alıp tek tek uçlarına kablo lehimleyeceksiniz. Ben elimde hale hazırda bulunduğundan lapink kablosu kullandım. Yanlız lapink kablosu kullanırsanız dikkat etmeniz gereken bir uçtaki düşük bitli data bitlerinin diğer uçtaki status bitlerine sırasıyla bağlı olmasıdır. Bu tip kablolar 2 Pc nin iletişimi için kullanıldığından bir Pc'deki DATA çıkışları diğer Pc'nin STATUS girişlerine gitmektedir. O yüzden aşağıda vereceğim tabloya göre pinleri devreye bağlarsanız , iletişim sorunu yaşamazsınız.
Resim 10
Paralel porta kabloyu takareken veya çıkartırken devrede gerilim olmadığından, devreyi kurarken hata yapmadığınızdan, portta kısa devre olmadığından emin olun, yoksa portunuzu uçurabilirsiniz.
Baskı Devre Şeması
Programın Kodları
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, Buttons, jpeg, StdCtrls, ToolWin, ComCtrls,
DB, DBCtrls, ADODB;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
SpeedButton3: TSpeedButton;
DateTimePicker1: TDateTimePicker;
Label1: TLabel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
Timer1: TTimer;
SpeedButton5: TSpeedButton;
Timer2: TTimer;
ScrollBar1: TScrollBar;
Edit2: TEdit;
Edit3: TEdit;
MainMenu1: TMainMenu;
Dosya1: TMenuItem;
ayarlar1: TMenuItem;
Haknda1: TMenuItem;
k1: TMenuItem;
Elence1: TMenuItem;
Yardm1: TMenuItem;
Timer3: TTimer;
Memo1: TMemo;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label2: TLabel;
Label3: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
alver: TADOQuery;
DBCheckBox1: TDBCheckBox;
alverkuladi: TStringField;
alversifre: TStringField;
procedure CheckBox1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure dizile;
procedure OpenClose;
procedure Timer2Timer(Sender: TObject);
procedure k1Click(Sender: TObject);
procedure Haknda1Click(Sender: TObject);
procedure ayarlar1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure Edit5Change(Sender: TObject);
private
{ Private declarations }
public
Port_Adr: string;
serkan:string;
end;
const kardizi:array[1..189]of integer=
(4, 0, 0, 0, 0,0,0, {Boşluk 32}
6, 252, 18, 18, 18, 252, 0, {A 64}
6, 130, 254, 146, 146, 108, 0,{B}
6, 124, 130, 130, 130, 68, 0, {C}
6, 130, 254, 130, 130, 124, 0,{D}
6, 254, 146, 146, 146, 130, 0,{E}
6, 254, 18, 18, 18, 2, 0 , {F}
6, 124, 130, 146, 146, 114, 0,{G 71}
6, 254, 16, 16, 16, 254, 0, {H}
4, 130, 254, 130, 0,0,0, {I}
5, 64, 128, 128, 126, 0,0, {J}
6, 254, 16, 40, 68, 130, 0, {K}
5, 254, 128, 128, 128, 0,0, {L}
6, 254, 4, 24, 4, 254, 0 , {M 77}
6, 254, 4, 8, 16, 254, 0 , {N}
6, 124, 130, 130, 130, 124, 0,{O}
5, 254, 18, 18, 12, 0,0, {P}
6, 124, 130, 162, 66, 188, 0, {Q}
6, 254, 18, 50, 82, 140, 0, {R}
6, 68, 138, 146, 162, 68, 0, {S 83}
6, 2, 2, 254, 2, 2, 0, {T}
6, 126, 128, 128, 128, 126, 0,{U}
6, 14, 48, 192, 48, 14, 0, {V}
6, 127, 128, 112, 128, 127, 0,{W}
6, 198, 40, 16, 40, 198, 0, {X}
6, 6, 8, 240, 8, 6, 0, {Y}
6, 194, 162, 146, 138, 134, 0);{Z 90}
var
Form1: TForm1;
porta:array[1..1500]of integer;
sira,sayac:integer;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure tform1.dizile; (*copyright Serkan Alver*)
label sona;
var i,j,karakter:integer;
function ascbul(giren:wideString ):integer;
var i,sonuc:longint;
begin sonuc:=0;
for i:=1 to 999 do if wchar(i)=giren then sonuc:=i;
ascbul:=sonuc;
end;
begin
form1.memo1.text:=uppercase(form1.memo1.text);sira:=0;
for i:=1 to length(form1.memo1.text) do begin
karakter:=ascbul(copy(form1.memo1.Text ,i,1));
if karakter=32 then karakter:=64;
if not((karakter>63) and (karakter<91)) then goto sona;
for j:=1 to kardizi[(karakter-64)*7+1] do begin
sira:=sira+1;
porta[sira]:=kardizi[(karakter-64)*7+1+j];
end;{j'nin endi}
sona:end; {i'nin endi}
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked = True Then
begin
Label1.Enabled := True;
DateTimePicker1.Enabled := True;
DateTimePicker1.Time := Time;
SpeedButton5.Enabled := True;
end
else
begin
Label1.Enabled := False;
DateTimePicker1.Enabled := False;
If SpeedButton5.Caption = 'Otomatik çalıştırmayı durdur' Then
begin
SpeedButton5.Click
end;
SpeedButton5.Enabled := False;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
sayac:=1;
DateTimePicker1.Time := Time;
end;
procedure TForm1.OpenClose;
begin
if SpeedButton3.Caption ='Çalıştır' then begin
SpeedButton3.Font.Color := clRed;
SpeedButton3.Caption:='Durdur';
image1.Visible :=false;
memo1.Enabled := false;
dizile;
timer2.Enabled :=true;
timer3.Enabled :=true;
end
else begin
memo1.Enabled := true;
SpeedButton3.Font.Color := clgreen;
SpeedButton3.Caption:='Çalıştır';
image1.Visible :=true;
timer2.Enabled :=false;
timer3.Enabled :=true;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(Time);
If TimeToStr(DateTimePicker1.Time) = Label1.Caption Then
If SpeedButton5.Caption = 'Otomatik çalıştırmayı durdur' Then
SpeedButton3.Click;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
If SpeedButton5.Caption = 'Otomatik çalıştırmayı başlat' Then
begin
SpeedButton5.Caption := 'Otomatik çalıştırmayı durdur';
SpeedButton5.Font.Color := clRed;
DateTimePicker1.Enabled := False;
end
else
begin
SpeedButton5.Caption := 'Otomatik çalıştırmayı başlat';
SpeedButton5.Font.Color := clGreen;
DateTimePicker1.Enabled := True;
end;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Timer2.Interval :=ScrollBar1.Position ;
alver.Close;
alver.SQL .Clear;
alver.SQL.Add('update sayi set enson=artir where sayi=5');
alver.Parameters.ParamByName('artir').Value :=scrollbar1.Position ;
alver.ExecSQL ;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var dat,datarti:integer;
begin
timer3.Enabled :=false;
dat:=porta[sayac];
datarti:=porta[sayac]+1 ;
edit2.Text:=inttostr(dat) ;
edit3.Text:=inttostr(datarti)
;
portwritel(StrToInt('$' + Port_Adr), dat);
portwritel(StrToInt('$' + Port_Adr), datarti);
sayac:=sayac+1;
if sayac>sira then begin
sayac:=1;
end;
end;
procedure TForm1.k1Click(Sender: TObject);
begin
Application.MessageBox('Çıkmak İstediğinizden eminmisiniz?','Bilgi',mb_iconinformation+mb_ok);
openclose;
form1.Close;
end;
procedure TForm1.Haknda1Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
Form3.Show;
end;
procedure TForm1.ayarlar1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
OpenClose;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
var dat,datarti:byte;
begin
sayac:=1;
dat:=0;
datarti:=1 ;
portwritel(StrToInt('$' + Port_Adr), dat);
portwritel(StrToInt('$' + Port_Adr), datarti);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((ssAlt in Shift) and (Key = VK_F4)) then
Key := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Width :=345;
form1.Height :=175;
Timer2.Interval :=ScrollBar1.Position ;
KeyPreview := true;
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
edit4.Text:=inttostr( length(form1.memo1.text));
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
if (edit5.Text <>'') and (edit6.text <>'') then speedbutton1.Click
else Application.MessageBox('Kullanıcı Adı ve şifrenizi Girmediniz','Uyarı',mb_iconinformation+mb_ok);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (edit5.Text<>'')or(edit6.Text<>'')then begin
if alver.RecordCount <> 0 then begin
if (edit5.Text=alverkuladi.AsString)and(edit6.Text=alversifre.AsString) then
begin
form1.caption:='Bilgisayar Kontrollü Kayan Yazı versiyon 1.1' ;
form1.Width :=550;
form1.Height :=375;
edit2.Visible :=true;
edit3.Visible :=true;
edit4.Visible :=true;
datetimepicker1.Visible :=true;
groupbox1.Visible :=true ;
checkbox1.Visible :=true;
label1.Visible :=true;
speedbutton5.Visible :=true;
label2.Visible :=true;
label3.Visible :=true;
memo1.Visible :=true;
scrollbar1.Visible :=true;
speedbutton3.Visible :=true;
dosya1.Visible :=true;
ayarlar1.Visible :=true;
elence1.Visible :=true;
image1.Visible :=true;
image2.Visible :=true;
speedbutton1.Visible:=false;
dbcheckbox1.Visible :=false ;
speedbutton2.Visible:=false;
edit5.Visible :=false;
edit6.Visible :=false;
label2.Visible :=false;
label3.Visible :=false;
form1.BorderStyle:=bstoolwindow;
end else begin
Application.MessageBox('Lütfen Şİfrenizi Giriniz','Şİfre Girilmedi',mb_iconinformation+mb_ok);
end;
end else begin
Application.MessageBox('Kullanıcı Adı Veya Şifre Yanlış','Uyarı i',mb_iconinformation+mb_ok);
end;
end else begin
Application.MessageBox('Lütfen Kullanıcı Adı ve Şifrenizi Giriniz','Uyarı',mb_iconinformation+mb_ok);
end;
end;
procedure TForm1.Edit5Change(Sender: TObject);
begin
alver.Close;
alver.SQL .Clear;
alver.SQL.Add('Select * From sifre');
alver.SQL.Add('Where kuladi like:K');
alver.Parameters[0].Value:=edit5.Text;
alver.Open;
end;
end.
Sonuç
Bu proje ile bilgisayar kontrolü ile her türlü elektronik devrenin kontrol edile bileceğini Bilgisayardan devrelere veri gönderme mantığı ve çalışma prensibini öğrendik.
Bu projenin kolonları sonsuza kadar çoğaltıla bilir. Proje sayesinde ilerdeki iş imkanları için iyi bir referans olabilmektedir.
Bu proje sayesinde araştırarak her şeyin yapılabileceğini projede kullandığımız programı yazmış olduğumuz Delphi dillini geliştirerek her türlü programın yazıla bileceğini öğrendik.
Kaynaklar
1. Elektronik kitaplar
2. Internet Siteleri
3. Daha önce yapılmış kayan yazı projeleri
4. Sprint-Layout 3.0 Çizim Programı
5. Delphi 7.0
http://www.beysehirsurucukursu.com/beysehirchat/proje
web sitemden programdaki değişiklikleri al bilir baskı devre şemasını programın çalışır halini indire bilirsiniz?
http://www.beysehirchat.com sizin siteniz