Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega - UART magistrala 3 i wiecej układów

lukas_gab 17 Kwi 2015 20:53 1326 11
  • #1 17 Kwi 2015 20:53
    lukas_gab
    Poziom 15  

    Witam ! Już ogarnąłem temat uarta. Bez problemu komunikuje dwa urządzenia. Teraz chciałem połączyć w magistrale i więcej układów. RaspberryPi ma być masterem, natomiast 2 do n atmeg ma być slave. Wymyśliłem połączenie jak na załączonym schemacie. Generalnie chciałbym Rpi wysyłać ramkę która zawierała by adres slave, dane do przekazania/funkcje do wykonania oraz sumę i czy należy odpowiedzieć. Każdy slave ma swój adres - jeżeli odbierze ramke o swoim adresie to zaczyna wykonywać operacje i nadawać odpowiedź. Do momentu jak slave nie wyśle info, że komunikacja z danym slave jest skonczona, to reszta atmeg milczy. Co do wysyłania z Rpi informacji, raczej nie mam wątpliwości, że wszystko będzie ok - wszystkie atmegi odbiorą. Natomiast, jak dany slave zacznie nadawać, to okazuje się, że dana atmega wysyła, do rpi oraz do reszty atmeg ! Co w takim przypadku ? Nic się nie uszkodzi ? Jest to poprawne ??

    Wiem, że do tego powinno się używac rs485, ale mam tylko dwa układy max485, a że weekend to nie mam gdzie dorwać takiego 3-ciego układu przed poniedziałkiem i chciałem spróbować na czystym uarcie.

    Proszę o opinię jak mogę połączyć prawidłowo wiele urządzeń poprzez uart, bez max485 i raczej nie wchodzi w grę sterowanie zwarcia odpowiednich nadajników slave do odbiornika rpi przez jakieś bramki.

    atmega - UART magistrala 3 i wiecej układów

  • Pomocny post
    #2 17 Kwi 2015 21:11
    Alana
    Poziom 37  

    Linie z RPi do atmeg laczysz normalnie a linie z atmeg do RPi musisz dac przez bufory z otwartym kolektorem.
    W czasach 8051 robilo sie to tak [rysunek].
    atmega - UART magistrala 3 i wiecej układów
    Uwaga na RPi - nie lubi 5V na wejsciach [3.3V only]

  • Pomocny post
    #3 17 Kwi 2015 21:12
    tmf
    Moderator Mikrokontrolery Projektowanie

    Skoro Rx jest wyjściem, a wyjść, które nie są OC się nie łączy to twój układ jest błędny. Nadawanie z RPi będzie ok, lecz nadawanie z ATMega nie zadziała - nastąpi konflikt. Rozwiązaniem jest zrobienie tak, żeby Rx były typu OC - jednak w ATMedze bezpośrednio tego nie zrobisz - stąd trzeba zastosować bramki z wyjściem OC lub zrobić to na elementach dyskretnych. Gdybyś wziął XMEGę to wyjście Rx mógłbyś skonfigurować programowo jako OC i wtedy taki układ by zadziałał. Rozwiązanie bez maxa to wykorzystanie dwóch usartów na każdy MCU i spięcie ich w łańcuszek - tylko potrzebujesz 2 USARTy na MCU i MCU będą obciążone retransmisją danych. Czyli pomysł taki sobie. Lepszy, ale programowo bardziej skomplikowany to wyłączanie nadajników USART i włączanie ich tylko w jednym MCU w odpowiedzi na odebraną ramkę - tylko, że jak program coś poknoci to będzie problem. No i to zadziała tylko z USART TTL, czyli układy muszą być dosyć blisko siebie. Pamiętaj też, że USART w AVR ma specjalny tryb pracy MPCM - w tym trybie procesor rozpoznaje czy transitowany jest adres, czy dane - umożliwia to unikanie niepotrzebnego obciążenia MCU transmisją, która nie jest przeznaczona dla niego.

  • Pomocny post
    #4 17 Kwi 2015 21:17
    BlueDraco
    Specjalista - Mikrokontrolery

    Eee tam, przesada. Wystarczy do wyjścia każdej ATmegi podłączyć katodą diodę Schottkyégo, a anody diod przez rezystor 4k7 do +3.3V i mamy szynę i przy okazji translację poziomów.

  • #5 17 Kwi 2015 21:32
    lukas_gab
    Poziom 15  

    Dzieki. Atmegi dzialaja 3,3v a nawet jak nie to moge dac tranzystor bs170 i bedzie translacja. Natomiast jak zrobic taki bufor ? Z drugiej strony man translator powe up z 3.3 na 5v z buforem w scalaku - taki by sie nadal ? A potem translacja na 3.3. Chodzi o zaslepke na czas prototypowania.

  • Pomocny post
    #6 18 Kwi 2015 09:25
    BlueDraco
    Specjalista - Mikrokontrolery

    Jaki bufor? Jeśli wszystko jest na 3.3 V, to diody np. BAT54 i rezystor załatwią wszytko.

  • #7 18 Kwi 2015 10:21
    lukas_gab
    Poziom 15  

    Dzięki za odpowiedź. Widzę, jak jest zrobiony taki bufor oc, niestety nie mam takich elementów dziś. Diody Schottky'ego też nie mam u siebie w skrzyneczce. Zrobiłem test z diodą 1N4007 - niby mam spadek lekki, ale w granicach stanu wysokiego - co sądzisz, żebym wpiął te diody między transmitery atmeg a odbiornik RPi ?Czy potrzeba do tego jakiś dodatkowych oporników ? W zasadzie po co one są ? Mogę prosić o odpowiedź, nakierowanie, lub hasło jakich materiałów mam szuka? Innym pomysłem jest zastosowanie układu 7408 z andami - mam parę takich scalaków i jakby zewrzeć im wejścia i podłączyć transmiter do nich, a wyjście do odbironika ? Raczej taka bramka się uszkodzi, czy zablokuje sygnał w druga strone ? Najbardziej zainteresowany jestem układem z diodą, pytanie czy ta 1N4007 będzie dobra - mówię, miernik mi powiedział, że się nada ;)

    Dzięki za pomoc w weekend - może przed poniedziałkiem, jednak uda mi się coś zrobić ;)

    Pozdrawiam.

  • Pomocny post
    #8 18 Kwi 2015 10:33
    BlueDraco
    Specjalista - Mikrokontrolery

    Napisałem już raz - katody diod do wyjść TXD AVR, anody razem do RXD RPi i przez rezystor 4k7 do 3.3 V - uzyskujesz w ten sposób układ prawie równoważny wyjściom OD i iloczynowi "na drucie".

  • #9 20 Kwi 2015 08:17
    lukas_gab
    Poziom 15  

    Wiesz, ale ty mówiłeś o innym typie diody - nie wiedziałem, czy ta którą mam będzie ok. Już wczoraj wszystko spiąłem i udała mi się transmisja do każdej atemgi z osobna, jak i atemga odpowiedziała do raspberry i nic się nie wysypało i działa w magistrali. Serdecznie dziękuję za podpowiedzi - szczególnie BlueDarco - nie zmarnowałem weekendu, z powodu braku układów max485, a z tego co miałem w skrzyneczce udało się zrobić układ i nauczyłem się jak pisać taką komunikacje.

    Co do zasięgu w standardzie TTL (? nie wiem czy to nadal ttl jak chodzi mi na 3,3V), o to sie nie martwcie, to tylko prototyp poskładany na stole - domyślnie użyję układów max485 bo przewiduję komunikację na kilkaset metrów.

    Nie wiedziałem, o trybie MPCM i odbierałem zawsze bity i dopiero po prasowaniu wiedziałem, ze to komunikat dla mnie czy nie. Dzięki zainteresuje się tym trybem.

  • #10 20 Kwi 2015 17:44
    lukas_gab
    Poziom 15  

    Zastanawiam się natomiast z MPCM - skoro to takie fajne, to dlaczego np. modbus przesyła adres normalnie w ramce bez użycia MPCM ? Dlaczego to jest tak rozwiązane ? O ile Atmega8 ma MPCM to jak sobie poradzić z tym, w raspberry pi ?

  • #11 20 Kwi 2015 18:10
    tmf
    Moderator Mikrokontrolery Projektowanie

    Dlatego, że kiedy powstawał modbus nikt nie myślał o rozwiązaniu jakim jest MPCM, co nie znaczy, że nie da się go zaadaptować. Nie wszystkie procki mają też ten tryb zaimplementowany. Od strony RPi musisz do nadawanej ramki danych dodać bit parzystości/nieparzystości i wykorzystać go do nadawania ramki danych/adresu.

  • #12 21 Kwi 2015 20:48
    lukas_gab
    Poziom 15  

    Dzięki. W zasadzie, obarczenie analizą adresu i identyfikowaniem ramek z danymi przez sam program będzie bardziej uniwersalne, ale sam nie wiem - pewnie zaimplementuje dwa sposoby - żeby nabrać doświadczenia. Dzięki wam za cenne uwagi.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo