UART birden fazla slave

Başlatan mr.engineer, 14 Nisan 2020, 21:07:57

mr.engineer

Merhaba,

Konuyu 'ARM' a açtım ama sorum aslında tüm UART'lar için. İnternette UART haberleşmesinde birden fazla slave'in tek bir MCU'ya (master) bağlandığını gördüm. Pull-up direnci kullanmışlar tıpkı I2C protokolü gibi çalışıyor. Böyle bir şey mümkün mü? Eğer yapılıyorsa zorunluluktan mı yoksa bir avantajı olabilir mi?

tunayk

Eğer iletişim tek yönlü ise yapabilirsin. Yanı sadece master konuşacak tüm slaveler dinleyecek ise  yapılabilir. Çift yönlü bir iletişim olacaksa hem donanım hem de yazılım olarak işler karışır.

mr.engineer

#2
Alıntı yapılan: tunayk - 14 Nisan 2020, 23:27:00Eğer iletişim tek yönlü ise yapabilirsin. Yanı sadece master konuşacak tüm slaveler dinleyecek ise  yapılabilir. Çift yönlü bir iletişim olacaksa hem donanım hem de yazılım olarak işler karışır.

Tek yönlü demenizin sebebi şu olabilir mi: Transmitter MCU'da gpıo'yı open drain ayarlayarak halledebilirim. Fakat karşı taraftakiler mesela hepsi UART ile çalışan sensörlerse onları open-drain ayarlama şansım yok. Bu yüzden mi tek yönlü olması gerekiyor?

Eğer böyleyse her bir slave girişine bir transistor gibi bir şey bağlayıp sadece birinin çalışmasını diğerlerinin kapanmasını engelleyebiliriz o zaman?

Ya da tüm slaveler birer MCU ise kolaylıkla yapabilir miyiz?

OG

#3


Çok fazla ünite yok ise ve
RX için diyottaki voltaj düşümü kurtarırsa basitçe şöyle yapılabilir.

Şuna dikkat edilmeli
Master veya slave farketmez, herhangi bir ünite TX yapacağı zaman kendi UART RX kesmesi açık olmamalı (kesme kullanılıyor ise).

UART TX çıkışı OD (open drain) olabiliyor ise ÂLÂ, diyotlar sökülebilir
OD yok ve diode kullanılmak zorunda ise, diyotların schottky gibi voltaj kaybının düşük tipde diode olması önemli.

- - -

Diyotlar ile voltaj seviyesi kurtarmıyor ise altta 2 seçenek
UART TX datayı invert sürebiliyor ise (aktif low seviye) soldaki A seçeneği yani tek transistor ilavesi kurtarır, bu durumda data invert sürülmeli. TX pinleri LOW'a düşesiye kadar da (örneğin ilk enerjilendirmede) UART RX takip edilmemeli, RX kesmesi kullanılıyorsa kesme kapalı olmalı.

UART TX datayı invert süremiyor ise (mecburi aktif high seviye) sağdaki B seçeneği


FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mr.engineer

Çok teşekkürler, güzel oldu bunları öğrenmek.

qeek

Hocam sonlandırma dirençli olan bir sistemi daha önce tasarlamıştım. 255 cihaza bilgi göndermiştim sıkıntısız slaverden veri okumayıda ayrı bir pini 1-0 yaparak ayarlamıştım gayet stabil çalışmıştı.(255 cihaz yakındı uzak mesafe yoktu aralarında.)

Maxim

mehabalar bu yapıyı bilmiyorum tam anlamadım
acaba birisi kabaca işleyişi özet olarak yazabilirmi?

mesela 10 tane slave uart alıcımız olsun
hepsine farklı data gönderelim
yani şunu anlamadım, neden tx uçlarını pull-up yapıyoruz
yapmasak zaten data her alıcıya gelmeyecekmi?
bu yapıdaki amaç nedir?

Mucit23

Alıntı yapılan: Maxim - 17 Nisan 2020, 11:03:09mehabalar bu yapıyı bilmiyorum tam anlamadım
acaba birisi kabaca işleyişi özet olarak yazabilirmi?

mesela 10 tane slave uart alıcımız olsun
hepsine farklı data gönderelim
yani şunu anlamadım, neden tx uçlarını pull-up yapıyoruz
yapmasak zaten data her alıcıya gelmeyecekmi?
bu yapıdaki amaç nedir?

Amaç sistemi opencollector yapıda tutmak, Eğer her slave master olarak pushpull yapıda olup TX hattına data basmaya çalışırsa haberleşme  sağlanamaz çakışmalar olur. Fakat opencollektor yapıda bu durum olmaz. Slave'lerden biri hata veri basacakken diğer slave'ler hatta birşey göndermemesi gerekir. Bu şekilde çakışma olması önlenir.

RX ler ortak zaten. RX ucları floating input konumda olduğu için hatta bir etkisi olmaz. Gönderilen mesaj Master dahil bütün slave'lere ulaşır. Çalışması biraz OneWire protokolüne benziyor.

RaMu

@OG nin bahsettiği transistörlüye yakın bir yöntemi kullanmıştık.
Daha çok @Mucit23 ün dediği gibi one wire a benziyor.
Uart modülü ile one wire protokolünü kullanma diyebiliriz.
Ayrıca Data hattını slave lerin beslemesi için kullanmıştık.
Yine buda one wire da kullanılan bir yöntem.
Bahsedildiği gibi çakışma büyük bir problem oluyor.
Heleki gücüde data hattından sağlayınca
güç sağlayan kısmı ve veya o sırada data hattını low a çekmeye çalışan slave i kızartma ile sonuçlanıyor.
Başka imkan varsa güç ve data aynı hatta olanın uygulanmasını tavsiye etmem ama
uğraşmak, bir şeyler öğrenmek için güzel bir proje.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html