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

Pętla w programie a dalsze instrukcje (BASCOM)

kris669 19 Gru 2009 14:48 3111 6
REKLAMA
  • #1 7409240
    kris669
    Poziom 20  
    Witam, mam bardzo podobny problem, jak opisany tu:
    https://www.elektroda.pl/rtvforum/topic1100739.html :cry:
    Dopiero zaczynam pisać programy na mikrokontrolery, więc zaczynam od bardzo prostych. Zauważyłem na symulacji, że jeżeli wykonuje się pętla (np. migająca dioda na jednym pinie ze stałą częśtotliwością) to program nie wykonuje jednocześnie następnej pętli, np. dioda podłączona do innego pinu miałaby migać z inną częstotliwością. Rozwiązanie podane w powyższym temacie nie przynosi skutku. Program w pętli jest typu: ustaw - odczekaj - reset itd., i właśnie na tych odstępach czasowych program "czeka", następnie wraca na początek pętli. Chciałbym dodać drugą pętlę niezależną od tej pierwszej (choćby nawet druga dioda i inna częstotliwość), a nie wiem jak powinienem napisać poszczególne "wątki" programu, żeby całość się wykonywała jednocześnie. Krótko mówiąc, czy pętla "blokuje" dalsze instrukcje? Bardzo proszę o nakierowanie mnie na właściwe rozwiązanie tego problemu, czytam oczywiście pomoc do BASCOM'a i różne wątki na Elektrodzie.
  • REKLAMA
  • Pomocny post
    #2 7409377
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 7409654
    kris669
    Poziom 20  
    Właśnie myślałem też nad takimi rozwiązaniami (a szczególnie z jedną pętlą ze wszystkim i działa). Zastanawiający jest jeszcze taki problem, jeśli w pętli generuję przebieg prostokątny (na jednym pinie) o częstotliwości np. 0,5 Hz czyli odstępy czasowe po 1 s między zmianami stanu pinu, a jednocześnie chciałbym np. sterować silnikiem poprzez PWM to domyślam się, że instrukcje odpowiedzialne za tamten sygnał (odstępy czasowe) będą bezpośrednio opóźniały reakcję na np. sygnał potencjometru zadającego PWM. Opóźnienia rzędu 2 s to dużo. Proszę ewentualnie potwierdzić czy tak będzie.
    Domyślam się też że jedynym sensownym rozwiązaniem w takim przypadku jest wykorzystanie dwuch PWM - jeden do silnika, drugi o stałym wypełnieniu i f=0,5 Hz.
  • REKLAMA
  • Pomocny post
    #5 7411236
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #6 7411263
    jacekk232
    Poziom 17  
    Jeśli chcesz aby np. dwie diody mrugały z różną częstotliwością to w najprostszy sposób możesz to zrobić tak: na początku pętli głównej dajesz małe opóźnienie powiedzmy 5ms. Potem w każdym obiegu pętli (co 5ms) zwiększasz wartość dwóch zmiennych np. Licz1 i Licz2. Kiedy Licz1 osiągnie wartość 50 wtedy zerujesz ją i zmieniasz stan pinu do którego dołączona jest pierwsza dioda. To samo z Licz2 kiedy osiągnie wartość np. 100.
    
    Do
    Waitms 5
    Incr Licz1
    Incr Licz2
    If Licz1 = 50 Then
       Licz1 = 0
       Toggle Led1
    End if
    If Licz2 = 100 Then
       Licz2 = 0
       Toggle Led2
    End if 
    Loop : End

    Wtedy okres mrugania Led1 wyniesie pół sekundy (2Hz), a Led2 sekundę (1Hz).

    Pozdrawiam
  • #7 7412620
    kris669
    Poziom 20  
    Dzięki za fachowe odpowiedzi :D Teraz wyjaśniło się bardzo dużo.
REKLAMA