Skocz do zawartości

Obliczanie timera do obslugi przerwania


Krawi92

Pomocna odpowiedź

Hejka, zabralem sie za obsluge przerwań. Problem troche miałem przy obliczeniach ale chyba juz to ogarnalem,jednak chcialbym abyście sprawdzili poprawność mojego myslenia, czy dobrze to wyliczam. Chcę np: wywołać przerwanie od porównania  co hmmm... 23ms... Pierw patrzę, z jaką częstotliwościa będzie się to wykonywało.... 1/0,023s = 43,4Hz ~ 44Hz... Teraz zakładam ze mój CPU taktuje 1Mhz i użyje prescalera 64 co da mi 15625Hz... Teraz ustawiam wartość porównawczą do OCRx.. Wyliczam ją tak, że 15625/43,4 = 360.. Timer doliczajac do 360 zrobi to w 360/15625 = 0,023004s=23ms z częstotliwością.. 15625/360= 43,4Hz..    

Link do komentarza
Share on other sites

Dokladnie tak...z tym ze jak zapewne wiesz to jesli ma sie to ladnie powtarzac co 23ms to pasuje ustawic CTC lub podczas obslugi przerwania kasowac TCNT...no i te 360 ustawisz tylko na 16-bitowym timerze...mozna tez uzyc 8-bitowego i inkrementowac jakas zmienna...

Edytowano przez farmaceuta
  • Lubię! 1
Link do komentarza
Share on other sites

Z tym CTC chodzi tylko o to ze ustawiasz jeden bit i jak twoj licznik zrowna sie z OCR to ten licznik(TCNT) zostaje wyzerowany i znow zaczyna liczyc od 0-360...i tak w kolko...bez tego ustawienia doliczyl by do wartosci OCR, wystapilo by przerwanie i liczyl by dalej w gore az do przepelnienia i znow by sie "przekrecil"...

Edytowano przez farmaceuta
  • Lubię! 2
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

Wartość OCR wylicza się wzorem F_CPU / (prescaler * f) - 1 Czyli u ciebie 1000000 / ( 8 * 43.5) - 1 więc OCR = 2872 co da częstotliwość 43,509Hz możesz spróbować policzyć dla większych wartości prescalera i np dla 128 OCR wyniesie już 178. Wtedy zmieścisz się w timerze 8bit bez kombinacji z liczeniem przerwań od przepełnienia

EDIT: Właściwie w pierwszym przypadku też niema potrzeby obsługi przerwań przepełnienia - co więcej w CTC one nawet nie działają ( bo timer nie zdąży się przepełnić). Miałem na myśli że w miarę możliwości, dla mniej wymagających potrzeb wystarczy timer 8bit a ten 16bitowy zostawić sobie na ciekawsze zadania.

Edytowano przez _LM_
sprostowanie
  • Lubię! 2
Link do komentarza
Share on other sites

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...

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.