Elektronik / Elektronik Kaynakları/

PC ile robot kolu kontrolü step motorlar c++ yazılım

Sponsorlu Bağlantılar

Hazırlayanlar: Kemal GÜVENLİ – Sami ÇULHA Tam bir bilgi deposu bir çok konuda detaylı Türkçe bilgiler bulunuyor step motorlar paralel port ve c++ yazılım hakkında bir çok bilgi var ayrıca paralel port üzerinden çalışan bilgisayarınıza kuracağınız robot kol kontrol programıda paylaşılmış. Emeği geçen hazırlayan kişilere teşekkürler

Günümüzde seri ve hatasız üretim önemli hale geldi , bu sebeple robotlara birçok alanda ihtiyaç duyuyoruz. Endüstri, sağlık ve bilim bu alanlara örnek gösterilebilir.

Sağlık sektöründe robot kullanımı gelişti. Son zamanlarda doktorlar robotları kullanarak internet üzerinden hastalara operasyon yapabilmektedir.

Bu sebeplerden ötürü biz de bir robotic kol yapmaya karar verdik. Robot kolumuz 4 eksene sahip ve internet üzerinden kontrol edilebilir bir robotik uygulama oldu. Robot kolu kontrol edebilmek için MS Visual Basic programlama dili ile bir program yazdık. Adını RoboKOL koyduk. RoboKOL üç farklı kontrol moduna sahip (bar, otomatik ve joystick kontrol modları). Bu uygulama istemci-sunucu mantığıyla çalışmaktadır.

Tezimizde bir robotic uygulama (robot kol) gerçeklemeye çalıştık.

BÖLÜM 1. PARALEL PORT

Portun Tanımı : “Paralel port” nedir? Bilgisayar evreninde port, mikroişlemcinin, ya da CPU’nun, diğer bilgisayarlarla veri alışverişinde kullandığı bir sinyal hatları kümesidir. Portun tipik işlevi yazıcıyla,modemle, klavyeyle, ekranla –veya sistem belleği dışındaki herhangi bir aygıt ya da birimle- iletişimidir. Çoğu bilgisayarın portu dijitaldir. Yani her sinyal, veya bit, ya 0 ya da 1’dir. Paralel port, bir defada birden fazla bit transfer edebilir. Oysa bir seri port bir defada ancak bir bit transfer yapabilir- bununla birlikte, her iki yönde de transfer yapması mümkündür.

Biz belli tipte bir paralel portu ele alacağız. Bu port hemen her PC’de, yani IBM uyumlu kişisel bilgisayarda mevcuttur. Paralel port, RS-232 seri portla birlikte, PC iletişiminin çekici gücüdür. Yeni PC’lerde SCSI , USB ve IRDA gibi yeni portlar da yer alabilmektedir. Ancak paralel port, kapasitesi, esnekliği ve her PC’de bulunur olma özelliğiyle hala en popüler olanları arasındadır.

pc paralel port lpt

Paralel Port Düzeni

Paralel port bilgisayarın en kolay programlanabilir portudur. 25 pinden oluşmaktadır. Bu pinler üzerinde DATA, STATUS, CONTROL adında 3 tane port vardır. Bu pinlerden her hangi bir tanesinin “1” yani YÜKSEK olması durumu, o pinden okunacak voltajın +5 Volt olması anlamına gelir. “0” olması ise DÜŞÜK durumunu yani 0 Volt olduğunu gösterir. Buradan da neden ikilik sayı sisteminin kullanıldığı anlaşılmaktadır.

Bilgisayar paralel porta ulaşılabilmesi için porta bir adres atamıştır. Bu adresi bulmak için Denetim Masasından Sisteme, oradan da aygıt yöneticisine girilir. Portlara (Bağlantı Noktaları) gelinir. LPT portunun Kaynaklarından Giriş-Çıkış aralığındaki değerin ilk kısmındaki değer yazıcı portunun adresidir.

Paralel Port Duzeni

0378 adresi için bu değer alt portlara aşağıdaki şekilde dağılır,

DATA portu h0378
STATUS portu h0378 + 1 yani h0379
CONTROL portu ise h0378 +2 yani h037A olur.

Paralel port temel olarak printer bağlantısı için yaratılmıştır. Her pinin bilgisayarın yazıcı ile anlaşmasını sağlayan bir görevi vardır. Gerçekleştirilecek uygulamalarda çok gerekli olmayacak fakat yinede bilinmesinde fayda vardır. Aşağıda ki tabloda paralel port pinlerindeki sinyalleri ve giriş çıkış yönleri görülmektedir.

paralel port sinyal data

Data Portu

