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 Jak napisać warunek podobny do Bitwait?

pawel182 24 Kwi 2010 22:46 2986 9
REKLAMA
  • #1 7999795
    pawel182
    Poziom 11  
    Witam;
    Mam taki problem:
    Mamy sobie procesorek, który ma jedno wejście i jedno wyjście.
    Do wejścia np PORTD.1 jest podłączony czujnik i panuje na nim stan wysoki "1"
    Gdy zostanie spełniony jakiś tam warunek w programie mikroprocesor załącza wyjście. Chciałbym aby stan wysoki na wyjściu utrzymywał się dopuki na wejściu PORTD.1 nie nastąpi zmiana stanu z 1 na 0 na 1 (czyli wsumie warunek podobny do komendy Bitwait)

    myślełem że uda sie to zrobić jakoś tak...
    
    Do
    ....
    ....
    Loop Until Bitwait PORTD.1
    


    ale niestety wyskakuje błąd podczas kompilacji (3 parameters expected)

    Pomoże ktoś? :)
    Z góry dziękuje za wszelka pomoc.
  • REKLAMA
  • #2 7999812
    Kuniarz
    Moderator Projektowanie
    do
    loop until portd.1=1

    ...jeśli dobrze zrozumiałem wytyczne. Pętla będzie się wykonywała tak długo jak długo na porcie D.1 będzie stan 0
    Pomogłem? Kup mi kawę.
  • #3 7999882
    pawel182
    Poziom 11  
    No właśnie nie. To by zadziałało jakby jednocześnie przy załączeniu wyjścia na wejściu zmieniał się stan z "1" na "0"

    hm..może wytłumacze to na zasadzie przykładu.
    Mamy taśmociąg (w chwili obecnej jest nieruchomy), na którym znajdują się np pudełka. Czujnik widzi początek pudełka (na PORTD.1 panuje stan "1").
    Gdy pudełko się zapełni mikroprocesor włącza taśmociąg. Czujnik przez pewien czas będzie jeszcze widział to pełne pudełko, później zobaczy przerwe pomiędzy tym a następny (pustym) pudełkiem i dopiero jak zobaczy ten pusty karton powinien zatrzymać taśmociąg.
  • REKLAMA
  • #4 7999905
    tadzik85
    Poziom 38  
    Więc warunkiem pętli niech jest i warunku który został podany i flaga, flagę ustawisz gdy wejście przyjmie stan przeciwny zostanie wykryta przerwa.
  • REKLAMA
  • #5 7999914
    wader_669
    Poziom 28  
    Nie rozumiem do konca, jutro przeczytam jeszcze raz posta uwazniej (dzisiaj juz jestem zmenczony)
    Ja to widze tak:
    
    dim flaga as bit
    do
    
    if cos tam cos tam = cos tam then
    flaga=1
    end if
    
    loop until flaga=1
    flaga=0
    
  • REKLAMA
  • #7 7999934
    pawel182
    Poziom 11  
    tadzik85 napisał:
    Więc warunkiem pętli niech jest i warunku który został podany i flaga, flagę ustawisz gdy wejście przyjmie stan przeciwny zostanie wykryta przerwa.


    oj...chyba mój poziom wiedzy jest niewystarczający aby rozszyfrowac tą wiadomość ;) Zapomniałem dodać, że właśnie zaczynam zabawe z Bascom-em
    Puki co urzeźbiłem rozwiązanie na zasadzie że układ z jednej pętli wchodzi w następną:

    
    Do
    ...
    Loop Until PORTD.1 = 0
    Do
    ...
    Loop Until PORTD.1 = 1
    

    Domyślam sie że nie jest to rewelacyjne rozwiązanie i pewnie zaawansowanych programistów może delikatnie mówiąc irytować ale powinno działać.
    Postaram się poczytać na temat koncepcji, którą podałeś i ewentualnie wtedy zmodyfikuje program.
  • #8 7999936
    wader_669
    Poziom 28  
    a dokladniej tak:
    
    dim flaga1 as bit
    dim flaga2 as bit
    
    do '
    if portd.1 =0 then flaga1=1 ' nie ma pudelka
    if flaga1=1 and portd.1=1 then flaga2=1 ' zaczyna sie nastepne pudelko
    loop until flaga2=1 'przez to ze zaczelo sie nastepne pudelko wyjscie z petli
    flaga1=0
    flaga2=0
    
  • #9 7999957
    tadzik85
    Poziom 38  
    Po co tyle flag?

    Dodano po 37 [minuty]:

    Pawle to co zaproponowałeś również jest bardzo poprawne. Lecz tu wszystko zależy od tego co chcesz w tych pętlach robić.
  • #10 8002675
    jacekk232
    Poziom 17  
    Ja bym to zrobił mniej więcej tak
    
    dim flaga1 as bit, flaga2 as bit
                                   
    do
    if "pudełko pełne" then flaga2 = 1
    if flaga2 = 1 then 
       flaga2 = 0
       "włącz taśmociąg"                 'taśmociąg włączony jednorazowo
    end if
    
    if pind.1 = 1 then                'jeśli czujnik widzi pudełko
        if flaga1=1 then               'i flaga1 ustawiona
           flaga1=0                       'wyzeruj flagę1
            "wyłacz taśmociąg"       'i zatrzymaj taśmociąg
         end if
    else                                    'jeśli czujnik widzi przerwę
        flaga1 = 1                       'ustaw flagę1 aby przy następnym
    end if                                  'pustym pudełku móc zatrzymać taśmociąg
    loop
    
REKLAMA