seri haberleşme problemi

Başlatan canbulut, 23 Ağustos 2011, 01:52:29

canbulut

s.a arkadaslar,
seri haberleşen bir devre yaptım.bu devre hem pc programı ile hemde başka bir seri haberleşen bir cihaz arası bilgileri alıyor.pc programı sürekli hızlı bir sorgulama gönderiyor ve diğer seri haberleşen cihazda bilgi göndermek istediğinde hem pcden gelen veri hemde seri haberleşen diğer cihaz verisi birbirine çorba olup saçma bir bilgi geliyor.pc programının sorgulama komutunun sıklığını azalttığımda sorun olmuyor..yalıtımlarını pc'nin max232 ile, seri haberleşen cihazınkini optocoupler ile yaptım.yoksa taşmamı oluyor.sorun nedir anlayamadım

gambit1244

vay canbulut kardeş 1 2 ay once rs 232 picle haberleşmiyor diye kafayı yemiştin hallettin demek ne güzel.:)
baud rate degerin düşük oldugunda boyle bi sorun olabilirmi acaba ustadlar daha iyi bilir ama,,,
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

canbulut

Alıntı yapılan: gambit1244 - 23 Ağustos 2011, 09:45:47
vay canbulut kardeş 1 2 ay once rs 232 picle haberleşmiyor diye kafayı yemiştin hallettin demek ne güzel.:)
baud rate degerin düşük oldugunda boyle bi sorun olabilirmi acaba ustadlar daha iyi bilir ama,,,

dediğim yalıtımsalla boğuşmutuk bir ara evet:)) şimdi pc fazla sorgulama yapınca veri karışıyor.hserin ayrı iki bilgiyidemi alıyor.yoksa tammı alamıyor anlayamadım.bir sapıtma oluyor.baud 9k6.9k6 ile aynı işlemleri yapabilen kartlar var.benim alma ve göndermede bir sorun var.

ete

Sorun muhtemelen bir Master-Slave ilişkisi kurmaman oluyordur. Birden fazla cihazın aynı ortamda haberleşmesini kurala bağlamak gerekir. Yoksa senin değiminle iş çorbaya döner. Kuralı basitçe şöyle açıklayabiliriz. Bir yönetici birim vardır. Bu PC de olabilir diğer kartlardan biriside olabilir. İlk çalıştırmada yönetici daima gönderme konumundadır. Yönetici 1 nolu karta emir yollar. 1 nolu kart sen elindeki bilgileri ortama yolla diye. Bu emri bütün kartlar dinleme pozisyonunda oldukları için alırlar ama yalnızca bir tanesi emri yerine getirir. Çünki emir ona verilmiştir. Diğeri yada diğerleri bekler. Yönetici  , 1 nolu karttan gelen verileri alır ve aynı emri bu sefer 2. karta verir. Yine emir bütün kartlar tarafından alınır ama yalnızca 2. kart emri yerine getirir. Bu iş bu şekilde bir döngü şeklinde çalışır ve çorba olmadan hepsi bir ortam içinde haberleşerek anlaşırlar. Bu ilişkiyi kurman gerekiyor.
Bu sistemin çalışabilmesi için her bir kartın bir ID numarası olması gerekir. Gerekirse kartlara bir dip Switch takılarak buaradan ID numarası verilebilir. İlk çalıştırmada herkes kendi ID numarasını okur ve program içinde kullanır.

Detaylı bilgi için aşağıdaki linkte yer alan ders notlarını okuyunuz.

http://dl.dropbox.com/u/25364674/Ders-14.rar

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

canbulut

Alıntı yapılan: ete - 23 Ağustos 2011, 11:42:38
Sorun muhtemelen bir Master-Slave ilişkisi kurmaman oluyordur. Birden fazla cihazın aynı ortamda haberleşmesini kurala bağlamak gerekir. Yoksa senin değiminle iş çorbaya döner. Kuralı basitçe şöyle açıklayabiliriz. Bir yönetici birim vardır. Bu PC de olabilir diğer kartlardan biriside olabilir. İlk çalıştırmada yönetici daima gönderme konumundadır. Yönetici 1 nolu karta emir yollar. 1 nolu kart sen elindeki bilgileri ortama yolla diye. Bu emri bütün kartlar dinleme pozisyonunda oldukları için alırlar ama yalnızca bir tanesi emri yerine getirir. Çünki emir ona verilmiştir. Diğeri yada diğerleri bekler. Yönetici  , 1 nolu karttan gelen verileri alır ve aynı emri bu sefer 2. karta verir. Yine emir bütün kartlar tarafından alınır ama yalnızca 2. kart emri yerine getirir. Bu iş bu şekilde bir döngü şeklinde çalışır ve çorba olmadan hepsi bir ortam içinde haberleşerek anlaşırlar. Bu ilişkiyi kurman gerekiyor.
Bu sistemin çalışabilmesi için her bir kartın bir ID numarası olması gerekir. Gerekirse kartlara bir dip Switch takılarak buaradan ID numarası verilebilir. İlk çalıştırmada herkes kendi ID numarasını okur ve program içinde kullanır.

Detaylı bilgi için aşağıdaki linkte yer alan ders notlarını okuyunuz.

http://dl.dropbox.com/u/25364674/Ders-14.rar

Ete

degerli ete hocam program ıd olarak ilişkilendirilmişti zaten.devre hem pcyi hemde başka bir göndericiden gelen veriyi alıyor.ve duruma göre sadece pcye gönderme yapıyor.bahsettiğim diger gönderici sadece rakamsal bir veri gönderip ve sonuna end karekteri ekliyip devreye gönderiyor.pcdeki bilgide öncelikle $ gönderdiği için böylelikle ayırt edebiliiyorum ikisini birbirinden.aldığım rakamsal veriyide pcye gönderiyorum.zaman zaman doğru olarak göndersede sıklıkla hem pcden gelen veriyi hemde diger vericiden gelen veriyi ekranlıyor.dikkat ettim .ne aldıysan hemen gönder dedim.hem rakamsal veriyi hem gelen pc bilgisini alıp gönderiyor gibi görünüyor.

canbulut

tıkandım kaldım arkadaslar yardımcı olabiliecek yokmu?sorun pbpdamı bendemi?

-Hasan-

canbulut arkadaşım; anladığım kadarıyla Master PIC olacak, ama neden PC sorgulama yapıyor? PC programını sen mi yazdın? diğer seri haberleşen cihaz nasıl bir cihazdır? bir de bağlantıları iyi anlayabilmemiz için seri iletişim bağlantı şemasını koyabilirsen iyi olur.

canbulut

Alıntı yapılan: Hasan Oguz - 24 Ağustos 2011, 00:23:55
canbulut arkadaşım; anladığım kadarıyla Master PIC olacak, ama neden PC sorgulama yapıyor? PC programını sen mi yazdın? diğer seri haberleşen cihaz nasıl bir cihazdır? bir de bağlantıları iyi anlayabilmemiz için seri iletişim bağlantı şemasını koyabilirsen iyi olur.

master değil devreler slave olacak,pc master...pc sürekli sorguluyor.neden çünkü sorgulama şekli bilgi varmı varsa bilgiyi alıyor yoksa pic bir karekter gönderip hata yok pcde ekranlanma yapıyor.slave sayıları çok artınca sorgulama yavaşlıyor.programda gözüken bu.ayrıca expkits pic geliştirme kartı üzerinden denemelerimi yapıyorum.pc programını arkadaslarım yazdı bu şekilde çalışan kartlarımız var elimizde.nasıl çizebilceğimi bilemiyorum ama anlatma ile halledebilirsem max 232 pic ve bir adet daha seri data gönderen bir cihaz bağlı devre kartına...alınan bilgi sadece pcden gelen veriyi göster ve sadece seri data gönderen cihazdan gelen veriyi göster şeklinde...bu şekilde pc sorgusuz çalışırsa hiç sorunsuz diğer seri data gönderen cihazdan ve pcden bilgi gönderdiğimde rahatça alıyorum bilgileri ve çokta güzel çalışıyor.ancak şu anda kullanılan programa bağımlı çalışma yapmalıyım.yani pc sorgulama yapsa bile iki veriyi birbirine karıştırmamalı.

BASLA:
For S=0 to 24
  KATAR[S] = 0
NEXT 
HSERIN [STR KATAR\25\CH]

HSEROUT [STR KATAR,CH]
 GOTO BASLA

-Hasan-

#8
Alıntı Yappc sorgusuz çalışırsa hiç sorunsuz diğer seri data gönderen cihazdan ve pcden bilgi gönderdiğimde rahatça alıyorum bilgileri ve çokta güzel çalışıyor

Sorgulamayı kaldırdığınızda sorun çözülüyorsa; donanımınızda sıkıntı yok demektir.

