Çift taraflı haberleşme

Başlatan hakıkat, 17 Haziran 2014, 14:05:42

hakıkat

Merhabalar
Elimde bir devre var programını bir düzeye getirdim.Devreye ilişkin pbp ile alıcıya gönderilen bilginin gittiğine ilişkin
vericiye bilgi gelmesini istiyorum.Ama programda giden bilgi geri geliyor ve takılı kalıyor yani istem dışı bir şey gelişiyor.
program dosyası aşağıdadır.
http://s3.dosya.tc/server24/rULZEL/devre.zip.html]

ete

Çift taraflı haberleşmede iki vericininde aynı anda çalışmamasını sağlamak gerekir.
Tranceiverler bu işi otomatik yapabiliyor. Yeterki sen her iki tarafta da gönderme emrini aynı anda verme.
Programlarında bunların çakışmaması için bir algoritma göremedim. Rastegele çalışıyor sistem ve bir noktada çakışma olması kaçınılmazdır.

Her iki programda da programın hangi frekansta çalışacağı belirlenmemiş. Bu sorun çıakrtabilir.
Define OSC 4 şeklinde programın başında frekans belirlenmeli .

Kesme kullanılan programlarda Pause kullanılması çok sakıncalıdır. Bunu kullanmaktan mümkün olduğunca sakınmalısınız.
Sebebini yüzlerce kez izah ettim. Basic komutu bitmeden program kesme emri gelsede kesme etiketine atlamaz.
Pause 1000 giib bir komut kesmeyi 1000 ms geciktirir. Aynıanda veri yolundan bir veri gelmiş olsa alamayacaksın anlamına gelir.

Hserin 1..... şeklinde 1 ms lik bir bekleme ile verilen komut da 1 ms içinde gelen verileri alması mümkün değildir. Buraya en azından 5 ms süre verilemesi gerekir.

Yollama komutlarında tek bir Hserout satırı yeterlidir. fazlası sorun çıkartır. Hele kesme kullanılıyor ise kesinlikle 1 komut yeterli olacaktır.

USART kesmesi geldiği zaman ki bu kesme parazitten dolayıda gelebilir kesme bayrağının sıfırlanıp kesmeden çıkılması gerekir.
RCIF registeri kullanıcının direk ulaşabildiği bir register değildir. Sen her ne kadar RECIF=0 yazsanda bu komut hiç bir işlem yapmayacaktır. Onun yerine TEMP=RCREG komut satırı RECIF bitini sıfırlar. Bu bayrak sıfırlama komutunu ATLA satırından evvel koymuşsun. Parazit geldiğinde program Wait komutu ile beklenen veriyi belirlenen süre kadar bekleyecek ve sonra ATLA satırına atlayıp RCIF bitini sıfırlamadan kesmeden çıkacak ve bayrak sıfırlanmadığı için yeniden kesmeye girecektir. Bu nedenle TEMP=RCREG komut satırını ATLA etiketi altına koyman daha doğru olur.

Gördüğüm görsel kusurlar bunlar. Şema yükleyemediğim için (Proteus V.8 den dolayı) oradan bir şey göremedim.

Ete



hakıkat

Hocam belirtiğiniz noktaları düzelttim ama sorun giderilmedi.Sadece algılama boyutunda süre olarak eskiye oranla
daha fazladır.

ete

Mutlaka bir protokol uygulaman gerekir. Aksi halde çakışma olacaktır bu kaçınılmaz.
Aynı anda iki verici açık olamaz. Sende vericiler açık ise o yüzden çalışmıyordur.
Vericileri on/off kontrolü ile çalıştırman gerekir yada transceiver kullanman gerekir.

Ete

hakıkat

Hocam modul olarak transceiver kullanmaktayim.Kusura bakmayin başta belirmem gerekiyordu. :-[

hakıkat

Merhaba hocam
Programla biraz uğraştım verici kısımı sorunsuz çalışmakta ama alıcı kısımı  gönderilen bilgiyi alamadığından dolayı
haberleşme gerçekleşmemektedir.Yani anladığım kadarıyla haberleşme komutları istenilen kısma ulaşamamaktadır
bu sorun nasıl giderilebilir.yardımcı olursanız sevinirim.Son hali aşağıdadır.
   http://www.dosya.tc/server31/xNQBNu/devre.zip.html

ete

#6
Verici kısmı verme işinde çalışabilir ama Kesmeye gitme komut satırını kapatmışsın bu demektir ki verici programa alıcıdan bir mesaj gelirse alamayacaktır. Çalışmama sebebi bu olabilir. Birden fazla yollama komutu kullanma demiştim aynen duruyor o satırlar. Hem alıcıda hem vericide üstelik. Kesme bayrağını temp=RCREG sıfırlar bunu ATLA satırının altına koy demiştim yine aynı yerde duruyor. Hataların devam ediyor anlayacağın. Gecikmelerin programda sorun yaratacağını söylemiştim. Sen döngü gecikmesi kullanmışsın ama hala 10 ms lik adımlar halinde gecikme yaratıyorsun. Kesme kısmına bak senin Hserin komutun en fazla 5 ms bekliyor bir şeyi almak için ama sen 10ms gecikme koyuyorsun. Ya gelen bilgi senin program 10 ms bekleme yaparken gelse ne olur gelen bilgiyi kaçırırsın elbet. Bunlar mantık ile halledilebilecek kusurlar ama sen yapmakta ısrar ediyorsun her nedense.

Bana soruyorsun ama kafana göre takılıyorsun. Şemayı göremediğimi söylemiştim hala göremiyorum. Bir resim koymak aklına gelmiyormu. Üstelik bu programı çalışır hale getirmek için simulasyon dosyasına ihtiyaç var mutlaka. Olmadan nasıl çalıştırıp deneme yapabilirimki. Başka kusur aramadaım Kusura bakma bu şartlar altında elimden fazlası gelmiyor.

Ete

hakıkat

Hocam belirttiğiniz gibi yaptım normal bir alıcı -verici gibi çalışıyor ama bilgi alıp almadığını anlayamadım.Bir led yönlendirmesi yaptım ama led yanmadığı için anlayamadım.semanın resmide dosyanın içindedir.
http://www.dosya.tc/server31/xCaLOf/devre.zip.html

ete

#8
İlişikte yolladığım rar dosyasını ayrı bir klasör içinde aç ve hem simulasyonu hemde programları orada bir çalıştır bakalım ne göreceksin. Hatta 2 değişik versiyon hazırladım. Bak bakalım nasıl çalışıyorlar.

Ete

hakıkat

Hocam cok teşekkürler son gönderdiğiniz devre_ete_02 devresi tam istediğim haberleşmeyi karşılamaktadır. :)
                                                                                                                                                   saygılar.

Powered by EzPortal