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 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:

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:

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ı:

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:

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.



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ış
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.
Hyper Terminal a yazdırdığımız “test yapıyoruz” yazısını word e de yazdırabilir miyiz?
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
yav biz iki bilgisayarı chat leştircez bu pic iprogramlamamız gerekiyor mu yokas kendi çalışırmı
İ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.
iki pc’nin haberleşmesi için pic programlamamıza gerek yoktur.enternet kartı ve enternetkablosunun olması kafidir.
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.
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.
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:(
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
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.
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.
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
Birinci resimde görünen usb-seri port çevirici ft232 mi oluyor?
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.
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.
Peki çeviricinin ucundaki aparatın adı nedir? Çevirici ile beraber gelmiyor sanırım..
Ç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.
Çok teşekkür ettim. Saygılar..
Rica ederim.
Kolay gelsin…
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..
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
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.
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
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.
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.
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…
E-posta gönderdim.
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..