Alıntı yapılan: canbulut - 23 Ağustos 2011, 01:52:29
s.a arkadaslar,
seri haberleşen bir devre yaptım.bu devre hem pc programı ile hemde başka bir seri haberleşen bir cihaz arası bilgileri alıyor.pc programı sürekli hızlı bir sorgulama gönderiyor ve diğer seri haberleşen cihazda bilgi göndermek istediğinde hem pcden gelen veri hemde seri haberleşen diğer cihaz verisi birbirine çorba olup saçma bir bilgi geliyor.pc programının sorgulama komutunun sıklığını azalttığımda sorun olmuyor..yalıtımlarını pc'nin max232 ile, seri haberleşen cihazınkini optocoupler ile yaptım.yoksa taşmamı oluyor.sorun nedir anlayamadım

Sorgulama komutu yokken ve sıklığı az iken sorun olmuyor da sıklık artınca oluyor ise, iki cihaz birbirinden habersiz veri yolluyor demektir. Bu sorunu aşmak için  veri yollarken sıralama yapmak gerekir. Mesela ilk sıra PC ' nin, PC veriyi yollayınca sıra ikinciye gelecek, o yollayacak. Yani Slave ' ler kendisine sıra gelmeden hiçbir zaman veri yollamayacak.

canbulut


[/quote]

Sorgulama komutu yokken ve sıklığı az iken sorun olmuyor da sıklık artınca oluyor ise, iki cihaz birbirini beklemeden veri yolluyor demektir. Bu sorunu aşmak için veri yollarken sıralama yapmak gerekir. Mesela ilk sıra PC ' nin, PC veriyi yollayınca sıra ikinciye gelecek, o yollayacak. Yani kendisine sıra gelmeden hiçbir zaman veri yollamayacak.
[/quote]

.forumda bir arkadas bu sorunu seri girişe 1.6klık direnç ile pull up yapıp düzelttiğini yazmış.benim sorunumla aynımı anlayamadım
https://www.picproje.org/index.php/topic,8652.msg54507.html#msg54507
en altta çözümlediğini söylüyor.
hasan hocam dediğinizi deneyeceğim.ilginize teşekkürler.

-Hasan-

Alıntı yapılan: canbulut - 24 Ağustos 2011, 01:20:37
forumda bir arkadas bu sorunu seri girişe 1.6klık direnç ile pull up yapıp düzelttiğini yazmış.benim sorunumla aynımı anlayamadım
https://www.picproje.org/index.php/topic,8652.msg54507.html#msg54507
en altta çözümlediğini söylüyor.

Sizin probleminizle aynı olamaz. Eğer öyle olsaydı sorgulamayı kaldırdığınızda da veri alamazdınız.

canbulut

sıralı hserini denedim fakat yinede yanlış alma yaptığı oluyor.bunu sıfır hata yapmam gerekiyor.ben iki pic kullansam ve birisi ana pic olsa ve pcye bağlı olan bu pic olsa diğer picte seri veri gönderen cihaza bağlasam bu pice bilig geldiğinde rb0 kesmesini aktif hale getirip ana picte serin2 gibi bir başka pinle gelen veriyi alsam derdime derman olurmu?

-Hasan-

Bence bu sorun Master Slave ilişkisinin kurulamamasından oluyor, işin temelinden bende bahsedeyim.

PC --> Master
PIC --> Slave 1
Diğer Cihaz --> Slave 2

Bu iki Slave ' ede ayrı ayrı 2 ' şer byte ID ' ler verelim: (Yazıyı tam okuyunca, neden 2 ' şer ID verdiğimi anlayacaksın)

PIC --> Slave 1                ID=100-200 (onluk tabanda)
Diğer Cihaz --> Slave 2    ID=150-250 (onluk tabanda)

Slave ' ler veri alacak durumda beklerler. Mesela PC ilk önce arka arkaya 100-200 sayılarını gönderir. İki Slave de bu sayıları alır ancak bu 2 byte ' lık ID PIC ' in olduğu için, diğer cihaz hiç bir şey yapmaz, bir sonraki ID ' yi alabilmek için tekrar veri alma konumuna geri döner. Bu ID PIC ' in olduğundan, PIC göndermesi gereken bilgiyi PC ' ye yollar.

PC, PIC ' ten gelen veriyi aldıktan sonra, diğer cihazın ID ' sini (150-250) yollar, o cihazdan da veriyi aldıktan sonra, yine başa dönülür.

