avatar_ete

Seri ve RF iletişim Sistemlerinde Master - Slave İlişkisi Üzerine bir Çalışma

Başlatan ete, 04 Eylül 2011, 16:33:47

ete

İsak Yazmış;
Alıntı Yapmerhaba hocam
verici kısmı için verdiğiniz programı derledim ama hata veriyor düzenlenmesi gereken yerler var mı.
derleyici demo değil şimdi.
birde benim vermiş olduğum alıcı kısmı için diğer eksiklikler nelerdir.Select case kısmı doğru mu.Ledleri yakma kısmı hangi döngünün altına yazılacak ben dorğru yere yazmışmıyım bir bakarmısınız.

ete

Master programına devam ediyoruz.

Başla satırından itibaren 1. sensöre bilgilerini mater'a yollaması için emir göndermiştik. Hatırlamak için yeniden yazalım;

BASLA:
      KIMLIK =0  'daha önce  ID=0 demiştik ama anlaşılması için KIMLIK değişkeni kullanıyorum
      Kime=1
      Veri=10
      Gosub Yolla
      GOSUB DELAY

Bu emir yollandıktan sonra Master , birinci sensör kartından gelecek bilgiyi o konumda beklemesi lazım. Bilgi USART üzerinden geleceği için aslında gidip Hserin komutunun başınada beklemesi gerekmiyor. Kaldığı konumda  önceden sıfırlamış olduğu değişkenin sıfırdan farklı olmasını beklese işi görülmüş olacaktır. Bakarsak KIMLIK=0 demiştik. O halde birinci sensörden bekleyeceğimiz mesaj alındığında KIMLIK=1 olması gerekecek. Bu nedenle buraya;
BEKLEBIR:
        IF KIMLIK=0  THEN BEKLEBIR

yazarak programı burada bilgi gelinceye kadar bloke ediyoruz. Aslında başka işimiz olmadığı için programı burada bloke ediyorum. Yoksa bekleme anında başka işlerlede programı meşgul edebilirdik. Şimdi beklenen mesajın geldiğini ve KIMLIK=1 olduğunu varsayalım ki öyle olacaktır.

         TOGGLE PORTB.0:pause 50
komutu ile PortB.0 daki led'in yanmasını sağladık bu yalnızca bilgi geldiğini anlamak için görsel bir tedbir koyulmasada olur elbette.
Şimdi gelen bilginin istediğimiz bilgi olup olmadığını test edelim. Olurya bir başka yerden bir bilgi gelebilir. O halde buyrun;
       
         IF KIMLIK=1 THEN
            SENSOR_BIR=GELEN
            IF GELEN=10 then LED=1
            GOTO IKI
         ELSE
            GOTO BASLA
         ENDIF
Gelen bilgi bir nolu sensör kartından gelmiş ise önce bu bilgiyi bir başka değişkene aktarıyoruz.
sonra gelen bilgi şayet sensörünaktif olduğunu gösteriyor ise led'i yakıyoruz. ve ikinolu sensör ile çalışmak üzere GOTO IKI komutu ile bir başka etikete atlıyoruz.
Şayet gelen bilgi istediğimiz bilgi değil ise işe baştan başlamak üzere en başa yeniden gidiyoruz.

İki nolu sensörle çalışma üzere IKI isimli etikete geldiğimizde yukarıda bir nolu sensör için ne yapmış isek aynı işleri iki nolu sensörle yapacağız.
KIMLIK=0 önce kimliği sıfırlıyoruz.
KIME=2 'emrin 2 nolu sensöre verildiğini ifade ediyor
VERI=10  sensörü oku ve bilgisini yolla emrine karşılık geliyor.
GOSUB YOLLA
GOSUB DELAY
bundan sonrasını yazmıyorum artık aynı olaylar tekrarlanacak çünki.
İkinci sensörden istenen emir geldiğinde gelen bilgi SENSOR_IKI=GELEN
değişkenine atılacak ve gelen=10 ise Led yakılacak vs. Aynı olayları tekrarlayacak ve sonuçta 3 nolu sensörü izlemek üzere bu sensöre emir yollayacağız.
Ordan gelen bilgileride aldıktan sonra son bir durum değerlendirmesi daha yapacağız. 3 sensör sonucuna bağlı olarak;
        IF SENSOR_BIR=10 or SENSOR_IKI=10 or SENSOR_UC=10 THEN
           ROLE=1
           LED=1
        ELSE
           ROLE=0
           LED=0
        ENDIF
