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

[atmega8][Bascom] Co zamiast polecenia "wait" w po

tomson5 04 Sty 2010 21:20 3434 16
REKLAMA
  • #1 7485774
    tomson5
    Poziom 16  
    Witam
    Dla swoich potrzeb skonstruowałem sterownik za pomocą którego kontroluje stan wody która na wiosnę odwiedza moją piwnicę.
    Sterownik za pomocą czujnika poziomu mierzy mi ilość wody i jeżeli jej poziom przekroczy wartość 2,10 to informuje mnie LEDem oraz 10 sekundowym popiskiwaniem (1Hz) buzera.
    Ja natomiast ręcznie mogę ustawić czas od 1 do 40 minut i włączyć pompę.
    Po ustalonym czasie pompa się wyłacza.

    Buzer ma za zadanie uruchomić się tylko raz po osiągnięciu poziomu wody 2,10
    Kolejne jego załączenie jest możliwe dopiero po wybraniu wody.
    Taki warunek sobie wymyśliłem aby czasem w nocy mnie nie udręczył.

    Jest jeszcze jeden warunek aby buzer i LED nie załaczyły się powyżej poziomu 2,20
    Mój czujnik poziomu wody jest na bazie czujnika paliwa od Żuka ale nie ma z drutu potencjometru tylko z laminatu płytkę i na niej drabinka rezystorowa.
    Czujnik ma 5 poziomów i zdarza się że pomiedzy kolejnymi poziomami dostaje rozwarcia i wystepuje wtedy fałszywy poziom 4,09

    Sterownik działa już jakiś czas i jestem z niego zadowolony.
    Nie muszę wreszcie zaglądać do piwnicy aby wiedzieć czy jest woda i ile jej jest.

    Wracając do mojego problemu to jest nim polecenie "wait = 10" które w sumie działa ale jak każdy wie nie jest zalecane ani poprawne politycznie :)
    Jak inaczej można by załączyć buzer (Pwm1a) na czas ok. 10 sekund ????
    timer0 mam już zajęty do odmierzania czasu działania pompy

    Zamieszam kod programu, instrukcja wait = 10 o której pisze jest w podprogramie Dioda:


    'Sterowanie pompą i pomiar ilości wody
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    
    
    
    Config Pinb.1 = Output
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.2 = Input
    Config Pind.3 = Input
    Set Portd.2
    Set Portd.3
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5
    Config Timer1 = Timer , Compare A = Toggle , Compare B = Disconnect , Prescale = 256 , Clear Timer = 1
    Config Timer0 = Timer , Prescale = 256
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Portd.6 = 1
    Pwm1a = 15625
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Pompa
    On Int1 Czas
    On Timer0 Odmierz_1s
    Enable Timer0
    Disable Oc1a
    Load Timer0 = 250
    Stop Timer0
    Stop Timer1
    
    
    
    Dim Licz_8ms As Byte , Sekunda As Byte , Minuta As Byte
    Dim B As Bit , C As Bit , A As Bit                          ' zmienne pomocnicze
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Minuta = 0
    A = 1
    Start Adc
    '--------------------------------------- program --------------------------------------------
    Do
    Wart_ac = Getadc(0)
    Cls
    Locate 1 , 1 : Lcd "Pompa"
    If Portd.5 = 1 Then
    Locate 1 , 7 : Lcd "ON"
    Start Timer0
    Else
    Locate 1 , 7 : Lcd "OFF"
    Stop Timer0
    End If
    Locate 1 , 11 : Lcd Minuta
    Lowerline
    V = Wart_ac * 0.0041
    Wart_nap = Fusing(v , "#.$$")
    Lcd "Poziom Wody "
    Locate 2 , 13 : Lcd Wart_nap
    Waitms 400
    If V > 2.10 Then                                            'jeżeli poziom przekroczy 2,10 to zapali się dioda
    Gosub Dioda
    Else
    Portd.6 = 1
    Stop Timer1
    If V < 1 Then                                               'jeżeli woda zostanie wybrana to zmienna A = 1 ,możliwe ponowne zadziałanie buzera
    A = 1
    End If
    End If
    Loop
    End
    
    '--------------------------------------------------
    Czas:                                                       'Tutaj ustalam ile ma pracować pompa
    Waitms 25
    If Pind.3 = 0 Then
    If C = 1 Then
    Minuta = Minuta + 1
    C = 0
    If Minuta > 40 Then                                         'maksymalny czas pracy to 40 minut
    Minuta = 1
    C = 0
    End If
    End If
    Else
    C = 1
    End If
    Return
    
    
    '--------------------------------------------------------
    Pompa:                                                      ' Załaczanie i wyłaczanie pompy
    If Pind.2 = 0 Then
    If B = 1 Then
    Toggle Portd.5
    B = 0
    If Minuta = 0 Then
    Portd.5 = 0
    B = 0
    End If
    End If
    
    Else
    B = 1
    End If
    Return
    
    
    '--------------------------------------------------------------
    Odmierz_1s:                                                 ' tutaj odmierzamy minuty
    
    Load Timer0 = 250
    Incr Licz_8ms
    
    If Licz_8ms = 125 Then
    
    Licz_8ms = 0
    Incr Sekunda
    If Sekunda = 60 Then
    Sekunda = 0
    Decr Minuta
    If Minuta = 0 Then
    Portd.5 = 0
    Stop Timer0
      End If
     End If
    End If
    Return
    '------------------------------------------------------------------
    Dioda:                                                      'tutaj załaczamy diodę
    If V > 2.20 Then                                            'jeżeli czujnik dostanie rozwarcia to dioda się nie zapali
    Portd.6 = 1
    Stop Timer1
    Else
    Portd.6 = 0
    If A = 1 Then                                               'sprawdza czy buzer może być załączony jeżeli A = 1 to buzer działa 10sekund i się wyłącza                                              '
    Start Timer1
    Wait 10
    Stop Timer1
    A = 0                                                       'Zmienna A = 0 aby buzer po raz kolejny się nie załączył
    End If
    End If
    
    Return
    
    
    
    
  • REKLAMA
  • #2 7485880
    marco47
    Poziom 41  
    Stwórz w programie głównym zmienną licznika 'Buzer' zwiększaną co jedną sekundę
    Po doliczeniu do 10 zeruj itd...
  • REKLAMA
  • #3 7486100
    tomson5
    Poziom 16  
    chodzi ci o taki warunek ??
    
    if portb.1 = 0 then           'jeżeli załączy się Pwm1a (buzer)
    incr zmienna                   'to zwiększa się zmienna   
    if zmienna = 10 then        ' jeżeli zmienna = 10 
    stop Timer1                    'to wyłącz Pwm1a (buzer)
    if v < 1 then                   ' jeżeli poziom wody spadnie poniżej 1 
    zmienna = 0                    ' to zmienna się resetuje i odblokowywuje się możliwość
                                        ' ponownego załączenia buzera 
    end if
    end if
    end if 
    
    
  • REKLAMA
  • #4 7486837
    marco47
    Poziom 41  
    Po co stosujesz Timer1 do generowania sygnału buzera . Zastosuj buzer z generatorem a Timer1 wykorzystaj do czegoś innego.
    Zmień strukturę programu , dokładnie opisuj poszczególne linijki kodu , musimy zgadywać co autor miał na myśli ?
    Wywal wszystkie Wait'y z programu
    Przykład jak powinieneś układać linie kodu :

    If Przycisk = 0 Then                              'jeśli przyciśnięty switch_0
     M1 = 1                                           'ustaw bit pomocniczy
      If M1 = 1 And M2 = 0 Then                       'jeśli nadal wciśnięty
          Incr Menu                                   'zwiększ licznik menu
            If Menu = 4 Then Menu = 0                 'jezeli licznik 4 to zeruj
              M2 = 1                                  'zablokuj dalsze zmiany do czasu 
                                                      'zwolnienia switch_0
           Else
            M1 = 0 : M2 = 0                  'kasuj bity pomocnicze
         End If
       End If
  • #5 7487221
    tomson5
    Poziom 16  
    Buzer mam z generatorem ale chciałem aby jego dźwiek był przerywany.
    Postaram się dzisiaj przeedytować kod.
  • #6 7489450
    tomson5
    Poziom 16  
    Postarałem się dodać więcej opisów informujących

    
    'Sterowanie pompą i pomiar ilości wody
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    
    
    
    Config Pinb.1 = Output
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.2 = Input
    Config Pind.3 = Input
        Set Portd.2
        Set Portd.3
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5
    Config Timer1 = Timer , Compare A = Toggle , Compare B = Disconnect , Prescale = 256 , Clear Timer = 1
    Config Timer0 = Timer , Prescale = 256
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
       Portd.6 = 1
    Pwm1a = 15625
      Enable Interrupts           '\załączenie przerwań
      Enable Int0
      Enable Int1
    On Int0 Pompaa
    On Int1 Czas
    On Timer0 Odmierz_1s
      Enable Timer0
    Load Timer0 = 250
    Stop Timer0
    Stop Timer1
        Pompa Alias Portd.5       '\port sterujący pompą
        Led Alias Portd.6         '\port sterujący Diodą LED sygnalizującą wysoki poziom
        S1 Alias Pind.2           '\przycisk załączajacy pompę
        S2 Alias Pind.3           '\przycisk zwiększający czas pracy pompy
    
    Dim Licz_8ms As Byte , Sekunda As Byte , Minuta As Byte
    Dim B As Bit , C As Bit , A As Bit       ' zmienne pomocnicze
    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
      Minuta = 0
      A = 1
      Start Adc
    '--------------------------------------- program --------------------------------------------
    
    Do
    
    Wart_ac = Getadc(0)           '\pobiera wartość z przetwornika ADC
     Cls
     Locate 1 , 1 : Lcd "Pompa"   '\
      If Pompa = 1 Then           '\jeżeli pompa uruchomiona to wyświetla napis Pompa ON
        Locate 1 , 7 : Lcd "ON"   '\
         Start Timer0             '\uruchamia timer0
               Else
           Locate 1 , 7 : Lcd "OFF"       '\jeżeli pompa zatrzymana to wyświetla napis Pompa OFF
            Stop Timer0           '\zatrzymuje timer0
      End If
    Locate 1 , 11 : Lcd Minuta    '\ wyświetla ile minut będzie pracować pompa po załączeniu
     Lowerline
      V = Wart_ac * 0.0041        '\
       Wart_nap = Fusing(v , "#.$$")       '\
        Lcd "Poziom Wody "        '\wyświetla aktualny poziom wody
         Locate 2 , 13 : Lcd Wart_nap       '\
          Waitms 400
           If V > 2.10 Then       '\jeżeli poziom przekroczy 2,10 to zapali się dioda
            Gosub Dioda
             Else
              Led = 1             '\jeżeli poziom jest niższy niż 2,10 to dioda Led i buzer wyłączone
               Stop Timer1
                If V < 1 Then     '\jeżeli woda zostanie wybrana to zmienna A = 1
                 A = 1            '\   ,możliwe ponowne zadziałanie buzera
            End If
            End If
    Loop
    End
    
    '--------------------------------------------------
    Czas:                         '\Tutaj ustalam ile ma pracować pompa
    If S2 = 0 Then                '\jeżeli przycisk S2 naciśnięty to zwiększamy czas pracy pompy
     If C = 1 Then
      Minuta = Minuta + 1
       C = 0
        If Minuta > 40 Then       '\jeżeli przekroczymy czas pracy pompy 40minut
         Minuta = 1               '\to ma zmniejszyć do 1minuty
          C = 0
      End If
     End If
      Else
       C = 1
     End If
    Return
    
    
    '--------------------------------------------------------
    Pompaa:                       '\Załaczanie i wyłaczanie pompy
    If S1 = 0 Then                '\jeżeli naciśniemy przycisk S1 to załączymy pompę
     If B = 1 Then                '\ale tylko wtedy gdy czas pracy będzie ustawiony wiekszy niż zero
      Toggle Pompa
       B = 0
       If Minuta = 0 Then         '\jeżeli czas pracy jest ustawiony na zero minut
        Pompa = 0                 '\to nie załączymy pompy
         B = 0
     End If
     End If
    Else
     B = 1
    End If
    Return
    
    
    '--------------------------------------------------------------
    Odmierz_1s:                   '\tutaj odmierzamy minuty
      '\ten podprogram ma nam odliczyć czas który ustawiliśmy przyciskiem S2 (działania pompy)
    Load Timer0 = 250
    Incr Licz_8ms
     If Licz_8ms = 125 Then
      Licz_8ms = 0
       Incr Sekunda
        If Sekunda = 60 Then
         Sekunda = 0
          Decr Minuta
           If Minuta = 0 Then
            Pompa = 0
            Stop Timer0
      End If
     End If
    End If
    Return
    '------------------------------------------------------------------
    Dioda:                        '\tutaj załaczamy diodę
    If V > 2.20 Then              '\jeżeli czujnik dostanie rozwarcia to dioda się nie zapali...
     Led = 1
      Stop Timer1                 '\...i buzer się nie załączy
     Else
    Led = 0
     If A = 1 Then                '\sprawdza czy buzer może być załączony                                               '
      Start Timer1                '\jeżeli A = 1 to buzer działa 10sekund i się wyłącza
       Wait 10
        Stop Timer1
         A = 0                    '\Zmienna A = 0 aby buzer po raz kolejny się nie załączył
     End If
    End If
    Return
    
    
  • #7 7490238
    marco47
    Poziom 41  
    Juz lepiej z przejrzystością kodu , sam chyba przyznasz ze łatwiej ogarnąć program , tylko te Wait'y . Miałeś je usunąć z programu . Stosujesz dokładne odmierzanie 1 sekundy i minuty a zatrzymujesz program Wait'em 10 na około 10 sekund . Napisałem jak wykorzystać odmierzanie 1 sekundy do odmierzenia 10 sekund dla buzzera

    Dopisz w tej linijce kodu
       Wart_nap = Fusing(v , "#.##")
       Wart_nap = Format(wart_nap , "       ")

    Nie będzie się przesuwał wyświetlany napis
  • REKLAMA
  • #8 7490951
    tomson5
    Poziom 16  
    Witam
    Dzięki za wskazówkę odnośnie wyświetlania wartości napięcia (poziomu wody)

    Próbowałem dzisiaj przez kilka godzin pozbyc się tego wait=10
    W sumie udało mi się uzyskać to co chciałem ale z małym błędem.

    poziom się podnosi, osiąga wartość 2,10 i buzer zaczyna się odzywać w takt
    timera1 (1Hz)
    zmienna D zwiększa swoją wartość aż osiągnie 20 i buzer się wyłącza.
    wartość 20 odpowiada mniej więcej 10 sekundą.
    zmniejszenie wartości poziomu poniżej 1 odblokowywuje ponownie możliwość załączenia buzera.
    znalazłem niestety buga który może spowodować załączenie buzera na stałe i jego ciagłe wycie.
    Jeżeli poziom osiągnie 2,10 (buzer się załączy) i zanim zmienna D osiągnie wartość 20 poziom spadnie poniżej 2,10 to czasami buzer załącza się na stałe.
    timer1 się zatrzymuje ale na wyjściu OC1A (buzer) pozostaje stan wysoki zamiast niski.

    zamieszczam fragment który zmodyfikowałem

    Dioda:                        '\tutaj załaczamy diodę
    If V > 2.20 Then              '\jeżeli czujnik dostanie rozwarcia to dioda się nie zapali...
     Led = 1
      Stop Timer1                 '\...i buzer się nie załączy
     Else
    Led = 0
     If A = 1 Then                '\sprawdza czy buzer może być załączony                                               '
      Start Timer1                '\jeżeli A = 1 to buzer działa 10sekund i się wyłącza
       Incr D
        If D = 20 Then
        Stop Timer1
               A = 0        '\Zmienna A = 0 aby buzer po raz kolejny się nie załączył
        End If                    
      End If
    End If
    Return
  • #9 7491156
    marco47
    Poziom 41  
    Cytat:
    Jeżeli poziom osiągnie 2,10 (buzer się załączy) i zanim zmienna D osiągnie wartość 20 poziom spadnie poniżej 2,10 to czasami buzer załącza się na stałe.

    To w takim razie połącz te dwie zalezności w jednym If 'e aby nie było mozliwości zadziałania buzzera jak wyzej
  • #10 7491430
    tomson5
    Poziom 16  
    Nie rozumiem narazie tego stanu.

    "mój tok myślenia"
    Jeżeli mam skonfigurowany portb.1 = output
    i nastąpi w programie stop timer1
    to portb.1 powinien przyjąć stan 0

    tak było w moim wcześniejszym przypadku

    wcześniejszy fragment:
    start Timer1 stan"0"
    wait 10 stan"0101010101010101010"
    stopTimer 1 stan"0"

    Dla mnie oczywiste było że skoro przed uruchomieniem timera był stan "0" to po jego zatrzymaniu powinienem mieć stan "0"

    Chyba że zatrzymanie timera nastąpiło w chwili gdy stan portu Oc1A miał wartość "1"
    Być może z tego się bierze ten mój błąd który powoduje załączenie na stałe buzera.


    W pętli głównej jest taki fragment

     If V > 2.10 Then       '\jeżeli poziom przekroczy 2,10 to zapali się dioda
            Gosub Dioda
             Else
              Led = 1             '\jeżeli poziom jest niższy niż 2,10 to dioda i buzer wyłączone
               Stop Timer1
              If V < 1 Then       '\jeżeli woda zostanie wybrana to zmienna A = 1
                 A = 1
                 D = 0            '\   ,możliwe ponowne zadziałanie buzera
            End If
            End If
    Loop
    End

    Sprawdzany jest warunek czy poziom jest większy niż 2.10
    jeżeli TAK to skocz do podprogramu Dioda (to jest jasne i to robi OK)
    jeżeli NIE to wykonuje instrukcje po ELSE Led wyłączony i zatrzymuje timer1 (buzer)

    Po mojemu w tym miejscu po zatrzymaniu timera1 potrafi ustawić wyjście w stan "1"
    z tego bierze się błąd .

    Przepraszam za takie rozwięzłe paplanie ale czegoś poprostu nie rozumiem.
    Zmarnowałem kilka godzin w ciągu których napisałbym to od nowa a poległem na głupiej sprawie.
  • #11 7491816
    marco47
    Poziom 41  
    Konfigurację portów pisz tak
    Config Portb = &B11111111   'jako wejścia
            Portb = &B00000000     'ustawianie stanów na wyjściu
    Config Portc = &B00111000
            Portc = &B00000000
    Config Portd = &B11111111
            Portd = &B00000000

    lepiej widać ustawienia na pierwszy rzut oka , nie trzeba wczytywać się w opisy

    Cytat:
    Po mojemu w tym miejscu po zatrzymaniu timera1 potrafi ustawić wyjście w stan "1"
    z tego bierze się błąd .

    To wymuś zerowanie Portb.1 w tym momencie
  • #12 7495550
    tomson5
    Poziom 16  
    dodałem instrukcję zerującą ale nic to nie dało
    
     If V > 2.10 Then    '\jeżeli poziom przekroczy 2,10 to zapali się dioda
            Gosub Dioda
             Else
              Led = 1     '\jeżeli poziom jest niższy niż 2,10 to dioda Led i buzer wyłączone
                Stop Timer1
                 Portb.1 = 0
                  If V < 1 Then   '\jeżeli woda zostanie wybrana to zmienna A = 1
                   A = 1
                    D = 0         '\   ,możliwe ponowne zadziałanie buzera
            End If
            End If


    straciłem nadzieję że coś wskuram chyba że spróbuje od początku napisać cały program i zacznę najpierw od tego nieszczęsnego timera.
    dzieki serdeczne za próbę pomocy i za kilka rad
  • Pomocny post
    #13 7496312
    janbernat
    Poziom 38  
    Nie analizowałem Twojego programu- ale może to Ci się przyda.
    Może moje stare belferskie umiejętności (teraz to się nazywa- zdolności pedagogiczne) jeszcze całkiem nie zanikły.

    
    'Program poglądowy do unikania wait
    'Prescale oczywiście można zmienić
    'licznik też i Temp0 też
    $regfile "m8def.dat"
    $crystal = 8000000
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
    
    sei
    Config Timer0 = Timer , Prescale = 64       'to nam daje step_delay- czyli kroczek co ok 2ms
    Enable Ovf0
    On Ovf0 Step_delay
    Dim Temp0 As Byte
    'dim Temp0 As word
    Dim Flaga As Byte
    Flaga = 0
    
    
    Cls
    Cursor Off
    Locate 1 , 1
    Lcd "ustal kierunek "
    
    
    
    Do
    
       If Flaga = 1 Then       'gdy jest przerwanie od Timer0- Co 2ms
    
          'tu się wykonuje to co ma być sprawdzone co 2ms
          'i może być tego dużo- gosub też
    
          Incr Temp0    'Zwiększamy licznik tymczasowy- jak dojdzie do 255 to:
    
             If Temp0 = 255 Then
    
               'a tu się wykonuje to co ma się wykonywać 255 razy rzadziej
               'i też tego może być dużo- gosub też
    
               Temp0 = 0       'jak już się wykona to zerujemu licznik tymczasowy
    
             End If
    
          Flaga = 0     'zerujemy Flaga bo już się zrobiło co miało się zrobić
    
       End If           'tu się kończy sprawdzanie co 2ms
       'A tu w programie wykonywanym co us też możemy coś wtawić jak nam zależy żeby coś było robione szybko
    
    Loop
    End
    
    
    Step_delay:         'to przerwanie pozwala nam sprawdzać w programie głównym
                        'zmiany co 2ms- na przykład
       Flaga = 1
    
    Return
    


    Wklej to do Bascoma- będzie lepiej widać.
  • Pomocny post
    #14 7496362
    marco47
    Poziom 41  
    Wrzuć wszystko do programu głównego tzn. przyciski ( ustawianie czasu załączania/wyłączania pompy), sprawdzanie Adc (poziom wody) przeliczanie wartości dla wyświetlacza , a samo wyświetlanie w podprogramie odświezanym co jedną sekundę za pomocą Timer0 . Timer0 dalej dla wyznaczania 1 sekundy.
    Buzer zrealizuj za pomocą zwykłej zmiennej licznikowej zwiększanej co jedną sekundę(Timer0) w programie głównym .
    Odpadają wszystkie Wait 'y z programu , takze PWM nie będzie potrzebny.
    Cały procesor mozesz uśpić a budzić go tylko przerwaniem INT0 (podwyzszony poziom wody)
  • #15 7497621
    tomson5
    Poziom 16  
    Dzięki za odpowiedź
    Chciałem aby ten mój program był bardziej rozbudowany (przejrzysty)
    W założeniu miał zawierać podprogramy i przyciski na przerwaniach
    wyświetlacz też miał być odświerzany w podprogramie ale na poczatek wyladował w pętli i potem miałem już problem się wycować

    Faktycznie spróbuje podejść do tematu od nowa.
    Dzięki @janbernat za kod, przestudiuje go sobie, powiedz mi tylko co to jest Ovf0
    @marco47 jak mogę przerwaniem INT0 obudzić procek w chwili gdy poziom mierzę przez ADC ??

    Dzięki za pomoc
  • #16 7498554
    janbernat
    Poziom 38  
    0vf0 jest to przerwanie od licznika Timer0 po jego przepełnieniu- można napisać Timer0.
  • #17 7499308
    marco47
    Poziom 41  
    Mozesz zastosować pozostałe wejście od czujnika poziomu paliwa tzw. rezerwa ,
    Nie wiem jak masz skonstruowany ten czujnik , czy mozna tak go wykorzystać .
    Wracając do programu , mozna go konstruować na wiele sposobów . Od ciebie tylko zalezy którą drogę wybierzesz .
    Mozesz wszystkie paści władować do podprogramu Odmierz_1s , zastosować pustą pętlę Do...Loop .
    Wtedy procek będzie budzony co 1 sekundę przerwaniem od Timer0 , wykona wszystkie paści i pójdzie spać do następnego budzenia.
REKLAMA