Eğer burada ID ' ler 2 ' şer byte olmasaydı; PIC ' in gönderdiği verinin, diğer cihazın ID ' si ile aynı olması durumunda, diğer cihaz, PC ' nin kendisinden veri istediğini düşünerek, o da veri yollardı, halbuki o bilgi ID ' değil, PIC ' in gönderdiği datadır. Yani senin tabirinle yine çorbaya dönerdi. Başka bir deyişle bir cihazın gönderdiği datanın, diğer cihazın ID numarasına eşit olma olasılığını ortadan kaldırmak için. 2 ' şer byte ' lık ID vermemin sebebi budur.

Sisteminizi bu şekilde yaparsanız, eğer bir hata yoksa hiçbir zaman veriler karışmaz. Master-Slave ilişkisi bu şekilde olur.



canbulut

ıd konusunda hata yok.iki byte ıd kullanıyorum.ayrıca sorun ıdde olamaz çünkü  başka slave kart takılı değil ki denememde.bilginin karıştığı yer şurası..pic hem pc'ye bağlanıyor hemde sadece veri gönderen  harici bir tx yapan cihaza bağlanıyor.daha öncede söylediğim gibi pc sürekli bir sorgulama yapıyor.tx yapan harici cihaz ne zaman göndereceği belli değil.gönderdiğinde ya pic gönderdiğini hiç alamıyor yada alıyor göz ardı ediliyor.ya da pcden gelen bilgi ile harici txden gelen veri birbirine çorba oluyor.
pcnin sürekli sorgulamasının amacı şu bilgi varmı diye soruyor.varsa elmaya git harici txden ne gelmişse al.yoksa bana ıdni ve # gönder.bilgi yokken sürekli pc ekranında çalışıyor yazıyor.varsada bilgi bilgiyi alıyor işleyip tekrar veri gönderiyor.böyle bir döngüde çalışıyor.

canbulut

Alıntı yapılan: Hasan Oguz - 24 Ağustos 2011, 15:01:09
Bence bu sorun Master Slave ilişkisinin kurulamamasından oluyor, işin temelinden bende bahsedeyim.

PC --> Master
PIC --> Slave 1
Diğer Cihaz --> Slave 2

Bu iki Slave ' ede ayrı ayrı 2 ' şer byte ID ' ler verelim: (Yazıyı tam okuyunca, neden 2 ' şer ID verdiğimi anlayacaksın)

PIC --> Slave 1                ID=100-200 (onluk tabanda)
Diğer Cihaz --> Slave 2    ID=150-250 (onluk tabanda)

Slave ' ler veri alacak durumda beklerler. Mesela PC ilk önce arka arkaya 100-200 sayılarını gönderir. İki Slave de bu sayıları alır ancak bu 2 byte ' lık ID PIC ' in olduğu için, diğer cihaz hiç bir şey yapmaz, bir sonraki ID ' yi alabilmek için tekrar veri alma konumuna geri döner. Bu ID PIC ' in olduğundan, PIC göndermesi gereken bilgiyi PC ' ye yollar.

PC, PIC ' ten gelen veriyi aldıktan sonra, diğer cihazın ID ' sini (150-250) yollar, o cihazdan da veriyi aldıktan sonra, yine başa dönülür.

Eğer burada ID ' ler 2 ' şer byte olmasaydı; PIC ' in gönderdiği verinin, diğer cihazın ID ' si ile aynı olması durumunda, diğer cihaz, PC ' nin kendisinden veri istediğini düşünerek, o da veri yollardı, halbuki o bilgi ID ' değil, PIC ' in gönderdiği datadır. Yani senin tabirinle yine çorbaya dönerdi. Başka bir deyişle bir cihazın gönderdiği datanın, diğer cihazın ID numarasına eşit olma olasılığını ortadan kaldırmak için. 2 ' şer byte ' lık ID vermemin sebebi budur.

Sisteminizi bu şekilde yaparsanız, eğer bir hata yoksa hiçbir zaman veriler karışmaz. Master-Slave ilişkisi bu şekilde olur.


ayrıca diğer cihaz slave2(slave değil master değil.slavelere bağlanan gönderici) değil.diger cihaz dediğin slave1'in kullandığı bir harici gönderici.slavelerin hepsinin üzerinde olacakki harici göndericiden aldığı bilgiyi picslave1 işleyecek picslave1 bunlar geldi diyecek.al pc sana benim ıd'm ve harici göndericiden aldığım bilgilerde bunlar diyecek.bu işlemleri yaptırıyorum sorun yok fakat dediğim gibi pcnin sorgulama süresi azaldıkça bilginin yanlış gelme olasılığıda artıyor.