Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 kwi 2025, o 13:18


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 30 ] 
    Autor Wiadomość
    PostNapisane: 8 lis 2023, o 18:56 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Cześć,
    Poszukuje biblioteki do obsługi protokołu Modbus RTU, chcę wykorzystać ten typ komunikacji w swojej pracy magisterskiej.
    Potrzebuję skomunikować kilka modułów, przesłać miedzy nimi kilka zmiennych(około 10) oraz kilka poleceń.
    Widziałem rozwiązania np. na githubie https://github.com/liyanboy74/modbus. Ale nie potrafię sprowadzić ich do formy akceptowalnej przez kompilator gcc w eclipse. Posiadam wszystkie biblioteki Mirka, łącznie z tą do obsługi Uart.
    Nie chcę żeby ktoś robił cokolwiek za mnie, kieruję się jedynie z pytaniem bo a nuż ktokolwiek z Was budował własny projekt i ma przetestowaną bibliotekę.
    Z góry dziękuję za okazaną pomoc.
    Pozdrawiam
    Michał



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 lis 2023, o 21:33 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Cześć,

    Ze swojej strony polecam freeModbus, pamiętam że na studiach tej biblioteki używałem. Link do githuba: https://github.com/chrismerck/freemodbu ... r/demo/AVR
    Jak będę miał chwilę to może uda mi się jakieś projekty wygrzebać które zrobiłem na bazie tej biblioteki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2023, o 00:36 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    MichalXY napisał(a):
    Cześć,

    Ze swojej strony polecam freeModbus, pamiętam że na studiach tej biblioteki używałem. Link do githuba: https://github.com/chrismerck/freemodbu ... r/demo/AVR
    Jak będę miał chwilę to może uda mi się jakieś projekty wygrzebać które zrobiłem na bazie tej biblioteki.

    Widziałem to, wygląda dobrze ale kod był kompilowany na starym kompilatorze. Eclipse nie chce mi tego skompilować. Jeśli miałbyś przerobiony kod pod eclipsa to z chęcią bym skorzystał.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2023, o 17:51 
    Offline
    Nowy

    Dołączył(a): 27 lut 2015
    Posty: 19
    Pomógł: 2

    Tu masz spakowany projekt pod eclipse magistrali MODBUS RTU. Testowałem na płytce UNO na 328p. i symulatorze modbus master.


    Autor postu otrzymał pochwałę

    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2023, o 20:51 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Cześć,
    Podpowiedzcie proszę, co mogę robić źle.
    Ustawienia portu com wyglądają następująco:
    Obrazek
    Ustawienia programu wyglądają tak:
    Obrazek

    A cały projekt jest żywcem z załącznika kolegi Slawek5791

    Dioda na przejściówce miga, sprzętu bym się nie czepiał.
    Próbowałem opcji read imput registers i read holding registers.
    Niestety cały czas mam brak odpowiedzi.
    Z góry dziękuję za pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 lis 2023, o 20:43 
    Offline
    Nowy

    Dołączył(a): 27 lut 2015
    Posty: 19
    Pomógł: 2

    Tak na szybko to adres startowy w terminalu masz ustawiony na 1000, a w programie na 1. Poza tym ważna jest ilość rejestrów do odpytania. Jak będzie w terminalu ustawione więcej niż w programie, to też się wykrzaczy (ale mniej może być).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2023, o 00:31 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Cześć,
    Miałeś rację, skorzystałem z arduino bo tylko tam miałem ATmege328.
    Wszystko działa.
    Podpowiedzcie proszę, jak przerobić program pod ATmege32.
    W pliku event_timer.c zmieniałem poniższe linijki z:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    na:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    O ile na ATmedze 328p wszystko działa, tak na ATmedze32 już nie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2023, o 09:23 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    W MKEclipse wyrzuca jeszcze błędy dla złych nazw wektorów przerwań dla atmegi32
    Proponuję dodać do port.h w części dotyczacej atmegi 32

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    lub podmienić właściwe nazwy dla atmegi32 bezpośrednio w ISR



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2023, o 18:21 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Cześć,
    Dziękuję za podpowiedź, niestety nadal nie działa :(
    Jeśli ktoś byłby chętny zerknąć na mój kod to przesyłam go w załączniku.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2023, o 22:30 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Nie wiem czy to wystarczy, ale lepiej gdy usuniesz definicje wcześniej przeze mnie proponowane i może popraw bezpośrednio wpisy w ISR .
    Źle przepisałeś TIMER0..... a kompilator tego nie zauważa.
    Na próbę może warto też użyć kwarca 16 MHz , mimo że oczywiście 1159200 Hz jest lepszy.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 13:44 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Czy takie przepisanie Timera0 jest poprawne?
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Przy kwarcu 8mHz układ odbiera i próbuje coś nadać ale wygląda to tak:
    Obrazek
    Zaś przy 16mHz na linii Tx cisza więc układ nie rozumie co odbiera



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 14:00 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Wygląda, że błąd był jeszcze z UBRR.
    Poprawiłem całość pod MKEclipse dla ATmega32A. Możesz sprawdzić, czy działa?


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 14:43 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Przy 16MHz rezultat następujący:
    Obrazek
    Przy 11,0592MHz i 8Mhz brak odpowiedzi.
    Próbowałem też przeliczać, tak żeby wychodziło równo 10ms:
    OCR0 = (F_CPU/1024UL)/156UL;
    Odpowiednio dla każdego taktowania ale to nic nie dawało



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 16:26 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Może w pliku portserial.c zamienić fragment na:
    #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) \
    ( ( F_OSC + UART_BAUD_RATE*8UL ) / (16UL * UART_BAUD_RATE ) - 1 )
    // ( ( F_OSC ) / ( ( UART_BAUD_RATE ) * 16UL ) - 1 )

    Może wzór Mirka na ubr coś odczaruje.

    Ponadto proponuje zakomentować:

    #if defined (__AVR_ATmega168__)
    UCSRC |= ucUCSRC;
    #elif defined (__AVR_ATmega169__)
    UCSRC |= ucUCSRC;
    #elif defined (__AVR_ATmega8__)
    UCSRC = _BV( URSEL ) | ucUCSRC;
    #elif defined (__AVR_ATmega16__)
    UCSRC = _BV( URSEL ) | ucUCSRC;
    #elif defined (__AVR_ATmega32__)
    UCSRC = _BV( URSEL ) | ucUCSRC;
    #elif defined (__AVR_ATmega128__)
    UCSRC |= ucUCSRC;
    #endif

    i wpisać :
    UCSRC = _BV( URSEL ) | ucUCSRC;

    Ewentualnie ustawić projekt na Atmega32 zamiast ATmega32A



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 17:54 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Bardzo dziękuję za pomoc ale nadal to nie działa, chyba po prostu przesiądę się na 644p. Mam nadzieje że tam zadziała tak jak na 328p. Kombinowałem z różnymi taktowaniami i cokolwiek odpowiada tylko przy 16MHz ale jednak głupoty.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 19:14 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    To na koniec spróbuj po podmianie załączonego pliku.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 19:26 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Niestety...
    Nadal przesyłane są głupoty.
    Zamówiłem 644p, dam znać jak to zadziała.
    Niestety, to nie biblioteka naczelnego wodza Mirka, nie działa zawsze i wszędzie (;



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 19:36 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    No trudno, nie mam więcej pomysłów na tą chwilę. Wydaję mi się, że kiedyś na forum ktoś wspominał, że robił modbus rtu pod 644p.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 19:37 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27369
    Lokalizacja: Szczecin
    Pomógł: 1043

    przyjdzie czas że i ja w końcu będę musiał pierdyknąć taką bibliotekę - z uwagi na to że niedługo będę musiał dłubać w wielkim komercyjnym projekcie gdzie ModbusRTU to będzie podstawa a i będzie to musiało działać na różnych prockach nie tylko AVR ale i ESP

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 19:52 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Mirku, kiedy będziesz miał ją gotową przynajmniej na betatesty? :)
    Albo czy już mogę zapisać się na jakiś preorder?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 21:27 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Ostatnia wersja, najmniej pokombinowana. Należy wybrać ATmega32.


    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2023, o 21:38 
    Offline
    Nowy

    Dołączył(a): 27 lut 2015
    Posty: 19
    Pomógł: 2

    Ale przecież oryginalna biblioteka Freemodbus obsługuje natywnie:
    ATmega168,
    ATmega169,
    ATmega8,
    ATmega16,
    ATmega32,
    ATmega128,
    a ja przerobiłem ją na AT328p, więc wystarczy pobrać oryginalną (trochę wykastrować z TCP) i masz obsługę na AT32.

    Mam nadzieję, że powstanie nowa biblioteka modbus z obsługą master i slave, bo Freemodbus obsługuje tylko slave, więc trzeba mieć jeszcze mastera (w postaci PC+program lub jakiś PLC).
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lis 2023, o 08:17 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Jeśli oryginalna biblioteka Freemodbus radzi sobie dobrze z atmega32 to pozostaje jeszcze do sprawdzenia, czy kwarc 18,4320 Mhz coś pomoże. Może biblioteka EVENTtimer za bardzo przeciąża podstawowy rdzeń modbusa i się krzaczy. Czy nie warto coś pozmieniać w EVENTtimer, ustawić na próbę np. na 100ms?
    Czy pod atmega328 działa poprawnie z kwarcem 12 MHz lub 11.0592 MHz?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lis 2023, o 12:47 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Ciekawa jest biblioteka uModbus na githubie.
    Jak dla mnie jest bardziej czytelna niż rozbudowany freemodbus.
    Kompiluje się z marszu pod atmega328P.
    Autor nic nie wspomina o prawach autorskich ale skoro tam jest umieszczona to do celów prywatnych pewnie można używać.
    https://github.com/jurekms/uMODBUS/tree/master



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lis 2023, o 17:55 
    Offline
    Nowy

    Dołączył(a): 27 lut 2015
    Posty: 19
    Pomógł: 2

    Przecież można wogule wyciąć softtimery. One tylko były mi potrzebne do sterowania diodą i nie biorą żadnego udziału w transmisji danych przez Modbus. Testowałem tą bibliotekę na AT8, AT32, AT328p, AT1284p i AT2560. W żadnym przypadku nic się nie blokowało po mimo dużego projektu z obsługą PWM, I2C, FT811 itp. z kwarcami 8MHz, 11.052, 16 i 18.432MHz. Więc coś robisz nie tak. W terminalu modbus trzeba ustawić prędkość ilość bitów stopu i parzystości. Trzeba podać adres układu, adres od którego odczytujesz i zapisujesz dane do rejestrów i prawidłowa ilość danych (jak w programie w AT 32 masz do wysłania 4 wartości to nie można odczytywać np 5 danych bo się w terminalu wykszaczy i będziesz miał takie błędy). Poza tym projekt tej biblioteki powstał w 2006r i był do 2018r poprawiany i rozbudowywany na różne platformy, więc nie sądzę żeby miał jakieś błędy dla AVR.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2023, o 20:47 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    Znalazłem chwilkę czasu, wygrzebałem i podłączyłem atmega 32 i wszystko działa bez problemu, przynajmniej z tą ostatnią wersją załączoną kilka postów powyżej, więc nie jest to problem po stronie moich propozycji modyfikacji, a późniejsze gdybania należy zignorować.
    Obrazek


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2023, o 21:02 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Jarku...
    Bardzo Ci dziękuję,
    Program działa, kliknięcie "pomógł" chyba nie wystarczy,
    Koledzy Slawek5791 oraz JarekK jeśli podacie numer paczkomatu to z chęcią bym Cię Wam odwdzięczył bo teraz pisanie pracy pójdzie z górki.
    Jeszcze raz dziękuję!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2023, o 02:09 
    Offline
    Nowy

    Dołączył(a): 27 lut 2015
    Posty: 19
    Pomógł: 2

    Cześć
    Nie zapomni tylko, że tak naprawdę omawiana biblioteka obsługuje tylko wersję slave i nie za bardzo nadaje się do komunikacji po między dwoma lub kilkoma Atmegami, gdyż jedna z nich musiała by pracować jako master (czego ta biblioteka nie ma). Ja testowałem ją z PLC S7-1200, gdzie ww pracował jako master na sieci, a AT328p jako slave.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2023, o 10:40 
    Offline
    Użytkownik

    Dołączył(a): 12 paź 2014
    Posty: 32
    Pomógł: 0

    Wiem to i będę szukał rozwiązania, może uda mi się przerobić bibliotekę slave na mastera. Jeśli już slave działa tak jak potrzebuje to jestem w połowie sukcesu. Zajmę sie teraz częścią sprzętową a w międzyczasie będę się rozglądał za obsługą mastera.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2023, o 11:30 
    Offline
    Użytkownik

    Dołączył(a): 13 lut 2012
    Posty: 174
    Pomógł: 10

    To bez analizatora stanów logicznych i biblioteki Mirka MKmultiuart bin chyba się nie obejdzie. Spore wyzwanie.
    Fajnie by było gdybyś się pochwalił końcowym efektem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 30 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO