avatar_Bahri Bilir

Birden fazla slave Tek master ?

Başlatan Bahri Bilir, 09 Eylül 2015, 17:26:38

Bahri Bilir

Sayısı Değişken zamanla eklenip çıkarılabilen bir slave yapısına sahip seri iletişim hattı oluşturmalıyım.Ve bu slaveler max 16baytlık verileri 2 adet hc165 üzerinden alıp veriyi mastere iletmesi gerekiyor.Ama bunu el sıkışma taktiği ile yapmak istemiyorum.Bunu yapmak hem yüksek slave sayılarında süreyi çok uzatacak hemde fazlada veri hattına ihtiyaç duyulacak.
Tek hat üzerinden bütün slaveler güncel veriyi mastera göndermeli.Ama veriler birbirine karışacak.

Sadece verilerde değişme olduğunda slavelerin mastere veri göndermesi hem masterin veriyi alıp alamadığını bilmediğimiz için hemde verilerin yine karışma ihtimali olduğu için uygun değil.

Sizce nasıl bir sistem kurmalıyım?


Proje kendi sondaj makinamızda kullanılmak üzere tasarlanıyor (https://www.facebook.com/profile.php?id=100009254270604)
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

F®T

master bir maestro gibi olacak. 1 nolu slave şu değerler ne oldu soracak ve cevabı beklicek.cevabı aldıktan sonra diğerine aynı şekilde devam edecek.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Bahri Bilir

F.T evet oldukça stabil bir yöntem.Ama bu şekilde denemelerimde 3-4 slaveyi bulduğunda 4. slavedeki değişme çok geç mastere ulaşıyor.

Karşılıklı iletişimde sorular tek seferde alınamayıpda birde arada tekleme yaşanırsa bu süre iş görmez hale getiriyor sistemi.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#3
Aklımda slaveler arasında 1.slavadan çıkıp 2. slaveye giren,2. den çıkıp 3.ye giren ...........10. dan çıkıp 1. ye giren bir lojik hat çekip;
tüm slaveler bu hattı gözetecek,sonra her sleave;  (lojik hat girişi  "g" - lojik hat çıkışı"c"  -  slave no "no")


if g=1 then
  if  güncel veri=1 then
    hserout ["NO",dec3 no,"BLR",dec5 veri]
  endif
    c=1
    pauseus 1
    c=0

endif


şeklnde yazıp tüm slaveleri sırayla verileri göndersin şeklinde yapmayı düşünüyorum.Ama bazı slaveler slave grubuna uzak yerlerde çalışması gerekecek.Bunu için birde 2 tane lojik hat taşımam gerekecek.

Sizce ne kadar seri çalışır?

"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

F®T

#4
Bu şekil olur.Yoksa herkes konuşunca hiç bişi olmaz.Gecikme sebeplerini araştırman lazım.

Dediğin gibi mantıklı değil.Aradaki slave kart bozulunca ne olacak.Bozulandan sonrası nakavt.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Atilla

spi haberleşme protokulunu kullansan sorun çözülür gerçi her slave için bir cs bağlamak biraz can sıkıcı ama güvenilir olur.

Bahri Bilir

#6
Alıntı yapılan: Atilla - 09 Eylül 2015, 20:36:52
spi haberleşme protokulunu kullansan sorun çözülür gerçi her slave için bir cs bağlamak biraz can sıkıcı ama güvenilir olur.

Atilla bey bu her slave için bir lojik hat daha çekmeyi gerektirir.Ki bu hattı çektikten sonra slave piclere girer sıralamayı yine yapabiliriz.

Daha az hatla daha seri iletişim yöndemi bulmalıyım.

F.T dediğin gibi aradaki giderse gerisi değil hepsi nakavt :).

Ama aklıma ilk gelen bu.Daha iyisini de sizlerden bekliyorum.

Bu arada bu seri iletişim hızıyla ilgilide konu açtım ama galiba 19200 bauddan sonraki çalışmalarım için çok fazla tecrübeli yardımcı olabilecek kişi yok forumda.  (Konnu:Usart Seri İletişimde Farklı Frekanslarda Çalışmak?)
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Mucit23

I2C kullanmalısın. 400khz hız gayet yerli olur.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Bahri Bilir

#8
Mucit23 hocam bu seri iletişim yöntemleri son zamanlarda çok kafamı karıştırır oldu.Bir bakıyorsun bir konuda rs232 çok hızlı,kolay,rs485 e çevir güvenl... bunu kullan,
Başka bir konuda CANBUS kullanımı zor ama en hızlı en güvenilir iletişim sistemi..... bunu kullan,
Başka konuda canbus,spı,i2c,usart hangisi diye soruyorsun i2c güvenli,frekans senk ihtiyacı yok.... bunu kullan

Yanlış anlamayın ama aynı soruyla farklı forumlarda dahil olmak üzere 7-8 kere konu açtım,bu süre zarfında kendim araştırmalar yaptım ama hala kesin bir sonuca ulaşamadım.