Paralel port üzerinde DATA portuna ait 8 adet (D0-D7) pin vardır. Bu port paralel portunuzun taban adresini kullanır. 8 tane DATA pini olduğundan 8 Bitlik veri çıkışı almak mümkündür. Yani bu 8 tane pinin “1” yada “0” değerlerini alması ile veri akışı sağlanmış oluyor. DATA portu normalde veri çıkışı için kullanılmaktadır. Fakat bazı özel ayarlar yapılarak, eğer bilgisayar da destekliyorsa veri girişi yapılması da mümkün olabilir.

Belirtilen şekilde DATA portundan 8 bitlik veri çıkışı alınabilir. DATA portuna hiçbir veri gönderilmediği zaman ki değeri “00000000” dır. Dikkat edilirse 8 tane “0” vardır. Örneğin data portuna 25 değeri gönderilsin. 25 değerinin ikilik sayı sisteminde karşılığı “00011001” dir. Bu durumda D4, D3 ve D0 pinlerine karşılık gelen lojik değerler “1” olduğundan o pinler +5 Volt olacaktır. Aşağıda DATA pinine gönderilen bazı değerler ile hangi pinlerin “1” olacağını gösteren örnek bir tablo görülmektedir.

data portu

DATA pinine istediğimiz değerleri Visual Basic yada QBASIC altındaki OUT komutunu kullanarak göndermeniz mümkün. Komutun kullanım şekli aşağıdaki gibidir.

• OUT Adres, Veri

Adres değişkeni DATA portunun adresidir. Örneğin (&h0378). Veri değişkeni ise gönderilecek verinin 10 tabanına göre sayısal değerini içermelidir. Örneğin tüm data pinlerini +5 Volt yapmak için porta “11111111” değerine karşılık gelen 255 değerinin gönderilmesi yeterli olacaktır. Bu komutu Visual Basic altında kullanabilmek için inpout32.dll dosyasının proje ile aynı klasörde bulunması gerekmektedir. Bu dosyanın download kısmından çekilmesi mümkündür.

C ++ derleyicisinde ise bu komutun adı outportb ‘tur ve STDIO.H kütüphanesinde yer alır. Kullanım şekli ise aşağıdaki gibidir.

• outportb (Adres,Veri)

Status Portu

STATUS portu sayesinde, 15 – 13 – 12 – 11- 10 numaralı pinlerden, 5 bit sayısal giriş yapılabilir. STATUS portu paralel portun taban adresinin +1 fazlasında bulunmaktadır. Örneğin paralel portun taban adresi h378 ise STATUS portu h379 da bulunacaktır. Veri paralel portun şeklinde gözüktüğü gibi S7, S6, S5, S4, S3 pinlerinden yapılacaktır. Bu 5 pinlerden herhangi bir müdahale bulunmadan okunacak lojik değer “1” olacaktır. Eğer voltmetre ile bu pinlerdeki voltajı ölçülürse +5 Volt olduğu görülecektir. Bu pinlere bağlanacak butonlar ile pinler topraklanarak lojik değerlerinin “0” yapılıp bir nevi veri girişi gerçekleştirilmesi mümkündür. Fakat bu pinlerden S7, donanım tarafından tersindirilmiştir. Bunun anlamı o pinin toprağa çekildiği zamanki değerinin “1” olacağıdır.

STATUS portundaki veriyi okumak için Visual Basic ve QBASIC ‘teki INP komutunun kullanım şekli,

• inp (taban_adres+1)

C ++ derleyicisinde ise bu komutun adi inportb ‘tur ve STDIO.H kütüphanesinde yer alır. Kullanım şekli ise aşağıdaki gibidir.

• inportb (taban_adres+1)

Control Portu

CONTROL portunu hem giriş hem de çıkış için kullanmak mümkündür. Paralel port üzerinde CONTROL portununa ait 4 tane pin vardır. Bu pinlerden C0,C1,C3 pinleri tersinmiştir. Yani tersinmiş olan bu pinlere veri gönderilmediği zaman durumu “1” dir. Bu pinlerden bir tanesine veri gönderildiğinde o pinin değeri “0” olacaktır. DATA ve STATUS pinlerinin yetmediği zamanda CONTROL portları ile çıkış yada giriş almak mümkündür. Programlama sekli STATUS ve DATA portları ile aynıdır.

Control Portlarının bir farklı özelliği C5 bitini kullanarak biderectional port özelliğine sahip olan paralel portlarda data registerındaki pinleri giriş/çıkış yapabiliriz. Daha önce de anlatıldığı gibi standart olarak data registerı çıkış(output) olarak kullanılır.Fakat bidirectional özelliği olan portlarda bu pinler giriş olarak ta kullanılabilir.(Not:Bidirectional portlarda data register’ını ya çıkış ya giriş olarak kullanabilirsiniz.Yarısı giriş yarısı çıkış olamaz)

