![]() |
|
|||||||
| Üye Ol | SSS | Sxe indir | Sosyal Gruplar | Takvim | Resim Galerisi | Etiketler | Bütün Forumları okunmuş kabul et |
Üniversiteler bölümünde Analoga Giriş ve Basit Robot Gözü konusu , Tüm elektronik hobi okurlarına merhaba. Geçen ay paralel port üzerinden DC motor kontrolünü anlatacağımı söylemiştim. Fakat ondan önce Sayısal/Analog veri dönüşütürücülerine değinmek gerektiğini farkettim. En azından bir DC motor hız kontrol devresi yapabilmemiz için, böyle bir dönüşüme ihtiyacımız olacaktır. Bu ...
![]() |
|
|
LinkBack | Konu Seçenekleri |
|
|
#1 (permalink) |
|
PeAcE
![]() Giriş: 31-03-2007
Yaş: 19
Mesajlar: 3.575
Rep Puanı: 1759
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() E-Güven: (4/100)
|
Analoga Giriş ve Basit Robot Gözü
Tüm elektronik hobi okurlarına merhaba. Geçen ay paralel port üzerinden DC motor kontrolünü anlatacağımı söylemiştim. Fakat ondan önce Sayısal/Analog veri dönüşütürücülerine değinmek gerektiğini farkettim. En azından bir DC motor hız kontrol devresi yapabilmemiz için, böyle bir dönüşüme ihtiyacımız olacaktır. Bu ay analog sinyalleri sayısal veriye dönüştürmekten bahsedeceğiz ve robotların etrafındaki cisimleri algılamasını sağlayacak basit bir robot gözü uygulamamız olacak. Bizim bu güne kadar uğraştığımız sinyallerin hepsi sayısaldı. Yani sinyalin “1” yada “0” olması durumunu inceliyorduk. Dolayısı ile lojik voltajımızın değeri, “1” olduğunda +5 Volt, “0” olduğunda ise 0 Volt oluyordu. Analog sinyallerde ise bu voltajın değeri 0 ile 5 volt arasında değişebilir. Bir ADC ile (Analog – Digital Converter) fiziksel değerleri ( ısı, basınç, kütle, ışık yoğunluğu ) sayısal değerlere çevirebilirsiniz. Böylece PC ‘nizi dış dünyayı izleme aracına çevirebilirsiniz. Daha sonra bu ölçümler sonucunda üzt düzey kararlar vermeye programlayabilirsiniz. Örneğin oda sıcaklığı belli bir dereceye ulaştığında PC ‘nizle ısıtma sistemini kapatabilirsiniz. Bir sıcaklık sensörü, elde ettiği sıcaklığın sonucunda bize 0-5 volt arasında bir değer verebilir. Biz de bu değer üzerinden gerekli dönüşümü yaparak hangi voltajın hangi sıcaklığa denk geldiğini hesaplayabilir ve işlemler yapabiliriz. Herhangi bir ölçüm sonucunda elde edeceğimiz voltaj eğer 5 volt ise bu voltajı ADC ile sayısal veriye dönüştürdüğümüzde elde edebileceğimiz değer 255 olacaktır. Kısacası 0 ile 5 volt arasındaki analog değerler, 8-bitlik sayısal veriye dönüştüğünde 0-255 arasında değerlere denk gelecektir.Analog-Dijital dönüşüm yapılabildiği gibi bunun tam tersini de yapmak mümkündür. Örneğin DATA pinlerine göndereceğimiz 0-255 arası sinyaller ile 0-5 Volt arasında bir voltaj gerilimi elde etmeniz mümkün olabilir. Kullandığınız ADC ve DAC (Digital-Analog Converter) tipine göre analog giriş değerleri değişebilir. Örneğin 255 sayısal sinyali ile +12 volt elde edebilmenizde mümkün olabilir. Daha önceki uygulamalarımızda paralel portun STATUS pinlerini kullanarak bir tür veri girişi gerçekleştirmiştik. Bu ay ki uygulamamızda paralel portu kullanarak ilk gerçek veri girişini gerçekleştireceğiz. Paralel portun DATA pinlerini bugüne kadar sadece veri çıkışı için kullandık. Yeni teknolojiye sahip paralel portlarda bu DATA pinlerini 8-Bitlik veri girişi için kullanmata mümkündür. Bu işlemi gerçekleştirebilmek için ana kartınızın BI-DIRECTIONAL port tipini desteklemesi gerekmektedir. Bilgisayarınızın BIOS ayarlarına girdiğinizde, paralel port tipini değiştirmeniz mümkün olacaktır. DATA pinleri ile veri girişi yapabilmemiz için port tipinizi BI-DIRECTIONAL yapmalısınız. Bu güne kadar uygulamalarımızı hep paralel port üzerinde gerçekleştirdik. Fakat uygulamalar geliştikçe bu port bize yetersiz kalmaya başlayacak. Öyle uygulamalar olacak ki, hem 8-bit veri girişi hemde 8-bit veri çıkışını aynı anda yapmamız gerekecek. Bu sebeple, önümüzdeki ay, paralel port üzerinden çalışan 8255 programlama kitini tanıtacağım. Bu kit sayesinde, aynı anda 3 sayısal çıkış yada giriş yapmamız mümkün olacak. Bu kitin diğer bir faydası ise, gerçekleştirdiğimiz uygulamalarda oluşabilecek bir hata sonucu paralel portunuzu yakma riskinin önüne geçebilmemiz. Bu sayede uğrayabileceğimiz en büyük zarar en fazla bir kit parası kadar olacaktır. Bi-Directional paralel port ile veri girişi STATUS portundan farklıdır. STATUS portu ile girişi, pinin üzerindeki “1” lojik voltajı topraklayarak gerçekleştiriyorduk. DATA portları ile veri girişini ise, bu pinlere lojik voltaj göndererek gerçekleştirebiliyoruz. Bu yazımda ilk kez Visual Basic komutlarının dışında, C++ ve DELPHI komutlarından da bahsedeceğim. DATA portundan veri okumak için INP komudunu DATA portunuzun adresinde kullanmanız gerekmektedir.Çok basit olarak paralel porta veri göndermekten ve almaktan tekrar bahsetmek istiyorum. Paralel portunuza verilen adres üç alt porta şu şekilde dağılır. Örneğin paralel portunuzun taban (base) adresi h0378 olsun. Bu durumda; DATA portu h0378 STATUS portu h0378 + 1 yani h0379 CONTROL portu ise h0378 +2 yani h037A olur. Paralel port kontrolü için Visual Basic yada C++ kullanacağız. Visual Basic altında OUT komudunu yada C++ altındaki OUTPORTB kullanarak DATA portuna 0-255 arasında gönderdiğimiz sayısal değer ile istediğimiz data pinlerinin lojik değerlerini “1” yapabiliyoruz. Data pinlerinden bir tanesinin “1” olması o pinin +5 Volt olması anlamına geliyor. DATA portundan 8 bitlik veri çıkışı alabiliyoruz. DATA portuna hiçbir veri göndermediğimiz zaman ki değeri “00000000” dır. Dikkat ederseniz 8 tane “0” var. Örneğin data portuna 25 değerini gönderelim. 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. Bu ayki uygulamamızda ise Bi-Directional port desteği sayesinde DATA portlarındaki veriyi okuyacağız. Yani D4, D3 ve D0 pinlerine karşılık gelen pinlere +5 voltluk lojik voltaj uyguladığımızda, bu porttan okuyacağımız değer 25 olacaktı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öndermediğimiz zaman durumu “1” dir. Bu pinlerden bir tanesine veri gönderdiğimizde o pinin durumu “0” olacaktır. Diğer bir deyişle CONTROL pinlerinin düşük olan 4 bitine “1111” yazmanız halinde konnektördeki bitler “0100” olacaktır. Tersindirme olayına önceki sayılarımızda daha detaylı değinmiştik. C++ ile PORT GİRİŞ/ÇIKIŞ Komutları C++ altında veri giriş çıkış komutlarının kullanımı aşağıdaki gibidir. Bu komutları kullanabilmek için kütüphane dosyasını programınıza #include etmelisiniz. Veri göndermek için : OUTPORTB (port_adresi,byte) Veri almak için : Byte = INPORTB (port_adresi) DELPHI ve Assembly kullanımı ile PORT GİRİŞ/ÇIKIŞ Komutları {$R *.DFM} procedure portout(IOport:word;value:byte);assembler; asm xchg ax,dx //port'a değer göndermek out dx,al end; function portin(IOport:word):byte;assembler; asm mov dx,ax //port'taki değeri okumak için in al,dx end; Veri göndermek için : PORTOUT (port_adresi,byte) Veri almak için : Byte = PORTIN (port_adresi) Sayısal – Analog dönüştürücü (ADC) devresi : Devre için ihtiyacımız olan malzemeler; 1 x ADC0804 Analog sayısal dönüştürücü, 1 x 150 pF Kondansatör, 1 x 10mF Kondansatör (isteğe bağlı) 1 x 10K direnç, 1 x BP109 yada uyumlu foto transistör 1 x 1.5 Volt kalem pil Bir ADC entegresini programlamak oldukça kolaydır. Aynı Haziran sayısında anlattığım LCD panel kontrolüne benzer. ADC yi programlayabilmek için veriyi okuyacağımız DATA pinlerinin dışında, ADC nin RD ve RW pinlerini kontrol etmek için 2 tane CONTROL pinine, ERROR kontrolü içinde 1 tanede STATUS pinine ihtiyacımız olacak. Kullandığımız ADC0804, National Semiconductor firmasının yaygın olarak kullanılan analog-sayısal dönüştürücülerinden biridir.
__________________
Beni görmek demek, mutlaka yüzümü görmek demek değildir. Benim fikirlerimi benim duygularımı anlıyorsanız ve hissediyorsanız bu yeterlidir. Benim kuvvetim; benim size olan sevgim ve sizin bana olan sevginizdir... M.K. ATATÜRK
|
|
|
|