logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[BASCOM] - RS485: Problemy z niezawodnością transmisji przy 9600 bps

JarekPrzybyl 24 Cze 2014 16:21 1074 0
REKLAMA
  • #1 13737650
    JarekPrzybyl
    Poziom 15  
    Posty: 422
    Pomógł: 3
    Ocena: 218
    Usiłuję wykonać urządzenie, które za pośrednictwem RS485 komunikowałoby się z dwoma-trzema innymi. Wystarczy mi prymitywna, prosta komunikacja, chodzi o sporadyczne wysyłanie prostych komend zmieniających stan czegośtam.

    Pierwsze podejście do RS485 oparłem o popularny tutaj projekt z EdW "Obsługa
    RS485 w Bascomie" (http://ep.com.pl/files/4539.pdf i http://ep.com.pl/files/4556.pdf). Hardware (w zakresie interfejsu) jest dokładnie taki sam (czyli pojedynczy MAX485 wpięty wprost do procesora), program obsługi pisałem podobnie, jak autor tego artykułu.

    I jest tak: generalnie mi to działa, ale mam dwa zasadnicze pytania do bardziej doświadczonych w temacie:
    1) prosty test: dwa układy, jeden nadaje, drugi odbiera, dodatkowo terminalem monitoruję transmisję, terminatory na końcach linii oczywiście są. Prędkość transmisji: 9600. Odbiór jest poprawny, ale nie każde nadawane polecenie "dochodzi", procesor odbierający nie reaguje na nie po prostu, tak jakby coś zgubił albo źle odebrał, mimo że na terminalu widzę je poprawnie. Czy to typowe dla takiego interfejsu i potrzebna jest implementacja jakichś mechanizmów potwierdzania odbioru polecenia, czy szukać przyczyny, choćby dopasowywać te czasy zwłoki powtykane w programie gdzie się da? W moich klockach jeden pracuje na wewnętrznym oscylatorze, po prostu porty mi były potrzebne wszystkie dostępne :) Miałem nadzieję, że przy tak wolnej transmisji "jakoś to będzie", ale może to tu jest przyczyna? Transmisję mogę zwolnić choćby i do 600 baudów, jeśli to miałoby pomóc, jak pisałem, prędkość nie jest dla mnie problemem, powiedzmy, że z uwagi na przeznaczenie tych urządzeń, rozkaz wysłany z jednego ma wywołać reakcję w ciągu sekundy, może, ale nie musi szybciej.

    2) a jeśli urządzeń będzie więcej, jak najprościej zapobiegać temu, żeby urządzenia się wzajemnie nie zakrzyczały? Inaczej mówiąc, jak zapobiegać równoczesnemu nadawaniu? Jakieś sprawdzone proste pomysły?
    Albo inaczej: jak najprościej (przy takim hardware, jak w załączonych linkach) kontrolować stan linii, czy ktoś inny nie nadaje?
  • REKLAMA
REKLAMA