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

Program w Bascom relizujący funkcję przerzutnika monostabiln

mkpl 23 Wrz 2010 23:56 1517 7
REKLAMA
  • #1 8544118
    mkpl
    Poziom 37  
    Witam
    Na początku dodam że jestem początkujący w programowaniu no ale kiedyś trzeba zacząć :D

    Muszę na szybko napisać program który będzie realizował coś takiego.
    Po włączeniu zasilania na PD.0 stan 0
    Po 10 impulsach wejściowych na PD.0 pojawia się "1"
    Jeśli impulsy zanikną na czas dłuższy niż 60s stan PD.0 przechodzi w "0" natomiast jeśli pojawi się jakikolwiek impuls stan wyjścia jest natychmiastowo zmieniany na "1"
    Impulsy są bardzo nieregularne (impulsy pochodzą z wtryskiwaczy paliwa)

    Doskonale zdaję sobie sprawę że układ można wykonać choćby na '123 ale chwilowo mam ogromna awersje do tego układu poza tym łatwiej mi w programie dobierać czasy i ilości impulsów.

    Dodam że nie chodzi mi o gotowy układ tylko jak to ugryźć
  • REKLAMA
  • #2 8544137
    xury
    Specjalista automatyka domowa
    Te impulsy wejściowe i wyjście ma być na tym samym pinie ? PD.0?
    Jeśli nie to ustawiamy przerwanie na INT0 i w obsłudze przerwania zwiększamy zmienną. Jeśli zmienna osiągnie dziesięć ustawiamy wyjscie na stan wysoki.
    Jednocześnie timer zlicza czas pomiędzy impulsami i jeśeli jest większy niż 60 sekund ustawia wyjście na stan niski.
    Podumowując:
    Przerwanie zewnętrzne:
    Timer do odmierzania czasu,
    kilka instrukcji warunkowych.
  • REKLAMA
  • #3 8544812
    mkpl
    Poziom 37  
    Udało mi się naskrobać coś takiego ale nadal mam problemy z ogarnięciem timera.
    Nie wiem jak go "resetować" impulsami na wejściu

    
    $regfile = "attiny2313.dat"                                 'model proca
    $crystal = 800000                                           'taktowanie  8mhz wbudowanego rc
    
    On Int0                                                     'Przerwanie
    Enable Int0
    Config Int0 = Falling
    Enable Interrupts
    Dim A As Byte                                               'zmienna a
    Dim B As Byte                                               'zmiena b
    A = 0
    B = 10
    
    Reset Portd.0                                               '0 na porcie d.0 port sterujący przekaźnikiem
    Reset Portd.1                                               'port sterujący dioda stanu układu (pompa odcięta)
    Reset Portd.3                                               'port sterujący ledem stanu układu (popmpa pracuje)
    
    
    
    'Przerwanie:
    Waitms 50
    If Pind.2 = 0 Then
       Incr A
       If A = B Then
          Reset Portd.0
          Set Portd.2
       End If
    
       Do
    
       If Pind.2 = 0 Pin And Pind.0
       Waitms 60000                                             'czekaj 60s
       Set Pind.0                                               'pompa odcięta
       Set Pind.1                                               'led pompa odcięta
       End If
    
       If Pind.2 = 1 And Pind.0 = 1
       Reset Pind.0                                             'pompa włączona
       Set Pind.3                                               'led pompa pracuje
    
    
    
    
     Wend                                                       'koniec petli while
    
    
    
    
    Loop                                                        'koniec pętli
    
    End
    
  • #4 8546269
    Mat_91
    Poziom 25  
    Przecież Ty w ogóle tu timerów nie używasz a polecenie waitms 60000 ZATRZYMUJE program na 60 sekund a przecież nie o to Ci chodzi...

    Poczytaj na forum oraz w helpie do bascoma jak używać timerów (timerów- nie opóźnień) i tego użyj, gdy będzie impuls to kasujesz rejestr licznikowy.

    Dodatkowo w przerwaniu od timera zwiększasz sobie jakąś zmienną, no co 1ms, gdy doliczy do tych 60000 to prosty warunek "If x=60000 then portd.0=0". (oczywiście gdy będzie impuls który Cię interesuje musisz również wyzerować tą zmienną).
  • REKLAMA
  • #5 8546474
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 8546600
    Mat_91
    Poziom 25  
    emarcus napisał:
    Program jest realizowany dokładnie z poleceniem. To właśnie processor zajmuje sie liczeniem określonego czasu i w tym okresie jest "głuchy i ślepy" na jakiekolwiek zdarzenia i zmiany wywołane na portach weściwych.


    Wiem bardzo dobrze jak to działa:) I jak by nie patrzeć program wtedy jest zatrzymany bo ani się nie cofa, ani nie idzie do przodu, nie robi "nic" oprócz liczenia tego czasu (jak ty to nazwałeś jest "głuchy i ślepy")- takie bardziej łopatologiczne tłumaczenie :]
  • #7 8546959
    janbernat
    Poziom 38  
    Ten algorytm jest porąbany:
    " Po włączeniu zasilania na PD.0 stan 0
    Po 10 impulsach wejściowych na PD.0 pojawia się "1" - to co po 10 impulsach- każdy co 1 godzinę?
    Jeśli impulsy zanikną na czas dłuższy niż 60s stan PD.0 przechodzi w "0" natomiast jeśli pojawi się jakikolwiek impuls stan wyjścia jest natychmiastowo zmieniany na "1" - jeśli pojawi się w czasie tych 60s czy potem?
  • #8 8547231
    mkpl
    Poziom 37  
    Ja ten program poprawię tylko rozkminię tego timera do końca :|

    Generalnie układ ma sterować pompą paliwa w samochodzie zasilanym LPG.
    Wykorzystam przekaźnik który bez zasilania ma zwarty styk. Tak aby w razie uszkodzenia elektroniki sterującej lub cewki przekaźnika było stałe zasilnie pompy noPB. Cewkę steruję za pomocą mosfeta BS170 sterowanego bezpośrednio z portu Attiny2313.
    Wystawienie na port logicznej 1 powoduje zadziałanie przekaźnika i odcięcie pompy paliwa.

    Układ ma działać dokładnie tak jak 74123 z ta różnicą że po starcie nic nie robi i czeka na pierwsze impulsy z wtryskiwacza benzyny. Musi tak być po w 1 etapie pompa pracuje na zgaszonym silniku i robi ciśnienie w układzie wtryskowym silnika.
    Odpalam silnik.
    Pracuje na noPB układ dostaje impulsy i nic nie robi bo pompa ma być włączona i port sterujący "0". Samochód przechodzi na zasilanie LPG zanikają impulsy z wtryskiwacza benzyny. Attiny zaczyna zliczać magiczne 60s. W tych 60s zawarty jest czas przechodzenia z noPB na LPG przemieszanie paliwa oraz nabicie ciśnienia awaryjnego. Tzn w razie nagłego braku LPG lub jakby coś się stało musi być ciśnienie na listwie wtryskowej aby silnik mógł podjąć bezproblemową pracę na noPB. Wtedy Attiny dostanie impuls z wtryskiwacza i natychmiast ma wyłączyć przekaźnik włączając tym samym pompę paliwa.

    Mam nadzieję że wytłumaczyłem to odpowiednio dokładnie ;) bo mój wczorajszy opis faktycznie trąci niedbalstwem. No ale też nie każdy musi wiedzieć jak działa system zasilania wtrysków :)


    Jeszcze raz przepraszam za jakość moich algorytmów bo to mój pierwszy program od podstaw
REKLAMA