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



Teraz jest 23 lis 2024, o 23:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
 Tytuł: Mkuart i RS485
PostNapisane: 29 paź 2012, o 01:48 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

Witam.
Popełniam właśnie projekt w którym będę używał RS485. Jako że nie lubię wyważać otwartych drzwi postanowiłem użyć biblioteki mkuart z pierwszego wydania książki. Wrzuciłem na szybko do procka lekcję 07_UART a że w układzie mam ATMEGE32 i sterowanie kierunkiem transmisji układu SN75176 podpięte do PD2 to nawet nic nie musiałem w kodzie zmieniać.
Jedyną rzeczą którą zmieniłem to to że nie zmieniałem wartości OSCCAL tylko inkrementowałem sobie jakąś zmienną i tak miało w nieskończoność wyrzucać jej wartość po RS485 w pętli while(1) . Dodałem też prosty odbiór jednego znaku żeby sobie buzzer zabuczał chwilkę. Wszystko podłączone do kompa przez przejściówkę usb-rs485. Przy odpaleniu niemiła niespodzianka. Układ wysyła tylko raz wartość zmiennej i koniec. Jakby się blokował. Odbiór działa dobrze - reaguje na wysyłane znaki. Oczywiście pierwsze to to sprawdzenie połączeń jak zawsze radzi Mirek :) Kilka razy sprawdzam ale niestety nie chciało być źle :) Zauważyłem że po resecie jest jedno nadawanie i koniec. Wychodzi na to że błąd jednak może tkwić w programie. Program w main.c banalny aż boli ale mimo tego sprawdzam. Znów nic nie znalazłem wiec zabrałem się za analizę biblioteki mkuart. Na szczęście nie jest długa więc nie było tak źle. Wcześnie zerknąłem też czy nie ma erraty do pliku ale nie znalazłem takiej. Oto wnioski.
Pierwsze co rzuciło mi się w oczy w pliku mkuart.h to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Z noty katalogowej SN75176 wynika że nadajnik aktywowany jest stanem wysokim natomiast odbiornik stanem niskim więc moim zdaniem powinno to wyglądać odwrotnie czyli tak

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

Niestety po tej operacji nadal się nie poprawiło a powiedziałbym nawet że pogorszyło bo nawet raz nic nie nadał po resecie.
Zacząłem się więc przyglądać plikowi mkuart.c.
W funkcji inicjującej jest wywołane UART_DE_ODBIERANIE:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przed poprawką de facto w inicjalizacji ustawiało się układ na nadawanie stąd program raz wysłał dane a następnie przy obsłudze przerwania USART_TXC_vect ustawiał układ na odbiór i już nic więcej nie nadawał:

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

Co ciekawe w obsłudze tego przerwania nie ma błędu bo blokowanie nadajnika jest robione stanem niskim z tym że nie ma tu odwołania do definicji UART_DE_ODBIERANIE (co by dawało w oryginalnej wersji odwrotny skutek) a jest operacja robiona na nazwach portów. Dzięki temu pierwotny program po opróżnieniu bufora nadawczego przełączał się na wieczny odbiór.
Konieczne było więc jeszcze aktywowanie nadajnika podczas przerwania nadawczego dodając do obsługi przerwania załacznie nadajnika:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie jestem pewien czy to było dobre miejsce na dodanie tego załączenia ale po tych modyfikacjach wygląda na to że program działa poprawnie. Mam nadzieję że się nigdzie nie pomyliłem i moje wypociny są słuszne choć biorąc pod uwagę godzinę to różnie może być. Dlatego bardzo bym prosił autora o ustosunkowanie się a jeśli nie mam racji to krytykę godnie zniosę a i przy okazji czegoś się nauczę :)
Pozdrawiam
Jarek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 06:08 
Offline
Moderator
Avatar użytkownika

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

Wydawało mi się że ta pomyłka z załączaniem nadajnika jest chyba nawet w erracie. Ale co do pozostałych punktów wygląda że zrobiłeś ok, czyli włączanie nadawania przed wysłaniem każdego znaku.

_________________
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: 29 paź 2012, o 08:55 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

