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

[Atmega328P] Jak skonfigurować freemodbus z MAX485 i NPort232?

pejdz 27 Sty 2020 10:27 816 6
  • #1 18429895
    pejdz
    Poziom 4  
    Witam, mam problem z obsługą bilbioeki freemodbus pod atmegą 328p, w załączniku dodaje cały projekt gdyż nie wiem gdzie mam błąd. Avr połaczony jest z płytką MAX485 która to poprzez moxe NPort232 z komoputerem PC. Chciałbym zaobesrowac wysyłanie pakietów programem MBpoll jednak nie chce mi się to wszystko zgrać.

    Kod pliku main wygląda następująco:
    w pliku port.h mam zdefiniowany procesor 168, gdyż niczym się nie różni od 328p tylko pamięcią, oraz włączony RTS:

    #define __AVR_ATmega168__
    #define RTS_ENABLE

    Dodam że proste miganie diody w pętli nieskończonej za pomocą funkcji delay pod tą bilbioteką nie działa, dioda się załącza ale nie gaśnie po 1 s. Procesor ustawiony jest na taktowanie oscylatorem wewnętrznym 8 Mhz

    po skompilowaniu pojawiają się jedynie ostrzeżenia takie jak:
    [Atmega328P] Jak skonfigurować freemodbus z MAX485 i NPort232?




    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #2 18429917
    Freddie Chopin
    Specjalista - Mikrokontrolery
    pejdz napisał:
    po skompilowaniu pojawiają się jedynie ostrzeżenia takie jak:

    "jedynie"? Jak dla mnie (a nie znam się zbytnio na AVR) to te ostrzeżenia (z wyjątkiem tych "set but not used") są w stylu "wydaje się, że chciałeś zrobić coś zupełnie innego, bo tak jak zrobiłeś to z pewnością nie zadziała".
  • #3 18429947
    pejdz
    Poziom 4  
    Jeżeli chodzi o pierwszy warning w tej bibliotece dotyczy SIG_USART_TRANS w sekcji __AVR_ATmega169__

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Tutaj drugi i trzeci warning w pliku portsierial.c odnośnie|:

    SIGNAL( SIG_USART_DATA )
    {
    pxMBFrameCBTransmitterEmpty( );
    }

    SIGNAL( SIG_USART_RECV )
    {
    pxMBFrameCBByteReceived( );
    }

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i 4 warning w pliku porttimer.c dotyczący:

    SIGNAL( SIG_OUTPUT_COMPARE1A )
    {
    ( void )pxMBPortCBTimerExpired( );
    }

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Bilbiotekę pobrałem nic w niej nie grzebałem wszystkie pliki są w projekcie który wrzuciłem tutaj na forum.
  • #4 18429966
    Freddie Chopin
    Specjalista - Mikrokontrolery
    pejdz napisał:
    Bilbiotekę pobrałem nic w niej nie grzebałem

    Projekt FreeMODBUS jest "dead", nieutrzymywany od praktycznie równych 10-ciu lat (ostatnie wydanie w maju 2010 roku). Nie ma opcji żebyś mógł tego dziś użyć bez grzebania, bo - jak widzisz - nie da się. Warningi mówią Ci to wprost, kod który tam jest po prostu nie zadziała tak jak Ci się wydaje, bo przez te 10 lat toolchain AVRów zbyt się zmienił. No... W ostateczności jak bardzo się uprzesz, to możesz spróbować uruchomić te przykładowe kody na toolchainie AVR sprzed 10-ciu lat, to wtedy pewnie zadziała. Coś w stylu gcc 4.4 lub okolic.

    Pokazywanie mi fragmentów kodu lub całego projektu nic nie zmieni - nie znam się na AVRach i niezbyt planuję się poznać, więc nawet gdyby mi się bardzo nudziło, to nie poprawię ich za Ciebie. Piszę sobie tutaj, bo akurat o FreeMODBUS coś tam wiem i używam tego obecnie w wielu projektach (ale na STM32).
  • #5 18429986
    pejdz
    Poziom 4  
    A może jest jakaś aktualna biblioteka do sterowania modbusem pod avr?
  • #7 18526343
    pejdz
    Poziom 4  
    Przysiadłem nad tą biblioteką i pozamieniałem tak jak radziłeś i teraz mam tylko takie ostrzeżenia
    [img] [Atmega328P] Jak skonfigurować freemodbus z MAX485 i NPort232?
    Czy te ostrzeżenia mogą wpływać na nieprawidłową prace interfejsu modbus?

    Załączam również projekt w którym są wszystkie zmiany[/img]
REKLAMA