İki cihazı konuşturma

Başlatan z, 02 Ağustos 2015, 09:17:30

z

Bir hattın her iki ucuna yazılımları bile birbirinin aynı iki cihaz bağlanmıştır. Cihazlara herhangi bir adres ataması yapılmamıştır. Yapılmayacaktır. Her iki cihaz da eşit önceliktedir.

Her iki cihaz da aynı beslemeyi, aynı clock'u ve aynı reset sinyalini paylaşmaktadır.

Her iki cihaz kendi pinlerine bağlı bir butonu okuyacak ve karşıdaki cihaza half dublex hattan bildirecektir. Handshake amaçlı ayrı bir hat yoktur.

Bu düzeneğin işlemcilerini nasıl haberleştirirsiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

#1
STM32 kullandiginiz (baska MCUlardada bu ozellik var) varsayarsak: ROM'dan 96 bit UID (Unique device ID register) alinir.

Her cihaz kendi UID'sini mesaji ile yollar (genel bir broadcast mesaji oldugunu dusunursek alicisi herkes olan. "Merhab millet, Naaber" gibi fonksiyonu olan)

Mesaj hatta bagli butun cihazlara gider.

Her cihaz hem gonderdikleri hemde baskasinin alacagi mesaji okudugunda (tasarim geregi) Her cihaz mesaji kendisininmi gonderdigini, baskasininmi gonderdigini anlayabilir ve adresini bilmedigi butun cihazlari bir tabloya koyar ve istedigi ile haberlesmeye baslayabilir.



mesaj birleştirme:: 02 Ağustos 2015, 09:36:08

Eger UID yoksa ve SADECE IKI cihaz varsa, kendinizde bir UID yaratarak benzer senaryoyu isletebilirsiniz.

Ama cihaz uzerindeki herhangi bir UID (MCU kodu, MAC adresi vb) daha dogru olur cunku tanim olarak "Unique"dir

mesaj birleştirme:: 02 Ağustos 2015, 09:37:04

dusununce ikiden fazla cihazda da biraz yaratici bir algorithmayla UID yapilabilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

OG

#2
Kullanıyorum, tek tel tek pin yetiyor. Pinler INPUT yapıda bekliyor ve her iki taraf da LOW takip ederek dinleme yapıyor, gerekirse kesme ama ben kesme kullanmıyorum. Gondermesi gereken taraf once pine H verir (o an giriş olsa bile)
pin = 1
sonra pini çıkış yapar
tris.pin = 0
sonra gönderir. Karşı taraf LOW pulse ile data geleceğini anlar (start bit low olur). Baştan 1 veya 2 byte fazladan data gonderirim, cunku ilk datanın sağlıklı alınmama ihtimali vardır. sonradan tanım başlığı mesela "OG", sonra esas bilgi, sonra crc, sonra belirlediğim bir end datası.
Gonderimi bitince
tris.pin = 1

Gayet iyi çalışıyor.


resim yükleme servisi




2 pin de kullanılabilir ve bazen bunu kullanıyorum, 2 farklı şekilde


resim yuklemek


bmp resim yükle
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

z

Her iki cihaz da birbirinin aynı olunca aynı clock ve aynı reset sinyali aldıkları için her iki tarafta aynı anda  aynı şeyi yapmak isteyecekler. Keçiler tek keçinin geçebileceği genişlikteki köprüde karşı karşıyalar. İkisi de önceliğin kendinde olduğunu sanıyor. Birisinin diğerine yol vermesi lazım. Fakat ikisi de aynı yazılıma sahip.

Ama bir algoritma ile bu sorun belki aşılabilir.

İletişime başladıklarında datalar çarpışacak. Her ikisi de bunu anlayacak......

Hattımız half duplex olduğu için hat herhangi bir zamanda sadece bir amaçla kullanılabilir. Birisi gönderirken diğeri dinlemek zorundadır.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Karamel

Hocam ben bunun deneyini gecen sene yapmistim. Mufit hocam kilit noktayi soylemis. Programin basina unique device id kadar bekleme koyun. Hic biri ayni anda calismayacaktir. ::)

z

Alıntı YapCihazlara herhangi bir adres ataması yapılmamıştır. Yapılmayacaktır. Her iki cihaz da eşit önceliktedir.

Bu aynı zmanda UID verilemeyeceği anlamına gelmiyormu?

Gelmiyorda da UID veremezsin yasak.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

Hocam ilk basta kodu random beklemeye ayarlayalım. Beklemesi kısa olan karşıya rasgete bı unique id yollasın, karşı taraf da diğerine. Sonra bu id'yi cihazlar kaydetsin aynı olmadığını kontrol ederek.
Böylelikle üretim sırasında UID verilmemiş oluş. Tabi random için pseudo random olmaz gerçekten random bir değer olmalı. Gerçek randomda da çakışma ihtimali var ne yazıkki. Ama sadece 1 defaya mahsus kullanılacak bu random. Sonra belirlenen UID ler flasha/eeproma yazılacak. Yazılım başlangıçta eeprom'u kontrol edecek değer varsa onu kullan şeklinde.

OG

Programlar birebir aynı olursa çakışma kaçınılmaz. İlla ki bir bekleme süresi farkı falan olması gerek.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

RaMu