Data Register Giris cikis IO Input Output

Yazılan bit abcdefgh ise:

Data Register Giris cikis IO Input Output 2

I/O : a,b, d biti kullanılmaz c biti 0 ise data registerına bağlı pinler çıkıştır, c biti 1 ise data register’ına bağlı pinler giriştir.

Paralel Porttan Veri Çıkışı

Bilgisayara veri girişi ve çıkışı port uygulamalarının temeli kabul edilir. Yapılacak robotu yönetebilmek için bunun nasıl olduğunu bilmek gerekir. Robot tasarlama kısmına gelene kadar, paralel portu programlamanın iyi bir şekilde öğrenilmesi gereklidir.

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 yan yana gelmiş şekline “1 BYTE” diyoruz.

Paralel port bilgisayarın en kolay programlanabilen portudur. Üzerinde 25 Pin vardır 8 BIT veri aktarabilir ve 5 Volt ile çalışır ve tabi ki 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. Bu sekiz pinin dışında aşağıda TOPRAK olarak gösterilen pinlerin dışındaki kısmın kullanılması gerekecek.

Paralel Porttan Veri cikisi

Yukarıdaki bu 8 pin özel bir durum olmadığı sürece değerleri “0” dır. Bu pinlerden istenileni “1” durumuna getirilebilir. Paralel port üzerindeki bir data pininin “1” olması o pinin +5 Volt olması anlamına gelir. Bilgisayar sistemlerinde temel rakamlar bunlar olduğundan, yazılan diğer veri ve adresler bilgisayar içerisinde ikilik sayı sisteminde işlenir.

paralel port uclari

Temel amaç her pine önce bir direnç, peşine de ledi bağlamaktır. İlk önce direnç kullanılmasının sebebi ise kullanılacak 1.5 Voltuk ledin paralel porttan gelen 5 Voltluk akım sebebiyle arızalanmamasıdır. Yapılacak bağlantı her data pini üzerinde örnek programın ekranındaki gibi olmalıdır.

Devre şu şekilde çalışacaktır; Paralel port üzerindeki data pinlerinden bir tanesi “1” yapılacak, dolayısıyla o pinin elektriksel değeri +5Volt olacaktır. Buradan çıkan 5 Volt direnç üzerinden geçirilerek üzerindeki akımın değeri ledi bozmayacak değere düşürülür ve bu da led diyotun (+) ucuna bağlanır. Ledin diğer ucu da TOPRAK kısmına bağlanarak devre kapanır.

Aşağıdaki tabloda porta gönderilen 8 bitlik hangi veri ile hangi ledlerin yandığı görülecektir.

veri d

Paralel Porta Veri Girişi

Şimdi paralel porta bağlanılan 5 tane buton ile bilgisayara sayısal veri girişi yapılacaktır. Paralel porttan veri girişi STATUS yada CONTROL portuna ait pinlerden gerçekleştirilebilir. Hatta bazı ayarlamalar yapılarak, eğer bilgisayar da destekliyorsa, DATA pinlerinden giriş yapılması da mümkün olabilir. STATUS portundan veri girişi incelenecektir.

STATUS portu sayesinde, 15 – 13 – 12 – 11- 10 numaralı pinlerden, 5 bit sayısal giriş yapılabilir. STATUS portu paralel portun taban adresinin +1 fazlasında bulunmaktadır. Örneğin paralel portun taban adresi h378 ise STATUS portu h379 da bulunacaktır. Veri paralel portun şeklinde gözüktüğü gibi S7, S6, S5, S4, S3 pinlerinden yapılacaktır. Bu 5 pinlerden herhangi bir müdahale bulunmadan okunacak lojik değer “1” olacaktır. Eğer voltmetre ile bu pinlerdeki voltaj ölçülürse +5 Volt olduğu görülecektir. Bu pinlere bağlanılacak butonlar ile pinler topraklanarak lojik değerleri “0” yapılıp bir nevi veri girişi gerçekleştirilmiş olacaktır.

STATUS portundaki veriyi okumak için INP komutu kullanılacaktır. Kullanım şekli;
inp(taban_adres+1) şeklindedir.

test devresi

