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

Jak poprawić odliczanie czasu w Bascom dla PIND.2 w 20 i 45 sekundzie?

kisoft 10 Gru 2013 14:23 1641 7
REKLAMA
  • #1 13045456
    kisoft
    Poziom 14  
    Witam jestem początkujący w temacie bascom
    potrzebuję rozwiązać problem związany z błędnym odliczaniem zaprogramowanego czasu. Program przerobiony z działającego zegara ( samo odliczanie działa dobrze), tylko chcę żeby w 20 -stej sekundzie wyjście PIND.2 zostało załączone i w 45-tej sekundzie wyłączone. Teraz działa przypadkowo w 20 sekundzie zostaje załączone i tak cały czas aż nadejdzie kolejna 20 sekunda i zostaje wyłączone
    zamieszczam kod programu. Jak to wszystko ustawić.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Trochę tu "posprzątałem".
    [zumek]
  • REKLAMA
  • #2 13046497
    pawel_konin
    Poziom 20  
    [quote="kisoft"]Witam jestem początkujący w temacie bascom
    potrzebuję rozwiązać problem związany z błędnym odliczaniem zaprogramowanego czasu. Program przerobiony z działającego zegara ( samo odliczanie działa dobrze), tylko chcę żeby w 20 -stej sekundzie wyjście PIND.2 zostało załączone i w 45-tej sekundzie wyłączone. Teraz działa przypadkowo w 20 sekundzie zostaje załączone i tak cały czas aż nadejdzie kolejna 20 sekunda i zostaje wyłączone
    zamieszczam kod programu. Jak to wszystko ustawić.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Może ustaw sobie jakąś stałą lub normalnie sprawdzać w programie którą porównasz z timerem uzależniając jej wykonanie od flagi żądania wykonania sekwencji 20s(zal) 40s(wyl) potem flagę kasujesz i koniec. Wtedy nie będzie ci w kółko sprawdzał.
    Nie pomogę z kodem bo bascoma nie znam.
    Jedynie skrócę ci algorytm jak nie jasno.
    1. Uruchamiasz uP
    2. Ustawiasz flagę żadania wykonania sekwencji zal,wyl
    3. Wykonujesz sekwencje zal, wyl
    4. Kasujesz flagę a timer(zegarek o ile dobrze rozszyfrowałem bascoma) leci sobie dalej i nalicza czas.
  • REKLAMA
  • #3 13046634
    Wojtek75
    Poziom 24  
    Rejestr PINx jest tylko do odczytu. Odpowiednie info masz w nocie uC.
    To ci nie zadziała:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Prawidłowo:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #4 13046689
    kisoft
    Poziom 14  
    Dzięki Wojtek75 pomogło , właśnie zmieniłem i działa
  • #5 13047460
    tank_driver
    Poziom 17  
    Nieprawdą jest że rejestry PINX.Y procesorów AVR są tylko do odczytu - przy wpisywaniu do nich logicznej jedynki stan PIN-u zmieniany jest na przeciwny, jest o tym napisane w notach. I to jest niezła pułapka dla początkujących programistów, bo niby "działa" ale nie do końca tak, jak powinno.

    Pozdrawiam,
    TD
  • REKLAMA
  • #6 13047859
    piotrva
    VIP Zasłużony dla elektroda
    tank_driver napisał:
    Nieprawdą jest że rejestry PINX.Y procesorów AVR są tylko do odczytu - przy wpisywaniu do nich logicznej jedynki stan PIN-u zmieniany jest na przeciwny, jest o tym napisane w notach. I to jest niezła pułapka dla początkujących programistów, bo niby "działa" ale nie do końca tak, jak powinno.

    I tu też nie do końca prawda, bo niektóre (szczególnie starsze AVR'y) nie mają takiej funkcji, co tez czasem jest zaskoczeniem.
    Dlatego polecam zawsze zerknąć na notę procesora, który leży nam na biurku.
  • REKLAMA
  • #7 13048270
    tank_driver
    Poziom 17  
    Tym lepiej że to, co napisałem nie do końca jest prawdą. :idea:
    Jak widać, nawet w obrębie jednej rodziny rdzeni mikroprocesora możemy spotkać się z wariacjami podstawowych i pozornie prostych obwodów sterujących.
    Po raz kolejny możemy zauważyć że przed przystąpieniem do programowania, oraz w jego trakcie należy być za "pan brat" z manualem danego mikroprocesora.
    Z pewnością uchroni nas to przez przykrymi niespodziankami w postaci długich godzin debugowania.

    Pozdrawiam,
    TD
  • #8 14753971
    kisoft
    Poziom 14  
    Rozwiązanie padło wyżej,
    temat zamykam.
REKLAMA