logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C][ATmega32]Pomiar PWM co do 1us

modrzej1988 25 Cze 2011 10:27 2189 6
REKLAMA
  • #1 9647874
    modrzej1988
    Poziom 13  
    Witam.

    Kombinuję już od jakiegoś czasu nad włącznikiem RC ale nie typu on/off tylko w zależności od zapotrzebowań, tyle ma być stanów.
    Na chwilę obecną docelowo mają to być 3 stany off/1/2.

    Wygrzebałem w googlu kawałek kodu, który jest odpowiedzialny właśnie za pomiar długości trwania stanu wysokiego na wejściu ICP1 (input capture). Jednak za żadne pieniądze nie mogę tego uruchomić (w ramach testu chcę w zależności od długości impulsu zapalać inną diodę).

    Przykładowo włącznik ma być wyłączony dla czasu impulsu mniejszego od 1ms=1000us. Stan 1 ma być między 1ms a 1.5ms. Stan 2 ma być powyżej 1.5ms.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Teraz przejdę do konkretnych pytań.
    1. Czy dobrze w ogóle konfiguruję timer1 do pracy w trybie ICP? Przypominam - ATmega32.
    2. Jaki powinienem ustawić prescaler dla pomiaru czasów z dokładnością do 1us? Sugerując się moim wcześniejszym projektem gdzie sterowałem serwami był tam prescaler na 64 ustawiony.
    3. W którym miejscu powinienem umieścić kawałek kodu odpowiedzialny za warunkowe zapalanie poszczególnych diód? W obsłudze przerwania czy w mainie w pętli nieskończonej ?

    Będę wdzięczny za wskazówki co do uruchomienia tego ustrojstwa.

    Aha... sygnał podawany na ICP jest w okresie 20ms (zbocze narastające co 20ms)
  • REKLAMA
  • #2 9648579
    skalsky5000
    Poziom 21  
    Preskaler zależy od tego czym taktujesz mikrokontroler.Podaj jak masz ustawione fusebity.Przerwania z reguły maja sie jak najszybciej wykonywać dlatego w przerwaniu ustaw jakąś flagę a w pętli sprawdzaj ja i migaj diodami.
  • REKLAMA
  • #3 9648596
    modrzej1988
    Poziom 13  
    Fuzy tu za wiele nie powiedzą, bo używam bootloadera. Ale fakt zapomniałem podać, że uP taktowany jest z zewnętrznych 16MHz.
  • REKLAMA
  • #5 9648661
    skalsky5000
    Poziom 21  
    Prescaler przez 64 jest za duży jeśli chcesz dokładność 1us bo masz tick co 4us.
  • REKLAMA
  • #6 9648723
    modrzej1988
    Poziom 13  
    czyli 8 lub 1 na prescalerze ?
  • #7 9648793
    skalsky5000
    Poziom 21  
    Daj 8 i wtedy masz tick co 0,0000005s
REKLAMA