Skocz do zawartości

Kurs STM32L4 – #16 – zdalne sterowanie IR, NEC (liczniki)


Pomocna odpowiedź

Witam wszytkich, mam pewną zagwozdkę i nie daje mi to spokoju. Jak to jest, że licznik liczy tylko czas trwania stanu wysokiego skoro ustawiamy mu Falling edge. Czy to nie działa tak, że mierzy nam czas od zbocza opadającego do zbocza opadającego? Bo jeśli tak by było to do odczytów powinniśmy dodawać 560us ponieważ zbocze rosnące byłoby ignorowane, a co ciekawe czasy są poprawne i to bez żadnego sumowania. Z ciekawości jak ustawiłem Polarity selection na rising edge otrzymałem same czasy trwania stanu niskiego. Które zbocza są liczone, a które ignorowane i dlaczego. A kolejnym pytaniem jest czy oba parametry są gdzieś ustawialne?

(edytowany)

@Otiscom Gratuluję dociekliwości! Muszę przyznać, że układy licznikowe w STM32L476 są tak rozbudowane, że w tej części kursu opis wybranych ustawień był nieco uproszczony. Pełna dokumentacja znajduje się w STM32L47x Reference Manual-u, sam rozdział poświęcony układom licznikowym ogólnego przeznaczenia (General purpose timer) ma ponad 70 stron i wcale nie jest taka łatwy (przynajmniej dla mnie) do zrozumienia.

Więc w największym możliwym skrócie - kluczowe są dwie opcje użyte w przykładzie z kursu:

  • Slave Mode: Reset Mode
  • Trigger Source: TI1_ED

Dzięki nim timer pracuje jako układ podrzędny (Slave) i może być wyzwalany przez układ zewnętrzny (Master). Jako źródło wyzwalania wybieramy TI1_ED, czyli detektor zmian sygnału (Edge Detector) na wejściu TI1. Dlatego moduł zaczyna zliczać od zera po każdej zmianie sygnału wejściowego. Jeśli ustawimy reakcję tylko na zbocze narastające to odczytamy wówczas interesującą nas informację czyli czas trwania stanu niskiego.

Edytowano przez Elvis
  • Lubię! 1
  • 1 miesiąc później...

Tym razem tylko parę drobnych literówek (są w książce i na stronie kursu). Kto może, niech poprawi - z góry dzięki.

1. Strona 417, wykres na samym dole pt. "Transmisja IR w standardzie NEC - komenda":

Po prawej stronie wykresu widnieje opis "Negacja komenduy", powinno być "Negacja komendy".
2. Strona 432, pierwszy wiersz na stronie:

Cytat

Jak działa dekodowanie? Zmienna recevied_bits przechowuje liczbę odebranych bitów.

Powinno być: "received_bits".

3. Strona 432, akapit pod pierwszym kodem:

Cytat

Jeśli odebraliśmy wszystkie dane, to funkcja zwróci kod przycisku, który jest dostępny jako bajt zaczynający od szesnastego bitu w zmiennej received_value.

Powinno być: "który jest dostępny jako bajt zaczynający się od szesnastego bitu".

4. Strona 432, ten sam akapit, ostatni wiersz:

Cytat

Na koniec licznik recevied_bits jest zerowany,

Powinno być: "received_bits".

5.  Strona 434, drugi wiersz na stronie:

Cytat

wystarczy więc zmienić wartość zmiennej recevied_bits na 32,

Powinno być: "received_bits".

  • Lubię! 1
  • 4 tygodnie później...
  • 4 miesiące później...

W trakcie robienia kursów napotkałem kilka dziwnych błędów, po pierwsze kody przycisków wydają się być inne (co było by jeszcze ok) ale wygląda na to że się powtarzają??? starałem sprawdzić kody i wyszło mi coś takiego
 

