PIC'ler arası haberleşme

Başlatan oongit, 28 Kasım 2010, 09:21:17

oongit

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...

Tagli

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.
Gökçe Tağlıoğlu

sigmoid

picler arasindaki mesafe fazla ise rs485 kullanabilirsin.

oongit

Alıntı yapılan: abdullaho - 28 Kasım 2010, 10:28:11
picler arasindaki mesafe fazla ise rs485 kullanabilirsin.
Aynı kart üzerinde...

oongit

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?

neural

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.

X-Fi

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.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

iyildirim

X-Fi
iletişim TTL seviyesinde olacağına göre pull-up yapmamamız gerekmez mi?

X-Fi

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.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

justice_for_all

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...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

iyildirim

#10
@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.

justice_for_all

uart yamanı daha kolay olur die dusunuyorum...bende onceden spi ile denemiştim ama bilgi alışver.şini başaramamıştım...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

X-Fi

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.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

iyildirim

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.

X-Fi

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://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)