Özellikle sizin son yazdığınız kafamı daha da karıştırdı.Usart sözde hızlı,güvenli,kolay dı ve hızın,güvenin ihtiyaç olduğu çoğu konuda ısp ye tercih ediliyordu ama siz ki önerinizin mantıklı bir sebebi olduğundan şüphem yok ısp yi öneriyorsunuz ???

rs232-rs485-ısp-i2c bu seri iletişim yöntemleriyle genel anlamda ara ara çalışmalarım oluyor.Açıkcası en çok hoşuma gidenide i2c dir.Ama hızlı,kolay veya güvenilir olduğu için değil veri nerden çıkarsa çıksın basit bir şekilde okunabiildiği için :)

Yani sizinde göreceğiniz üzere bu konu o kaaadar çok tartışılmasına rağmen bende 2-3 haftadır bu konu üzerine yoğunlaşmama rağmen hala seri iletişimde şu şu şu şartlar aranıyorsa ısp-i2c
şu şu şu şartlar arnıyorsa usart-canbus kullanmalıyım diyemiyorum.

Yine biraz fazla uzattım mesajı.

Sonuç:  Mucit23 neden usarta ısp yi tercih etmeliyim ?  ( :) )
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Mucit23

Isp Protokolü nedir bilmiyorum herhalde SPI yazmak istedin.

Bu konuları kafada çok uzatmamak gerek. Bir proje üzerinde çalışırken 2-3 hafta boyunca "acaba hangisi kullanayım" diye düşünemezsiniz. Unutmamak gerekir ki bütün protokoller farklı ihtiyaçlarda doğmuş geliştirilmiştir. Sizin sistemin ihtiyaçlarını en kısa sürede belirleyip, yöntem seçtikten sonra uygulamak gerekir. Vakit nakittir.

Temel bazı kurallar var.

Eğer uzun mesafe haberleşme yapılacaksa RS485 en iyi çözümdür.
Eğer devre içerisinde Seri olarak yüksek hızda veri aktarımı gerekiyorsa SPI iyi bir tercihtir.
Eğer güvenlik gereken yerlerden hatasız veri aktarımı gerekiyorsa Can-Bus en iyi tercih olacaktır.
Rs232'yi biliyorsunuz zaten Kısa mesafe kolay iletişim kurmayı sağlar. 0-10 Metre arası iyi bir kablo ile sıkıntısız olarak veri aktarırsın.

Hepsini ayrı projelerde kullandım. Sizin master slave ilişkiniz olduğu için bütün protokoller işinizi görebilir. Master-Slave ilişkileri konularında tecrübeleriniz olmadığından protokol konusuna çok takılıyorsunuz.

Yapmanız gerekeni F.T söylemiş aslında temel yöntem bu olacak. Master Sırayla slavlerden bilgi göndermesini isteyecek.
I2C de her bir cihaza adres verilebildiğinden senin için kolay olur diye düşündüm. Canbus da olur ama donanımı biraz pahalıdır. Yazılımıda zordur. I2C ucuz ve basit.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Bahri Bilir

#10
Evet yanlış olmuş SPI olacaktı.Bu arda aslında SPI da değil I2C önermiştiniz.Biraz karışmış kusura bakmayın.

Verdiğiniz bilgiler güzel,özet ve net bilgiler teşekkür ediyorum.
SPI anladığım kadarı ile devre içerisinde (buna aynı karta olmasının bir önemi var mı yoksa kısa mesafelere (50 cm) kabloyla aktarmak sıkıntı çıkarır mı) en hızlı iletişim kurabilen iletişim yöntemi.O kadar farklı kaynaktan genel anlamda SPI nın özelliklerini okumama reğmen kısa mesafede en hızlı olduğu bilgisini ilk defa fark ediyorum.Ki bu galiba benim bu proje için aradığım bilgi.

Bu proje için uart ile F.T nin söylediğine benzer karşılıklı iletişim kurabilen , verilerde değişme olduğunda iletişime geçen ve veri karşıya ulaştığı bilgisini alınca iletişimi durduran bir kaç deney yaptım.Ama malesef slavenin çokluğu süreyi hesap ettiğimden de çok uzattı.Ve "Usart Seri İletişimde Farklı Frekanslarda Çalışmak?" adlı konu altında daha yüksek hıza sahip picle daha yüksek baud da usarttan veri aktarmak için araştırmalar yaptım.Ama en son 8 mhz de 19200 boud da aldığım en iyi verimde de veri iletişimi aktarma süresi istediğim hıza malesef ulaşmadı.

Ve artık konuyu en baştan ele alıp tekrar tasarlamaya karar vermiştim.SPI ile usartaki 19200 baud dan 2-3 kat daha hızlı veri aktarmayı sağlaya bilirsem aynı protokolle SPI ile verim alabileceğimi düşünüyorum.
En kısa sürede deneyip sonuçlarını paylaşacağım.

İyi çalışmalar.