Alıntı yapılan: z - 02 Ağustos 2015, 09:17:30
...
Her iki cihaz kendi pinlerine bağlı bir butonu okuyacak ve karşıdaki cihaza half dublex hattan bildirecektir.
...
Sadece buton bilgisi gidecekse ve bu gerçekten buton ise
aslında birebir aynı yazılımı yüklemek ID vermemek problem olmaz,
butonlara aynı anda basılmış olması çok zor.
Cihazlara enerji verilmeden önce, butonlara basılı tutarak açılma ihtimali var tabiki.

Benzer bir sistemi yapmıştım,
ikisindede birebir aynı program vardı.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

kantirici

#9
Protokol geregi hat lojik 1 de beklesin. İletişim başlarken mesela 25ms hat high ise (iletişim hızına göre )  bu süre ardından veri seri olarak aktarılsın. Daha sonra hat tekrar high yapılsın. Hattan veri göndermek için hattın en az 25 ms den fazla high da olması şartı aransın. Aynı anda hattı dinleyen iki cihaz varsa ve veri göndermeye aynı anada başlarlarsa gönderim normal olarak devam etsin. Bu arada hat her bit değişimden sonra okunsun. Eğer hattın bir tarafında 1, diğer tarafında 0 basılmışsa  bu her iki tarafında aynı anda hatta veri bastığı anlamına gelecek ve birisi hatta veri basmayı durdurup dinleyecek. Diğer tafaf veriyi gönderince 25 ms sonunda hattan ayrılan cihaz hatta veri basacak. Eğer her iki tarafta aynı veriyi hatta basmışsa bu da kontrol edilecek ona göre senaryo yazılacak.  Aslında one wire protokolü.

z

Fikir cimlastiği açısından konuyu açtım.

Benim de aklıma gelen fikir random sayı.

Cihazlar ilk başta random sayı atarlar. Tabiki en azından diyod ile.

Daha sonra random değer kadar beklerler ve bilgi değiştokuşuna başlarlar. Artık timerları faz farklı syacağından bir daha hiç çakışma olmaz. İlk denemede çakışma olursa bir daha zar atarlar.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muuzoo

#11
@z hocam yalnız rastgele sayı ile ilgili şöyle bir sıkıntı var; dışarıdan farklı bir 'seed' değeri girmedikten sonra ya da seed' değeri olarak 'unique id' kullanmadıktan sonra üretilen sayılar da aynı şekilde oluşacak sözde rastgele sayı ( pseudo random) olacak.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

mufitsozen

#12
Alıntı yapılan: muuzoo - 02 Ağustos 2015, 23:58:43
@z hocam yalnız rastgele sayı ile ilgili şöyle bir sıkıntı var; dışarıdan farklı bir 'seed' değeri girmedikten sonra ya da seed' değeri olarak 'unique id' kullanmadıktan sonra üretilen sayılar da aynı şekilde oluşacak sözde rastgele sayı ( pseudo random) olacak.


zaten @z'de o yuzden ""Tabiki en azından diyod ile" diye, yontem gostermis.
Alıntı YapOne of the simplest way to create truly random sequences uses avalanche noise in a reversed-biased p-n junction.(Gercekten rastgele bir dizi yaratmanin en basit yollarindan birisi, p-n birlesmeli yuzey(junction) ters gerilim avalance (cig?) gurultusunu  kullanmaktir - turkce tercume icin ozur, turkce terimleri tam bilemiyorum) 

Pseudo-random fonksiyon (seed degeri vb) kullanmiyacagim diyor.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muuzoo

#13
Alıntı yapılan: mufitsozen - 03 Ağustos 2015, 02:54:36
zaten @z'de o yuzden ""Tabiki en azından diyod ile" diye, yontem gostermis.
Pseudo-random fonksiyon (seed degeri vb) kullanmiyacagim diyor.

Bu yöntemi bilmiyordum @mufitsozen hocam. Sizin mesajınızdan sonra araştırdım biraz. Ama ben olsam yine işin kolayına kaçar ,elimde mikrodenetleyici olduğu için yazılımla halledebildiğimden pseudo-random üreteç ve unique id kullanırdım :)
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

mufitsozen

#14
Alıntı yapılan: muuzoo - 03 Ağustos 2015, 10:05:00
Bu yöntemi bilmiyordum @mufitsozen hocam. Sizin mesajınızdan sonra araştırdım biraz. Ama ben olsam yine işin kolayına kaçar ,elimde mikrodenetleyici olduğu için yazılımla halledebildiğimden pseudo-random üreteç ve unique id kullanırdım :)

Ooooo daha ne yontemleri bilmiyoruz! Ben 35 senedir okuyorum, ogreniyorum bitmiyor !  ;)

Hergun yeni bir sey icad ediyor bu gavurlar. :o

ben hep soylerim, valla bir gun bizi gececek bu amarikalilar! :P

Yinede bir profesyonel gibi her projende kullanabilecegin bir devre ve yazilim yap. Cok isine yarayacaktir.

mesaj birleştirme:: 03 Ağustos 2015, 11:42:12

Aslinda yeri gelmisken, cok sevdigim bir lafi vardir Einstein'in:

Alıntı YapAny fool can know. The point is to understand. ('herhangi bir aptal bile bilebilir, önemli olan ise anlamaktır'.)

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.