• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak mogę zliczyć ilość impulsów jakie dostaję na pin mikrokontrolera?

Object Storage Arubacloud
+1 głos
114 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez tonn204 Mądrala (7,440 p.)
Witam,  jak mogę zliczyć ile impulsów dostaję na dany pin mikrokontrolera AVR? Jaki wewnętrzny układ mikrokontrolera do tego wykorzystać?

1 odpowiedź

+1 głos
odpowiedź 24 stycznia 2021 przez Kabuuz Bywalec (2,820 p.)
Możesz wykorzystać przerwanie i ustawić że będzie wywoływane jak będzie zmieniał się stan na pinie. Wtedy w przerwaniu zwiększasz licznik impulsów. Te impulsy mają iść od jakiegoś przycisku? Jeśli tak to poczytaj o drganiu styków.
komentarz 24 stycznia 2021 przez tonn204 Mądrala (7,440 p.)
A mogę tutaj jakoś wykorzystać timer?
1
komentarz 24 stycznia 2021 przez Kabuuz Bywalec (2,820 p.)
Nie za bardzo moim zdaniem bo częstotliwość timera może się nie zgrywać z tymi impulsami i możesz jakieś przegapić lub źle zinterpretować. Na przykład licznik impulsów zwiększa się jak wywoła się timer i jest stan wysoki na pinie, ale co jak impuls potrwa na tyle długo, że załapie się na 2 przerwania.
komentarz 24 stycznia 2021 przez Oscar Nałogowiec (29,290 p.)
Jak najbardziej o ile impulsy nie są zbyt krótkie (można je wydłużyć elektronicznie). Podłączasz impulsy do wejścia timera i wartość zwiększa się o 1 za każdym impulsem. Tylko wtedy trzeba coś zrobić z przepełnieniem licznika - odsuwasz problem z "co 1 impuls" na co "N impulsów", gdzie N - pojemność licznika. W AVR masz liczniki 8 i 16 bitowe. Oczywiście impulsy muszą mieć ładne zbocza - bez "dzwonienia"
komentarz 24 stycznia 2021 przez tonn204 Mądrala (7,440 p.)
Czyli z każdym przerwaniem ustawiam wartość TCNTx na maksymalną?
komentarz 24 stycznia 2021 przez Oscar Nałogowiec (29,290 p.)
Zależy co chcesz zrobić, jednak ja zwykle zostawiłbym timer na pracę w kółko na maksymalnej pojemności. Przerwanie od przepełnienia trzeba obsłużyć i inkrementować jakiś programowy licznik, który tworzy "starsze bity" licznika impulsów. Jeśli potrzeba przerwania po osiągnięcia konkretnej wartości licznika to liczniki/timery w AVT mają taki bajer jak "compare register" (OCR) i potrafią zgłosić przerwanie po osiągnięciu dowolnej zaprogramowanej wartości. Czyli jak wpiszesz tam np. 20 to licznik zliczy 20 impulsów i zgłosi przerwanie, ale będzie liczył dalej.

Grzebanie w samym liczniku w trakcie pracy może spowodować, że jakieś impulsy się zgubią.

Podobne pytania

0 głosów
2 odpowiedzi 166 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez program naczelny Gaduła (3,320 p.)
0 głosów
2 odpowiedzi 197 wizyt
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 24 października 2020 w C i C++ przez tonn204 Mądrala (7,440 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...