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



Teraz jest 19 kwi 2024, o 01:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 19 lip 2017, o 08:26 
Offline
Użytkownik

Dołączył(a): 15 lut 2015
Posty: 32
Lokalizacja: Rzeszów
Pomógł: 0

Witam, w chwili dodania przerwania realizującego obsługę serw, napotkałem mały problem dotyczący komunikacji uart, mówiąc dokładnie pojawiły się błędy w transmisji.

Obrazek
Jak widać co któryś znak się krzaczy, paraliżując poprawną komunikacje....

Przerwanie obsługi serw wykonuje się co 5 us po to aby zachować sensowną rozdzielczość obsługi 4 serwomechanizmów. Całość oparłem na liczniku którego wartość jest porównywana z tablicą 4 serw tak aby wygenerować 4 niezależne sygnały sterujące.

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

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


Gdy zakomentuje powyższe listingi wszystko wraca do normy. Więc pewnie przerwanie 5us zatrzymuje również UART, i stąd ten problem, jednak nie wiem jak temu zaradzić. Czy da się jakoś nadać priorytet dla obsługi UART? - dobrze kombinuję?

Obsługę UART realizuje na Mirkowej bibliotece.

Liczę na jakieś wskazówki,
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2017, o 08:43 
Offline
Moderator
Avatar użytkownika

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

Nie ma żadnych priorytetów przerwań w AVR, a ty po prostu robisz jakiegoś okrutnego babola niestety ... Zajrzyj do ustawień UART z Bluebooka jeśli z tej korzystasz - bo pewnie jak wielu przy takich okazjach - ustawiłeś sobie obsługę RS485 i ci się tam gotuje

_________________
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: 19 lip 2017, o 09:08 
Offline
Użytkownik

Dołączył(a): 15 lut 2015
Posty: 32
Lokalizacja: Rzeszów
Pomógł: 0

Mirku dobrze kombinujesz, używam Mega164p i 2 uartów. UART0 obsługuje Wifi, natomiast UART1 obsługuje RS485...
Biblioteka z bluebooka odpowiednio zdublowana dla 2 uartów...
Czy to oznacza ze nie pogodzę tych spraw?

EDIT:
Czy mógłbyś rozwinąć myśl kolizji z włączonym rs485? Chciałbym to lepiej zrozumieć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2017, o 16:24 
Offline
Moderator
Avatar użytkownika

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

leeon napisał(a):
Czy to oznacza ze nie pogodzę tych spraw?

pogodzisz ale musisz sobie jednak wprowadzić odpowiednie zmiany w kodzie biblioteki - no bo przecież - bez przesady - ja w Bluebooku nie pokazywałem mega super hyper extra uniwersalnej biblioteki, która będzie działać nie tylko ze wszystkimi prockami świata avr a do tego jeszcze z wieloma uartami ;) no toż nie o to chodzi w Bluebooku panie kochany

w Bluebooku - opisuję "jak to się robi" na prostym przykładzie - a nie żeby go stosować "do wszystkiego"

Toż musisz rozdzielić na UART0 i UAR1 - co za problem? Na jednym można korzystac z RS232 a na drugim - z RS485

_________________
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: 19 lip 2017, o 17:35 
Offline
Użytkownik

Dołączył(a): 15 lut 2015
Posty: 32
Lokalizacja: Rzeszów
Pomógł: 0

Oj i mamy nieścisłość - ale już prostuję ;)
UART0 i UART1 mam już z powodzeniem rozdzielone, pięknie zajmują się swoimi sprawami - do póki nie uruchomię przerwania ISR(TIMER1_COMPA_vect) o którym wspomniałem w pierwszym poście.

Twoją wypowiedź:
mirekk36 napisał(a):
Zajrzyj do ustawień UART z Bluebooka jeśli z tej korzystasz - bo pewnie jak wielu przy takich okazjach - ustawiłeś sobie obsługę RS485 i ci się tam gotuje

Odebrałem to jako sugestię, że w bibliotece należy wprowadzić poprawkę tak aby problem ustał, może dzielą jakiś rejestr.

Z moich przypuszczeń wynika że kod przerwania wykonuje się na tyle długo, że zatrzymuje aktualnie trwającą transmisje w UART.
Potrzebuję pomocy w jaki sposób uodpornić transmisje na działanie takiego przerwania opisanego w pierwszym poście.

Przez chwile myślałem że mógłbym scalić 2 przerwania które mam w kodzie w jedno odpowiednio zwiększając wartości liczników - ale wydaje mi się że sumaryczny czas wykonania procedury się przecież nie zmieni? Zaoszczędzę tylko jeden timer... Głośno myślę...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2017, o 22:59 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam.

To nie to, że aktualnie wykonujące się przerwanie zatrzymuje UART-a, bo tak nie jest. UART jest modułem sprzętowym i przerwanie nie może go zatrzymać.Problemem jest to, że te Twoje przerwania występują tak często, że procek praktycznie "nie ma czasu" na wykonywanie czegokolwiek innego. Obejrzyj plik *.lss swojego programu i zobacz, ile wykonuje się to Twoje przerwanie. Albo lepiej - obejrzyj poradnik Mirka o wykorzystaniu analizatora stanów logicznych i zobacz "na żywym organizmie". Podejrzewam, że przynajmniej ze 3us ( jak nie dłużej, wliczając w to czas wejścia w przerwanie, odłożenie rejestrów na stosie, itd..), więc jak widzisz, czasu na cokolwiek jest niewiele. W ogóle przerwania co 5us, no, no, z tym to i na mocniejszym procku byłoby ciężko.
Spróbuj może na początek zmniejszyć częstotliwość tych przerwań choć 4-5 krotnie - jeśli wszystko będzie działać, to zdecydujesz, czy taka rozdzielczość dla serw Cie satysfakcjonuje - jeśli nie, no cóż - pozostaje gruntowna zmiana podejścia do problemu, albo... STM32F4xx ;-).
Co do UART-ów. UART-y w popularnych prockach mają bufor na 1 odebrany znak - jeśli więc nie zdążysz tego znaku przepisać do swojego bufora, przed odebraniem następnego, to wtedy ten znak jest bezpowrotnie tracony. Ale policzmy: dla szybkości transmisji 115200bps mamy ok 86,8us na 1 bajt ( wliczając w to bit startu i stopu ), więc tu jest sporo czasu, przy mniejszych szybkościach transmisji będzie tylko łatwiej.

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2017, o 08:47 
Offline
Użytkownik

Dołączył(a): 15 lut 2015
Posty: 32
Lokalizacja: Rzeszów
Pomógł: 0

O to właśnie chodziło. Problem udało mi się rozwiązać zmniejszając częstotliwość już 2-kronie.
Sam bym na to nie wpadł, no może metodą prób, błędów i szamanizmów ;)

Dziękuję za pomoc,
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2017, o 12:56 
Offline
Moderator
Avatar użytkownika

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

leeon napisał(a):
no może metodą prób, błędów i szamanizmów


a po co ? wystarczy obejrzeć sobie poradniki o Analizatorze stanów logicznych :) żeby zrozumieć jak sobie świadomie radzić podczas programowania



mówię ci obejrzyj to

_________________
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: 20 lip 2017, o 17:40 
Offline
Użytkownik

Dołączył(a): 15 lut 2015
Posty: 32
Lokalizacja: Rzeszów
Pomógł: 0

Widziałem że poruszyłeś to zagadnienie, sprytny sposób. Będę pamiętał ;)



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: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO