Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 02 Ağustos 2015, 09:17:30

Başlık: İki cihazı konuşturma
Gönderen: z - 02 Ağustos 2015, 09:17:30
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?
Başlık: Ynt: İki cihazı konuşturma
Gönderen: mufitsozen - 02 Ağustos 2015, 09:34:25
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: OG - 02 Ağustos 2015, 09:43:11
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.

(http://s24.postimg.cc/i6avwpp3p/Ekran_Al_nt_s.png) (http://postimg.cc/)
resim yükleme servisi (http://postimg.cc/index.php?lang=turkish)




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

(http://s16.postimg.cc/j4xwrwbed/Ekran_Al_nt_s.png) (http://postimg.cc/)
resim yuklemek (http://postimg.cc/index.php?lang=turkish)

(http://s16.postimg.cc/l6ye659dh/Ekran_Al_nt_s.png) (http://postimg.cc/)
bmp resim yükle (http://postimg.cc/index.php?lang=turkish)
Başlık: Ynt: İki cihazı konuşturma
Gönderen: z - 02 Ağustos 2015, 15:24:31
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: Karamel - 02 Ağustos 2015, 15:27:38
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. ::)
Başlık: Ynt: İki cihazı konuşturma
Gönderen: z - 02 Ağustos 2015, 15:49:39
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: fatih6761 - 02 Ağustos 2015, 15:58:21
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: OG - 02 Ağustos 2015, 16:49:32
Programlar birebir aynı olursa çakışma kaçınılmaz. İlla ki bir bekleme süresi farkı falan olması gerek.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: RaMu - 02 Ağustos 2015, 16:58:20
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ı.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: kantirici - 02 Ağustos 2015, 17:19:31
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ü.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: z - 02 Ağustos 2015, 20:09:52
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: 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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: mufitsozen - 03 Ağustos 2015, 02:54:36
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.
Başlık: Ynt: İki cihazı konuşturma
Gönderen: muuzoo - 03 Ağustos 2015, 10:05:00
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 :)
Başlık: Ynt: İki cihazı konuşturma
Gönderen: mufitsozen - 03 Ağustos 2015, 10:38:06
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'.)