Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

300 Slave ile 1 Wire Hk. Soru ?

Başlatan Nedenler, 09 Şubat 2011, 10:31:54

Nedenler

Merhaba arkadaşlar 1 wire protokoluye yeni çalışmaya başladım. Elimde Serdar Çiçek'in CCS C ile PIC programlama kitabı var kendi oluşturduğu kütüphaneyi falan inceledim ve anladığımı düşünüyorum. Yazma, okuma,reset vs işlemleri nasıl yapılır anladım. Fakat sorum şu;

300 adet girişim var ve bunlardan 1 ve/veya 0 bilgileri alıcam. Aldığım bilgiyi içerde yorumlayabilirim fakat bu kadar slave in bağlantısını nasıl yapacağım? Bunun için bir entegre var mıdır yoksa bağlantılarını nasıl yapıcam nasıl adresleyeceğim bunları çözebilmiş değilim.

teknikelektronikci

1 wire dan kastiniz ibutton lardaki protokolmu tahminimce 300 giris kontrolü icin 1 wire iletisim yok? yoksa i2c veya spi tarzi bir sey mi bana kalsa 74hc595 in giris olan versiyonu var tipini hatirlamyiorum simdi, 300 girisi bu sekilde kontrol etmek daha mantikli degilmi ? veya multiplexerde kullanabilirsiniz.
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Nedenler

Multiplexer kullandım şuan kodlarıyla birlikte devre o şekilde hazır fakat 300 giriş olmuyor. 40 pin pic kullanıyorum 18 tane pini başka amaçlar için kullanıyorum zaten kalıyor bana 22 pin. Her 8 girişi bir mux ile aldıp çıkışını pice verdiğimde 22*8=176 giriş kullanabiliyorum. Yani ancak yarısı.

Üstelik nerdeyse 30 tane enregre kullanmış oluyorum, çok yer kaplıyor.

Bir diğer husus ise benim 300 girişim devrem üzerinde olmayacak başka biryerde olacak (çokda uzak değil) ben kablolarla bu girişleri kartıma alacağım bu durumda çok kabloda olsun istenmiyor.

Yapmak istediğim bu 300 girişi taramak. Teker teker, bit bit 0 mı 1 mi diye.

Nasıl yapmamı önerirsiniz ?

iyildirim

8 bitlik çoklayıcılar kullanıldığında 38 adet çoklayıcı gerekir. Bunu yerine direkt olarak çok bacaklı PIC ler kullanılabilir.
100 bacak PIC kullanılırsa sadece 4 adet PIC yeterli olur.

Yazılımı da portları okuyup bilgiyi master işlemciye göndermek kadar basit olur. 

Bu modüller 300 girişin olduğu lokasyonda da durabilir. Çok da uzak olmayan mesafe nin ne kadar olduğuna göre de uygun bir iletişim yöntemi seçilebilir. 232, 485 vs. Bu mesafe boyunca sadece bir çift kablo ile bilgi taşınabilir.


Nedenler

iyildirim

Bu tarz yöntemler var evet ama dediğim gibi 30-40 entegre yada 3-4 PIC kullanmak yerine daha profesyonel bir çözüm arayışı içindeyim benim bir şekilde az malzeme ve az kabloyla bu işi halletmem gerek. He yapılır mı onu bilmiyorum araştırıp göreceğiz yoksa mecbur kalacağım yöntemler bunlar ama neler yapılıyor buda mutlaka bir şekilde yapılmalı.


mufitsozen

Alıntı yapılan: Nedenler - 09 Şubat 2011, 11:45:51
Multiplexer kullandım şuan kodlarıyla birlikte devre o şekilde hazır fakat 300 giriş olmuyor. 40 pin pic kullanıyorum 18 tane pini başka amaçlar için kullanıyorum zaten kalıyor bana 22 pin. Her 8 girişi bir mux ile aldıp çıkışını pice verdiğimde 22*8=176 giriş kullanabiliyorum. Yani ancak yarısı.

Üstelik nerdeyse 30 tane enregre kullanmış oluyorum, çok yer kaplıyor.

Bir diğer husus ise benim 300 girişim devrem üzerinde olmayacak başka biryerde olacak (çokda uzak değil) ben kablolarla bu girişleri kartıma alacağım bu durumda çok kabloda olsun istenmiyor.

Yapmak istediğim bu 300 girişi taramak. Teker teker, bit bit 0 mı 1 mi diye.

Nasıl yapmamı önerirsiniz ?

Hocam 300 adet input oldukca fazla. Bu girislerin endustriyel bir ortamda oldugunu ve hepsinin ayni yerde konsantre oldugunu (diyelim 5m2 icinde) ciddi miktarda baglanti gerekir. Hata durumunda hatayi kolayca bulmak ve gidermek icin tasariminda bir takim mekanizmalar kullansan iyi olur. (kart uzerinde 0/1i led ile gostermek vb)

