Skocz do zawartości

[C] [ARM] Problem z odbiorem RC5


danioto

Pomocna odpowiedź

Witam,
mam problem, z którym nie do końca potrafię sobie poradzić: próbuję odszyfrować sygnał z pilota uniwersalnego, dlatego napisałem wstępny program, bez żadnej optymalizacji, byle odczytać sygnał. Na początku skonfigurowałem zegar, zewnętrzny kwarc 8MHz mnożony przez 9, czyli 72MHz, następnie ustawiłem wyjście TSOP'a 1736 jako wejście pływające. Następnie NVIC, oraz EXTI i przerwanie zewnętrzne na zboczu opadającym. Dobra, w końcu prawdziwa zabawa, grunt w tym, że potrzebuję dokładnie odmierzyć czas między wczytywaniem kolejnych stanów... Na początku zrobiłem to na pętlach, czyli robienie niczego przez doświadczalnie wyznaczoną liczbę razy i o dziwo zadziałało! Tylko jest to bardzo nieeleganckie, a nie chcemy nieeleganckich rozwiązań, więc próbuję to zrobić na Timerze i przerwaniu przez niego generowanym. Ustawiłem priorytety przerwań (Timer jest ważniejszy) i dwie funkcje na nim oparte delay10us oraz delayms. I niby wszytko jest dobrze ustawione, jednak jest mały problem. Jak włączam pierwszy raz jakiś przycisk to działa, dobrze odczytuje, jednak jak włączę drugi raz to wszystko się sypie... Ma ktoś jakiś pomysł? Zamieszkam kod:

Kod

Myślę, że to jest jakaś wina priorytetów przerwań, ale nie jestem do końca pewien, proszę, pomóżcie!

Link do komentarza
Share on other sites

nie wiem, moze sie myle, ale moze powinienes jeszcze uruchomic zegary:

RCC_APB1Periph_PWR

[ Dodano: 24-07-2011, 01:19 ]

moze jeszcze te zmienne w opoxnieniach pozmieniaj na inne niz "i"

Link do komentarza
Share on other sites

A mogę spytać, dlaczego miałbym dołączyć zegar do PWR? (Niestety nic nie pomogło... 🙁 )

Może powiem jeszcze raz w czym tkwi problem. Algorytm polega na tym, że generuję przerwanie na zboczu opadającym (na nóżce, gdzie jest wyjście TSOP'a), później czekam 0.4ms na ustalenie stanu, następnie odczytuję w pętli odczytuję stan i czekam 1.8 ms. Problem polega na tym, że jeśli oba delay'e (na wyjściu i w pętli) ustawię na delay oparte na pętli to wszystko śmiga, jeżeli zaś na Timerze to się sypie, że pokazuje mi inne odczyty, ale odczyty powtarzające się... Najciekawsza sytuacja jest, gdy 0.4 ms odczekam na Timerze, zaś 1.8 ms poprzez delay oparty na pętli, wtedy jak pierwszy raz wcisnę przycisk, to odczytuje dobrze, zaś za każdym kolejnym już źle, ale powtarzalnie... Dlatego sądzę, że mam coś źle poustawiane z priorytetami. Przy pierwszym wejściu do przerwania wszystko jest dobrze, przy każdym kolejnym źle, lecz powtarzalnie źle.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.