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

[ATmega32][Bascom]Algorytm rozjaśniania/ściemniania

morswin89 09 Paź 2012 20:19 1290 6
REKLAMA
  • #1 11394831
    morswin89
    Poziom 23  
    Witam

    Moje wypociny na podstawie których ma się zwiększać lub zmniejszać PWM w zależności od jakiś ustawionych parametrów. W tablicy mam zapisane kroki według jakich ma zachodzić rozjaśnianie/ściemnianie a w przerwaniu co 1s ustawiam odpowiednie flagi na podstawie których zliczany jest czas do kolejnego kroku.

    I niby wszystko działa ale gdy rozjaśni się do końca, zmienię czas na porę ściemniania to zamiast natychmiastowego startu tego procesu powstaje jakaś zwłoka czasowa kilku lub klikunasto minutowa i tak samo w drugą stronę z wyłączonego na rozjaśnianie.

    Natomiast gdy proces rozjaśniania jest w trakcie przestawię czas na ściemnianie proces startuje od razu. Gdzie leży błąd w tym algorytmie?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11395714
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 11397660
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 11400559
    SylwekK
    Poziom 32  
    Co tak naprawdę ma robić ten układ, tzn. jak wg Ciebie ma działać ?? Bo to co tu widać to taki fajny śmietnik, w którym coś pachnie, ale już coś obok będzie śmierdziało... Podaj jakiś obrazowy przykład.
  • REKLAMA
  • #6 11401124
    morswin89
    Poziom 23  
    [ATmega32][Bascom]Algorytm rozjaśniania/ściemniania

    Prosty obrazek pokazujący o co chodzi. Jak widać jest tam trochę zmiennych, ustawiam takie parametry jak:
    czas startu rozjaśniania
    czas startu ściemniania
    moc max
    czas trwania rozjaśniania/ściemniania

    Rozjaśniania/ściemniania nie jest liniowe tylko następuje według kroków zapisanych w tablicy. Wcześniejsza wersja tego algorytmu działała tylko dla każdego kanału były osobne instrukcje a teraz chcę tu ująć w algorytm bo dla każdego kanału ma wyglądać tak samo a oszczędzę dzięki temu sporo miejsca procku.
  • #7 11401161
    SylwekK
    Poziom 32  
    Z tą zwłoką to może być tak jak mi się kiedyś zrobiło, a zrobiło się dlatego, że licznik opóźnień zrobiłem nieco inaczej niż zwykle tzn. zawsze był zerowany, a tu opóźnienie było ustawiane od 1 do 400 i zapomniałem na początku programu wpisać "1" do licznika jako jego wyzerowanie i odliczał mi od 65536 przez kilkadziesiąt sekund, bo kiedy wykonało się Decr Licznik, a poniżej badane If Licznik =0 i szereg operacji, które miały się natychmiast wykonać... to czego się można było spodziewać :-). Może to samo jest u Ciebie. A ile tego głupiego błędu szukałem ... :-D
REKLAMA