Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino Atmega328 - Zmiana PWM w funkcji czasu

marciu11 17 Sie 2015 11:08 759 3
  • #1 17 Sie 2015 11:08
    marciu11
    Poziom 15  

    Witam

    Jestem w trakcie pisania programu do obsługi oświetlenia akwarium i utknąłem na jednym detalu.
    Mianowicie w menu ustawiam sobie czas włączenia oświetlenia i czas w jakim ma następować świt.
    Podprogram uruchamia się prawidłowo, natomiast mam problem aby rozbić czas świtu na funkcję czasu.
    Zegar programowy odlicza 10ms odcinki czasu - serce układu.

    W menu ustawić mogę czasu rozświetlenia/ściemniania 10-120min z krokiem 10min.

    Więc odliczam odcinki czasu między poszczególnymi krokami w ten sposób:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W tym przypadku: Czas_poranku = 10, Max_pwm = 255.
    Tak więc według kalkulatora Czas_poranku = 60000 (60-sek * 100 - dla taktu zegara systemowego - 100 to 1 sek). Takt_zegara = 235 z przecinkiem, ale to już pomijalny błąd w tych obliczeniach.
    Wiec zmiana PWM powinna następować co około 2.3sek. A program oblicza to jako -21 i zegar nie działa...

    Jakie przyjąłem błędne założenia i co muszę zmienić w algorytmie obliczania tego czasu?

    0 3
  • Pomocny post
    #2 17 Sie 2015 12:16
    tmf
    Moderator Mikrokontrolery Projektowanie

    Poczytaj o domyślnej promocyji typów w C. Jaki typ ma Czas_poranku, zapewne int lub nawet węższy?

    1
  • #4 17 Sie 2015 15:08
    marciu11
    Poziom 15  

    Sam czas poranku był wartością od 10 do 120 więc zwykły 8bitowiec. Ale operacje na nim były już dużo dużo większe.
    problem rozwiązany...

    -1