Proton+ Usart ile çok sayıda pic aynı hattan nasıl haberleşecek ?

Başlatan gtekdemir, 16 Ekim 2011, 22:56:43

gtekdemir

Merhaba arkadaşlar, çözmem gereken şöyle bir problemim var yardımcı olmanızı rica ediyorum sizlerden. Yapacak olduğum akıllı ev otomasyonu projesinde çok sayıda pic kullanmam gerekiyor ve bu pic'lerin birbirleri ile haberleşmesi gerekiyor. Sistemde bir adet master, dört adet slave pic var. Bahsettiğim dört tane slave pic, master pic tarafından yönetilecek ve karşılıklı veri aktarımı olacak. Bu haberleşme gereksinimi için USART kullanmayı düşünüyorum. Projede kullanılacak olan slave adeti standart bir rakam olmadığı için modüler bir yapı olacak. Yani herbir slave modülün belli sayıda giriş-çıkış portu olacak (saha kontrol için) ve RS232 haberleşme olacak ve slave modül sayısı arttırılıp azaltılabilecek.

2 telli haberleşme hattına ayrıca bir adette wifi-RS232 converter bağlı olacak. Sahadaki bir bilgisayardan wifi ile gelen komutlar wifi-RS232 çevirici ile 2 telli haberleşme hattımıza data gönderecek/alacak. Aynı haberleşme hattına bağlı olan bu modüller arasında nasıl bir haberleşme mantığı kurmalıyım sizce ?

Sistemin kabaca şöyle olacak.       

OG

Master ile slave'ler arasını kesip master'dan slave'lere başka bir RS232/485 ile bağlanman daha uygun olur. Master bir taraftan PC yi gözetleyecek diğer taraftan slave'leri kontrol edecek.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Kabil ATICI

Anladığım kadarıyla master olarak tanımladığın aslında bir köprü olacak. Eğer işlemcini ikinci bir rs232 girişi varsa sorun yok. Yeter ki işlemciler kendilerine uyarı geldiğinde cevap verebilsinler.

Tek yapman geren master (işlemciler tarafı) rx girişine 'veya' kapısı koymak. diğer işlemcilerin tx uçları bu 'veya' kapısı girişlerine bağlanacak bağlanacak. Master (işlemciler tarafı) tx ucu diğer işlemcilerin rx uclarına doğrudan bağlanabilir.

Eğer işlemciler arasındaki mesafe uzaksa iletişim sorun olabilir. Bu durumda kablo ile uazaktan erişimli iletişim yöntemlerinden birini seçmen gerekebilir.
ambar7

gtekdemir

Alıntı yapılan: ambar7 - 17 Ekim 2011, 12:49:27
Anladığım kadarıyla master olarak tanımladığın aslında bir köprü olacak. Eğer işlemcini ikinci bir rs232 girişi varsa sorun yok. Yeter ki işlemciler kendilerine uyarı geldiğinde cevap verebilsinler.

Tek yapman geren master (işlemciler tarafı) rx girişine 'veya' kapısı koymak. diğer işlemcilerin tx uçları bu 'veya' kapısı girişlerine bağlanacak bağlanacak. Master (işlemciler tarafı) tx ucu diğer işlemcilerin rx uclarına doğrudan bağlanabilir.

Eğer işlemciler arasındaki mesafe uzaksa iletişim sorun olabilir. Bu durumda kablo ile uazaktan erişimli iletişim yöntemlerinden birini seçmen gerekebilir.

İki usart'lı pic araştırıyorum şu anda, bildiğiniz bir pic varsa tavsiyelerinizi beklerim. Slave piclerin tx çıkışına veya kapısı koymaya neden gereksinim duyuyoruz pek anlam veremedim. Picler arası mesafe oldukça yakın 20cm falan. 

Kabil ATICI

Aslında ben AVR üzerinde çalışıyorum.
Pardon aslında ve kapısıymış.
Slave tx uçlarına eğer 've' kapısı ile bağlamazsan , bir tanesinde sinyal değişiminde (normal konumda lojik-1 seviyesinde kalır) uart diğer slave işlemcilerin çıkışlarında yükleme yapacaktır.

usart  nomalde lojik-1 seviyesinde kalır,işlemci iletişime geçtiği ilk anda lojik-0 (kısa süre için) darbesi olşturu sonra verileri lojik-0 veya lojik-1 olarak devam eder.

Eğer bu işlemi kapı kullanmadan bağlarsan diğer işlemcilerin çıkışlarında (tx) yükleme yapacaktır.

en azından aşğıdaki gibi bir çözüm olabilir.