Paralel porta veri giriş işlemi, temel olarak aynı olsa da veri çıkışından biraz daha karışıktır. Bunun sebebi STATUS portunda bulunan sinyallerden birinin donanım tarafından terslenmiş olmasıdır. Şimdi verinin 8 bit olarak okunduğunu varsayalım. Bu durumda STATUS portundaki binary (ikilik sisteme karşılık gelen) değer, “11111111” olacaktır. Bu da 10 tabanında 255 ‘e denk gelmektedir. Fakat bu porttan veri okunduğunda bambaşka bir değer olan 127 ‘ ye rastlanır. Dikkat edilirse 127 değeri binary olarak okunursa “01111111” değeri elde edilir. İşte buradaki 127 değerinin okunmasının sebebi pinlerden bir tanesi olan S7’nin terslenmiş olmasıdır. Yani S7’ye karşılık gelen pine veri yollandığında o pinin değeri “1” olacaktır. Diğerlerine veri yollandığında ise değerleri “0” olacaktır. Verinin 8 bit olarak okunduğu varsayılmıştı. İşte okunulan değerin son 3 biti esasında okunmuyor. Yani 127 değerinin okunabilir karşılığı “01111xxx” olacaktır. Buradaki x’lerin bir değeri yoktur. İptal edilmiş bitleri göstermek için kullanılmıştır. Gerçekte okunan değer “01111” olacaktır. Bu da STATUS portuna veri girişinin 5 bit olduğunu bir kez daha gösterecektir.

Daha rahat işlem yapabilmek için tersinmiş olan S7 bitinin yazılım olarak tekrar tersindirilmesi gerekmektedir. Yani porta hiç bir müdahalede bulunmadan okunmak istenilen değer “11111xxx” olmalıdır. Bu durumda en baştaki bitin tersindirilmesi gerekecektir. Bu işlemi yapmanın en kolay yolu Xor kullanmaktır.Xor, Exclusive-Or operatörü bir byte içerisindeki bir veya daha fazla biti tersindirmek için kullanılabilecek bir metottur. XOR operatörünün BASIC ‘te kullanımı aşağıdaki gibidir;

(okunan_byte) XOR (maske_byte)

Burada maske değerinde tersindirilmek istenilen bitler için “1” , dokunulmayacak bitler için “0” yazılmalıdır. Örneğin “11100111” değeri “11111110” maskesi ile XOR lanırsa, elde edilen değer, “00011001” olacaktır. Paralel porta gönderilecek byte verisini “10000000” değerinin onluk tabanındaki karşılığı olan “128” ile XOR lanacaktır. Böylece okunulan verinin en başta bulunan S7’den gelen kısmı “1” ise “0”, “0” ise de “1” olacaktır. Sonuçta taban adresi h378 olan paralel porttan veri okumak için yazılması gereken satır aşağıdaki gibi olacaktır;

Değer = inp(&h379) XOR 128

Aşağıdaki tabloda hangi butonlara basıldığında, yukarıdaki komutla hangi verinin okunabileceği gösterilmektedir.

buton komut veri

Kullanılmayan S0,S1 ve S2 değerleri genelde “1” olarak gelmektedir fakat bazen bu değişebiliyor. Eğer porttaki bu değerler değişik ise farklı bir sonuç elde edilebilir. Esasında bu veriyi XOR’lamak zorunluluğu yoktur. Bu sadece hesaplamalarda ve mantıkta biraz kolaylık sağlayacaktır. Önemli olan okunan verinin butona basıldıkça değişmesidir.

  • emre

    hocam bu kadar güzel bir kaynağı paylaştığınız için gerçekten yürekten teşekkür ediyorum.

  • Cengiz Guven

    Yaptığın ve paylaştığın projeye göz attım. Hocam bir çok kaynaktan yararlanarak toparlamışsın emeğin için tşk ederiz. Benim gibi bu işe merak sarmış ve yeni başlayan arkadaşlar için büyük bir imkan. Çok Tşk ediyorum tekrar. Izmir/ Bornova

  • kemal guvenli

    oldukça basit yerine kullanımı oldukça basit desek:)

  • MUSTAFA ( azimci_55@hotmail.com )

    Emeğe saygı hocam ilerleyen günlerde size ulaşma imkanı bulabilirim inşallah ben bitirme tezi olarak aldım bu konuyu ve suan için pek fazla bilgiye sahip değilim iyi günler

  • atakan

    hocam emeginize saglık teşekkur ederim

  • oem.upp,ram

    gerçekten güzel ama benim merak ettigim kendi bilgisayarımızda kac tane acık port var ve bunları nasıl buluruz trojenlerdemi portları acıyor bunları merak ediyorum birde kendimizde portları acacak bir prg yazabilirmiyiz bu yazdıgımız portlar bir link yardımı ile acabilirmi veya virüslere takılırmı

  • selsan

    elinize beyninize sağlık…

  • erkut

    hocam gayet anlaşılır ve basit anlatmışsın.
    Elinize sağlık.

  • kzm

    gerçekten çok güzel bir çalışma emeğe saygı

  • Koral Orel

    hocam emeğinize sağlık Allah razı olsun uzun zamandır yazılarınızı takip ediyorum sayenizde 1 7D sinema (8kişilik) 1 cnc router (250×180) imal ettim şimdi sayenizde üretim bantı kurmayı hedefliyorum