simdi en uc noktada diyelimki butun 300 inputuda ayni kart uzerine aldiginizi dusunelim (bir sekilde logic devreleri vb ile kontrol ederek) 300 tane girdinin konektor baglantisi, PCB uzerindeki dizimi vb bile ciddi sikinti yaratacaktir.

Ben olsam, bir kart uzerinde kolay islenebilecek/ustesinden gelinebilecek kadar input alan kartlar yapar, bunlarida endustriyel bir ortam oldugu icin multi-drop rs485 hatti uzerinden merkezi bir devreye baglardim.

simdi bu mantikla, uzerinde rs485 arabirimi olan, 16 input portu alip gonderebilecek (vede led ile gostereck) kartlar yapardim. bunlarda olabilecek en basit pic ailesini secerdim (or . 300 input icin 19 tane gerekirdi).

Bir tanede 16f877a vb bir pic ile master rs485 ve disarisi (mesela PC) icin rs232 baglantisi olan bir kart yapar bununla diger kartlari tariyarak input portlarin durumunu kontrol ederdim.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

teknikelektronikci

kesinlikle benim fikrim

tek bir kart yapacaksiniz 10 girisi olacak bundan 30 tane yapacaksiniz ve bu 30 tane karti rs485 ile master ile haberlestireceksiniz masterde bütün bilgileri isleyecek
bu bahsettigim 10 girisi olan kart ise 10(giris)+5(besleme ve rs485hatti) toplam 15 pin ile halledilir yani basitten 16f628 diyecem ama böyle bir uygulamada pic kullanmak bana saglikli gelmiyor en iyisimi vhdl bilyiorsaniz basit cpld max2 kullanin sunuda belirteyim her kartda bir adres dip switchleri koymanizi tavsiye ederim böylece kartin adres bilgisini portdan okur ona göre mastere bilgi gönderirsiniz yazilimsal olarak adres atamak isinizi zorlastirir ki olduda kartlardan biri ariza yapti 40 numarali karti degistireceksiniz adresi dip ile secmek kolay olur ama yazilimsal ollarak sen 40 numarali slave sin dedirtmek en azindan rs232 portu ve bir bilgisyar gerektircek
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Nedenler

Arkadaşlar yardımlarınız için çok teşekkür ederim fakat istediğim bunlar değil ben zaten şuan şunu yapıyorum; 300 inputu 8er 8er toplamda 38 mux'a, Bu 38 muxu 5 muxa 5 muxuda 1 muxa giriyorum iç içe üç for ile hepsini sırayla okuyorum. Toplamda ilk 38 mux için 3 kontrol pini, ikinci 5 mux için 3 kontrol pini ve son mux için 3 kontrol pini ve en son data bitiyle birlikte 10 kabloyla ve tek devre ve tek picle hallediyorum.

Benim istediğim bunu düşürmek. Kullanılan malzemeyi, kablo sayısını düşürüp daha basit bir hale getirmek. Aklıma ilk gelen 1-write oldu aslında aşağıdaki resme tam istediğim şey budur diyorum resimdeki gibi neden yapılamıyor ?




M_B

Alıntı yapılan: Nedenler - 09 Şubat 2011, 15:39:38
Arkadaşlar yardımlarınız için çok teşekkür ederim fakat istediğim bunlar değil ben zaten şuan şunu yapıyorum; 300 inputu 8er 8er toplamda 38 mux'a, Bu 38 muxu 5 muxa 5 muxuda 1 muxa giriyorum iç içe üç for ile hepsini sırayla okuyorum. Toplamda ilk 38 mux için 3 kontrol pini, ikinci 5 mux için 3 kontrol pini ve son mux için 3 kontrol pini ve en son data bitiyle birlikte 10 kabloyla ve tek devre ve tek picle hallediyorum.

Benim istediğim bunu düşürmek. Kullanılan malzemeyi, kablo sayısını düşürüp daha basit bir hale getirmek. Aklıma ilk gelen 1-write oldu aslında aşağıdaki resme tam istediğim şey budur diyorum resimdeki gibi neden yapılamıyor ?
(Resim gizlendi görmek için tıklayın.)

Merhaba Hocam;
Resim uzerınden gidersek
Bu sekılde oluyor ama nasıl dersenız orda kullanılan malzemelerin ( entegrelerin ) kendine has birer ID numaraları var.
burda ilk once yapılması gereken hat uzerınde bulunanların ID numarasını okuyup bir yere kayıt etmek gerekiyor.
Daha sonrada nerden bılgı almak ıstıyorsan o kısmın ID sını gonderıp okuma yapıyorsunuz.  (ID den once bır takım komutlar daha var. )

Tek hat üzerinden birden fazla yerin sıcaklık olcme projelerıne bakarsanız olayı bıraz daha anlayabilirsiniz.