Slave master arası mesafe max 1 m,
Ortamda orta hatta yüksek sayılabilecek derecede elektronik gürültü mevcut,
Şu an en önemli etken verinin güvenle iletilmesi,2. side verinin hızlı iletilmesi.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#11
SPI araştırmalarım ve denemelerim sonucunda elde ettiğim sonuçlar:

SPI yı tek taraflı kullanırken memnundum.Ama çift taraflı iletişimden beklediğimden de saçma bir hal aldı.Mesela CLK ucu verici picde çıkışken alıcıda giriş yapılmalı.Ee ozaman çift taraflı iletişimde clk için 2 hat gerekiyor.DataIn Ve data Out hattı için iki hat daha etti 4.Birde senkron yakalayabilmek için ki clk ile senkron tutturamadım 2 hatta burdan yani SPI da karşılıklı iletişim için 6 hatta net verim aldım.Neyse hadi diyelim tüm bu sacmalıklara tamam dedik dünkü çalışmama ve araştırmalarıma göre bu 6 hattan aynı anda sadece 8 bit data gönderilebiliyor.

Ki eğer öyleyse bu iletişimin adı seri olsun diye altı hatla saçmalıklar yaşamaya gerek yok direk 8 hatla paralele en hızlı iletişimi sağlarım.Bir seferde 8 bit :)

Çıkardığım Sonuçlar:
1-Çift taraflı iletişim için 2 CLK hattı gerekli

2-SPI ile tek seferede max 1 bayt veri gönderilebiliyor

3-SPI ile çift taraflı iletişim için 2 clk,2 select pin ve data out ,data in pinleriyle toplam 6 adet hatta ihtiyaç var.

3-İletişim hızı olarak usart tan hat sayısına değer bir hız farkı olduğunu sanmıyorum (donanımsal ısp ile denemedim illaki daha hızlı olacaktır ama ne kadar daha hızlı)

4-SPI da qualifier kullanımı mümkün değil.

Sonuç:Yukardaki bahsettiğim 6 hatla mod 2 de güzel bir verim elde ettim.Ama yukarıda da söylediğim gibi hız olarak ölçüm yapmadım ama gözle görülür bi avantajı olduğunu sanmıyorum
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#12
Aşağıdaki yöntemi uygulamaya karar verdim.
"""
Aklımda slaveler arasında 1.slavadan çıkıp 2. slaveye giren,2. den çıkıp 3.ye giren ...........10. dan çıkıp 1. ye giren bir lojik hat çekip;
tüm slaveler bu hattı gözetecek,sonra her sleave;  (lojik hat girişi  "g" - lojik hat çıkışı"c"  -  slave no "no")


if g=1 then
  if  güncel veri=1 then
    hserout ["NO",dec3 no,"BLR",dec5 veri]
  endif
    c=1
    pauseus 1
    c=0

endif


şeklnde yazıp tüm slaveleri sırayla verileri göndersin şeklinde yapmayı düşünüyorum.Ama bazı slaveler slave grubuna uzak yerlerde çalışması gerekecek.Bunu için birde 2 tane lojik hat taşımam gerekecek.
"""

Burada bazı değişliklerlle hem F.T nin bağsettiği sıkıttıyı çözmüş olacağım hemde çift hat lojik hat yerine tek hat lojik hat kullannılmasını sağlamış olacağım.

Çözümüm:
Yukarda  lojik hattı her slaveden girip çıkmayı düşünüyordum.Bunu yerine ayrı bir lojik hat kontrol pici kullanacağım.Tüm slavelerin lojik hatları bu pice bağlı olaacak.Ve bu pic her slavenin lojik hattına 5 mikrosaniye aralıklarla pals gönderecek.Ve palsı alan slave güüncel veriyi master veri hattına gönderecek.
Bu sayede hem slaveleri tek noktadan kontrol etmiş olacağım.Hem pals arakıl süresiyle verileri daha stabil master hattına göndereceğim.Hem aradaki slavelerde arza olsada bu arza diğer slaveleri etkilemeyecek,Hemde verisi daha önemli olan slavelere 1 turda 2-3 kez pals göndererek veri alış sıklığını kontrol edebileceğim.

Denemeleri yarın sonuçlandırıp sonuçları paylaşırım.Artık plaket tasarımına başlamalıyım.

Bayrama devre tamamlanmalı.Bayram tatiline gittiğimde makinaya bağlantılarını yapmayı planlıyorum.Bu arada bu devre Ana Pano (Makinadaki tüm giriş ve çıkışlarının yapıldığı pano) ve Elektronik kontol panosu arasında veri akımını sağlayacak.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#13
Örnek Ana Pano Şeması
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Bahri Bilir

#14
Malum Makina  :)

Not:Kusura bakmayın resimlerin kalitesini baya düşürmeme rağmen hala aynı anda 4 foto ekleyemedim.Hepsinin ayrı ayrı gönderiyorum.
"Hedeflerin bittiği tek yer, YENİ hedeflerin başlangıcıdır"

Powered by EzPortal