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.

[Atmega 32] [MAX485] [LE-01M] - Komunikacja MODBUS między ATMEGA32,a licznikiem

tramway92 19 Kwi 2014 22:53 2442 4
  • #1 19 Kwi 2014 22:53
    tramway92
    Poziom 2  

    Witam,

    pracuję nad projektem systemu bilansowania mediów, a konkretnie koncentratorem. Chcę połączyć licznik: F&F LE-01M do ATMEGI32 i zapisywać w wewnętrznym EEPROMIE odczyty z licznika.
    -Częstotliwość odczytów i inne parametry będzie ustalał użytkownik (do tego LCD i przyciski).
    -Odczyty będą zawsze o określonej porze dzięki RTC.
    -Do komunikacji z licznikiem będę używać MAX485.

    Obecnie jestem w fazie planowania, dlatego prosiłabym o sprawdzenie schematu. Czy podany układ będzie spełniał te funkcjonalności? Później kolega doda komunikację z komputerem po RS232.
    Z góry dziękuję za pomoc.

    [Atmega 32] [MAX485] [LE-01M] - Komunikacja MODBUS między ATMEGA32,a licznikiem

    0 4
  • #2 28 Kwi 2014 13:28
    Pepi_23
    Poziom 15  

    Szeregowo z LEDs należy włączyć resystory ograniczające prąd.
    Rezystor R5 jest niepotrzebny (masz jużpodłączony R4).
    NA linie SDA i SCL warto podłączyć Pull-Up rezystory.

    0
  • #3 28 Kwi 2014 17:03
    Eagle
    Poziom 23  

    Za pomocą R4 (R5) polaryzujesz driver w stan nadawania więc po resecie gdy uC jeszcze nie ustali poprawnej wartości będziesz nadawać "1". Lepiej gdy spolaryzujesz do GND, wówczas zaczniesz nadawać gdy uC to wymusi.

    0
  • #4 17 Cze 2014 19:03
    tramway92
    Poziom 2  

    Pojawił się kolejny etap i niestety wiele problemów.
    Próbuję komunikować się z licznikiem właśnie w Modbus RTU, ale licznik milczy. Używałam terminala do sprawdzenia komunikacji i okazuje się, że ramka wysyła się dobrze, ale tylko raz na x razy. A nawet po wysłaniu dobrej ramki jest cisza.

    Oto moja funkcja wywołująca wysłanie (send to funkcja z USARTa z datasheetu Atmegi)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ktoś może się domyśla, gdzie może być błąd? I dlaczego licznik nie odpowiada:

    -prędkość transmisji jest dobra, bo sprawdzałam to właśnie w tym terminalu i na oscyloskopie
    -ramka na oscyloskopie wygląda "ok"
    -testowałam licznik z programem producenta i przejściówką USB-RS485, komunikował się bez problemów.

    Cały program w załączniku

    0
  • #5 18 Cze 2014 23:02
    michalko12
    Specjalista - Mikrokontrolery

    Po pierwsze adres 0 to w modbusie adres rozgłoszeniowy więc nie koniecznie jakieś urządzenie musi odpowiadać na tą ramkę.
    Po drugie CRC w Modbusie w przeciwieństwie do reszty danych umieszczone jest odwrotnie, najpierw część lo, a potem hi.

    Można skorzystać z biblioteki avr-libc do liczenia CRC MODBUSa

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0