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



Teraz jest 27 mar 2026, o 14:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 26 maja 2013, o 13:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 wrz 2012
Posty: 73
Pomógł: 2

Witam
Wysyłam z Terminala Braya do atmegi8 tekst "abcd", atmega odbiera te znaki i wysyła mi je powrotnie do terminala, częśc konfiguracji prędkości/bitów stopu mam za sobą.

Chcę dopiero po zakończonej transmisji do atmegi (po odebraniu ostatniego znaku) wysłać do terminala tekst typu: "Atmega odpowiada 'abcd' ".
Znalazłem w nocie katalogowej, że ustawiając:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

możemy wywołać przerwanie o wektorze USART_RXC_vect, które przechwytuje znak po znaku, (wrzucam je do tablicy i inkrementuje indeks tablicy). Wpisując w tej funkcji przerwania kod wysyłający "Atmega odpowiada..." dostaję 4x odpowiedź z każdą literą po kolei tzn.
odpowiadam a odpowiadam b odpowiadam c odpowiadam d

1. Rozumiem, że przerwanie wykonuje się po odebraniu każdego znaku stąd dostaję poczwórną odpowiedź z każdym znakiem po kolei? Innego wyjaśnienia nie widzę.
2. Zatem jaki macie skuteczny sposób na ustawienie sprzętowej flagi po zakończonym odbiorze całej ramki danych? Próbowałem też wywoływać przerwanie, kiedy bufor UDRE jest pusty, ale w pętli zapchałem terminal samym "odpowiadam" - dane się skończyły, a przerwanie wykonywało się ciągle.
3.Czy ustawienie flagi programowej i na niej operowanie jest też dobrym rozwiązaniem?

Widzę w nocie tutaj zależność między RXCIE w UCSRB oraz RXC w UCSRA, że ustawienie obu tych bitów w rejestrach wywołuje przerwanie po zakończonym odbiorze znaków lecz ustawiając jedynie RXCIE przerwanie się wykonuje, nie widzę efektu ustawienia bitu RXC w UCSRA :(

Nie proszę o gotowy kod, jedynie proszę o rozwianie moich wątpliwości oraz podpowiedź co muszę ustawić, by odpowiedź do Terminala została wysłana po zakończonej całkowitej transmisji.

Za wszelką pomoc będe wdzięczny.

Pozdrawiam
Mikołaj



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2013, o 13:27 
Offline
Moderator
Avatar użytkownika

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

Sheep napisał(a):
1. Rozumiem, że przerwanie wykonuje się po odebraniu każdego znaku stąd dostaję poczwórną odpowiedź z każdym znakiem po kolei? Innego wyjaśnienia nie widzę.
2. Zatem jaki macie skuteczny sposób na ustawienie sprzętowej flagi po zakończonym odbiorze całej ramki danych? Próbowałem też wywoływać przerwanie, kiedy bufor UDRE jest pusty, ale w pętli zapchałem terminal samym "odpowiadam" - dane się skończyły, a przerwanie wykonywało się ciągle.
3.Czy ustawienie flagi programowej i na niej operowanie jest też dobrym rozwiązaniem?


zajrzyj do niebieskiej książki - przecież masz tam dokładnie opisane takie podstawy

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

po prostu zacznij od "buforów cyklicznych"

_________________
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: 26 maja 2013, o 15:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 wrz 2012
Posty: 73
Pomógł: 2

PRzeczytałem raz jeszcze historię zjadającego się (a raczej nie) węża i jego goniącego ogona, niestety nie w tym tkwi mój problem. Jedynie 12 punkt opisu działania bufora cyklicznego nasunął mi pewną myśl, by sprawdzać za każdym razem w przerwaniu czy odebrany znak, czy nie jest znakiem CR i jeśli tak, oznacza to koniec ramki i wysłanie danych do Terminala z tablicy/bufora danych z uprzednim tekstem "Odpowiadam + tekst powrotny"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2013, o 15:58 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 291
Pomógł: 6

Sheep napisał(a):
Witam...Pozdrawiam
Mikołaj

Też przez to przechodziłem. Może Ci się przyda topic2294.html i topic2189.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2013, o 16:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 wrz 2012
Posty: 73
Pomógł: 2

Dzięki za linki
Nie chcę po prostu w głównej pętli wstawiać kodu, który czeka na odbiór danych "z zewnątrz" jednocześnie zatykając atmegę.
Moje założenie jest takie, by atmega w głównej pętli robiła inna rzeczy, natomiast jeśli w danej chwili przyjdzie tekst typu "abcd", atmega używając do tego przerwań odpowiedziała "odpowiadam abcd", ot taki ping atnel.pl ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 maja 2013, o 19:17 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Nie chcę po prostu w głównej pętli wstawiać kodu, który czeka na odbiór danych "z zewnątrz" jednocześnie zatykając atmegę


No to musisz jeszcze troszkę poczytać - bo to żadne zatykanie procka, wręcz odwrotnie, a to co chcesz zrobisz - pięknie i szybko doprowadzi do zatykania ci się procka. Jak byś tak szerzej sobie poczytał także inne opracowania - to zobaczyłbyś, że bufory cykliczne do obsługi uarta to jedna z najbardziej słusznych dróg ... ale jeśli chcesz od nowa wymyślać koło ... proszę

Nie mniej jednak poczytaj pod koniec książki co to są "FUNKCJE NIEBLOKUJĄCE" to może cię naprowadzi na jakiś trop ....

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

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