Witam.
Rzeczywiście teraz patrzyłem na erratę (mam drugie wydanie pierwszej książki stąd brak zainteresowania erratą :) ) do papierowej wersji i definicje dla nadawania i odbierania są poprawione z adnotacją że dotyczy to też kodów źródłowych. Jednak tak jak pisałem w poprzednim poście aby nadawanie było możliwe konieczna jest jeszcze ta dodatkowa modyfikacja w obsłudze przerwania nadawczego. Można byłoby zamieścić na stronie wydawnictwa poprawioną wersję biblioteki mkuart aby oszczędzić innym kłopotów jeśli oczywiście to nie problem.
Pozdrawiam
Jarek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 10:21 
Offline
Moderator
Avatar użytkownika

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

Tak - masz rację - zrobione:

http://atnel.pl/uaktualnienia-programow-do-dvd.html

_________________
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: 29 paź 2012, o 14:58 
Offline
Użytkownik

Dołączył(a): 03 sie 2012
Posty: 32
Pomógł: 0

Ja się podepnę pod wątek. Czy w drugiej książce na płycie również trzeba podmienić UART czy tam jest dobrze ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 15:59 
Offline
Moderator
Avatar użytkownika

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

raven1982 napisał(a):
Ja się podepnę pod wątek. Czy w drugiej książce na płycie również trzeba podmienić UART czy tam jest dobrze ?


W drugiej książce jest sobie taki ostatni rozdział na temat parsowania stringów i komunikacji - to jest już w pełni poprawiona wersja - zresztą - tak jak pisałem w pierwszej książce.

W niebieskiej tłumaczyłem podstawy komunikacji UART, a w zielonej książce jest już o wiele bardziej zaawansowana i tym razem nie dydaktyczna a użyteczna biblioteka do obsługi RS232. Nazywa się ona teraz tzn folder MK_USART

różni się dość mocno od tej z pierwszej książki hmmm bardzo mocno

chociaż jeszcze dorobię poradnik jak wprowadzić w niej atomowość niektórych operacji i będzie dostępny na stronie atnel.pl

_________________
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: 29 paź 2012, o 18:31 
Offline
Użytkownik

Dołączył(a): 03 sie 2012
Posty: 32
Pomógł: 0

Drogi Mirku, jeśli mogę od strony uczącego się... Kupiłem książkę nr2 najbardziej licząc na własnie komunikacje UART :) ale niestety do teraz nie ogarniam tego rejestrowania funkcji ( callback) , dlatego jeśli mogę prosić o poradnik może jeszcze raz tylko prościej :) wszystko niby jest jasne ale nie rozumiem po co się rejestruje te funkcje i nie potrafię sobie wyobrazić algorytmu jak to rejestrowanie działa. Pójściem na łatwiznę była bu funkcja obsługująca event bez rejestracji callbacków ale wolałbym zrozumieć jak działa w takim stanie jak jest teraz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 19:23 
Offline
Moderator
Avatar użytkownika

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

No dobrze - ale powiedz mi najpierw - czy po zakupie tej książki od razu poleciałeś do ostatniego rozdziału ??? :(

czy jednak czytałeś po kolei wcześniejsze ? Bo od początku książki po kolei pokazuję od najprostszych form po coraz bardziej skomplikowane o co tu chodzi ???

oczywiście postaram się pomóc - ale odpowiedz mi na to pytanie - to dla mnie ważne

_________________
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: 29 paź 2012, o 20:18 
Offline
Użytkownik

Dołączył(a): 03 sie 2012
Posty: 32
Pomógł: 0

Na początku poleciałem od razu , ale potem nie podołałem i teraz brnę od początku tylko ze cały czas jakoś nie mogę sobie wyobrazić - jeśli wyobrażam sobie algorytm liniowo co krok po kroku robi program to jakoś nie widzę gdzie w tym wszystkim są te rejestracje a w dodatku gdzieś kiedyś pisałeś ze można zarejestrować różne funkcje w zależności od aktualnego stanu programu np rożne reakcje w obsłudze menu. Dlatego prosiłem o wykład jak dla kretyna aby umożliwił mi ogarnięcie tematu przed doczytaniem książki do końca :).
wiem leniuch ze mnie - na razie czytam i próbuje jak dojdę do końca może sam zrozumiem ale skoro przeczytałem ze zamierzasz pisać poradnik to wykorzystałem okazje aby poprosić o ułatwienie drogi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2012, o 21:30 
Offline
Moderator
Avatar użytkownika

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

Wyobraź sobie, że zlecasz mi napisanie jakiejś tam funkcji, no niech będzie, że funkcji do obsługi klawisza. I teraz co ? wyobraź sobie jak mi przekażesz założenia do tej funkcji ???