Role yi her ihtimale karşın ilave ettim istemeyen röle komutlarını çıkartabilir. Burada 3 sensörden her hangi birisin değeri 10 ise yani sensör=1 olmuş ise led yanık kalacak değilse led söndürülecektir.
Bu sonuş bilgisi şayet RS232 üzerinden PC ye aktarılacak ise bir iki komut ilave ederek.
If led=1 then
    VERI=10
else
    VERI=0
ENDIF
SEROUT2 PORTA.0, 84, [VERI,10,13] şeklinde elimizdeki led bilgisini PC ye aktarmış olacağız. PC bağlantısı MAX232 entegresi üzerinden PortA.0 pini aracılığı ile bağlı olacaktır.
PC tarafında gelen bilgi 10 ise led yanıyor sıfır ise led sönük demek olacaktır.
Veri değişkeninden sonra kullanılan 10 bir linefeed komutudur, 13 ise RETURN komutudur. Verilerin bittiğini işaret eder.

İşin USART kısmınada bir bakar isek orada beklenen bilgi; KIMLIK ve GELEN isimli iki değişkenle alınmalıdır. Kimlik bilgi yollayan sensör kartının numarası olarak geri dönecek, Gelen ise sensörün durumunu gösterecektir. 10 ise sensör=1 , sıfır ise sensör=0 anlamınadır.

Hepsi bu kadar. Bu şekli ile program bitirilmiş oluyor. Gerisi satırları yazmak olacaktır. Onuda yaparsınız umarım.

Ete

ete

Edran Yazmış ;
Alıntı Yapete hocam, ben de benzer bir proje üstünde çalışıyorum anlayamadığım nokta şu master slave isis simülasyon devresinde slave'lerin tx uçlarıyla master'ın tx ucu birbirine bağlı aynı şekilde rx uçlarıyla master'ın rx ucu bağlı bildiğim kadarıyla max487 uzak mesafelere veri göndermek amacıyla kullanılan bir entegre tx uçları rx'e rx uçları tx'e girmesi gerekmezmiydi. Ben en azından max232 de böyle yapıyordum transceiver modüllerinde düşündüğüm gibi slave tx'ler master rx'e ve slave rx'ler master tx'e mi bağlanacak yardımlarınızı bekliyorum


ete

Verdiğim devre şemasında senin bahsettiğin gibi bir bağlantı göremiyorum ben.
Benim bağladığım şekilde, TX ve RX ler Max487 ye giriyor. Dolayısıyla Master ve Slave lerin Tx leri ve Rx leri bir birine bağlı diyemeyiz değilmi?. Max 487 'ler ise bir birlerine bağlanması gereken A ve B pinleri ile bağlılar.
Bu başlığı açtığımız zaman işin algoritmasında başlayarak sonunda örnekprograma kadar gelmiş bulunuyoruz. Asıl amacımız RF yolu ile belirtilen master-slave ilişkisini gerçekleştirmek idi. Ancak devreyi yapmadan simule edebilmek için yaptığım denemelerde birden fazla RX veya TX hattının aynı hatta bağlanması isis tarafından kabul edilmiyor ve çalışan haberleşmelerin hepside bozuluyor. Bende nasıl yaparımda bu simulasyonu çalıştırırım diye düşünürken aklıma RS485 sistemi geldi ve deneyince çalıştığını görüp simulasyonu bu temel üzerinden kurdum. Sonuçta aynı sistem tabiiki RS485 üzerinden gösterdiğim şekilde bağlanarak çalıştırılabilir. Ama RF sistemi ile çalışırken zaten Master ve slave lerin Rx ve TX leri transceiver modüllerine bağlanacağından sorun olmayacaktır.
Ama RS232 de bu sistemin çalışması en azından bu şekilde çalışması mümkün değildir. Yani bütün slavelerin RX bacaklarını birleştirip Master in TX ine ve bütün Slave lerin TX lerini birleştirip Masterin RX bacağına bağlanması sistemi bloke edecektir. Dolaysıyla ortaya şu sonuç çıkıyor;
- Bu sistemi kablolu çalıştıracak iseniz Max485 sistemi le bağlamalısınız.
- Bu sistemi kablosuz çalıştıracak iseniz her modülün RX ve TX ucu TRransceiver'e bağlanacaktır.
Hepsi bu kadar.
Ete,

ete

