Beşiktaş Forum  ( 1903 - 2013 ) Taraftarın Sesi


Geri git   Beşiktaş Forum ( 1903 - 2013 ) Taraftarın Sesi > Eğitim Öğretim > Dersler - Ödevler - Tezler - Konular > Elektronik & Bilgisayar

Cevapla
 
LinkBack Seçenekler Stil
Alt 06-09-2008, 12:58   #1
ยŦยк
 
Constantin - ait Kullanıcı Resmi (Avatar)
 
Seri Port

BİLGİSAYAR TABANLI VERİ TOPLAMA | SERİ PORTLAR
Paralel port her zaman en iyi çözüm değildir. Zaten bir tasarımcı için her şarta uyum sağlayan tek bir çözümden bahsedilemez. Çözümler şartlara göre geliştirilir ve iyileştirilir. Örneğin hızın çok önemli olmadığı bunun yanında uygun arayüzün harici sistemde bulunduğu durumlarda seri port kullanımı zorunluluk da olabilir.
Günümüz modern bilgisayarları ve sistemleri çok sayıda seri haberleşme arayüzleri içermektedir. Özellikle USB portları hem yüksek hızları hem de uygun kablo ve soket sunmaları nedeniyle tüm dünyada yaygın olarak kullanılmaktadır. USB seri arayüzünün RS-232 seri portunu tahtından ettiğini kolaylıkla söyleyebilir ancak daha önce üretilen ve USB'ye göre son derece basit olan RS-232'nin bilgisayarlardan tamamen kalkması daha uzun yıllar alabilir.
Bunların yanında Firewire olarak bilinen diğer bir seri arayüz de mevcuttur. İlk tasarlandığında USB arayüzü ile arasındaki hız farkı son yıllarda USB'nin lehine kapanmıştır. Önümüzdeki yıllarda USB 2.0 480Mb/s hızına ulaşacaktır ki bu hız Firewire ulaşacağı en son hız olan 400Mb/s den daha fazladır.
Aşağıda bir dizüstü bilgisayarda bulunan RS-232 portuna bağlanmış RS-232 kablo ve fişi (DB-9F) görülmekte iken solda ise bağlantısız şekildeki soket (DB9-M) ve fiş beraber görünmektedir.

http://www.wekatronik.com/resimler6/seri_conn.jpg
Dizüstü bilgisayarlar teknolojiyi en hızlı takip eden bilgisayar türlerindendir. Örneğin LCD ekranlar onların sayesinde kullanıcı ile tanışmıştır. Aynı zamanda çoğu uygulama da ilk defa dizüstü bilgisayarlarda ortaya çıkmıştır. Bu aynı zamanda dizüstü bilgisayarlarda eski teknolojilerin de hızla terk edildiği anlamına gelir. Örneğin çoğu modern dizüstüler artık disket sürücüsüz olarak piyasa çıkmaktadır. USB bellekler disket sürücüleri kullanım dışına itmişlerdir. Ancak konu RS-232'ye geldiğinde dizüstüler hala muhafazakar davranmaktadırlar, bu teknolojik işaret bile basit ve temel haberleşme arayüzlerinin uzun süre bilgisayarlar ile beraber kalacağını göstermektedir.
Şimdi, diğer seri ve paralel iletişim sistemleri ile beraber RS-232'yi karşılaştıralım. Aşağıdaki tabloda çeşitli ölçütlere göre çeşitli haberleşme sistemlerinin detaylarını bulacaksınız.


http://www.wekatronik.com/resimler6/tablo1.jpg
Kişisel bilgisayarlarda kullanılan iletişim arayüzleri

