PIC ve MAX 232 ile Seri Porta Veri Gönderme

Herkese selamlar;
Bu yazımızda sizlere PIC sayesinde bilgisayara veri gönderme olayını anlatacağız.

Bilgisayara en rahat veri gönderebileceğimiz yollardan biri de seri porttur.Ayrıca PIC lerdeki USART birimi de seri iletişimi kolay yapabilmemiz için üretilmiş bir birimdir.Fakat bu birimi olmayan PIC lerde yazılım sayesinde bilgisayarlar çok kolay iletişim kurabilir.

Kısaca bahsedecek olursak seri iletişimin 3 methodu vardır.

1-Full-dublex seri iletişim

Bu yöntemde her iki taraf da alıcı ve verici olarak çalışır.Yani aynı anda veri gönderip alabilirler.Telefon konuşmaları gibi.

2-Half-dublex seri iletişim

Bu yöntemde de her iki taraf alıcı ve verici olarak çalışabilir.Fakat biri veri göndeririken diğer dinlemek zorundadır.Aynı anda karşı taraf veri yollayamaz.Telsiz konuşmaları gibi.

3-Simplex seri iletişim

Bu yöntemde bir taraf verici bir taraf alıcıdır.Değişmesi mümkün değildir.Radyo yayınları gibi.

Not:Bu örnekler seri iletişim örnekleri değildir.Sadece iletişim formatını açıklamak için verilmiştir.

Biz bu uygulamamızda 3. yöntemi yani Simplex iletişim kullanacağız.PIC e önceden yükleyeceğimiz bir veriyi bilgisayara göndereceğiz.İsterseniz fazla uzatmadan uygulamamıza geçelim.

İsterseniz önce malzeme listemizi sayalım.

1 x PIC 16f648A ( veya 16F628A )
1 x MAX 232
4 x 1 uF Kondansatör
1 x LED (opsiyonel)
1 x RS232 Konnektör (bilgisayarınıza takmak için seri portunuza uygun bir konnektör seçmelisiniz (Opsiyonel)
1 x 200 OHM Direnç (Eğer led kullanacaksanız.)
Kablo, board, vs…

Bu da şemamız:

PIC ve MAX 232 şema

Büyük resim için tıklayınız.

Alper: Şemada 31 Temmuz 2008 tarihinde düzeltme yapılmıştır.C4 kondansatörü bir önceki şemada ters bağlı gözükmektedir.Yukarıdaki şema doğrudur.Bu hatayı fark etmemi sağlayan sayın üyemiz semesu ya teşekkür ederim.

Görüldüğü gibi devremiz çok karışık değil.Zaten her işi her zamanki gibi PIC yapıyor.Şemadaki notları dikkatlice okumanızı öneririm.Yoksa ne yapsanız devreyi çalıştıramazsınız. :)

Eğer PIC te sorun yoksa ve led taktıysanız.Led veri gönderdikten sonra yanıp sönecektir.Devre sürekli aynı veriyi yollamaktadır.Bu sayade PIC in programının çalıştığını anlayabilirsiniz.PIC in dahili osilatörü kullanılmıştır.Bu yüzden ekstra kristal kondansatör vs bağlamanız gerekmiyor.

Bizdeki devrenin şekli şemali:

MAX 232 Devre genel görünüş

Büyük resim için tıklayınız.

Burada dediğimiz gibi işi PIC yapyor.Fakat max232 entegremiz olmasa PIC bu işi yapmaya bile yeltenemeden meftaa olabilir.

Seri Portta -10v +10v gibi gerilimler bulunur.Bu gerilim ile PIC le işlem yapmamız imkansız.Bunun için MAX 232 bu tür uygulamalarda genellikle tercih edilen bir entegredir.Bu entgere bu gerilimleri PIC in anlayacağı 0V 5V seviyelerine getirir.

MAX 232 nin yakından bir fotoğrafı:

MAX 232

Büyük resim için tıklayınız.