Matuman Yazmış ;
Alıntı YapEte hocam bu projeyi gerçek hayatta denediniz mi benim elimde şu an 2 adet ufm m11 modülü var ve haberleştirmek istiyorum fakat modül 3 voltta çalışıyor şimdi pic'den modüle giderken voltaj bölücü ile veriyi gönderebilirm fakat modülden pice gelirken 3v u lojik 1 olarak kabul edecek mi yada araya transistör koyarak 5v çıkarmam mı gerekir? yardımcı olursanız sevinirim. saygılar......


ete

Bu projeyi gerçek hayatta denemedim ama bir benzerini denedim.
Modul 3V ta çalışıyor ise İşlemcinin  TX hattına 1K direnç bağla
İşlemcinin RX hattına bir şey bağlaman gerekmez. 3V luk sinyal doğru algılanır. Yani 0,8V ve altı LOW,
2V ve üzeri HIGH olarak algılanır. Ama sorunsuz halledeyim dersen 3V ile çalışan işlemciler mevcut.
Mesela 16F88 rahatlıkla çalışır. Bu işlemci ile direk bağlayabilirsin bu hatları.
Ete

ete

Akrep15 Yazmış ;
Alıntı Yapmetuman ete hocamın dediklerine ek olarak ben de sana şema yollayayım udea firması
modül mikrodenetleyici bağlantısına ilişkin şu şemayı vermiş
http://www.udea.com.tr/dokumanlar/5V-3V-Level_Rev.2.pdf
ayrıca m11 modülünün pdf dosyası içinde lm317 kullanılarak 3.1 V ve yukarısının nsl elde edileceğini vermiş
http://www.udea.com.tr/dokumanlar/UFM-M11.PDF
zaman darlığından ötürü ben de henüz devreleri deneyemedim fakat ete hocamın mantığı gayet güzel çalıştırdığım takdirde bu alandan haber vereceğim

ete

Bu projenin bitmiş haline ait dosyaları ilişiktedir.


Ete

ooben

herkese kolay gelin paylaşımlarınızdan ve çalışmalarınızdan dolayı sizi tebrik ederim .
ben 3-4 ay önce yukarı daki proje benzeri bir proje yapmıştım.
tam olarak şöyle; 1 pic 16f877a pc ile max232 ile (rs232) ile haberleşiyor ve data alıyor aldığı datayı eepromlara kaydediyor.
daha sonra 6 adet pic devresi (ete hocamın sayesinde) kendi aralarında çalışıyorlar ve sonuçta devrelerden birisi rs232 ile haberleşip eepromlara veri yazan
devre ile ortak epromları kullandığ için o epromlardan veri almaya çalışıyor ama alamıyor.
bende bu devreyi iptal edip, rs232 'yi hem pc ile haberleşen hemde max485 lerle haberleşen hale getirmrk istiyorum
bunun için hazır convert ediciler var fakat benim programım (pc için yazılan ) arkadaşım tarafından yazıldı ve askere gitti malesef ki c# bilmediğim için değişiklik de yapamıyorum ama şöyle bi şey yapabilir miyim diye düşünüyorum

nasıl yapılacağını bilmiyorum ama

eğer rs 232 max convert eden bi şema bulabilirsem  ve oradaki max485'in 2. ve 3. bacğından veri gönderimi veya alımını kontrol eden bacağı 16f877a'ya bağlarsam
çalıştırabilirmiyim mesela sn75176 gibi bi entegre ile olabilirmi
yada bu konuda yardımcı olurmusunuz
saygılarımla
bülent kugu

atalix

herkese selamlar, aklınıza ve emeklerinize sağlık.
ETE hocam bu çalışma dan girişleri 8 bit yapar isek bize 128 adet lik bir çözünürlük verir diye düşündüm, bununla otopark lardaki dolu/boş veya işyerlerindeki lambaların arızalı/sağlam bilgileri gibi birşeyler yapılıp ticari bir ürüne dönüşebileceğini zannediyorum ne dersiniz. saygılar, herkese.

not: konu sıkıntısı açısından bunları yazdım.

ete

Çözünürlük denilen şey tamamen kişinin kafasında oluşturduğu şekildir. Ben bir otopark sisteminde her kata 128 adet park yerini denetleyecek bir sistem yaparım ve buradan aldığım bilgiyi tek bir RF kartı ile ana merkeze aktarabilirim. Bu yalnızca 2 kart ile yapılan bir RF sistemi olur.

