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? 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 lip 2025, o 15:38


    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

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