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



Teraz jest 11 sie 2026, o 06:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 10 lip 2013, o 22:51 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 lip 2013
Posty: 12
Pomógł: 0

Cześć wszystkim, jestem tu nowy więc przede na wstępie chciałbym wszystkich serdecznie pozdrowić.
Piszę do Was z problemem, który mam nadzieje uda mi się dzięki wam rozwiązać - mianowicie:

Piszę procedurę obsługi pilota RC5 opartego o przerwanie zewnętrzne. Rozrysowałem sobie wszystko pięknie, algorytm, maszyna stanów itp. ale poległem już na samym początku implementacji.
Odbiornik IR podłączony do pinu INT0. Obsługa przerwania wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Powyższy kod po naciśnięciu przycisku pilota generuje na konsoli takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli powiedzmy, że OK, 24 przerwania, ale gdy zmienię 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.

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

tym razem 30 przerwań na naciśnięcie TEGO SAMEGO przycisku.
Teraz jeszcze ciekawiej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

każda liczba pomnożona razy 32 powinna dać liczbę mikrosekund jaka minęła od ostatniego przerwania. Pierwsza może być dowolna, ale już każda kolejna powinna zawierać się w przedziale <13-69> (kwarc 8MHz, przescaler 256 -> tick zegara co 32 us), tymczasem dostaję jakieś losowe śmieci.
Kod programu jest prawie pusty. Jest tylko inicjacja timera0 i UART.

Podpowiedzcie mi proszę, co mogę robić nie tak? :(

PS. Dodam jeszcze, że zachowania te są całkowicie powtarzalne. Na początku podejrzewałem zakłócenia na linii odbiornik-uC, ale za każdym razem kod #1 generuje 24 przerwania, kod #2 30 przerwań, a kod #3 śmieci. Odbiornik podłączony poprawnie - zasilanie odfiltrowane.



Ostatnio edytowano 17 lip 2013, o 07:36 przez Rodriguez, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: RC5 na INT0
PostNapisane: 10 lip 2013, o 22:58 
Offline
Moderator
Avatar użytkownika

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

Przede wszystkim to daj sobie spokój z wysyłaniem czegokolwiek na terminal z procedury obsługi przerwania. Przy tak przedstawionym kodzie i problemie ciężko wywnioskować czy to na pewno to ale przy nieuwadze - to może być na pewno to co rozjeżdża ci przerwania.

czy nie łatwiej w przerwaniu napełniać jakąś tablicę (szybko sprawnie i bezpiecznie dla przerwania) a potem wykluskać jej zawartość na terminal ?

poza tym jak skonfigurowane przerwanie - na jakie zbocze czy zbocza? a może na poziom logiczny ?

sam widzisz że informacji jak na lekarstwo

_________________
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  
 Tytuł: Re: RC5 na INT0
PostNapisane: 14 lip 2013, o 14:43 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 lip 2013
Posty: 12
Pomógł: 0

Mirku, oczywiście miałeś rację :) Wyświetlanie czegokolwiek w obsłudze przerwania nie daje dobrych rezultatów ;)
Dlaczego tak się dzieje? Czy dobrze kombinuję, że kod może nie zdążyć się wykonać przed wystąpieniem kolejnego przerwania?

Brnę nadal przez mój problem, zrobiłem tak jak zasugerowałeś: W przerwaniu zapisuję wartość TCNT0 do tablicy a potem w programie głównym ją wyświetlam, po wystawieniu flagi cr5ready:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Każda liczba to czas jaki upłynął od poprzedniego przerwania.
189 na początku jest OK, bo licznik może mieć dowolną wartość przed naciśnięciem klawisza. Wszystko jest prawie OK. poza tym 140 na trzeciej pozycji. Rwę włosy z głowy i próbuję dojść skąd się to bierze, bo w standardzie rc5 nie ma o tym mowy. Wszystkie pozostałe wartości są OK, tylko to przeklęte 140....
Macie może pomysł gdzie popełniam jakiś fundamentalny błąd?
Takie zachowanie mam na wszystkich trzech pilotach jakie posiadam :(

PS. Odpowiadając na wcześniejsze pytanie: przerwanie wyzwalane jest oczywiście dowolnym zboczem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: RC5 na INT0
PostNapisane: 14 lip 2013, o 14:55 
Offline
Moderator
Avatar użytkownika

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

Rodriguez napisał(a):
Czy dobrze kombinuję, że kod może nie zdążyć się wykonać przed wystąpieniem kolejnego przerwania?


Teraz bardzo dobrze kombinujesz ;)

_________________
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  
 Tytuł: Re: RC5 na INT0
PostNapisane: 14 lip 2013, o 15:11 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 lip 2013
Posty: 12
Pomógł: 0

Cieszę się :) Zawsze to kroczek do przodu. Tylko irytuje mnie ten długi czas między drugim a trzecim przerwaniem.... :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: RC5 na INT0
PostNapisane: 14 lip 2013, o 16:11 
Offline
Moderator
Avatar użytkownika

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

No tu już ci nie pomogę bo musiałbym składać sobie taki układ i testować - na sucho nie dam rady a czasu też nie mam żeby to testować teraz :( ... kupa roboty wciąż

_________________
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  
 Tytuł: Re: RC5 na INT0
PostNapisane: 17 lip 2013, o 00:12 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 lip 2013
Posty: 12
Pomógł: 0

Veni Vidi Vici!

Pokonałem bestię gdy naocznie zobaczyłem co wysyłają moje piloty. 3 z 4 pilotów okazały się nie nadawać w RC5 a jedynym pilotem okazał się mały chiński pilocik sprzedawany na aledrogo jako pilot do arduino :) Ale i on, jak się okazało nadaje oprócz RC5 nadaje mnóstwo śmieci, które nazwałbym pre_data i post_data, więc musiałem precyzyjnie określić jak ma działać maszyna stanów, żeby odrzucała te śmieciowe dane. No i się udało :)

Poniżej kod dla zainteresowanych. Myślę, że jest dość optymalny i przejrzysty. Wykorzystuję tylko jedno przerwanie - INT0 i counter0, przez co couter1 zaoszczędziłem do ambitniejszych celów :)

Opisy zrobiłem w języku angielskim - takie zboczenie zawodowe. Jeśli ktoś by coś poprawił w tym kodzie, to niech się podzieli spostrzeżeniami :)

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

main.c
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: 16 lut 2014, o 14:27 
Offline
Użytkownik

Dołączył(a): 20 mar 2012
Posty: 159
Pomógł: 6

A czy można prosić o pliczek rc5.h bo chciałbym przetestować sobie tą bibliotekę.



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

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