Tablodan görüldüğü gibi RS-232 sadece kablo uzunluğunun önemli olduğu uygulamalar için uygundur. Hız bakımından, yeni teknolojiler karşısında oldukça yavaş kaldığı söylenebilir. Ancak hız istenmeyen bir çok uygulama da mevcuttur. Örneğin bir turnikeden geçen insanların sayısını ve bilgilerini toplayan bir sistemde, bilgisayar ile turnike cihazının haberleşmesi için RS-232 yeterli ve hatta RS-232 bu tip uygulamalar için oldukça hızlıdır. Diğer bir örnek, bir mikrodenetleyici çipini programlamak istiyorsak RS-232 arayüzü yine yeterli gelecektir. Zira mikrodenetleyicilerin içerdiği kod miktarı bit cinsinden birkaç yüz kilo bittir. Bu sayıda biti transfer etmek için birkaç saniye yeterlidir ve geçen bu kısa süre çipi programlayan kişiyi rahatsız etmeyecektir.
Seri haberleşmede tek bir kablo üzerinden veriler sıra ile gönderilir. Benzetmek gerekirse bir lokomotife bağlı vagon gibi hareket ederler. Raylar da verileri taşıyan kabloya benzetilebilir. Aşağıdaki şekilde RS-232 haberleşmesinin bir baytlık kısmı görülmektedir.

http://www.wekatronik.com/resimler6/image007.gif
RS-232 Seri Haberleşme Çerçevesi
Seri haberleşme protokollerinde veriler bit tabanlı olarak değil çerçeve tabanlı olarak iletilirler. RS-232, verileri baytlar (8-bit) halinde alır ve gönderirken, Ethernet'in her çerçevesinde 255 baytlık bilgi mevcuttur. Seri haberleşme o kadar önemlidir ki, günümüzde kullanılan tüm Internet ağı seri kablolar (fiber optik veya bakır) kullanarak haberleşmeyi sağlar. Aslında protokol denilen şey de budur. Tüm seri haberleşme sistemleri buna benzer bir mekanizma sayesinde anlaşabilirler, anlaşabilmek için protokollerinin ya aynı olması ya da bir diğerini anlayacak bir protokol olması gerekir.
Internet ağında yüzlerce protokol bulunmaktadır ve bunların beraber kullanılmaları aşılamaz sorunlar değildir. Protokolleri, insanlar arasında konuşulan dillere benzetebiliriz..Nasıl iki farklı konuşan insanı anlaştırabilmek için tercümanlar kullanıyor isek, iki farklı protokolü de anlaştırmak için kullanılan cihazlar (bridge, gateway) mevcuttur.
Tek bir kabloya bağlı cihazların hangisinin o anda veri yolunu (kabloyu) kullanacağına protokol karar verir. Aslında protokol önceden belirlenmiş kurallar bütünüdür. Bu sayede kablo üzerinde birden fazla birim hak iddia edemez (etseydi kaos oluşurdu).
Senkron ve asenkron olarak haberleşme sistemlerini ikiye ayırabiliriz. Senkron haberleşme zamanı referans alarak yapılan haberleşmedir. Veri ile birlikte zaman bilgisi de hatta yayılır, böylece hatta bağlı olan tüm sistemler zamana bağlı olarak haberleşebilirler. Asenkron haberleşme ise (ki RS-232 böyledir) sadece gönderilen çerçevedeki bitleri kullanarak senkronizasyonu sağlamaya çalışır, başka bir değişle hariçten bir sinyal almadan bu işlemi gerçekleştirir. Şekil 7.3'te senkron çalışan bir seri haberleşme sistemi görülmektedir. I2C (Entegreler Arası Haberleşme) denilen bu protokol özellikle evlerimizde bulunan elektronik cihazların içlerinde kablo karmaşasından kurtulmak için geliştirilmiş bir protokoldür.

http://www.wekatronik.com/resimler6/image009.jpg

Senkron bir haberleşme protokolü: I2C