Devremiz hazır ve çalışıyor.Peki gelen bilgileri nasıl okuyacağız?

Burada Microsoft’un bizim için hazırladığı bir program imdadımıza yetişityor:Hyper Terminal !

Başlat-Programlar-Donatılar-İletişim-Hyper Terminal (Xp için) Adresiyle programı çalıştırabilirsiniz.Sizden yeni bir bağlantı ismi isteyecektir.İstediğinizi yazın tamam deyin.Zaten gerekli gösterim videoda mevcuttur.

Bir sonraki pencereden gerekli COM u seçiniz.Bunu seçin diyemiyorum çünkü her bilgisayar için farklıdır.Ama COM1 den başlayabilirsiniz.

Ayarlar ise şöyle:


Saniyedeki Bit Sayısı:2400
Veri Bitler:8
Eşlik:Yok
Dur Bitleri:1
Akış Denetimi:Donanım

Artık Bağlısınız.Ve ekran görüntünüz de buna benzeyecektir:

Hyper Terminal Ekran Görüntüsü

Büyük resim için tıklayınız.

Eğer her şey tamamsa ekranda bu görüntüdeki yazıları görmeniz gerekir.

Daha iyi anlatabilmek için bir de video hazırladık.İşte videodan bazı görüntüler.

Videoda MAX 232

Videoda PIC 16F648A

Videoda Hyper Terminal Ayarı

Sorularınızı yorum yazarak sorabilirsiniz.

Resimleri ve videoyu bana ulaştıran arkadaşa buradan tekrar teşekkür etmek istiyorum. :)

Proteus Dosyasını, HEX Dosyasını, ASM Dosyasını, PBP Dosyasını buradan indirebilirsiniz.

Yararlanılan linkler:

http://www.google.com
http://www.kmitl.ac.th/~kswichit%20/MAX232/MAX232.htm



Bağlantılı Yazılar

