STM32F103C8T6 Multimaster I2C iletişimi

Başlatan batuhann, 07 Haziran 2020, 17:56:11

batuhann

Herkese merhabalar, yapmayı istediğim bir projede mikrodenetleyicileri multimaster I2c ile haberleştirmem gerekiyor. Projede mikrodenetleyici olarak 4-5 adet STM32F103C8T6 kullanacağım ve her bir mikrodenetleyiciye 10'ar adet I2C ile kontrol edilebilen mesafe sensörü bağlanacak, dolayısıyla her bir mikrodenetleyici master modunda olmak zorunda, master olan mikrodenetleyicilerden bir tanesi kendisine bağlı olan sensörlerdeki verileri okumak dışında diğer mikrodenetleyicilerin okudğu sensör verilerinide alması lazım, bu işlem nasıl yapılabilir, birden fazla master mcu'ları nasıl birbirleri ile haberleştirebilirm?

IDE olarak arduino kullanacağım, yardımlarınız için şimdiden teşekkürler

PhD

Bu kadar çok MASTER olan I2C ile zor görünüyor. Ama CANBUS tam bu iş için uygun gibi. Ben hiç kullanmadım ancak CANBUS'ı araştırmanı tavsiye ederim.
...hiç...

Tagli

Gökçe Tağlıoğlu

batuhann

Projede kullanacağım sensör I2C iletişim protokolünü kullandığı için, diğer protokolleri kullanmam olası görünmüyor. I2C iletişim hattına 128 adete kadar cihaz bağlanabiliyor diye biliyorum, hatta youtube üzerinde denk geldiğim bazı videolarda 1024 adete kadar bağlanabileceği belirtiliyor. Canbus veya Modbus iletişim protokolleri için ayrıca devre kurulması gerekli sanırım, I2C haberleşmeyi diğer haberleşmeye çeviren bir devre, böyle birşey mümkün müdür? bilemiyorum tabi

Tagli

Sensörlerden yine I2C ile toplarsın. İşlemcilerin kendi aralarında I2C kullanmasına gerek yok. Yok illa I2C olsun diyorsan, bence işlemci üzerindeki ikinci I2C modülünü kullan.

I2C'nin 10 bit adresleme özelliği de var ama ben hiç denemedim. 1024 cihazı bu şekilde aynı fiziksel hatta doğrudan bağlayabileceğini sanmıyorum (sensör 10 bit modunu destekliyorsa bile). Mutlaka arada bir çeşit sinyal güçlendirici gerekecektir.

Ayrıca, sensörler fiziksel olarak birbirlerine yakın yerlerde değillerse I2C iyi bir seçim olmayacaktır.
Gökçe Tağlıoğlu

Kabil ATICI

işlemciler arasında SPI ile haberleşebilirsin. Özellikle CS ucu ile  birlikte kullanıldığında birden fazla işlemci ile kullanımı sıkıntı olmaz. cs ucunu aktifle ve iletişime başla.
Ama burada işlemciler arası mesafeyi belirtmemişsin.
İşlemciler arası  mesafe fazla ise full duplex RS485 vb bir iletişim olabilir.
Eğer hız konusunda sıkıntı duyuyorsan ethernet protokolleri işine yarayabilir.

İllede i2c kullanacağım diyorsan CS (chip select) mantığı ile birden fazla master olarak kullanma imkanın var. Merkez olarak belirlediğin bir işlemci ile kontrol ederek istediğin işlemciyi master olarak aktive etmen mümkün....
ambar7

e-zeki

ı2c seri haberleşme protokolleri içinde en nazik olanlardan biri. @Tagli hocam doğru söylüyor. eğer mesafe kısa değilse SPI ve I2C güvenli değil. Dökümanın birinde görmüştüm yanlış hatırlamıyorsam I2C ve için güvenli iletişim 20cm civarıydı. eğer sensör masterlar birbirine uzaksa zaten rs232/485 veya canbus gibi bir donanım ile harici devre kurman gerek.

batuhann

Çok değerli cevaplarınız için hepinize teşekkür ediyorum. Mikrodenetleyiciler arasında 1 - 1.5 metre gibi bir mesafe olacak. Mikrodenetleyiciye bağlanacak 10 adet sensörün aralarında ise 10 cm'lik mesafe olacak. Dediklerinize göre RS485 kullanmak daha mantıklı gibi görünüyor. Peki RS485'li sistemi donanımsal olarak nasıl kurmam gereklidir?
Örneğin 5 adet mikrodenetleyici var diyelim, her bir mikrodenetleyici devresine RS485 devresi kurup o an haberleşmek istediğim mikrodenetleyici ile bu hattı aktif edip(tabi bu esnada diğer mikrodenetleyicilerin rs485 hattı pasif olacak) haberleşmem gerekli sanırım.