Ornek
3 adet  DS18B20 ile tek hat uzerınden farklı yerlerin sıcaklıgının okunması.



İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

mufitsozen

#9
Alıntı yapılan: M_B - 09 Şubat 2011, 16:04:57
Alıntı yapılan: Nedenler - 09 Şubat 2011, 15:39:38
Arkadaşlar yardımlarınız için çok teşekkür ederim fakat istediğim bunlar değil ben zaten şuan şunu yapıyorum; 300 inputu 8er 8er toplamda 38 mux'a, Bu 38 muxu 5 muxa 5 muxuda 1 muxa giriyorum iç içe üç for ile hepsini sırayla okuyorum. Toplamda ilk 38 mux için 3 kontrol pini, ikinci 5 mux için 3 kontrol pini ve son mux için 3 kontrol pini ve en son data bitiyle birlikte 10 kabloyla ve tek devre ve tek picle hallediyorum.

Benim istediğim bunu düşürmek. Kullanılan malzemeyi, kablo sayısını düşürüp daha basit bir hale getirmek. Aklıma ilk gelen 1-write oldu aslında aşağıdaki resme tam istediğim şey budur diyorum resimdeki gibi neden yapılamıyor ?
(Resim gizlendi görmek için tıklayın.)

Merhaba Hocam;
Resim uzerınden gidersek
Bu sekılde oluyor ama nasıl dersenız orda kullanılan malzemelerin ( entegrelerin ) kendine has birer ID numaraları var.
burda ilk once yapılması gereken hat uzerınde bulunanların ID numarasını okuyup bir yere kayıt etmek gerekiyor.
Daha sonrada nerden bılgı almak ıstıyorsan o kısmın ID sını gonderıp okuma yapıyorsunuz.  (ID den once bır takım komutlar daha var. )

Tek hat üzerinden birden fazla yerin sıcaklık olcme projelerıne bakarsanız olayı bıraz daha anlayabilirsiniz.

Ornek
3 adet  DS18B20 ile tek hat uzerınden farklı yerlerin sıcaklıgının okunması.

resimdeki gibi niye yapilamasinki?

ilk basta ben 1-wire yapmak istiyorum deseydiniz, vakit kaybetmeden fikir verirdik.

DS2408 ile 1-wire uzerinden 8 gpio port'a erisebilirsiniz,
PIC ile 1-wire'i kontrol edip bu portlarin durumunu okuyabilir ve/veya yazabilirsiniz (yani hem input hemde output.) surat biraz azdir ama datasheetleri okuyup, application notelara bakiniz.

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

Nedenler

M_B

Anlatım çok faydalı oldu teşekkür ederim. Yanlış bildiğim şeyler varmış.

mufitsozen

Ben aslında tam olarak resimdeki gibi birşey istiyordum entegresiz basit ama olmayacağını anladım. DS2408'i inceledim kullanım olarak benim kullandığım muxlar gibi olacak ancak beni fazladan 9 mux kontrol kablosundan kurtaracak.

Konu anlaşılmıştır arkadaşlar yardımcı olan herkese teşekkür ederim.

tyilgin

anlaşılan konunun hem içinde hemde başlığında 1-wire yazmak yeterli gelmemiş. :) E Oku demekle okuyabilmek farklı tabii.

bu işi düşündüğünüz yolla yapabilirsiniz, ancak haberleşeceğiniz 300 modülde de sizi neyin karşıladığı önemli.

Sıradan bir lojik değermi yoksa protokolü çözümleyecek bir ünite/mcu varmı ?

Nedenler

Çözümleyecek herhangi birşey yok keşke olsa :)
Yanlızca 5V yada 0V yani 1 veya 0.

mufitsozen

Alıntı yapılan: Nedenler - 09 Şubat 2011, 16:45:40
Çözümleyecek herhangi birşey yok keşke olsa :)
Yanlızca 5V yada 0V yani 1 veya 0.

tek bir 1-wire baglantisi uzerine istediginiz kadar DS2408 koyar, her ds2408dende 8 tane GPIO bilgisini alirsiniz? 1-wire protokolunu cozen ve 8 GPIO portunu kontrol eden tek bir chip. 300 giris icin 38 tane ds2408'i ayni telin uzerine bagliyacaksiniz, bunuda bir pic ile sureceksiniz. bundan daha basit ne olabilir, her olcum noktasindan gecen bir tek kablo olacak.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Nedenler

mufitsozen

Evet haklısın işi buraya kadar getirdik bencede mantıklı. Peki şuna ne dersiniz;

DS2405. 3 Bacaklı Data GND ve PIO bacakları var. Her bir inputa bir tane DS2405 ve tüm data bacakları bir. Daha sonra herbirini kontrol etmek için 1. inputtan başlayarak 300 adet ID numarasını gönderip her birini teker teker kontrol edebilirim. Bununlada şimdi karşılaştım doğrumu anlamışım :)