Forum TR
Go Back   Forum TR > Bilgi Bankası (Databank) (Ödev) > Üniversite Bilgileri > Mühendislik / Mimarlık / Peyzaj Mimarlığı
ForumTR'ye Reklam Vermek İçin Tıklayınız: network@frmtr.com
Cevapla
 
Konu Araçları
Eski 27-08-07, 09:07   #1 (permalink)
Ölüm Artık Daha Yakın...
 
Giriş Tarihi: 22-08-2007
Yer: mi Tek Kurşunda ?
Yaş: 16
Mesajlar: 3,874
Blog Mesajları: 7
Rep Puanı: 39607185
Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11
Rep Gücü: 396121
Varsayılan 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.
Mr.SaW çevrimdışı   Alıntı Yaparak Cevapla
Eski 27-08-07, 09:08   #2 (permalink)
Ölüm Artık Daha Yakın...
 
Giriş Tarihi: 22-08-2007
Yer: mi Tek Kurşunda ?
Yaş: 16
Mesajlar: 3,874
Blog Mesajları: 7
Rep Puanı: 39607185
Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11Mr.SaW Rütbe: Artı 11
Rep Gücü: 396121
Varsayılan C: Analoga Giriş ve Basit Robot Gözü


CONTROL portuna göndereceğimiz veriler ile ADC ‘yi şu şekilde programlıyoruz;

Önce CONTROL portuna “32” sayısal değerini göndererek, C0 pinini “0” pini yüksek yapıyoruz. Neden? Çünkü C0 pini donanım tarafından terslenmiştir. Dolayısı ile pine “0” gönderdiğimiz zaman o pin +5 volt oluyor. Sonuçta ilk işlem C0 pinine bağlı olan RD pinini yüksek yapmak oluyor. Ardından, “36” sayısal değeri ile de WR pinini de yüksek yapıyoruz. Böylece entegre ADC veri dönüşümü için ayarlanmış oluyor. Daha sonra dönüştürülmüş sayısal değeri okumak için C2 pini yüksek tutulurken, C0 pini düşük yapılıyor. Veri bu sırada okunuyor ve hemen ardından C0 tekrar yüksek yapılıyor.

Biraz karışık bir işlemmiş gibi gözüküyor fakat. Her zaman söylediğim gibi bu işleri kavrayabilmenin en kolay yolu bol bol uygulama yapmak. Okuyarak anlayamadığınız birçok kavramı uygulama sırasında anlamanız mümkün oluyor. Yani size söyleyeceğim, ben size sadece kapıları gösterebilirim. Kapılardan geçmek size kalıyor. Matrix filminde Morpheus, falcıya girmeden önce Neo ‘ya böyle söylemişti :-)

Örnek programlarımız, ADC ‘nin 6 ve 7 numaralı konnektörlerine uygulanan 0-5 volt arası değerlerin 0-255 arasındaki sayısal değerlerini ekrana yazdırmaya yarıyor. Örneğin bu analog çıkışlara birtane kalem pil bağladığınız zaman ekranda elde edeceğimiz değer 70-80 arasındadır. Gerçektende 5 volt için elde edilecek değer 255 ise, 1,5 Volt için ise yaklaşık değer tam dolu bir pil için 76 ‘dır.

ADC entegreleri oldukça hassastır. Yani ortamdaki voltajdan kolayca etkilenebilir. Elinizle analog girişlere dokunduğunuz zaman bile, ekrandaki sayısal değerde 1-2 derecelik bir artış meydana gelecektir. O bakımdan devreyi ortam voltajlarından etkilenmeyecek bir şekilde yapmanız gerekmektedir. Örneğin toprak olarak birbirinden farklı toprak kanallarını kullanmanızı öneriyorum. Paralel port üzerinde 18-25 arası pinler topraktır. ADC nin 8 ve 10 numaralı konnektörlerini birbirinden farklı topraklara bağlamak bu etkilenmeyi azaltacaktır.

Elde edilen sayısal değerler ile bazı kararlara varmadan önce, tavsiyem elde edilen değerlerin ortalamasını almak ve belli bir aralıkta ise bir işlem yaptırmak. Şimdi anlatacağım robot gözü uygulamasında bu yöntemden yararlanmanız mümkün.

Cisimin uzaklığını ışık şiddeti ile algılama (Basit Robot Gözü):

Temel olarak gerçekleştireceğimiz uygulama oldukça basit. LEGO ‘nun Mindstorms serisi ile birlikte gelen ışık sensörü ‘de aynı mantık ile çalışmaktadır. Geçen ayki sayısımızda Foto transistör kullanarak STATUS pinlerinden bir tanesini tetiklemiştik. Şimdi ise foto transistör üzerine düşen ışık sayesinde, transistörün değişen iç direncini kullanarak ışığa bağımlı bir analog sinyal elde edeceğiz. Sonuçta foto transistöre bir cisim yaklaştığında üzerindeki ışık kaynağı azalacak ve iç direnç artacaktır. Direnç arttığında ise analog sinyalin değeri düşecektir.