że ma reagować na krótkie kliknięcie, długie kliknięcie, i jeszcze żeby miała jakieś auto-powtarzanie wciśniętego klawisza

No ok - ale to ma być komuś (czyli mi zlecone) i ciebie nawet nie obchodzi jak ja to tam w środku zrobię - po prostu ma działać .... ale

no ale teraz chodzi o to, że ta funkcja którą ja tobie mam napisać - MUSI wywołać jaką funkcję po krótkim kliknięciu, po długim kliknięciu itp ....

wszystko fajnie - ale co ? jak ja mam to napisać - skoro ty nie jesteś mi w stanie teraz przekazać tych swoich własnych funkcji bo jeszcze ich nawet nie stworzyłeś. Gdybyś je już miał to może być mi powiedział że konkretnie po krótkim kliknięciu ma się odpalić mała rakietka modelarska a po długim ma się rozjaśniać żarówka

no ok nawet gdybyś miał już konkretnie te funkcje - to jak ja bym miał teraz wiedzieć jakie ty tam w swoim programie używasz zmienne np globalne, jakie piny do odpalania rakiety, jakie piny do detekcji zera sieci itp itd - a jeszcze jakbyś później zmienił zdanie i jednak krótki klik miał robić coś innego ????

Sam widzisz KOŁOMYJA - to ja bym musiał z tobą siedzieć godzinami i pisać wspólny program , który się zazębia w wielu miejscach .... a później jakieś przeróbki tego to KOSZMAR ... czy nie ma wyjścia ???

ależ JEST - za pomocą Callbacków czyli tzw "funkcji zwrotnych"

a zatem ustalamy tylko, że moja biblioteka do obsługi klawisza ma wywołać w uproszczeniu DWIE RÓŻNE funkcje (można i więcej) no ale ustalamy że dwie....

czy mnie jako zlecenioboircę interesuje co będzie w tych funkcjach ? co ty tam sobie w nich napiszesz i jak je zgrasz ze swoim programem ????? NIE

czochra mnie to absolutnie ;)

ponieważ ja posłużę się w odpowiednich miejscach mojej biblioteki do obsługi klawisza TYLKO GOŁYMI wskaźnikami na dwie różne funkcje. Po prostu wywołam jakieś funkcje i nie obchodzi mnie co w nich będzie. ale hola hola .... skoro piszę biblotekę to od razu przygotuję tobie takie małe narzędzie, żebyś TY mógł w wygodny sposób przekazać mi te dwa wskaźniki na swoje własne funkcje w programie, który kiedyś tam napiszesz - jak dostaniesz ode mnie bibliotekę.

Rozumiesz - moja biblioteka będzie sobie działać, coś tam robić a jak przyjdzie odpowiedni moment to WYWOŁA za pomocą wskaźników niejako zwrotnie - twoje funkcje, które ty musisz jakoś przy starcie programu przekazać do tej mojej biblioteki.

To przekazanie to właśnie nazywam ZAREJESTROWANIEM callbacka (czyli przekazanie wskaźnika do twojej jednej i drugiej funkcji) ....

ta cała rejestracja (zajrzyj sobie RAZ do funkcji rejestrującej) ... TO NIC INNEGO jak tylko podstawienie do zmiennej wskaźnikowej w mojej bibliotece - wskaźnika do jakiejś twojej funkcji.

hmm nie wiem - czy teraz troszkę jaśniej ? .... jeśli nie to dopytaj o coś po drodze - czego nie rozumiesz itp ...

_________________
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: 2 lis 2012, o 21:54 
Offline
Użytkownik

Dołączył(a): 03 sie 2012
Posty: 32
Pomógł: 0

tak teraz trochę jaśniej , nawet udało mi się odpalić program z płyty na taktowaniu 8 MHz bo w originale był na 11 :) teraz jeszcze posiedzę nad tymi i jest duża szansa ze załapie dziękuję .

dodano 05.11.2012

No i stało się dzisiaj zrozumiałem mechanizm jeszcze raz dziękuje Mirku za obrazowy opis już go drukuje i wklejam sobie do książki. Zabieram się do pisanie swojego programu z RS232 jak skończę to pewnie poproszę jeszcze o pomoc w rozwiązaniu ewentualnych błędów. To co przeszkadzało mi w zrozumieniu tegoż rejestrowania to to ze szukałem jakiś słów kluczowych a funkcje z call back czy register w nazwie mogą się nazywać dowolnie i taki mały szczegół blokował mój umysł :)



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

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