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

[bascom] ATmega32, wyliczenie czasów dla PWM

fliper_katrill 22 Wrz 2009 21:35 2498 7
REKLAMA
  • #1 7047125
    fliper_katrill
    Poziom 20  
    Witam serdecznie!
    Mam problem z wyliczeniem czasu trwania modulacji PWM.
    Dane:
    kwarc 8MHz, preskaler 1, pwm 8bit, waitms 4

    Dają one mniej więcej sekundę na zmianę jakości LEDa z 255 do 0.
    
    krok_z=255
    do
    pwm1a=krok_z
    waitms 4
    decr krok_z
    loop
    


    Chciałbym rozciągnąć ten czas na kolejno 5,10,15,20,25 i 30 min.
    Próbowałem jakichś współczynników korygujących ale mi nie wychodzi, co gorsza PWM działa w pętli głównej i nie chcę zwiększać waitms do wartości za dużych.
    Proszę o pomoc :)

    Pytania dotyczące bascoma/AVR proszę zadawać w dziale Mikrokontrolery AVR.
    Przeniosłem z Programowanie początkujący.
    [Dr.Vee]
  • REKLAMA
  • #2 7048013
    _Robak_
    Poziom 33  
    Do MINUT ? To juz ciezko nazwac PWMem ;) W kazdym razie jak chcesz za pomoca timerka odliczac tyle minut to moj pomysl jest taki ze ustawiasz licznik w tryb CTC, w i w przerwaniu zmieniasz stran portu. Jednak nawet licznik 16 bitowy da ci kilkadziesiat sekund, wiec musisz co ktores tam przerwanie dopiero ziimenic stan. W obliczeniach musisz wziac pod uwage czas wykonywania "pusthc" przerwan jesli ma to byc dokladne.
  • REKLAMA
  • #3 7048049
    fliper_katrill
    Poziom 20  
    Timery nie są moją mocną stroną przyznam, proszę Cię o dokładniejsze wyjaśnienie sprawy. Myślałem o zmianie odliczania PWM poprzez "schodkową" dekrementację, wiem że nie będzie płynna ale da się ten proces wydłużyć.Wyliczyłem że dla 5 min przy mojej konfiguracji uC i programu zmienna krok_z zmieniała by się w tempie 51/min, przy 10 około 26/min itd.
  • #4 7048070
    _Robak_
    Poziom 33  
    To pora poczytac o timerach, info z sieci jest sporo. Jeszcze inny pomysl, jesli nic w tym czasie nie bedzie robic procek to mozesz dac do petli for waitms(1000) i tak 600 razy to bedziesz mial 60 minut ;]
  • REKLAMA
  • #5 7048576
    fliper_katrill
    Poziom 20  
    Czy timery pracujące jako liczniki pracują w tle programu głównego?
    Rozumiem że gdybym takowy uruchomił to po przeładowaniu mógłby on zmieniać wartość zmiennej krok_z automatycznie?
    Tak myślę że wtedy mógłbym tą zmienną licznikową zmieniać w zależności od czasu, dobrze myślę?
    Jak wyliczyć czasy pracy i ilość impulsów niezbędnych do obliczenia konkretnego czasu?
  • REKLAMA
  • Pomocny post
    #6 7048644
    _Robak_
    Poziom 33  
    1) tak
    2) tak
    3) nie wiem o co chodzi ;)
    4) Wszystko jest w datasheecie ladnie opisane, mozesz tez sciagnac sobie program avrcalc jak nie chce ci sie samemu liczyc ;)
  • #7 7048648
    fliper_katrill
    Poziom 20  
    odnośnie 3 punktu:na jakiej zasadzie się wklepuje wartość licznika, poprostu wpisuje? czym jest ona ograniczona?

    Dodano po 9 [minuty]:

    a krótki kurs do tego kalkulatora?? ;p
  • #8 7048730
    _Robak_
    Poziom 33  
    Wpisujesz wartosc jaka ma odnierzac do rejestru OCRnx. W kalkulatorze wpisujesz ile ma ci odmierzyc ms, us albo podajesz czestotliwosc w Hz, wpisujesz prscaller i ci pokazuje ile masz wpisac do tego rejestru OCR. Z tymze w bascomie nie bawisz sie rejestrami tylko w poleceniu config timer to ustawiasz. W helpie do bascoma jest wszystko opisane ;)
REKLAMA