28 Yorum Yapılmış

  • cem sözen diyor ki:

    Hyper Terminal a yazdırdığımız “test yapıyoruz” yazısını word e de yazdırabilir miyiz?

  • Alper diyor ki:

    Direkt olarak Hyper Terminal den word e aktarabilir miyiz bilmiyorum.Fakat bir program ile seri portu okuyabiliriz.Bu tip bir program bir ara yazmıştım visualbasic ile.Fakat şu an hatırlamıyorum. C ile de bu yapılabilir.Programların okuduğu değerler bir txt dosyasına kaydedilebilir.Fakat word e aktarılır mı bilmiyorum. Bir programcı arkadaşımız okursa daha fazla yardımcı olabilir.Maalesef bilgilerim bu kadar.

    Saygılarımla :)

  • veysel diyor ki:

    yav biz iki bilgisayarı chat leştircez bu pic iprogramlamamız gerekiyor mu yokas kendi çalışırmı

  • Alper diyor ki:

    İki bilgisayarı birbirine bağlamak için seri porta gerek yok.İkisinde de ethernet kartı varsa iki ethernet kablosu ve bir switchle ya da “cross”(çapraz) ethernet kablosu ile direkt bağlantı kurulabilir.

  • okumuskind diyor ki:

    iki pc’nin haberleşmesi için pic programlamamıza gerek yoktur.enternet kartı ve enternetkablosunun olması kafidir.

  • semesu diyor ki:

    arkadaslar merhaba
    bende pıc den pc ye seri port kullanarak veri gondermek istıyorum. gondermek istedigm veri motorun devir sayısı. programda timer ve interrupt kullanrak devir sayısını hesaplatıyorum.hesapladıktan sonrada pc ye gondermek istıyorum. ancak ekranda bise goremıyorum. sorun ne olabılır ? yardımcı olursanız cok sevınırım projemın son kısmı artık bu kısmı yaparsam bıtcek ama zamanımda az kaldı yardımlarınızı beklıoyrum arkadaslar
    kullandıgım entegre 16F76 ve 4MHz de calısıyor.

  • 90alper90 diyor ki:

    Merhaba semesu

    Hangi hız ile bilgi gönderiyorsunuz?Bilgisayarda ayarlanan saniyedeki bit sayısı ile PIC teki değerin aynı olduğuna emin misiniz? PCde hangi programı kullanıyorsunuz?

    Kolay gelsin.

  • semesu diyor ki:

    merhaba,
    9600 olarak ayarladım programımda da oyle ayarlı. hyper terminal kullanıyorum. yazdıgım programı ısıste denedım calısıyor. yani yanlıs karakterler gonderıyor ama en azından ekranda karakter gorebılıyorum. ama gercekte denedigimde hiç birsey cıkmıyor maalesef.
    birde son denememde gonderılcek veriyı ben switchle kontrol edıyorum. switche bastıgımda hıc bır tepki yok ekranda, ama klavyeden rastgele tuslara bastıgımda garıp garıp karakterler cıkıyor ekranda.
    sorun ne olabılır donanımsal oldugunu dusunuyorum ben ama tabi suda var mesela ben seri porta gonder fonksıyonunda P sayısını gondrmek istıyorum ve p sayısıın degeri 5 gonderirkende TXREG=p+48 diyorum ascıı aldıgı ıcın ama ekranda g harfi cıkıyor butona her basısımda.
    yardımcı olursanız cok sevınırm bu cuma yetistirmem lazım projemın son kısmı bu ama burda takıldım kaldım:(

  • 90alper90 diyor ki:

    Merhabalar;

    Şimdiye kadar gördüğüm bu tür projelerin çoğunda hız olarak 2400 kullanılır.Hız arttıkça hata oluşma olasılığı artıyor dolayısıyla.

    Dediğiniz PIC’in dahili bir osilatörü var mı bilmiyorum ama eğer onu kullanıyorsanız sorun ondan da olabilir.

    Daha hızlı bir çözüm bulabilmek için devre şemasını ve kodları sizin için bir sakıncası yoksa gönderebilir misiniz? Çünkü şema ve kod olmadan cumaya kadar anca ben şemayı ve kodları kafamda canlandırabilirim. :)

    Size özel mesaj olarak mail aderesimi atıyorum.Şemayı ve kodları mail olarak gönderirseniz ben de kendi bilgisayarımda inceleyebilirim.Tabi sizin için problem oluşturmazsa.

    Saygılarımla

    Kolay gelsin

  • 90alper90 diyor ki:

    Problem çözülmüştür.PIC ile yapılan hatalı konfigrasyondan dolayı veri terslenmiş şekilde gitmektedir.Yazının sonunda bu konu ile ilgili bir bilgi birazdan ekleyeceğim. :)

  • cakirhal diyor ki:

    Güzel bir çalışma elinize sağlık. Ben de bilgisayarım ile yaptığım bir devrenin iletişim kurmasını istiyorum, ancak kafamda bazı soru işaretleri var:

    3 adet farklı renkli led kullanacağım ve bilgisayarımda çalışan programdan bir mesaj yollayıp mesaj olumlu ise yeşil, olumsuz ise kırmızı ve her ikisi de olmadığı durumda ise sarı olan led’in yanmasını istiyorum. Bu şekilde bir devre işimi ne kadar görür sizce?

    Teşekkürler.

  • Alper diyor ki:

    Merhabalar cakirhal;

    Dediğiniz olayı olumlu ise şunu yap, değilse şunu yap, belirsiz ise şunu yap yerine her durum için bir bilgi belirleyerek yapmanız daha sağlıklı olacaktır.

    Örneğin 1 gelirse yeşil, 2 gelirse sarı, 3 gelirse kırmızı yansın gibi.

    Sizin dediğiniz yöntemde oluşabilecek veri kayıplarının yanlış bir değerlendirmeye yol açabileceğini düşünüyorum.

    Switch – case mantığı ile gelen veriye göre rahat bir şekilde işlem yaptırabilirsiniz.

    Normal kullanımlarda bir problem yaşayacağınızı zannetmiyorum.

    Umarım sorunuzun doğru anlayabilmişimdir.

    Eğer PIC için kod yazma konusunda probleminiz varsa kod açısından da sorularınızı ve problemlerinizi yazabilirsiniz. Bilgim çerçevesinde yardımcı olmaya çalışrım.

    Saygılarımla

  • nothing__ diyor ki:

    Birinci resimde görünen usb-seri port çevirici ft232 mi oluyor?

  • Alper diyor ki:

    Merhabalar;

    Resimdeki cihaz yanlış bilmiyorsam piyasada hazır olarak satılan bir çevirici cihaz. Bu cihazlarda FT232 kullanımı konusunda bir bilgim yok.

    Daha doğru bir bilgi için bu çalışmayı yapan sayın Hazar’a durumu iletmiş bulunmaktayım. Cihazı o kullandığı için cihaz hakkında bir bilgisi olabilir. Kendisi daha net bir yanıt verecektir.

  • Hazar diyor ki:

    Cihaz Alper’in de dediği gibi hazır satılan bir cihaz, Prolific chipliydi yanlış hatırlamıyorsam. FT232 de aynı işi gören bir entegredir, yani USB-Seri çeviricidir. Bu uygulamada onu ve diğer tüm USB-Seri çeviricileri kullanabilirsiniz.

  • nothing__ diyor ki:

    Peki çeviricinin ucundaki aparatın adı nedir? Çevirici ile beraber gelmiyor sanırım..

  • Alper diyor ki:

    Çevirinin ucundaki dişi veya erkek seri port konnektörüdür. Bunun herhangi bir fonksiyonu yoktur. Tek görevi pin bağlantısını kolay bir şekilde sağlamaktır. Cihaz ile birlikte satılan bir aparat olduğunu sanmıyorum.

    Aynı resimde yeşil ledin yakınında aynı konnektörün ucu boş olanı durmaktadır. Aldığınız cihazın erkek çıkışı varsa dişi, dişi çıkışı varsa erkek konnektör ile bağlantı kurabilirsiniz.

    Piyasada çok rahatlıkla bulabileceğini bir aparattır. “Seri port dişi/erkek konnektör” ismi ile temin edebilirsiniz.

    Kolay gelsin.

  • nothing__ diyor ki:

    Çok teşekkür ettim. Saygılar..

  • Alper diyor ki:

    Rica ederim.

    Kolay gelsin…

  • nothing__ diyor ki:

    max232nin 2. portundaki kapasitörün diğer ucu şaseye bağlanmış ama resimde ve datasheette +5v ye bağlanmış. Birde zip dosyasının içindeki hexi yüklediğim zaman gayet güzel çalışıyor ama pbp dosyasını derleyip yüklediğim zaman çalışmıyor. Bu konuda da yardımcı olursanız çok sevinirim. Kolay gelsin..

  • Alper diyor ki:

    Merhabalar;

    Geç olmasından dolayı detaylı bir incelemede bulunamadım. Dediğiniz gibi resimlerde kondansatör farklı bağlanmış. Şemada bir hata olabilir. Bundan dolayı ilginiz için teşekkür ederim.

    Fakat bulduğum bazı datasheetlerde de kondansatör şemada gözüken şekilde bağlanmış. Yarın sakin bir kafa ile konuya bakacağım. :)

    PBP dosyasında herhangi bir hata olmaması gerekiyor. Çünkü .hex dosyası da o kodların derlenmesiyle oluşmuş bir dosyadır.

    Siz kodu derlerken herhangi bir hata alıyor musunuz?

    PBP kodunun derlenmiş şeklinin çalışmaması gerçekten de ilginç.

    Yarın her iki duruma da bakmaya çalışacağım.

    Saygılarımla

  • nothing__ diyor ki:

    merhaba,

    pbp dosyası şu şekilde

    /*
    TRISB=%00000000 ‘B portu çıkış yapıldı
    PortB=0 ‘B portunun çıkışı Low(0) yapıldı.

    YALLAH:
    SEROUT PORTB.2,0,["TEST Yapiyoz",13]
    toggle PORTB.1
    Pause 100
    GOTO YALLAH
    END
    */

    sadece pause de bi uyarı veriyor ama yine de derleniyor.

    SEROUT PORTB.2,0,["TEST Yapiyoz",13]
    yazıyor PBP dosyasında. Baud_rate 0 olarak görünüyor. Ne isis de ne de devrede çalışıyor kod. 0 ı 396 olarak değiştridiğimde

    SEROUT PORTB.2 , 396 , ["TEST Yapiyoz",13] yaptığımda

    ise isis de çalışıyor ama gerçek devrede tuhaf tuhaf karakterler basıyor HyperTerminale. Ama zip içindeki hex dosyasını yüklediğimde “Test Yapıyoz” yazısını görebiliyorum HyperTerminalde. Netten bir sürü kod buldum hepsinde aynı tuhaf karakterleri gördüm ekranda. Sadece zip dosyanın içindeki Untitled(1).HEX dosyasını yüklediğimde doğru sonucu alabildim. Serout ve Hserout la denedim ama nafile.. Sanırım baud_rate ile ilgili bi sıkıntı..

    Kolay gelsin.

  • nothing__ diyor ki:

    denediğim kodlar ve aldığım sonuçlar..
    /*
    Device = 16F877A
    XTAL = 4

    Declare HSERIAL_BAUD 1200
    Declare HSERIAL_RCSTA %10010000
    Declare HSERIAL_TXSTA %00100000
    Declare HSERIAL_CLEAR = On

    main:
    HSerOut["main"]
    GoTo main
    */

    /*
    device = 16F877A
    XTAL = 4
    all_digital true

    TRISB=%00000000 ‘B portu çıkış yapıldı
    PortB=0 ‘B portunun çıkışı Low(0) yapıldı.

    YALLAH:
    SEROUT PORTB.2 , 396 , ["TEST Yapiyoz",13]
    delayms 1000
    GOTO YALLAH
    */

    sonuc
    http://img67.imageshack.us/img67/9407/reslx4.jpg

  • nothing__ diyor ki:

    Sabahtan beri pic pasic kodunu proton derleyicisinde derlemeye çalışıyormuşum. Çok malım tamam kabul ediyorum. Ama yine de yukarıdaki kod niye çalışmadı merak etmiyor değilim. Kolay gelsin.

  • Alper diyor ki:

    Merhabalar;

    Estağfirullah, ona sabah dalgınlığı diyelim. :)

    Protonla hiç bir tecrübem yok. O yüzden kodların ne işe yaradığını bilmiyorum.

    23 nolu yorumunuzda iki adet kod vermişsiniz. İlk kodda anladığım kadarı ile baud değeri 1200 fakat gönderdiğiniz ekran görüntüsüne göre HyperTerminal 2400 değeri ile dinleme yapıyor. Bu fark sizin de dediğiniz gibi saçma karakterlerin çıkmasına neden olacaktır.

    Yine 23 nolu yorumdaki ikinci kodda komuttaki 396 değerinin hangi baud değerine denk geldiğini bilmiyorum. Saçma karakterler çıkıyorsa bu değerden dolayı olması muhtemel.

    C3 kondansatörüne gelince:

    Datasheet’te her iki bağlantının da doğru olduğu yazıyor. Yani C3′ün bir bacağı toprağa ya da Vcc hattına bağlanabilirmiş. Ben kendi denemelerimde toprağa bağlı olduğu yani şemadaki şeklini kullanıyorum. Şimdiye kadar herhangi bir problem ile de karşılaşmadım.

    İnternet üzerindeki çoğu şemada Vcc hattına bağlanmış. Muhtemelen bu bağlantıda da herhangi bir problem yok.

    http://www.datasheetcatalog.org/datasheet/texasinstruments/max232.pdf

    7. sayfaya bakabilirsiniz.

    Kolay gelsin.

  • sonnur diyor ki:

    90alper90 bey size ulaşmam lazım çünkü okuduklarımdan bana yardımcı olabilirsiniz diye düşünüyorum. Ben 16F877A ile PC ( C# ile hazırlanmış arayüz ) arasında haberleşmek istiyorum. Her şey tamam görünüyor ama iletişim gerçekleşemiyor. Ben pc den karakter gönderiyorum ve pic’te de gelen karakterler ne ise ona göre işlem yapmasını istiyorum ama haberleşme olmuyor. Her şey tamam, baud hızı falan filan aynı ve defalarca kontrol ettim ama olmadı. Devrem proteus’ta çalışıyor bu arada. Size ulaşabilirsem projeyi göndereceğim. Umarım yazdıklarımı görürsünüz.

    Teşekkürler…

  • 90alper90 diyor ki:

    E-posta gönderdim.

  • blackorred diyor ki:

    selam.öncelikle paylaşımda bulunduğunuz için teşekkurler.ben semesu ile aynı proje uzerinde çalışıyorum 90alper90 sorun çozulmustur acıklama yapacağım demissiniz ama yapmamıssınız.açıkcası benim motora entegre sayac devrem yok.suan bu konuda tamamen karısmıs durumda.bana yardımcı olursanız sevinirim..

Yazıyı paylaşın. | Yazı ile ilgili sorun bildirin.

Yorum Yapın ya da Soru Sorun

Yorum yapabilmeniz ya da soru sorabilmeniz için giriş yapmanız gerekmektedir.
Hoşgeldiniz, Ziyaretçi.Lütfen giriş yapın veya kayıt olun.
E-posta adresinize aktivasyon iletisi gelmediyse lütfen buraya tıklayın.

Arama Yap
Üye Alanı
 
 
Kayıt Ol || Aktivasyon Kodu İste
Teknik Yardım
5 tane konu henüz çözüme ulaşmamış. Belki siz yardımıcı olabilirsiniz ya da sorunlarınızı çözmenize başkaları yardım edebilir. Teknik Yardım bölümüne buradan ulaşabilirsiniz.
Destek İçin
İzoelektronik Facebook Sayfası
İzoelektronik'e Facebook sayfamıza katılarak destek olabilir, eklenecek yeni yazıları ve gelişmeleri Facebook üzerinden de takip edebilirsiniz.
Güncel Kalın

Eklenen Yazılar E-posta Adresinize Gönderilsin

Bizi RSS ile de takip edebilirsiniz.

Translate
Son Yorumlar
  • 90alper90: Merhaba Ozan Bey, Ölçümleri aldıktan sonra aynı anda göstermekte bir sıkıntı yok. Önemli olan 3 ölçümü de alabilmek. Bir önceki...
  • ozigeldi: alper teşekkür ederim bu arada ben ozan memnun oldum ben bu 3 ölçümü aynı lcd ekranda gösterebilimiyim pıc’e yeni başladım ve bu...
  • botan: meraba malzemeleri tedarik ettim motor olarak step motor aldım sizin yüklediğiniz programın aynısını yüklesem sorun yaşarmıyım acaba, yeni...
  • kuvvetkmc: Şöyle söyleyim; Anakart üzerinde ki; R1-R2-R3-R4-R4-R5-R6-R7-R8-R9- R10-R11-R12-R13-R14-R15-R16-R1 7-R18-R19 C1-C2-C3-C4 Q1;...
  • İzoelektronik: @kuvvetkmc Sorun çıkaran dirençleri daha net olarak belirtebilirseniz daha kolay yardımcı olunabilir. @botan Belirttiğiniz devreler...
drupal statistics module