Elimizde sayısı 127 adet olan (sayı 2 nin katları olabilir) slave cihaz var. bu cihazlar yazılım ve donanım olarak özdeş ve hiçbirinde adres namına bir numara id felan yok.
Bir adet de master cihaz var. hepsini aynı anda çalıştırıyoruz. master cihaz bunlara nasıl id verebilir ?
ardından iletişime geçireceğim ve master hangi cihazdan bilginin geldiğini bilebilecek.
biraz zihni sinir bir fikir olarak dataların gelme süreleri olabilir.yani siz yolladınız cevap gelene kadar timer kurdunuz(yolladıgınız datada aynı oranda geç gideceği için *2 lik bir gecikme olabilir).yakından cevap en hızlı şekilde gelecektir.
Hocam hepsine beraber soru sorarsanız hepsi beraber cevap verme moduna girerse kimin ne dediği anlaşılamaz. ;)
Hocam Orada Başladı Zaten Olayı Sorgulamam,
Cihazlara Master bir şekilde ID dağıtmalı
Alıntı yapılan: muhittin_kaplan - 07 Aralık 2013, 17:09:04
master hangi cihazdan bilginin geldiğini bilebilecek.
hangi cihazdan bilgi geldiğini bilebilecek ne demek?
Master tarafından veilen ID haricinde, cihazları tanımasını sağlayabilecek başka bir özellik mi var?
yok
STM32 kullanacaksan :
aygıtları birbirinden ayırmak için "Unique Device ID" registerini kullanabilirsin.
Master kimler aktif diye mesaj yayımlar.
Unique ID değerine göre her cihaz için bir gecikme değeri olur. gecikme süreleri arasındaki fark 1 byte gönderme süresinden kısa olmaz.
En küçük ID'ye sahip aygır hatta girip ID verisini yollar. diğerleri hattan çıkar.
Master ilgili aygıta adres ID'si yollar. Bir dahaki sorguda bu aygıt hatta girmez.
tüm aygıtlar bitene kadar işlem sürer.
1 master 1 slave calıstırıp sırayla tüm cihazlara bir kere id dagıtırsın.
Bende bu tarz bir duruma şu şekil çözüm getirmiştim (kablosuz haberleşme). Cihazların hepsinin yazılımı aynı bunlara ID vermem gerekiyordu. Bir adet ID veren birim tasarladım. Cihazlar ilk çalışma anında ID almak için bu birime bağlanmaya çalışıyor. ID atanana kadar asıl görevlerini yerine getirmiyorlar. Elimde 100 adet ID atanacak cihaz olsun. Hepsinin sıra ile enerjilendirerek ID'lerini ardışıl bir şekillde atıyorum. Aldıkları ID leri dahili roma kayıt ediyorlar ve bir dahaki çalışmada rom da ID leri olduğu için normal işlemlerine devam ediyorlar. Bu işlemi bir defaya mahsus ürünleri sahaya sürmeden önce montaj esnasında yapıyorum.
DHCP mantığı kullan. Tüm cihazlar aynı anda bile çalışsa hepsi ID alacaktır ve sorunsuz bir şekilde çalışırlar. Mantık basittir. Tüm cihazlar aktif olduklarında Masterdan bir ID isterler. Master ID tablosuna bakıp şunu istermisin diye sorar cihazda istemem demez. Kabul edilen ID tabloya yazılır ve tahsis bayrağı işaretlenir. ID sorgusu için başka yöntemlerde önerilebilir.
Alıntı yapılan: Klein - 07 Aralık 2013, 18:21:50
STM32 kullanacaksan :
aygıtları birbirinden ayırmak için "Unique Device ID" registerini kullanabilirsin.
Master kimler aktif diye mesaj yayımlar.
Unique ID değerine göre her cihaz için bir gecikme değeri olur. gecikme süreleri arasındaki fark 1 byte gönderme süresinden kısa olmaz.
En küçük ID'ye sahip aygır hatta girip ID verisini yollar. diğerleri hattan çıkar.
Master ilgili aygıta adres ID'si yollar. Bir dahaki sorguda bu aygıt hatta girmez.
tüm aygıtlar bitene kadar işlem sürer.
uniq device id reg bilgiyi id olarak kullansam.
Yazdigim prog. Bunu alir ve master a bilgiyle beraber yollar
Anladığım kadarıyla burada asıl problem tüm slaveların aynı anda master ile haberleşmek istemesi durumu. Bu durumu önlemek için her cihaz başlangıçta 0-127 arası rastgele bir sayı üretip bu ürettiği değeri 1 mili saniye 100 mikro saniye 10 mikrso saniye veya herhangi bir zaman birimi ile çarpıp o kadar süre bekledikten sonra master ile iletişime geçebilir. Bekledikten sonra slave mastera "merhaba ben x. Daha iyi iletişim kurabilmemiz için bana ID verebilir misin?" Der Bu şekilde daha az çakışma olur ve kısa bir sürede tüm slavelar ID'sini almış olur diye düşünüyorum.
Erhan klein in dedigi mantikli. Zaten islemcimde bir uniq var onu kullanabilirim.
Denemesigimden bilmiyorum bu mcu icerisindeki id nin cakisma olasiligi nedir.
Ayrica erhan seninkide guzel fikir
Alıntı yapılan: muhittin_kaplan - 07 Aralık 2013, 20:05:56
Erhan klein in dedigi mantikli. Zaten islemcimde bir uniq var onu kullanabilirim.
Denemesigimden bilmiyorum bu mcu icerisindeki id nin cakisma olasiligi nedir.
Ayrica erhan seninkide guzel fikir
ID çakışması için demedim abi zaten stlerde unıque yani benzersiz ID var yazıyor. ID açısından çakışma gibi birşey olmaz heralde. RF kısmında çakışma olması ihtimalini göz önüne alarak yazdım. Hepsi aynı frekansta ise aynı anda haberleşince sıkıntı olmaz mı?
Ayni freq olacak dogru. Mesaj cakismasini sen nasil engelleyeceksin. Mcu uniq id sadece hangi cihazin oldugunu verie..(benim dusuncem.rtc kullanarak zaman senkronu yapmak. Bu acidan baslangic icin senin dedigin yontem guzel)
Mbus protekolünü kullanın hocam hatta mümkünse fiziksel altyapısınıda kullanın(TSS721) 256 adet cihaz ile tek master'dan haberleşme kurabilirsiniz.
Alıntı yapılan: muhittin_kaplan - 07 Aralık 2013, 20:31:29
Ayni freq olacak dogru. Mesaj cakismasini sen nasil engelleyeceksin. Mcu uniq id sadece hangi cihazin oldugunu verie..(benim dusuncem.rtc kullanarak zaman senkronu yapmak. Bu acidan baslangic icin senin dedigin yontem guzel)
Zaten bu yöntemi ID ataması yaparken rf haberleşmede çakışmayı minimize etmek için söylemiştim. ID'ler belirlendikten sonra zaten her cihaz ID'si oranında bekledikten iletişim kurabilir. Tabi bu yöntemler çakışmayı kesinlikle önler diye bir şey iddaa etmiyor. Sadece çakışma olasılığını minimuma(milyonda 1 falan) indirmeyi amaçlıyor.
Öte yandan rtc fikride mantıklı ama senkron saat sağlamak için gps saati kullanmak gerekir diye düşünüyorum. Geçen forumda bahsedilmişti almanlarında yerel bir saat sistemi varmış düşük frekansta yayın yapan oda kullanılabilir adı aklıma gelmedi. Saat sistemi olursa çakışma nerdeyse olmaz gibi birşey olur. 1 dakikayı baz alırsan her slave için 100ms ayırsan 600 slave sorunsuz haberleşebilir gibi görünüyor teorik olarak.
Cihazlarda gps de olacak. Ama rtc de kullanacagim. Ozel durumunda gps olmayabilir
Bizim bir cihazimiz vardi zaman senkronu yapiyor duruma gore slave gonderiyordu. Zaman limitteyse gonderime basliyordu. Degilse devamli dinliyor limit icerisine almaya calisiyordu
Bende bir cihazda görmüştüm raporlama falan yapıyordu. Saat sekron olayını gps ile çözdük dedilerdi.
96 bitlik bir uniq id den bahsediliyor. adreside belli, belli değerleri aldım. ama hangisi nedir bilmiyorum. datasındada açıklama yok. sadece uniqid demiş. yani bunun şu bitleri aile şu bitleri versiyon şu biti şunlardan oluşur gibi bir bilgi mevcut mu ?
geçenlerde bir sitede denk gelmiştim ama şimdi bulamıyorum
ilk 2 hane wafer no, sonraki 6 hane lot number, sonraki 2 hane waferdaki x pozisyonu, en son 2 hane de y pozisyonu diye hatırıyorum
device id yi içeren başka register olduğundan buraya dahil etmemişler
Hocam 96 bit baktım aradım bulamadım. örneğin okuduğum değerler kodu ile (a b c debugda gözlüyorum)
#include "stm32f4xx.h"
#define U_ID_0 (*(uint32_t*) 0x1FFF7A10)
#define U_ID_1 (*(uint32_t*) 0x1FFF7A14)
#define U_ID_2 (*(uint32_t*) 0x1FFF7A18)
int main(void)
{
SystemInit();
int a,b,c,D;
a=U_ID_0;
b=U_ID_1;
c=U_ID_2;
while(1)
{
}
}
a:0x320030
b:0x31314714
c:0x31343533
bu kartın biri
a:0x3e0031
b:0x31314714
c:0x31343533
bu da kartın diğeri
bu bitler neler yoksa bildiğimiz gibi "birleştir bunları bunlar seri no" sumu
Hocam ben o işi imalat anında seri no vermeden çözemedim.
Cihazda bir seri no olacak ki ona göre çağıracaksın. Sonra ister ona diğerleri ile sıralı bir ID atayacak ve ona göre çağıracak veya ister seri nosu ile çağıracaksın.
Ben bulamadım başka yontem.
arkadaşlar merhaba,
pic içerisinde seri numarası yokmudur? slave cihazlarda bir buton yardımı ile pic'in seri numarası master cihaza yazdırılamaz mı?
STM32 UniqeID ile ilgili arkadaşlar bahsetmişler. Buna ek olarak ucuz bir çözüm lazım ise STM8S serilerinde de UniqeID mevcut.
Fiyatlarda <1$