Not:Umarım lojik kapıların çıkışlarının bağlanması konusunda bir sorununuz yoktur.
ambar7

ErsinErce

burada OG hocamın dediği yöntem ile en sağlıklı iletişimi kurabilirsin,
Diğer türlü kapılarla yapıcaksan Mux(Tx)-Demux(Rx) bağlantısıyla kanal seçtirerek iletişim kurabilirsin.
Direk And, Or kapılarıyla iletişim kurmada sorun yaşarsın

eistain_54

Bence pcden gelen geriyi tx rx girişlerine uygula.Slave kartlar için ise her kart için bir adres oluştur ve yazılımsal seri iletişimle verileri aktar.Örneğin resimdeki sıraya göre ilk slave #1 adresli olsun ve 2.si #2,#3,#4...Aktaracağın veriyi bir başlıkla aktar ve alıcı katında da her alıcı kendi adresini kontrol etsin ve eğer başlık dosyası kendisine ait ise o veriyi işlesin değilse ilgili birim o veriyi değerlendirsin.Bu şekilde usart kesmesi ve benzeri kesmeleri kullanarak master tarafıda slave tarafıda yormamış olursun.Kimse gelen mesajları kontrol etmek zorunda kalmaz.Herkez kesmeyle ilgilenir.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

OG

Hız çok yüksek olması gerekmiyorsa zaten usart'a bile gerek yok. Herhangi bir pin ile 47619B hızda çalışabilirsiniz (20MHz).
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Kabil ATICI

İkinci bir USART ye ihtiyacın olmayabilir. Aynı işlemi yazılım emülasyonu(veya simülasyon) ile de sağlayabilirsin.  O zaman herhangi iki bacağı kullanabilirsin.
ambar7

gtekdemir

Alıntı yapılan: eistain_54 - 17 Ekim 2011, 19:00:03
Bence pcden gelen geriyi tx rx girişlerine uygula.Slave kartlar için ise her kart için bir adres oluştur ve yazılımsal seri iletişimle verileri aktar.Örneğin resimdeki sıraya göre ilk slave #1 adresli olsun ve 2.si #2,#3,#4...Aktaracağın veriyi bir başlıkla aktar ve alıcı katında da her alıcı kendi adresini kontrol etsin ve eğer başlık dosyası kendisine ait ise o veriyi işlesin değilse ilgili birim o veriyi değerlendirsin.Bu şekilde usart kesmesi ve benzeri kesmeleri kullanarak master tarafıda slave tarafıda yormamış olursun.Kimse gelen mesajları kontrol etmek zorunda kalmaz.Herkez kesmeyle ilgilenir.

Söylediğiniz şekilde yapacak olursam şöyle bir problem ortaya çıkabilir mi? Varsayalım slave1 içersindeki komut sırasına göre i/o portlarını kontrol ederken master pic bahsettiğimiz slave1' e birkaç byte lık veri göndermek istedi. Bu durumda master, yazılımsal usart kullandığımda(kesmesiz) veri kaybı olmadan problemsiz şekilde nasıl haberleşecek slave pic ile ? 

gtekdemir

Alıntı yapılan: OG - 17 Ekim 2011, 19:13:08
Hız çok yüksek olması gerekmiyorsa zaten usart'a bile gerek yok. Herhangi bir pin ile 47619B hızda çalışabilirsiniz (20MHz).

OG hocam, 47619bps benim için yeterli bir hız. Fakat yazılımsal olarak haberleşme yaptığımda veri geldiğinde kesme olmayacağı için gelen verinin tamamı sorunsuz şekilde nasıl alınacak orada takıldım.

omereliusuk

hocam tam bilmemekle birlikte sizin bahsettiğiniz CAN haberleşmeye çok  benziyor "tabi ben can haberleşmenin ne demek olduğunu biliyorsam". bir araştırsanız bilmiyorum belki pic le de olur.

eistain_54