Kişisel bilgisayarlar üzerinde bulunan RS-232 portu modem ve diğer cihazlarla haberleşebilmek için asenkron bir veri transfer yöntemi kullanır. Ancak çerçeveleri formatı farklı uygulamalar için değişebilir. Bu formatlardan en çok kullanılanı 8-N-1 formudur. Gönderilen her bayt bir START biti ile başlar bunu 8-bit veri takip eder ve çerçeve STOP biti ile son bulur. Şekil 7.2'de bu formatı temsil etmektedir.
N harfi en kolay ve basit hata yakalama metodu olan eşlik (parity) bitinin çerçevede bulunmadığın bildirir. Diğer formatlarda eşlik biti tek (odd) veya çift (even) eşlik biti olarak kullanılabilir. Tek eşlik bitinde, veri bitlerindeki Lojik 1'lerin sayısı çift ise ; eşlik biti 1 değilse 0 olur. Çift eşlik bitinde, veri bitlerindeki Lojik 1'lerin sayısı tek ise ; eşlik biti 1 değilse 0 olur. Aslında eşlik biti isminden de anlaşılacağı gibi tek eşlik kullanıyorsa, gelen tüm bilgideki (kendisi de dahil) 1'lerin sayısını tek, çift eşlik biti kullanıyorsa çift yapmaya çalışır.
7-E-1 formatında, çerçeve START biti ile başlar 7 adet veri bitleri ile devam eder, 1 bit eşlik bitini takiben STOP biti ile son bulur. Şekil 7.4'te görülen şekilde 7 bit veri ve eşlik (parity) biti görülmektedir. Örneğin burada tek eşlik kullanılsaydı, eşlik biti 1, çift eşlik biti kullanılsa idi 0 olacaktı. Veriyi alan karşı taraf gelen bilgideki 1'lerin sayısını kontrol eder ve ona göre gelen bilginin bozulup bozulmadığını anlara. Ancak eşlik biti çok da güvenli değildir, örneğin birden fazla bitin bozulmasını anlayamaz. Ayrıca eşlik bitinin hata düzeltme özelliği yoktur, sadece hatayı fark eder. Böyle bir durumda veri alan hedef cihaz, kaynağı uyararak bilgiyi tekrar göndermesini ister.

http://www.wekatronik.com/resimler6/image010.gif Seri haberleşmede kullanılan hız ölçüsü bit/sn'dir. Saniyede iletilen bit sayını veren bu birim, günümüzde bit/s çok yavaş bir hız kaldığından Kbit/s veya Mbit/s olarak kullanılmaktadır. Ancak RS-232 haberleşmesinde Baud denilen bir hız ölçüsü kullanılmaktadır. Baud, saniyede gerçekleşen olay veya veri transferi olarak bilinir. RS-232'de kullanılan Baud hızları aslında bit/s birimi ile aynıdır, çünkü her bir yeni olay yeni bir biti temsil eder. Ancak analog telefon hatlarında durum böyle değildir, bitleri temsil için kullanılan olay birkaç geçişten meydana geldiği için, gerçek hız daha düşüktür. Örneğin 9600 baud hızında (baud rate) 8-N-1 formatındaki bir RS-232 hattından saniyede toplam 960 bayt gönderilebilir.
UART (Universal Asynchronous Receiver/Transmitter, evrensel asenkron alıcı/verici) bilgisayarın seri portunda mikroişlemciden paralel bilgiyi seriye çevirir ve seri port üzerinden harici cihaza gönderir veya harici cihazdan gelen seri bilgiyi port üzerinden alarak mikroişlemciye iletilmek üzere paralele dönüştürür.UART genellikle bit frekansının 16 katı frekansta gelen biti örnekler. Örneğin gelen veri 300bit/s ise, UART frekansı 4800bit/s olur. START bit için 16bitlik süre bekler, daha sonra ilk biti okumak için 8bitlik süre bekler ve diğer gelen bitleri de 16 bitlik sürelerle okur.