Ama aynı işi guruplara böler ve 8 ayrı RF kartı ilede yapabilirsiniz.  Yada ne bileyim her bir 64 lük gurubu bir RF kartına bağlayıp 2 RF kartı ilede halledebilirsiniz. Bu tamamen çevresel faktörler değerlendirilerek yapılacak bir iş.
Ama aklın sınırı yok senin dediklerinide uygulamak mümkün.

Ete

ugurkantar

ete hocam öncelikle size çok tesekkur ederim . sizin derslerinizle öğrendiğim picbasici sıkıntıyasadığım noktalarda hep sizinle çözdüm.bu yüzden size çok dua ettim. şimdi bir sorum olacak size bir sorunum olacak birkaç zamandır seri haberleşme üzerinde uğraşıyorum . c# ile yazdığım bilgiyi kablosuz olarak göndermek ist.iyorum. rs232 çıkışına max232 koydum . ondan aldığım bilgiyi direk vericiyle gönderebilirmiyim yoksa max232den sonra bir pic koyup ondan mı gönderecem. ben pıcle denedim olmadı .pıcsiz denedim olmadı. hata bende ama hangi yoldan devam etmeliyim . yardımcı olursanız çok sevinirim...

ete

Pic den PC ye veya PC den Pic'e bir RF bilgisi yolluyor isen mutlaka max232 den geçirerek yollaman gerekir.
Onun dışında Picden Pic'e yada PC den PC ye yollanan bilgilerde max232 kullanmak gerekmez.

C de yazdıpın programlara fazla yardımcı olamayız elbette ama akıl verme açısından tarifle açıklarsan belkide yardımcı olabiliriz.
EN çok karşılaşılan sorunların başında seviye uyuşmazlığı (MAx232 kullanılmaması yada yanlış kullanılması) gelmektedir.
Diğer bir sorun ise haberleşme hızlarının her iki tarafta aynı değere ayarlanmaması gelir.

Başka bir sorunda RF modüllerin bazılarında olan data formatına uyulmaması geliyor. Pek çoğunda format denilen şey yok ama transceiver denilen alıcı verici modüllerin pek çoğunda data belirli format içinde yollanır.

Başka bir sorun ise İşlemcilerde  RX ve Tx Pinlerinin yanlış kullanılmasıdır. Bu konuda genel kaide daima şöyledir.
Bir bilgi yollayan TX den yollar Alan ise RX den alır. Dolayısıyla vericinin TX pini alıcının RX pinine bağlanmalıdır. Arada Max232 kullanılırsa bile bu böyledir.

Max232  de TTL girişleri (+5V veya 0 V girer) TTL çıkışları vardır. Bazı şekillerde TTL giriş RS232Çıkış olarak ifade edilir.
AYnı şekilde Max232 de RS232 giriş (+10V ve-10V giriş) ve RS232 çıkış vardır (+5V ve 0V) Buda bazı şekillerde RS232 giriş ve TTL çıkış şeklinde açıklanır. Bunları şaşırmadan kullanmak gerekir. Sonuçta Max232 yaptığı çevirme işleminde TTL, +5V tu -10V RS232'ye , 0V TTL i , +10V RS232 ye çevirir. Tabiiki bu işlemin tersinide yapar.

Bunları bildikten sonra dikkatlice inceleyerek devreni kontrol eder ve varsa programdaki hatalarını düzeltip yeniden deneme yapabilirsin.  Sorun devam ediyor ise yeniden tartışabiliriz.

Belkide simulasyon sorunu bulmak açısından iyi bir gösterge olabilir. Buraya varsa isis dosyalarını ve hex dosyalarını koyarsan belki bizde bir şeyler yapabilriz.

Ete


ugurkantar

cevap verdiğiniz için çok tesekkur ederım. Hocam soruma ben tam olarak nalatamamısım herhalde. Pcden sonra max232 yi koyuyorum. Bundan aldığım bilgiyi direk vericiyle (udea atx34) göndersem olurmu yoksa .yoksa max 232den ile verici modul arasına bir pic koymam muhakkak gereklimi. simulasyonda çalışıyor hocam ben size yaptığımı gönderiyim. inşalalh bu amatörün yazdığından anlarsınız:)

ete

PC den sonra mademki MAX232 koyuyorsun 232 den çıkan ucu direk RF vericisine girebilirsin. Araya birde pic koymanın gereği yok. Verici girişine ne gelmiş ise onu aktarır. Dolayısıyla PC den gelen veri TTL formatına çevrilip yollanmış olur . Alıcıda (pic) bunu yine TTL formatında alır ve değerlendirir.

Ete

Powered by EzPortal