Strony

poniedziałek, 10 czerwca 2013

AVR Timer Calculator - NEW TOOL

Witam,

To już kolejny ważny update programu MkAvrCalculator "build 42", tym razem zdobył on kolejne istotne narzędzie w postaci kalkulatora timerów w mikrokontrolerach AVR. Wystarczy tylko wprowadzić wejściowe dane takie jak częstotliwość taktowania F_CPU oraz częstotliwość (interwał czasowy) z jaką ma się timer przepełniać. Co ważne kalkulator oblicza zarówno wartość rejestrów OCRx dla trybu CTC ale także wartość jaką trzeba przeładować timer w trybie NORMAL, gdy timer nie posiada trybu CTC (np w ATmega8 - Timer0). Program bierze pod uwagę obliczenia zarówno dla timerów 8-bitowych jak i 16-bitowych. Jako wynik obliczeń widzimy tabelkę w której po lewej widać listę preskalerów. (Uwaga! nie każdy timer posiada wszystkie pozycje preskalera - więc tu trzeba zawsze zajrzeć do noty PDF procka i sprawdzić jakie preskalery z tej listy posiada interesujący nas Timer a następnie wybrać ten który jest i odpowiada nam częstotliwość). Na koniec (pod tabelką) mamy obliczoną częstotliwość rzeczywistą jaka wyjdzie dla każdego preskalera i wartości OCRx lub przeładowania, a także (jeszcze niżej) obliczony procent błędu (odchyłka od częstotliwości zadanej). 



Na razie jest to wersja testowa ALFA ;) więc jeszcze mogą być jakieś niedociągnięcia, już widzę że np nie działa rozwijane pole z pozycjami: Hz, kHz i MHz. Obiecuję, że to narzędzie będzie jeszcze rozwijane, czekam jednak na wasze opinie i propozycję jego rozbudowy. Sam mam już kilka ale będę je wdrażał po kolei. Być może wezmę pod uwagę także wasze propozycje. Zapraszam do testowania ;)



Zapraszam więc gorąco do pobierania programu ze strony producenta, firmy ATNEL:



;)