Alıntı yapılan: gtekdemir - 17 Ekim 2011, 22:29:42
Söylediğiniz şekilde yapacak olursam şöyle bir problem ortaya çıkabilir mi? Varsayalım slave1 içersindeki komut sırasına göre i/o portlarını kontrol ederken master pic bahsettiğimiz slave1' e birkaç byte lık veri göndermek istedi. Bu durumda master, yazılımsal usart kullandığımda(kesmesiz) veri kaybı olmadan problemsiz şekilde nasıl haberleşecek slave pic ile ? 
Hocam ilk etapta şunu belirteyim.Her slave için bağlantı uçları kesme uçlarına bağlanacak.Örneğin 84a kullanıyorsunuz diyelim.Slave kartlarda.Master karttan gelen veri rb0/int ucuna girecek.Düşünüyorumda şu yöntem daha uygun sanki.Master karttan veri çıktığında bütün slave kartlar kesmeye girer.Slave kartları bir kaç ms yada us kesmede bekletip göndermek istediğiniz her veriyi paketleyip başınada adresi yazıp göndermek olarabilir.Ancak bu durumda aklıma şu sorun geldi.Okuma yapmak istediğinde yani slave kartlardan veri istersen aynı anda 2 slave veri yollarssa ne olur?o zamanda her slave kendi adresiyle veri paketlerini yollasınlar.master ise her bir slave için ayrı değişkenler oluşturup o değerleri okuma bittikten sonra değerlendirsin.Yani master için 3 süreç
1.Oku ve değişkenlere aktar.
2.Değerlendir.
3.Değerlere göre yeni değerli yolla.
Her slave kart için belirli bir okuma süresi olsun.ardından hangi karttan okuma istiyorsa göönderdiğin okuma şifresinialıp istenen veriyi yollasın.Ama bu seferde her iletişim sürecinde bütün kartlar kesmeye gidecekler.Hacı en iyisi sen bu yöntemi boşver.Zaten yazarkende kafamda soru işaretleri vardı. :-[ :P :-X
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

OG

TTL yapıdaki seri data, invert değilse skünet anında HIGH da bekler, data göndermeye başlayınca LOW a iner. İnvert de de tersi.  Bunu takip edebilirsiniz. İlk birkaç byte önemsiz data gönderirsiniz ki kaçırılsa da problem olmaz.

Sonra bir tanımlayıcı data gönderirsiniz, sonra esas data, yani,

X,Y,Z,A,H,M,E,T,d_1,d_2,...d_n

X,  Y,  Z  = Önemsiz datalar,
A, H, M, E, T = Kafa datası (bu takip edilir, AHMET den sonrakiler kullanacağın datalardır)
d_1, d_2, d_n = Kullanılacak data
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

gtekdemir

Alıntı yapılan: OG - 18 Ekim 2011, 01:50:45
TTL yapıdaki seri data, invert değilse skünet anında HIGH da bekler, data göndermeye başlayınca LOW a iner. İnvert de de tersi.  Bunu takip edebilirsiniz. İlk birkaç byte önemsiz data gönderirsiniz ki kaçırılsa da problem olmaz.

Sonra bir tanımlayıcı data gönderirsiniz, sonra esas data, yani,

X,Y,Z,A,H,M,E,T,d_1,d_2,...d_n

X,  Y,  Z  = Önemsiz datalar,
A, H, M, E, T = Kafa datası (bu takip edilir, AHMET den sonrakiler kullanacağın datalardır)
d_1, d_2, d_n = Kullanılacak data

Master ve slave modüller TTL değil MAX232 ile RS232 seviyesinde haberleşecekler. Slave TX çıkışları birleşip Master RX girişine bağlanacaklar, aynı şekilde Slave RX girişleri birleşip Master TX çıkışına bağlanacak sanırım bu bağlantı şekli bir problem oluşturmaz. Daha önceden MAX485 kullanarak dört adet pic haberleşmesi yapmıştım herhangi problem olmadı şimdi MAX232 kullanıyorum. Önceden yaptığım  çalışmadan farklı olarak bu projede ilave olarak PC var ve slave modüllerin I/O sayısı çok fazla, bu durum beni biraz endişelendiriyor. 

OG hocam dediğiniz gibi bir mantık kurmayı düşünüyorum.

1- Master bir byte büyüklükte önemsiz bir uyandırma bilgisi (%10111101) gönderecek böylece Slave modüller kesmeye giderek hazırda bekleyecek.
2- Uyandırma bilgisinin ardından bir byte adres bilgisi (%00000011, %00001100, %00110000, %11000000 gibi) gidecek ve ilgili slave dinlemeye devam edecek, diğer slaveler ise dinlemeden çıkıp işine devam edecek.
3- Dinlemedeki ilgili slave modüle birkaç byte uzunluktaki bilgi gönderilecek
4- Gelen birkaç byte uzunluktaki bilgiyi yorumlayan slave buna karşılık birkaç byte uzunluktaki veriyi master modüle gönderecek.
5- Master zaten dinlemede olduğu için ilgili slave modülden gelen veriyi değerlendirecek, sonrasında gerekiyorsa PC ile haberleşerek sahadan gelen veriyi PC'ye iletecek