Foto transistörlerin normal transistörlerden tek farkı beyz ucundan yapılan tetiklemenin ışık şiddeti kullanılarak yapılmasıdır. Bu bakımdan genelde foto transistörlerin Beyz uçları kullanılmaz. Transistörün üzerinde küçük bir mercek bulunur. Tetikleme işlemi, bu merceğe ışık gönderilerek yapılır. Uygulanan ışığın şiddetine göre Emiter-Kollektör arasındaki iç direnç değişir ve yükün akımı kontrol edilebilir. Işığın şiddeti ile Emitör- Kollektör arası iç direnç ters orantılıdır. Yani Işık şiddeti arttıkça Emiter-Kollektör arası iç direnç düşecektir.

Buradaki tek dezavantajımız, foto transistörün gün ışığından etkilenmesi. Foto transistörü ADC ‘nin analog girişlerine bağladığınızda ekrandan okuduğunuz sayısal değer normal aydınlatmada, 100-150 civarındadır. Transistöre cisim yaklaştıkça, yani ışık şiddeti düştükçe okunan bu değer 5-10 lara kadar düşebilmekte. Böylece cismin yaklaştığını anlamak mümkün olmakta.

Eğer çok aydınlık bir ortamda iseniz, okunan bu değişimlerin değerleri farklı olacaktır. Bu problemden kurtulmak için ise ortam ışığının değerini robotunuza bildirmek yeterli sayılır. Bunun için robotun önüne koyacağınız cisim algılama amaçlı foto transistörlerin yanında, robotun tepesine öndeki cisimlerin gölgelerinden etkilenmeyecek birkaç foto transistör yerleştirmek ve bu transistörlerden okunan değerler ile bir ortam ışığı sayısal değeri belirleyip, bu değerler üzerinden çalışma yapmak. Bunun için ise robotların vazgeçilmez gereksinimi olan yapay zeka programlama işin içerisine giriyor.
Mr.SaW çevrimdışı   Alıntı Yaparak Cevapla
Eski 06-10-07, 16:27   #3 (permalink)
Geçerken Uğradım
 
Giriş Tarihi: 17-08-2006
Yer: Gebze
Yaş: 20
Mesajlar: 55
Rep Puanı: 2375
structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11structi Rütbe: Artı 11
Rep Gücü: 47
Varsayılan C: Analoga Giriş ve Basit Robot Gözü


güzel paylaşım
structi çevrimdışı   Alıntı Yaparak Cevapla
Eski 10-10-07, 09:41   #4 (permalink)
Banlandı
 
Giriş Tarihi: 10-10-2007
Yaş: 9
Mesajlar: 49
Rep Puanı: 2375
bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11bilalgs16 Rütbe: Artı 11
Rep Gücü: 0
Varsayılan C: Analoga Giriş ve Basit Robot Gözü

paylasim icin ty
bilalgs16 çevrimdışı   Alıntı Yaparak Cevapla
Eski 03-11-07, 19:03   #5 (permalink)
Return back...
 
Giriş Tarihi: 25-10-2006
Yer: Sıra,masa,kitap,kalem Durum: Çevrimiçi
Yaş: 18
Mesajlar: 7,760
Blog Mesajları: 1
Rep Puanı: 40324170
|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11|Sεfα| Rütbe: Artı 11
Rep Gücü: 403340
Varsayılan C: Analoga Giriş ve Basit Robot Gözü

Paylaşım için teşekkürler..
|Sεfα| çevrimdışı   Alıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı


Tüm saatler GMT +3. Şuan saat: 08:45
(Türkiye için GMT +2 seçilmelidir.)


ForumTR Mail'den Ücretsiz Bir Mail Almak veya Mail'inizi Okumak İçin Tıklayınız.

Forums Directory eXTReMe Tracker Almanya Vizesi | Rusya Vizesi | Ukrayna Vizesi | Fransa Vizesi | Vize İşlemleri | Almanya Otelleri | Tatil | Haberler | Telefon Santrali | Daily News

Sitemiz bir forum sitesi olduğu için kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir,
bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir,
yine de sitemizde yasalara aykırı unsurlar bulursanız sikayet@frmtr.com email adresine bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.
Report Abuse, Harassment, Scamming, Hacking, Warez, Crack, Divx, Mp3 or any Illegal Activity to abuse@frmtr.com


Search Engine Optimization by vBSEO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477