Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pomysł jest, umiejętności trochę, wiedzy brak

Skoniecki 23 Sty 2010 10:14 4875 39
  • #31
    Lodoo
    Poziom 15  
    zaprogramuj jeszcze raz ;-)
    sprawdź, czy aby na pewno chodzi na 8mhz
    dorzuć kondensator do przycisku i podciągnij wejście przycisku opornikiem do plusa z zewnątrz - jakieś parę kilo: 5 - 10
  • Relpol przekaźniki
  • #32
    Skoniecki
    Poziom 10  
    Witam w sobotę , widze,że kolega Lodoo wcześnie wstał , po wymianie włącznika i dodaniu kondensatora nadal reagował na zbliżenie i oddalenie ręki .
    Dodanie opornika zniwelowało tę przypadłość, jednak nadal w celu uruchomienia zapłonu trzeba przytrzymywać przycisk tyle samo czasu jak później dla rozrusznika.

    Za wymuszenie przytrzymania przycisku odpowiedzialna jest ta linijka

    If Zaplon = 1 And Licznikprzycisku2 > 10 And Licznikprzycisku2 < 100 And Puszczenie = 1 Then '''''Jesli zaplon wlaczony i przycisk trzymany minimum 0,1 sekundy, maksimum 1 sekunde i flaga puszcenia przycisku ustawiona to...
    Zmniejszenie czasu 100 do 30 daje w miarę dobry czas reakcji, tj. przy włączaniu zapłonu trzeba momencik przytrzymać inaczej zapłon się wyłączy -jednak jeżeli jeszcze zmniejszymy tę liczbę np. do 20 zapłon załapie od razu -ale będzie problem z wyłączeniem zapłonu ,przycisk musi być wciśnięty bardzo krótko inaczej zapłon się nie wyłączy. Trzeba coś zrobić ,żeby ta linijka nie miała wpływu na włączanie zapłonu.

    Linia ta jest też odpowiedzialna za rozpoznanie przy drugim wciśnięciu czy chcemy zgasić zapłon czy też uruchomić rozruch . Co dziwne - automatyczne wyłączanie zapłonu działa .Zastanawiam się jak podpiąć +12V z pompy , miałem info od Lodoo na ten temat ale zapomniałem .
  • Relpol przekaźniki
  • #33
    Lodoo
    Poziom 15  
    ta linia powinna działać tylko jeśli zapłon jest włączony i tylko, jeśli przycisk był puszczony (żeby nie wyłączyć zapłonu zaraz po włączeniu, zwiększanie drugiej liczby (100) w tej linijce nic nie daje w zasadzie... 100 jest ważne w linijce włączania rozrusznika... jeśli ją zmniejszysz np do 50 a przy rozruchu zostanie minimum 100 to jak potrzymasz przycisk akurat między 50 a 100 to układ nie ma warunków i nic nie zrobi...

    na mój gust masz coś z częstotliwościami... sprawdź czy kompilator nie ustawia jakoś automatycznie innej częstotliwości, sprawdź fusebity i ustaw na wewnętrzne 8mhz, wyłącz automatyczne funkcje kompilatora albo ustaw na 8mhz też...

    jak nie zadziała - napisz na bazie tego programu taki prosty programik, który będzie zapalał i gasił diodki co ileś tam liczników - 100 to sekunda 500 5 sekund itd... sprawdź, czy te czasy dobrze się liczą... potem powstawiaj pętlę po trochu, sprawdź gdzie program się mota...

    to powinno działać...
  • #34
    Skoniecki
    Poziom 10  
    Walka trwa nadal , niby wszystko ok ale ta linijka
    Code:
    If Zaplon = 1 And Licznikprzycisku2 > 10 And Licznikprzycisku2 < 100 And Puszczenie = 1 Then

    -nie powinna ale jednak wpływa na czas wciśnięcia przycisku w celu załączenia zapłonu , oraz na czas przytrzymania w celu wyłączenia zapłonu . Może ktoś ma pomysł .

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000                                          'kwarc lub oscylator wewnetrzny 8MHz

    Enable Interrupts
    Enable Timer1
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Przerwanie                                        '''''jesli timer1 doliczy do 65535 wykonaj Przerwanie
    Counter1 = 64285                                            '''''=65535-1250 -> pprzepelnienie timera co 10ms
    Start Timer1

    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input

    Dim Licznikzaplonu As Word                                  '''''max policzy do 65535*10ms=655s
    Dim Licznikprzycisku As Word
    Dim Licznikprzycisku2 As Word
    Dim Puszczenie As Bit
    Dim Flaga1 As Bit
    Dim Flaga2 As Bit

    Zaplon Alias Portd.0
    Rozrusznik Alias Portd.1
    Przycisk Alias Pinb.0
    Pompa Alias Pinb.1

    Reset Pinb.0
    Reset Portb.1
    Reset Zaplon
    Reset Rozrusznik



    Do

      If Zaplon = 0 And Licznikprzycisku = 10 Then              '''''Jesli zaplon wylaczony i przycisk wcisniety minimum 0,1 sekundy to
        Flaga1 = 1                                              '''''ustaw flage wlaczenia zaplonu i
        Licznikzaplonu = 0                                      '''''wyzeruj licznik 300 sekund i
        Set Zaplon
        Waitms 10                                               '''''wlacz zaplon
      End If

     If Zaplon = 1 And Licznikprzycisku2 > 10 And Licznikprzycisku2 < 100 And Puszczenie = 1 Then      '''''Jesli zaplon
      'wlaczony i przycisk trzymany minimum 0,1 sekundy, maksimum sekunde i flaga puszcenia przycisku ustawiona to
        Reset Zaplon                                            '''''wylacz zaplon
        Puszczenie = 0                                          '''''zresetuj flage puszczenia
      End If

      If Zaplon = 1 And Licznikprzycisku >= 100 And Flaga1 = 0 Then       '''''jesli zaplon wlaczony i przycisk tryzmany ponad sekunde to
        Set Rozrusznik                                          '''''wlacz rozrusznik
      End If

      If Pompa = 1 Then                                         '''''zresetuj licnzik 300 sekund jesli silnik pracuje
        Licznikzaplonu = 0
      End If

      If Licznikzaplonu = 30000 Then                            '''''wylaczenie zaplonu po 300 sekundach, jesli silnik nie pracuje
        Reset Zaplon
      End If

    Loop



    Przerwanie:                                                 '''''co 10ms wykonaj:
      Counter1 = Counter1 + 64286                               '''''ustaw stan poczatkowy timera
      Incr Licznikzaplonu                                       '''''zwieksz licznik zaplonu o 1
      If Przycisk = 0 Then                                      '''''jesli przycisk jest wcisniety to
        Incr Licznikprzycisku                                   '''''zwieksz licznik wcisniecia przycisku o 1 i
        Flaga2 = 1                                              '''''ustaw flage wcisniecia przycisku
      Elseif Przycisk = 1 Then                                  '''''jesli przycisk jest puszczony to
        If Flaga2 = 1 Then                                      ''''''''''jesli przed 10ms byl wcisniety to:
          Puszczenie = 1                                        ''''''''''ustaw flage puszczenia przycisku i
          Licznikprzycisku2 = 0
          Licznikprzycisku2 = Licznikprzycisku                  ''''''''''podstaw czas wcisniecia przycisku  i
          Flaga2 = 0                                            ''''''''''zresetuj flage wcisniecia przycisku i
        End If
        Licznikprzycisku = 0                                    '''''zresetuj licznik wcisniecia przycisku co 10ms i
        Reset Rozrusznik                                        '''''puszczony przycisk uniemozliwia prace rozrusznika
        Flaga1 = 0                                              '''''zresetuj flage wlaczenia zaplonu
      End If
    Return



    End

    'flaga1 - blokada rozruchu w sytuacji, jak zaplon jest wylaczony i trzymamy przycisk => zaplon wlaczy sie ale rozrusznik nie
    'dopiero po puszczeniu przycisku flaga sie wyzeruje i nastepne tryzmanie pozwoli odpalic rozrusznik
    '
    'flaga2, puszczenie, licznikprzycisku2 - umozliwiaja wykrycie momentu puszczenia przycisku, wykrycie czasu jego wcisniecia
    '=> potrzebne, przy probie rozruchu zaplon nie wylaczyl sie
  • Pomocny post
    #35
    Lodoo
    Poziom 15  
    skoniecki, spróbuj tego ;-)

    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000

    Enable Interrupts
    Enable Timer1
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Przerwanie                                        '''''jesli timer1 doliczy do 65535 wykonaj Przerwanie
    Counter1 = 64285                                            '''''=65535-1250 -> pprzepelnienie timera co 10ms
    Start Timer1

    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input

    Dim Lz As Word
    Dim Lp As Word

    Zaplon Alias Portd.0
    Rozrusznik Alias Portd.1
    Przycisk Alias Pinb.0
    Pompa Alias Pinb.1

    Set Portb.0
    Reset Portb.1
    Reset Zaplon
    Reset Rozrusznik




    Do

      If Zaplon = 0 And Lp = 10 Then
        Set Zaplon
        Lz = 0
      End If

      If Zaplon = 1 And Lp >= 30010 And Lp < 30100 Then
        If Przycisk = 1 Then
          Reset Zaplon
          Lp = 0
        End If
      End If

      If Zaplon = 1 And Lp = 30100 Then
        Set Rozrusznik
      End If

      If Pompa = 1 Then
        Lz = 0
      End If

      If Lz = 29999 Then
        Reset Zaplon
      End If

    Loop



    Przerwanie:
      Counter1 = Counter1 + 64286
      Incr Lz
      If Przycisk = 0 Then
        Incr Lp
      Elseif Przycisk = 1 Then
        If Zaplon = 1 Then
          Lp = 30000
        Elseif Zaplon = 0 Then
          Lp = 0
        End If
        Reset Rozrusznik
      End If
    Return



    End
  • #36
    Skoniecki
    Poziom 10  
    Witam , po pierwszym IF musi być PRZYCISK ( nie Zapłon ) ,przy dłuższym przytrzymaniu na rozruszniku ,czasami po puszczeniu wyłącza rozrusznik razem z zapłonem ,sprawdzam działanie czujnika pompy.
    Pozdro

    P.S. Pompa działa !!!!!!!!!!!!!! Może jakieś zabezpieczenie przed wyłączeniem zapłonu wraz z rozrusznikiem , opisz proszę linie programu, bo większości słabo kumam.
  • #37
    Lodoo
    Poziom 15  
    Lp to przycisk ;-) spoko ;-)

    mała poprawka na wyłączanie na raz:

    Code:


    $regfile = "m8def.dat"
    $crystal = 8000000

    Enable Interrupts
    Enable Timer1
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Przerwanie                                        '''''jesli timer1 doliczy do 65535 wykonaj Przerwanie
    Counter1 = 64285                                            '''''=65535-1250 -> pprzepelnienie timera co 10ms
    Start Timer1

    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input

    Dim Lz As Word
    Dim Lp As Word

    Zaplon Alias Portd.0
    Rozrusznik Alias Portd.1
    Przycisk Alias Pinb.0
    Pompa Alias Pinb.1

    Set Portb.0
    Reset Portb.1
    Reset Zaplon
    Reset Rozrusznik




    Do

      If Zaplon = 0 And Lp = 10 Then
        Set Zaplon
        Lz = 0
        waitms 1
      End If

      If Zaplon = 1 And Lp >= 30010 And Lp < 30100 Then
        If Przycisk = 1 Then
          Reset Zaplon
          Lp = 0
        End If
        waitms 1
      End If

      If Zaplon = 1 And Lp = 30100 Then
        Set Rozrusznik
        waitms 1
      End If

      If Pompa = 1 Then
        Lz = 0
        waitms 1
      End If

      If Lz = 29999 Then
        Reset Zaplon
        waitms 1
      End If

    Loop



    Przerwanie:
      Counter1 = Counter1 + 64286
      Incr Lz
      If Przycisk = 0 Then
        Incr Lp
      Elseif Przycisk = 1 Then
        If Zaplon = 1 Then
          Lp = 30000
        Elseif Zaplon = 0 Then
          Lp = 0
        End If
        Reset Rozrusznik
      End If
    Return



    End


    i ma trybić ;-)
  • #38
    Skoniecki
    Poziom 10  
    To chyba już będzie to , zaczynam robić płytkę i postaram się jak najszybciej wsadzić do autka. Pozdro
  • #39
    Lodoo
    Poziom 15  
    weź jutro do roboty :-D chcę sprawdzić czy aby na pewno wyszło ;-)
  • #40
    Skoniecki
    Poziom 10  
    Witajcie chyba wreszcie udało mi się zakończyć ten projekcik , problem z wyłączającym się zapłonem po puszczeniu rozrusznika chyba został rozwiązany , pomaga jedna modyfikacja i zamiana poleceń miejscami w celu dopasowania wzrokowego do kolejności wykonywanych poleceń :
    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    Enable Interrupts
    Enable Timer1
    Config Timer1 = Timer , Prescale = 64
    On Timer1 Przerwanie                                        '''''jesli timer1 doliczy do 65535 wykonaj Przerwanie
    Counter1 = 64285                                            '''''=65535-1250 -> pprzepelnienie timera co 10ms
    Start Timer1

    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input

    Dim Lz As Word
    Dim Lp As Word

    Zaplon Alias Portd.0
    Rozrusznik Alias Portd.1
    Przycisk Alias Pinb.0
    Pompa Alias Pinb.1

    Set Przycisk
    Reset Pompa
    Reset Zaplon
    Reset Rozrusznik




    Do

      If Przycisk = 0 And Lp = 10 Then
        Set Zaplon
        Lz = 0
        Waitms 1
      End If

      If Zaplon = 1 And Lp = 30120 Then
        Set Rozrusznik
        Waitms 1
      End If

      If Rozrusznik = 1 Then
      Waitms 11
      End If

     If Zaplon = 1 And Lp >= 30010 And Lp < 30100 Then
      If Przycisk = 1 Then
     Reset Zaplon
         Lp = 0

     End If
        Waitms 1
     End If

      If Pompa = 1 Then
        Lz = 0
        Waitms 1
      End If

      If Lz = 29999 Then
        Reset Zaplon
        Waitms 1
      End If

    Loop



    Przerwanie:
      Counter1 = Counter1 + 64286
      Incr Lz
      If Przycisk = 0 Then
        Incr Lp
      Elseif Przycisk = 1 Then
        If Zaplon = 1 Then
          Lp = 30000
        Elseif Zaplon = 0 Then
          Lp = 0
        End If
        Reset Rozrusznik
      End If
    Return



    End


    Jeżeli ktoś ma inne zdanie lub pomysł jak procedurę uprościć itp. Proszę o wiadomość .
    Bardzo dziękuje LODOO za ogromną pomoc , bez niego projekt ten nie ujrzałby światła dziennego.
    Pozdrawiam