• 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?

VPS Starter Arubacloud
+1 głos
138 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez tonn204 Mądrala (7,470 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,470 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,340 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,470 p.)
Czyli z każdym przerwaniem ustawiam wartość TCNTx na maksymalną?
komentarz 24 stycznia 2021 przez Oscar Nałogowiec (29,340 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 193 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez program naczelny Gaduła (3,320 p.)
0 głosów
2 odpowiedzi 221 wizyt
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 24 października 2020 w C i C++ przez tonn204 Mądrala (7,470 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,369 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...