Merhaba arkadaşlar;
Diyelim ki; 5 adet PIC var (16F84A, 16F628A falan...), bu PIC'lerden aynı anda gelen bilgileri okuyup, başka bir ana işlemci olan F877 ile okuyup GLCD ekrana yazdırmak gibi bir şey mümkün müdür?
2 adet işlemci arasında olabildiğini biliyorum ama, 2'den fazla işlemci de böyle bir durum sözkonusu olabilir mi?
Teşekkürler...
Olay tamamen sana kalmış. I2C veya SPI gibi hazır bir protokolü de kullanabilirsin (ki birçok PIC'te hazır dahili modülü bulunur) veya normal seri iletişim ile PIC sayısı kadar hat da çekebilirsin. Yalnız "aynı anda" gerçekleşmez bunlar. Master konumundaki PIC'in diğerlerine sorgu göndermesi ve varsa yeni verileri alması uygun olur.
picler arasindaki mesafe fazla ise rs485 kullanabilirsin.
Alıntı yapılan: abdullaho - 28 Kasım 2010, 10:28:11
picler arasindaki mesafe fazla ise rs485 kullanabilirsin.
Aynı kart üzerinde...
Alıntı yapılan: Tagli - 28 Kasım 2010, 10:20:53
Master konumundaki PIC'in diğerlerine sorgu göndermesi ve varsa yeni verileri alması uygun olur.
Sorgu göndermeden, yani Master ya da Slave olmadan, sadece ilgili pinin okunması mümkün değil midir peki?
Yazacağın uygulamaya bağlıdır. Yapmak istediğini biraza üstü kapalı anlatmışsın.
Göndereceğin ve alacağın bilgilerin içeriği neler?
Tek pin ile yapmak istediğin bir seri haberleşmemi yoksa basit bir bit okumamıdır?
Eğer okuma yapacağın istemcilerden gelen veri; farklı konumların sıcaklık bilgisi, konum bilgisi vb. şeyler ise ve bunların hangi noktalardan geldiğini anlamak istiyorsan,
her bir istemci için ayrı olarak tek pin kullanırsın. Ama bu durum sistemin esnekliği açısından kötü bir durumdur.
her bir istemci için tek pin kullanırsın. Bu durumda Sahip - Köle ilişkisi kullanman gereklidir. Bu durumda ise sistem esnek olur. Daha sonra sistemi genişletmen mümkün olur.
Fxdev inde dediği gibi
Tüm slave Rx leri birleştirip 877nin Tx ine
Tüm slave Tx lerini bir diyot ile 877 nin Rx ine pull up ile girerseniz teker teker sorup cevap isteyebilirsiniz.
veya I2C protekolü slave master çalışma moduna uygun standart bir yazılım ile yapılır artı olarak hızlıdır ve diyotlardan kurtulursun.
X-Fi
iletişim TTL seviyesinde olacağına göre pull-up yapmamamız gerekmez mi?
hocam slave piclerin TX çıkışları sürekli "1" konumundadır hepsini birleştirirseniz "0"a çekme şansınız yok bu yüzden seri diyotlarla birleştiriyoruz ve master'ın Rx ine giriyoruz ancak bu konumda diyotlardan sadece 0' geçişi olacağından master RX'in pinin 1de kalmasını pull-up ile sağlıyoruz.
Veyahut benim kullandığım bi yöntemi söyleyeyim usart pinleri PORTB de olanlar için geçerli Rx pinini yanındaki pin ile kısadevre yapın ve diğer pini input yapıp internal pull-up'ını açın oda RX'i "1" de tutacaktır.
piclerin birini master diğerlerini ise slave yaparsn her pice ayrı adres verirsin ve master adreslere göre bilgi alıp verir slaveler ise sadece adres kendini aitse mesaja cvp verebilir...
@X-Fi
çok fazla işlemci tanımıyorum. dspic ve 32 lerde uart modülü ttl seviyesinde iken active high çalışıyor. gönderilen birşey yok iken hat low'da kalıyor. max232 gibi bir çeviriciye girince sinyal invert edilip voltajı yükselip rs232 standardına ulaşılıyor diye biliyorum.
sizin söylediğiniz yöntemde de diyotların katotları slave tarafında oluyorsa anladım sanırım.
justice_for_all un söylediği yöntemi datasheetlerde bende okumuştum ancak hiç adresli uart iletişimi denemedim. Bu yapıda da master slave var. ancak kodlama vs. gibi şeyleri düşününce bana göre UART, SPI'dan daha kolay kullanılabiliyor diye düşünüyorum.
uart yamanı daha kolay olur die dusunuyorum...bende onceden spi ile denemiştim ama bilgi alışver.şini başaramamıştım...
iyildirim hocam haklısınız üst seviye modellerinde invert var aklıma bişey daha geldi yazılımda çözülebilecek bir yöntem daha.
Tüm TX,RX ler birleşip master a direk girilir.
Master piclere isimleriyle sorar bunu hepsi dinler kendisine ait olmayanlar (SPEN=0) seri portu kapatıp TX çıkışını input yaparlar hat boşalmış olur ismin sahibi bilgisini master a gönderebilir çakışmadan.
Burada sorun paket boylarının(zamanlarının) standart olması lazım ki cevap vermiyecek olan slaveler hattı nekadar boş bırakması gerektiğini bilip sonra tekrar dinlemeye geçebilsinler.
Şimdi bu yöntemde diyotlara da gerek kalmadı çakışmayı ortandan kaldırdı.
Biz hep usartdan bagsediyoruz ama en başdada söylediğim gibi ben olsam I2C ile haberleşirdim geliştirmeye açık bir haberleşmeniz olması herzaman iyidir sınırlı çözümler ilerde elinizi kolunuzu bağlayabiliyor bunlarıda göz önünde bulundursunuz.
Sanırım en doğru çözüm bahsettiğiniz bağlantı yöntemi ile (tüm pinlerin birleştirilmesi) UART modülünü RS485 olarak konfigüre edip slavelere de bir adres atamak olacak.
Bu durumda da çakışmaları engellemek için yine master-slave yapısı olmalı. İlla bir idareci gerekiyor. Birde bu durumda gelen data paketlerinde de adres bilgisi olmalı.
I2C protokolünü sevmememin nedeni iletişim sırasında başından ayrılamamanız. Kesme li kullansanız bile ancak bir byte lık başından ayrılınabiliyor. I2C 400KHz geçemiyor. SPI biraz daha rahat ve çok daha hızlı. UART ise daha kullanılabiliyor ve megabitlere çıkılabiliyor ve sadece iki bağlantı yetiyor. Bu nedenle seçme şansım varsa basitliği nedeniyle UART'ı tercih ediyorum.
evet mantıklı usart ve SPI hızlı benim I2C dememin sebebi haberleştiğiniz slave ler birer pic olacağından diyelimki sisteme eklenti gerekti slaveler belirsiz bir zamanda master a acil bilgi iletmesi isteniyor usartda bu yöntem çöker sorgu yapmanız lazım ama I2C çalışır.
http://img337.imageshack.us/i/adszmg.jpg/
Yapmak istediğim buna benzer bir şey... F877'ye bağlı 2-3 adet 628 olduğunu düşünebiliriz... F877'nin şimdilik yapacağı ilk şey; 628'den gelecek 1 ve 0 bilgilerini saymak... Basit bir frekansmetre gibi düşünülebilir sanırım...
Merhaba
Takip ettiğim başka bir forumda şöyle bir çalışma gözüme çarptı.Tasarlayan arkadaşdan müsaade almadım ama forumda açık olarak yayınladığına göre bir sakıncası olmaz herhalde.İsis devresine ETİK davranmak adına kendisinin nicini ben ekledim.Kolay gelsin
http://www.4shared.com/file/S-ccHH-r/3_pic_aras__haberleme_2.html
Eklediğiniz linkteki dsn dosyalarını açamıyorum. Proteus versiyonum düşük kalıyor. Acaba bu konunun geçtiği sayfanın linkini verebilmeniz mümkün mü?
Amaç sadece sıfır ve birleri saymaksa yani bit sayacaksanız, 877 de bir clock oluşturun, her bir 628'den 877 'ye ayrı bir bağlantı yapın. 877 clock sinyaline basınca 628ler int kesmesinde hattı sifır veya bir yapsın. 877 de pinlerin durumuna bakın. 16 serilerini bilmem ama 877 de varsa input capture modülünüde kullanabilirsiniz. Eğer senkronizasyon çok önemli değilse clock sinyaline de gerek kalmaz. Bu durumda 628 istedikleri zaman bilgilerini gönderir. 877'nin IC modülü de IC kesmesinde alır.
Merhaba
7.0 versiyon olarak save ettim.Buyrun.
http://www.4shared.com/file/7sztyXIp/3_PIC_Haber_7v.html
İnceleyeceğim, teşekkürler...