// Stałe opisujące klawisze
#define IR_CODE_ONOFF      0x88
#define IR_CODE_MENU       0x80
#define IR_CODE_TEST       0x8A
#define IR_CODE_PLUS       0xAA
#define IR_CODE_BACK       0xA0
#define IR_CODE_REWIND     0x80
#define IR_CODE_PLAY       0x88
#define IR_CODE_FORWARD    0x28
#define IR_CODE_0          0x82
#define IR_CODE_MINUS      0x28
#define IR_CODE_CANCEL     0x08
#define IR_CODE_1          0x0A
#define IR_CODE_2          0x2A
#define IR_CODE_3          0x02
#define IR_CODE_4          0x2A
#define IR_CODE_5          0x0A
#define IR_CODE_6          0x22
#define IR_CODE_7          0xA2
#define IR_CODE_8          0xA2
#define IR_CODE_9          0x22

również coś jest chyba nie tak z moim odbieraniem sygnałów, jeśli mam kod który powinien wykrywać przytrzymanie przycisku dostaje coś takiego
image.thumb.png.201203329fa950e62d15204866a46b9c.png a jeśli nie mam przed każdym kodem pojawia się aaimage.png.c632ed4a8a4eed4f373252272a2c785e.png, a przytrzymanie przycisku daje brak reakcji.

Zastanawiające są zwłaszcza te 00 i aa,  czy to jakiś błąd pilota czy coś źle zrobiłem w kodzie? dodałem już rezystory przy odbiorniku ale to nic nie pomogło

  • 2 tygodnie później...

Fajny rozdział i też zadane zadania domowe.

Zauważyłem, że przed rozebraniem układu, warto zerknąć na treść następnego rozdziału, czy przypadkiem pewne elementy nie będą nadal potrzebne, choćby do zadań domowych.

 

@Gabmi Ja musiałem napisać zupełnie nową tablicę kodów dla mojego pilota, bo to model w wersji chyba odtwarzacz mp3 lub mp4 albo dyktafon, albo jeszcze co innego. Kupiony kiedyś w komplecie z czujnikiem IR.

Spotkałem kiedyś pilota, w którym kody powtarzały się i oczywiście wykonywały bte same funkcje, choć nie powinny. Przy okazji pracy nad zadaniem domowym nr1, musiałem jakoś zasymulować błędne odczyty. Ustawiałem pilota jakoś tak że nie patrzył w czujnik i pojawiały się kody, przypisane do innych klawiszy, co porównywanie wartości i jej negacji skutecznie klasyfikowało jako błąd.

/ Stałe opisujące klawisze
#define IR_CODE_ONOFF      	 0x4d
#define IR_CODE_SOURCE		 0x54
#define IR_CODE_MUTE		 0x16
#define IR_CODE_RECORD		 0x4c
#define IR_CODE_CH_PLUS		 0x05
#define IR_CODE_TIME_SHIFT	 0x0c
#define IR_CODE_VOL_MINUS	 0x0a
#define IR_CODE_FULL_SCREEN	 0x40
#define IR_CODE_VOL_PLUS	 0x1e
#define IR_CODE_CH_MINUS	 0x02
#define IR_CODE_RECALL		 0x1c
#define IR_CODE_0          	 0x12
#define IR_CODE_1          	 0x09
#define IR_CODE_2          	 0x1d
#define IR_CODE_3          	 0x1f
#define IR_CODE_4            0x0d
#define IR_CODE_5          	 0x19
#define IR_CODE_6          	 0x1b
#define IR_CODE_7          	 0x11
#define IR_CODE_8          	 0x15
#define IR_CODE_9          	 0x17

Coś w opisie wspomniano, że kody dla różnych wersji mogą być inne.

  • Lubię! 1
  • 3 miesiące później...

@SpartaProgram witam na forum 🙂 Jeśli pilot nie działa poprawnie to zgłoś sprawę do Botlandu na pewno szybko pomogą. Upewnij się tylko najpierw czy winny jest na pewno pilot - można podejrzeć za pomocą aparatu w telefonie czy kody na pewno nie są nadawane podczas trzymania wciśniętego przycisku.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...