Doğru bir okuma olması için alıcı ve verici cihazlarının frekansları birbirinden yaklaşık ±%3 oranında farklı olabilir. Bu yüzden alıcı ve verici tarafında kararlı ve sabit frekanslı sinyal üreten resonatörler veya kristal osilatörler kullanılır. Kişisel bilgisayarlarda UART çipinin frekansı 1.8432MHz. dir. Neden böyle bir frekans seçildiği bu rakamın 16'ya bölündüğü ile anlaşılabilir. 1.8432Mhz., 16'ya bölündüğünde sonuç 115,200 çıkar ki bu da RS-232 haberleşmesinde kullanılan en yüksek hızdır ve diğer bütün hızlar (19200,9600 vb.) bu hızın belirli bir tam sayıya bölünmesiyle elde edilir. Aşağıda seri port çıkışı veren bir UART kart, ve bu karta ait UART çip (kartın ortasında bulunan en büyük çip) görülmektedir.

http://www.wekatronik.com/resimler6/uart.jpgRS-232 portlu UART Seri Haberleşme KartıUART alıcı ve verici olarak üç çeşit bilgi kodlama kullanır:

<LI class=madde-imi-simge>İkilik veri (binary data)
Veriler ikilik kodda gönderilir. <LI class=madde-imi-simge>Metin verisi (text data)
Bazen metin dosyasının bir hedefe gönderilmesi durumunda kullanılır. Metin dosyaları da genelde üçe ayrılabilir: ASCII(7bit +eşlik biti) , ANSI (8-bit) ve Unicode (16bit). Bu formatta veriler yazı karakterlerinin kodları olarak gönderilir. ASCII'de toplam 128 karakter, ANSI'de toplam 256 karakter ve Unicode ise 65536 farklı karakter gönderilebilir.
ASCII Hex
Metin modu karakterlerden oluşan bir dosyayı göndermek için idealdir. Ancak ikilik (binary) verilere sahip dosyaları da karakterler ile temsil ederek gönderebiliriz. İkilik kodun kendisinin gönderilmesi yerine her bir 4 biti temsilen bir on-altılık sayının karakteri gönderilir. Örneğin 104 sayısı 0110 1000 olarak ikilik koda çevrilir.
0110= 6, 1000= 8 olur. Böylece gönderilecek karakterler tespit edilmiş olur: ASCII kod cetvelinde 6 rakam karakteri, 36'ya ve 8 rakam karakteri 38'e karşılık gelir. Bu iki bayt birbirini takip edecek şekilde ikilik olarak gönderilir. Ancak bu tür kodlamada fazladan bir bayt gönderilmiş olur ve haberleşme verimi düşmüş olur. Çok sayıda verinin gönderilmeyeceği durumlarda ise sorun oluşturmaz.
http://www.wekatronik.com/resimler6/uartchip.jpg

UART çipinin iç yapısı
Üstteki şekilde kişisel bilgisayarlarda kullanılan UART entegresinin iç yapısı görülmektedir. Bu çip, 8250 entegresinin bir türevidir. Günümüzdeki UART'lar oldukça fazla yardımcı ve bellek (FIFO) birimleri içermektedirler. Modern UART entegreleri genellikle 16550 entegresini temel almaktadırlar.
UART entegrelerinin temel görevi, paralel bilgiyi seriye ve seri bilgiyi de paralele çevirmektir.
Seri porta ait bilgilere erişmek için önce, Bilgisayarım simgesinin üzerine fare ile sağ-tıklama yapıldığında Özellikler maddesinin Donanım sekmesinden aygıt yöneticisi seçilir. Aygıt yöneticisinden Bağlantı Noktaları ve İletişim Bağlantı Noktası (COM1) veya (COM2) seçilerek UART kartının özellikleri görülebilir.

