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.

[Rozwiązano] Xmega i komunikacja RS485 w trybie MPCM

rafauek 07 Gru 2017 19:17 519 7
  • #1 07 Gru 2017 19:17
    rafauek
    Poziom 4  

    Witam,
    Zabrałem się za wykonanie układu master-salve. Układ komunikuję się po magistrali RS485 i korzysta z trybu MPCM.
    Docelowo układ ma rozszerzać liczbę portów mastera o ok 20 we/wy cyfrowe i 10 we/wy analogowych(12-16bit).
    Jak sądzicie, DMA będzie dobrym rozwiązaniem? Dodam że całość rozbija się na -+4 układy slave więc danych nie możemy wysyłać w większych paczkach.(zaledwie 2-4 B) Na razie testuję prostą transmisję opartą o przerwania , ale nie wiem czy uda mi się zejść do odświeżania obrazu we/wy w możliwie krótkim czasie (kilka ms) nawet przy taktowaniu 32MHz.

    0 7
  • #2 07 Gru 2017 20:21
    tmf
    Moderator Mikrokontrolery Projektowanie

    Masz magistralę RS485 i co? Opisz na czym polega problem. Obraniczeniem będzie raczej szybkość transmisji po RS485.

    0
  • #3 07 Gru 2017 21:29
    rafauek
    Poziom 4  

    Zastanawiałem się nad sensem zastosowania RS485. W zasadzie to mojej prostej implementacji bliżej nieokreślonego protokołu transmisyjnego.
    Może użyć jakiegoś protokołu z "prawdziwego zdarzenia". Może MODBUS... Tyle że jego implementacja będzie o wiele trudniejsza.

    Póki co to Master w pętli głównej odpytuje po kolei slave'y, wysyłając im adres układu który po jego odebraniu, ma wysłać masterowi swoje dane.
    Transmisja w gruncie rzeczy działa... choć do idealnej pracy to jeszcze daleko. Pytam teraz póki jeszcze nie straciłem zbyt dużo czasu. Co radzicie?

    0
  • #4 07 Gru 2017 21:37
    tmf
    Moderator Mikrokontrolery Projektowanie

    Ale żeby radzić musimy mieć informacje. Użyłeś RS485, fajnie. Pytasz czy to dobry wybór? To zależy, jeśli układy są blisko mastera, to można to zrobić prościej. Póki co tylko ty wiesz w jakich warunkach pracują twoje układy. Co do MODBUS - jeśli ci działa prosta transmisja i spełnia twoje oczekiwania, to po co komplikować? MODBUS nie będzie szybszy, wręcz przeciwnie (narzuty protokołu). Sprecyzuj problem, opisz jaka jest szybkość pracy RS485, jakiego czasu transmisji oczekujesz i gdzie masz wąskie gardło?

    0
  • #5 07 Gru 2017 22:02
    rafauek
    Poziom 4  

    Układy będą pracowały blisko siebie, wręcz bardzo blisko (kwestia 20-40cm) jednak w pobliżu wielu przekaźników, przekształtników... więc wypadało by zostać przy interfejsie różnicowym. Co do prędkości samego MCU to rezonator 16MHz + PLL*2. Sama magistrala to obecnie 115200 (testowo) bodów, aczkolwiek nie jestem w stanie przewidzieć jak bardzo użytkownik obciąży sam procesor swoim programem. Dążył bym do tego aby obraz I/O z wszystkich modułów był odświeżany co powiedzmy 100ms (przesadnie krytyczna wizja, wypadało by się zmieścić w 20).

    0
  • Pomocny post
    #6 07 Gru 2017 22:17
    tmf
    Moderator Mikrokontrolery Projektowanie

    Ok, 20 IO cyfrowych to 20 bitów, czyli 3 bajty. 10 wejść analogowych 16-bitowych, to 20 bajtów. Tyle chcesz odczytać. Do tego narzut protokołu - bajt adresu, masz 4 urządzenia, to dodatkowo 4 bajty. A więc jeden cykl to co najmniej 27 bajtów do przesłania. Ponieważ korzystasz z UART, więc jeden transmitowany bajt to co najmniej 10 bitów, a więc masz do przetransmitowania co najmniej 270 bitów, transmisja jednego dla 115200 bps trwa 8,68 us, czyli całości co najmniej 2,3 ms. Oczywiście w praktyce trochę dłużej, bo nie zapewnisz ciągłego strumienia danych, niemniej ciągle masz spory zapas. Biorąc pod uwagę, że transmitujesz zaledwie 27*50 (dla odczytów co 20 ms), czyli 1350 bajtów/s to spokojnie można to zrobić na przerwaniach. Zakładając, że obsługa transmisji jednego bajta niech zajmie 100 taktów, to łącznie masz 135000 taktów na sekundę zajętych przez ISR, czyli procesor jest obciążony zaledwie w 0,42%. Nawet zakładając, że zrealizowany kod będzie miał 10-krotnie wyższy narzut czasowy, to obsługa tej transmisji zjamie pomijalny czas. Oczywiście można sobie to zoptymalizować i zrealizować odbiór z użyciem DMA, wtedy "dramatycznie" zredukujesz liczbę przerwań i procek będzie się nudził jeszcze bardziej niż jeśli użyjesz ISR.

    0
  • #7 07 Gru 2017 22:54
    rafauek
    Poziom 4  

    Dzięki za rozjaśnienie sytuacji. W takim razie zostaje przy przerwaniach. Pozwolę sobie nie zamykać tematu do jutra, może przyjdzie mi w nocy do głowy jeszcze jakieś konstruktywne pytanie.

    0
  • #8 09 Lut 2018 09:01
    rafauek
    Poziom 4  

    Dziękuje, problem rozwiązany... Zostanę przy half-duplex oraz podniosę prędkość do 1Mbps przy użyciu DMA

    0