25 komentarzy:

  1. Fajne. Dla mnie fajnym dodatkiem byla by baza procesorow. Po wyborze procka wiemy ile ma timerow, jakich itd . Fajnie jak by byl generowany kod w c. Wowczas by wystarczylo copy past. Nic by nie trzeba bylo myslec hihi.

    OdpowiedzUsuń
    Odpowiedzi
    1. Coś będziemy myśleć żeby później móc "nie myśleć" ;) .... mam pewien niecny plan ale nie wiem czy się uda ... w każdym razie będę próbował.

      Usuń
  2. Tego mi właśnie brakowało w tym programiku !! Super.
    Jedna uwaga jeżeli w polu requested freq są same zera to dostajemy komunikat o błędzie.

    Z generowaniem kodu w C też dobry pomysł, chociaż dla podstawowych uC Atmega8-64

    OdpowiedzUsuń
  3. Dwie małe sugestie
    1) można by przesunąć minimalnie w dół pojawiające się okna pierwszych trzech pozycji w utils, bo w tej chwili mając pasek zadań u góry ekranu, belki okien pojawiają się pod nim i nie ma możliwości przesunięcia okienek.
    2) przy suwakach wartości rezystorów przy przeliczniku mnożnika adc, przdałyby się strzałeczki po bokach, aby powiększać lub pomniejszać wartość rezystancji o 100om.
    Ogólnie jest świetnie.
    Pozdrawiam
    Miszczo

    OdpowiedzUsuń
  4. Mnie się wydaje że "Timer Calculator" przy liczeniu wartości timera w trybie CTC ma błąd. Otóż nota podaje że do rejestru należny wpisać o jeden mniej ponieważ zerowanie licznika następuje w następnym takcie po zrównaniu. Cześć ludzi zwraca na to uwagę. Rozumiem że błąd niezauważalny dla człowieka, ale dla poprawności powinno być liczone jak należy. Mirek zanim oburzysz że źle piszę sprawdź dokładnie notę a jak ja się pomyliłem to powiedz.

    OdpowiedzUsuń
    Odpowiedzi
    1. No nawet ci się nie wydaje, masz w 100% rację, dlaczego miałbym się oburzać ? .... zawsze zapominam rzeczywiście o tej jedynce. Naturalnie poprawię to

      Usuń
    2. Ba! nawet w książce ta jedynka wyleciała mi z głowy, muszę to do erraty dodać - więc bardzo ci dziękuję za zwrócenie tej uwagi.

      Usuń
  5. Jakoś czasami tak czytając wypowiedzi zauważyłem że nie lubisz zwracania uwagi, ale to chyba było kiedyś albo w innym kontekście więc zapomnij że tak napisałem.
    Dobrze że wyjaśniłeś że jest Ok bo pisałem ostatnio procedurę przerwania i potrzebowałem właśnie ten tryb CTC i sie zastanawiałem co ma być i dlaczego u Ciebie było inaczej.

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie ma co zapominać, jak ktoś kulturalnie zwraca uwagę na błąd, i podaje wyjaśnienie czy też swoją wersję a wypowiedź nie jest zaczepna - i co ważne akurat ja popełniłem błąd - to co tu można nie lubić? Jak mówiłem jest wręcz odwrotnie jestem wdzięczny za zwrócenie uwagi.

      A nie lubię gdy ktoś takie uwagi robi w całkiem innym tonie i mało kulturalnie. Tu jest całkiem inaczej i cieszę się z tego powodu. Jeszcze raz dzięki.

      Jak napiszesz do mnie na maila - to coś ci ciekawego powiem.

      Usuń
    2. A jeszcze gwoli wyjaśnienia, można na to patrzeć tak jak to opisałeś ale również w ten sposób, że po wyzerowaniu licznika, wliczana jest przecież wartość = 0, (jeden takt zegara i dopiero w TCNTx pojawia się jeden) Innymi słowy mówiąc - w związku z tym że zliczanie leci od ZERA ;) to jak ma być odliczonych np 10 tyknięć to jasna sprawa, że trzeba wpisać liczbę do porównania = 9. To tak jak z elementami tablic w C ;) np ilość elementów 5 a indeksy od 0 do 4 ....

      Usuń
  6. Dzień dobry.
    Chyba nadal jest błąd w przeliczaniu ale tym razem w trybie Normal. Przykładowo dla kwarca 8MHz jeśli chcemy uzyskać częstotliwość IRQ 100 000 Hz powinniśmy ładować rejestr TCNT wartością 246 przy preskalerze 8 i timerze 8 bitowym a w/g kalkulatora jest 247.

    tcnt = 256 - (8000000/8/100000)

    Sprawdzałem też na Pana przykładzie z książki niebieskiej 1Hz i też jest o 1 za dużo.

    Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie ma błędu w przeliczaniu, teraz jest dobrze - zakładam, że masz najnowszą wersję MkAvrCalculatora.

      Usuń
    2. Jest najnowsza. Wczoraj ją ściągnąłem

      Usuń
    3. W takim razie wszystko dobrze się wylicza - dla 8MHz i 100kHz ma być 247 w trybie NORMAL oraz 9 w trybie CTC. Zgodnie z wzorami ... Ty nie wziąłeś pod uwagę przejścia przez zero.

      Usuń
    4. No to w takim razie w niebieskiej książce ma Pan źle to wytłumaczone bo dla opisanego przykładu 1Hz wartości się nie zgadzają.

      Usuń
    5. A masz starsze czy nowsze wydanie książki? Bo w starszym rzeczywiście nie było tego -1 we wzorach, w nowszym już jest. Nowsze wydanie to to w twardej oprawie.

      Usuń
  7. " Wydanie II poprawione i uzupełnione " w twardej oprawie. Chodzi dokładnie o przykład ze stron od 39 do 41. Ma Pan tam rejestr TCNT = 34286 dla 1Hz a z kalkulatora wychodzi wynik TCNT = 34287

    OdpowiedzUsuń
    Odpowiedzi
    1. No to możliwe, że w tym miejscu książki jest jeszcze ten błąd, co przy przy tak niskiej częstotliwości jak 1 Hz nie ma praktycznie żadnego znaczenia. Za to w tylu innych miejscach tego wydania podaję (w porównaniu do porzedniego) wydania właściwy sposób obliczeń i wyjaśnienia - że powinno to być jasne.

      Usuń
  8. Odejmując od 256 a nie 255 biorę pod uwagę przejście przez zero. Znalazłem w sieci jeszcze jeden kalkulator autorstwa Kevina Rosenberga i z niego też wychodzi wartość TCNT = 246.

    Póki co to ja dopiero w tych kwestiach raczkuje dlatego nie chce się upierać przy swoim ale licze na dobre wytłumaczenie dlaczego w/g Pana TCNT ma mieć wartość 247 bo ja mam już mętlik w głowie :-)

    OdpowiedzUsuń
    Odpowiedzi
    1. Tu nie ma co mieć mętliku w głowie, wystarczy PO PIERWSZE zajrzeć do noty PDF procka w której jak byk jest napisane ;) ... i wzór podany i z tą jedynką panie kochany. A z drugiej strony pomyśl sobie masz np potrzebę, żeby wykonały ci się tylko dwa tyknięcia timera do przerwania (nie ważna częstotliwość) to jaką wartość załadujesz do TCNT ? no ? ;)

      255 czy 254 ? hmmm no jak myślisz ?

      a gubi cię to, że być może (tylko zgaduję ale może tak wcale nie jest), że zapominasz, że timer zlicza 256 razy do zgłoszenia przerwania, ZERO też się liczy .... (stąd się bierze ta jedynka we wzorach) ... no więc jak ? 255 czy 254 ?? hmm ;)

      a sorki mało mnie interesują jakieś tam inne kalkulatory, bo najważniejsze jest to - co masz w nocie PDF ... w kalkulatorach też ktoś mógł popełnić błąd. Ja sam miałem w swoim programie długo czas błąd bo nie doliczałem tej jedynki ;) aż ktoś mi kiedyś zwrócił uwagę i słusznie .... i teraz jest poprawnie

      Usuń
    2. W nocie katalogowej atmega32a na stronie 78 nie ma wzoru do trybu NORMAL, natomiast na stronie 79 mamy podany wzór dla trybu CTC. Do powyższego pytania odpowiadam : 254. Pierwszy cykl przejście 254 ->255, drugi cykl 255 -> 0 (to wywoła przerwanie)

      Usuń
    3. no to masz właśnie 256-9 = 247 czyli timer w NORMAL musi zliczyć 9 tyknięć

      Usuń
    4. Dlaczego 9 tyknięć? 8000000/8/100000=10, 10 tyknięć trzeba wykonać. W/g noty katalogowej w trybie CTC trzeba dodać 1 ale w trybie Normal nic takiego nie jest napisane. Proszę mi podać stronę noty katalogowej np atmega32 gdzie jest wzór dla trybu Normal i w/g którego Panu wychodzi 9.

      Usuń
    5. Ok później się tym zajmę - może i coś w tym jest ale teraz tylko tak z doskoku o tym myślę ... mam dużo pracy .... może w sobotę wieczorkiem nad tym przysiądę ok? wtedy zobaczymy ten tryb normal

      Usuń