Her bir port bilgisayar tarafından bir adrese atanır ve ayrıca her biri için kesme (interrupt) numarası belirlenir. Atana adres ve kesme numaraları bilgisayar tarafından yönetilen kaynakların bir parçasıdır.
Atanan bu kaynakların zorunlu kalınmadıkça ve ne yaptığınızı bilmedikçe değiştirmeyiniz. Zira değiştirdiğiniz adres veya kesme numarası başka bir sistem tarafından kullanılıyor ise cihazların çakışması engellenemez.

Seri Port Programlama
Seri portun kullanımı bir çok yaygın programlama dilinde mümkündür ve oldukça da basittir.

VISUAL BASIC
Visual Basic'de Veri göndermek ve almak için aşağıdaki programı bir alt programa yerleştirmek yeterlidir.
'Yazı göndermek için: Dim ornekYazi as string
ornekYazi ="wekatronik"
MSComm1.Output=ornekYazi



'Yazı almak için: Dim ornekYazi as string
ornekYazi = MSComm1.Input


MSComm komutu alınan her 8-bit ANSI kodu, yazı karakteri olarak kaydeder. ASCII den Hex (16 lık sayı sistemi) ve Hex'ten ACSII'ye kod çevirimi yapmak için farklı komutlar kullanılır.
Hex$ (165) komutu sayıyı, ACSII Hex karşılığına çevirir.
Val ("&h" & "A5") komutu ACSII Hexi, sayı karşılığına çevirir.

Eğer iki baytlık bir ikilik sayı göndermek istersek:
Dim Gonderilecekler (0 to 1) As Byte
Dim Tampon As Variant
Gonderilecekler(0) =&H4A
Gonderilecekler(1) =&H23
Tampon=Gonderilecekler( )
MSComm1.Output =Tampon


C DİLİ KULLANARAK SERİ PORTA BİLGİ YAZMA-OKUMA ÖRNEK PROGRAM KODLARI

* Compile options needed: none
- The following program is a simple example which sends and receives
one character to/from COM1:
*/

#include <stdio.h>
#include <bios.h>
void main(void)
{
unsigned com1_status;
unsigned com1_send;
unsigned com1_rec;
unsigned com1_init;
int result, mask;

/* open serial port at 1200 baud, 8 data bits,
** No parity, 1 stop bit */
com1_init = _bios_serialcom(_COM_INIT, 0,
_COM_CHR8 | _COM_NOPARITY | _COM_STOP1 | _COM_1200);
printf("Init status: 0x%4.4X\n", com1_init);

/* send an '*' to com1 */
com1_send = _bios_serialcom(_COM_SEND, 0, '*');
printf("Send status: 0x%4.4X\n", com1_send);

mask = 0x6100;
/* value used to mask:
* bits 0-7 are related to modems,
* bits 8-15 are for port status,
* check to see that the following bits are set:
* 8 (data ready)
* 13 (Transmission-hold register empty)
* 14 (Transmission-shift register empty)
*/

/* check the status */
com1_status = _bios_serialcom(_COM_STATUS, 0, 0);
printf("COM1 status: 0x%4.4X\n", com1_status);

/* wait until a character is ready */
do {
/* check the status */
com1_status = _bios_serialcom(_COM_STATUS, 0, 0);

/* mask off the low order byte of com1_status */
com1_status = com1_status & 0xFF00;
} while( (mask & com1_status) == 0);

/* get a character */
com1_rec = _bios_serialcom(_COM_RECEIVE, 0, 0);
printf("Read status: 0x%4.4X\n", com1_rec);

/* print the character we just received */
result = com1_rec & 0x00FF;
printf("Character: 0x%2.2X = %c\n", result, (char)result);
}
vBulletin v3.6.4, Copyright ©20
Constantin Ofline   Alıntı ile Cevapla
Cevapla

Bu konuyu arkadaşlarınızla paylaşın


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık




Türkiye`de Saat: 12:38 .

Powered by vBulletin® Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.2

Sitemiz CSS Standartlarına uygundur. Sitemiz XHTML Standartlarına uygundur

Oracle DBA | Kadife | Oracle Danışmanlık



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 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580