Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pomysł na wzajemną komunikację AVR?

rpal 21 Cze 2009 00:33 1182 4
  • #1 21 Cze 2009 00:33
    rpal
    Poziom 27  

    Biję się od pewnego czasu z myślami jak rozwiązać wzajemną komunikację między dwoma AVR-ami (Atmega16,32) które spełniałyby następujące warunki.
    - maksymalnie duża szybkość
    - odległość połączenia 2-3 metry
    - komunikacja dwukierunkowa
    - dwa urządzenia autonomicznie pracują i wymieniają między sobą "komunikaty" wpływające na ich pracę.
    Myślę że w miarę prosto się wyraziłem.
    Moje przemyślenia są takie:
    RS232 odpada bo za wolne, SPI na moje potrzeby co do szybkości idealne jedna połączenie za długie.
    I2C dobre w kwestii długości połączeń a szybkość do zaakceptowania tylko na mój gust obsługa dość "angażująca" uP.
    Wpadłem więc na następujący pomysł:
    Urządzenia "ganiają" sobie po I2C ale opartej na PCF8574 w taki sposób że każdy z nich jest podłączony do portów równoległych (przez bufory 3-stanowe) i jest dedykowany jak odbiornik tego co wyśle drugie urządzenie. Odbiór jest aktywowany poprzez przerwanie które powstaje na linii INT w chwili otrzymania nowej informacji. Oczywiście PCF dostaje dane po magistrali I2C którą obsługuje strona nadawcza.
    Bufory są z tego względu że brakuje mi portów (Atmega16/32) i w wolnych chwilach uP używałby PORTA który dedykowałem dla LCD. W czasie przerwania aktywowany byłby port 3-stanowy i podłączał się pod w.w port. Oczywiście przełączając wówczas LCD w tryb zapisu który jednak bez niezbędnego strobowania niczego by nie zmieniał w tym co sobie wyświetla.
    Po stronie nadawczej magistrala I2C której zadaniem byłoby jedynie posłanie danej lub "paczki" danych i zajęcie się swoimi sprawami:)
    Założenie jest takie że drugi uP poprzez aktywowanie przerwania zdążyłby odebrać nadchodzące dane z PCF8574 i zapisanie w swoim buforze RAM do dalszej obróbki.
    Taki a nie inny sposób transmisji moim zdaniem najmniej angażuje uP w procedurę odczyty nadchodzących danych (mniejszy stopień obciązenia , tak mi się zdaje niż w przypadku kiedy obydwa uP byłby podłączone do wspólnej magistrali I2C) pewna komplikacja związana z zastosowaniem PCF8574 + bufory no i "podwójne" I2C dla każdej strony nadawczej jest wkalkulowane w "ryzyko". Oczekuję jedynie uwag czy tak może być lub ew. innego genialnego pomysłu na ten mały dylemat :) PZDR

    0 4
  • Pomocny post
    #2 21 Cze 2009 00:53
    crazy_phisic
    VIP Zasłużony dla elektroda

    Jak prędkość Cię interesuje? Może wystarczą układy pokroju MAX3100, MAX3110, MAX3140 ?

    0
  • #3 21 Cze 2009 07:48
    rpal
    Poziom 27  

    Maksymalnie tyle ide da się wydusić ale to zbyt ogólne więc napiszę że czestotliwość 400 kHz przy jakiej można taktować I2C jestr wystarczająca. Tak tytułem uzupełnienia to chodzi o to że jeden z układów zajmuje się głownie regulacją procesu i od czasu do czasu potrzebuje byc odpowiednio nastawiony oraz zwrócić wyniki odczytów, drugi zaś jest swoistym interface który te nastawy wprowadza, obrazuje wyniki regulacji i prztwarza na postac zrozumiałą dla człowieka. To tak w dużym uproszczeniu. Jeden pracuje bez przerwy drugi mam możliwość wyłązania, więc trzeba je także ze sobą synchronizować.
    Te układy MAX3100 itp wydając się być interesujące i co do prędkości transmisji w zupełności wystarczą jedynym ich minusem jak zauważyłem jest to że nie będę ich mógł zapisywać/odczytywać w przerwaniach bo to układy SPI z drugiej strony cierpię na brak wolnych portów więc to także ich plus. Dziekuje koledze za radę bo wydaje się być cenna.

    0
  • Pomocny post
    #4 21 Cze 2009 09:37
    Tantalos
    Poziom 18  

    Użyj RS485 - prędkość do 1Mb/s, zasięg do 500m i niewielki koszt. IIC przy odległości 2-3m może generować błędy przy większych szybkościach.

    0
  • #5 21 Cze 2009 10:12
    rpal
    Poziom 27  

    Zamykam temat bo uzyskałem satysfakcjonujące rady :)

    0