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

[ATMega8][C] Komunikacja dwóch uP na RS485 - Modbus

Citek 16 Lis 2008 10:56 8054 4
REKLAMA
  • #1 5744584
    Citek
    Poziom 22  
    Witam
    Mam mały problem.
    Muszę stworzyć komunikację pomiędzy uP, na razie tylko 2 później z 4-5, w standardzie 'ala' Modbus na wartwie fizycznej RS485.
    I teraz mam pytanie jak się do tego zabrać.
    Planuję na razie połączyć dwa uProcki bezpośrednio bez żadnych układów odpowiedzialnych za przekształcanie sygnałów na wartwę RS485, czyli bez układu SN75176.
    Czy mogę wykorzystać piny TX i RX i standardowe "biblioteki", które opisane są w wielu kursach.
    Tylko czy uda mi się tam wyedytować ramkę i stworzyć ją wg. standardu podobnego do Modbus, czyli:
    adres - 8 bitów
    funkcja - 8 bitów
    dane - 8 bitów
    crc - 16bitów
    Oczywiście mogę stworzyć standard podobny do Modbus'a nie musi być on idealnie odwzorowany do oryginału.
    A może ma ktoś gotową bibliotekę, którą można łatwo i prosto przerobić i jest dosyć prosta w dalszym użyciu.

    Jeszcze jedno pytanie, czy uda mi się to zrealizować na wewnętrznych kwarcach czy koniecznie będę musiał mieć zewnętrzne. Pytam się dlatego ponieważ jako drugi procek w końcowym etapie ma być wykorzystywany ATTINY13
  • REKLAMA
  • #2 5744842
    mirekk36
    Poziom 42  
    Citek napisał:

    Czy mogę wykorzystać piny TX i RX i standardowe "biblioteki


    no a czemu miałbyś nie móc, przecież będziesz działał wtedy na zwykłym RS232. Jenak jeśli dopiero zaczynasz z tym zabawę to lepiej potrenuj sobie na RS485 czyli z konwerterami SN75xx bo do sterowania RS485 jednak bedziesz musiał zaprząc jeszcze jedną linię sterującą kierunkiem przepływu, będziesz musiał uwzględnić i posprawdzać sobie adresowanie układów na magistrali itp

    a procki ATtiny czy inne bez kwarca można używać ale wtedy na niedużej ale popularnej prędkości 9600 biorąc też pod uwagę, że jeszcze ustawi im się bajt kalibracyjny oscylatora aby były mniejsze błędy dla komunikacji RS.

    Przykłady? sam sobie napisałeś przykład - rozpisując przykładowy format ramki teraz tylko ubrać to w kod i już
  • REKLAMA
  • #3 6796420
    isienka1
    Poziom 11  
    Proponuję wybierz ATMEGA32 i wyżej.Jeśli będziesz implementował Modbusa RTU konieczny jest menadżer czasu kontroli kolejno odebranych znaków oraz ramek.Możesz to zrobić korzystając z przerwania od jedego z timerów.Co do połączenia 2 układów to pozostaw to sobie na koniec,najpier postaraj się zrobić poprawną ramkę z adresem,funkcja i CRC.Zacznij od funkcji czytającej pojedynczy rejestr.Algorytm sumy kontrolnej wraz z niedużym przykładem wyliczenia jej jest dostępny w dokumentacji do Modbusa,dodam że działa poprawnie.
  • REKLAMA
  • #4 6796880
    arrevalk
    Poziom 25  
    Poczytaj sobie o bibliotece FreeModbus, to implementacja urządzenia slave Modbus na licencji LGPL(można wykorzystać w komercyjnych projektach, nie trzeba udostępniać całego kodu na GPL jedynie kod biblioteki musi być załączony z produktem). A co do modbusa na RS232 to jak najbardziej się da. Tylko że podłączanie więcej niż 2 urządzeń to ryzyko błędów transmisji, przy zastosowaniu rs422/485 już ten problem znika
  • #5 6829158
    Citek
    Poziom 22  
    Już się ze swoim problemem uporałem, nawet jako tako działało wszystko bez problemu z 4 urządzeniami.
    Myślę, że temat można zamknąć.
REKLAMA