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 zrobić regulacje czasu pracy?

Tomekddd 15 Lis 2009 20:06 2110 9
REKLAMA
  • #1 7265471
    Tomekddd
    Poziom 23  
    Witam.

    Piszę program który będzie dawał stan wysoki na jednym wyjsciu przez określony czas.
    Napisałem już sporo ale nie moge dojść jak zrobić aby można było regulować przyciskami te czasy, a dokładniej będzie to tak:

    po nacisnięciu przycisku "praca" zwiekszy się o dwie minuty (od dwóch) czas stanu wysokiego na wyjsciu do maks 10 minut

    po nacisnięciu przycisku "pauza" zwiększy się o dziesięć minut (od dziesięciu) czas do następnego włączenia maks 60 minut

    nie mam pojęcia jak zrobić zeby to dało sie regulować
    prosze o jakąś pomoc bo męcze się z tym trzeci dzień i nadal zero postępu
  • REKLAMA
  • #2 7265826
    landy13
    Poziom 31  
    Jakiś bardzo krótki listing, jak na trzy dni pracy. Zero linii?
  • REKLAMA
  • #3 7265930
    Tomekddd
    Poziom 23  
    programu nie wstawiłem bo nie wiem czy będzie potrzebny a jest strasznie pokręcony
    chodzi mi o samą zasadę dzialania coś porównane do czegos i nie wiem moze przypisane jakiejs innej zmiennej
    tu jest listing ale nie skończone obsługa ledów bo ustawienie ma byc nimi sygnalizowane
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Pind.0 = Output                                      '
    Config Pind.1 = Output                                      '6 led PAUZA
    Config Pind.2 = Output                                      '
    
    Config Pind.3 = Output                                      '
    Config Pind.4 = Output                                      '5 led PRACA
    Config Pind.5 = Output                                      '
    
    Config Pind.6 = Input                                       'praca ustaw
    Config Pind.7 = Input                                       'pauza ustaw
    
    Config Pinb.1 = Output                                      'dioda pompy
    Config Pinb.2 = Output                                      'dioda sekundy
    Config Pinb.3 = Output                                      'pompa
    
    Set Portb.1
    Set Portb.2
    Set Portb.3
    Set Portd.6
    Set Portd.7
    
    Config Watchdog = 2048 , Prescale = 256                     'zabezpieczenie przeciw zawieszeniu
    Start Watchdog
    
    Config Timer1 = Timer , Prescale = 256
    
    On Timer1 Sekunda
    
    Dim Sekundy As Byte                                         'czasomierz
    Dim Minuty As Byte
    
    Enable Interrupts
    Enable Timer1
    
    Counter1 = 34286
    
    S1 Alias Pind.6
    S2 Alias Pind.7
    
    
    
      Dim Ledpauza As Byte                                      'zmienne sygnalizacji ustawień
     Ledpauza = 1
    
      Dim Ledpraca As Byte
     Ledpraca = 1
    
     Dim Pauza As Byte                                          'zmienne czasu pracy i pauzy pompy
     Dim Praca As Byte
    
     Dim Ustawprace As Byte                                     'zmienne ustawień
     Dim Ustawpauze As Byte
    
     Ustawprace = 2
     Ustawpauze = 10
    Do
    Reset Watchdog
    Praca = Minuty
    While Praca = Ustawprace
     Gosub Pompastop
    
    Wend
    
    
     If S1 = 0 Then                                             ' obsługa przycisku regulacji pauzy
    
     End If
    
     If S2 = 0 Then                                             'obsługa przycisku regulacji pracy
    
     End If
    
    
    
    
    
    
    Loop
    End
    
    
    
    
    
     Ledpauza_1:
    Portd.0 = 1                                                 'sugnalizacja ustawień pauzy
    Portd.1 = 0
    Config Pind.2 = Input
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Config Pind.2 = Output
     Return
    
     Ledpauza_2:
    Config Pind.0 = Input
    Portd.1 = 1
    Portd.2 = 0
    Waitms 500
    Config Pind.0 = Output
    Portd.1 = 0
    Portd.2 = 0
     Return
     Ledpauza_3:
    Config Pind.0 = Input
    Portd.1 = 0
    Portd.2 = 1
    Waitms 500
    Config Pind.0 = Output
    Portd.1 = 0
    Portd.2 = 0
     Return
    
     Ledpauza_4:
    Portd.0 = 0
    Portd.1 = 1
    Config Pind.2 = Input
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Config Pind.2 = Output
     Return
    
     Ledpauza_5:
    Portd.0 = 1
    Config Pind.1 = Input
    Portd.2 = 0
    Waitms 500
    Portd.0 = 0
    Config Pind.1 = Output
    Portd.2 = 0
     Return
    
     Ledpauza_6:
    Portd.0 = 0
    Config Pind.1 = Input
    Portd.2 = 1
    Waitms 500
    Portd.0 = 0
    Config Pind.1 = Output
    Portd.2 = 0
     Return
    
    
     Ledpraca_1:                                                'sygnalizacja ustaweń pracy
     Return
    
     Ledpraca_2:
     Return
    
     Ledpraca_3:
     Return
    
     Ledpraca_4:
     Return
    
     Ledpraca_5:
     Return
    
    
    
    Sekunda:
    Toggle Portb.2
    Counter1 = Counter1 + 34286
    Incr Sekundy
    If Sekundy = 60 Then                                        'czasomierz
    Sekundy = 0
    Incr Minuty
       If Minuty = 60 Then
       Minuty = 0
       End If
    End If
    Return
    
    Pompastart:
    
    Portb.1 = 0                                                 'START POMPY
    Portb.3 = 0
    
    Return
    
    Pompastop:
    
    Portb.1 = 1                                                 'STOP POMPY
    Portb.3 = 1
    Return
    
    
    Sygledpauza:
    If Ledpauza = 1 Then                                        'obsługa sygnalizacji ustawienia pauzy
    Gosub Ledpauza_1
    Elseif Ledpauza = 2 Then
    Gosub Ledpauza_2
    Elseif Ledpauza = 3 Then
    Gosub Ledpauza_3
    Elseif Ledpauza = 4 Then
    Gosub Ledpauza_4
    Elseif Ledpauza = 5 Then
    Gosub Ledpauza_5
    Elseif Ledpauza = 6 Then
    Gosub Ledpauza_6
    End If
    
    Return
    
    Sygledpraca:                                                'obsługa sygnalizacji ustawień pracy
    
    
    Return
    
  • REKLAMA
  • #4 7267088
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 7268595
    Tomekddd
    Poziom 23  
    ustawienia muszą być zapamietywane ale to wystarczy wpisać zmienne do eram

    no i dokładność raczej powinna być zegarowa
    sygnalizacja ustawień musi być na ledach bo nie mam możliwości podłaczenia do procesora wyświetlacza, mam zaprojektowany ten układzik tylko program musze napisać.

    obmyśliem jeszcze inny sposób aby jedna zmienna obsługiwała zarówno czas jak i odpowiednią diode sygnalizacyjną ale to dopiero musze napisac kod
  • #6 7269163
    Konto nie istnieje
    Poziom 1  
  • #7 7269360
    Tomekddd
    Poziom 23  
    apropo tego ze jedna zmienna ma obsługiwac diode i czas pracy to chodziło mi o to że wartość zmiennej odpowiadajacej za czas pracy silnika bedzie wynosiła 2, 4, 6, 8, 10 a więc to jest pięć ustawień i teraz wystarczy przypisać dla tych wartosci zapalenie odpowiedniej diody dla 2 dioda 1 dla 4 dioda 2 itd

    udało mi sie zrobić coś takiego gdzie silnik pracuje do wyłączenia określonego ustawieniem zmiennej i włącza się ale nie po czasie ustawionym tylko po czasie krótszym o czas pracy
    czyli jeśli pracuje przez 1 minute a ma sie ponownie włączyc po 3 minutach to włącza sie po 2 minutach i nie moge za nic zrobić zeby ten błąd usunać

    zmienna PRACA i PAUZA są zwiększane co 60 sekund o 1

    Ustawprace = 2
     Ustawpauze = 3
    
     Pauza = 0
     Praca = 0
    
    
    do
    If Praca = Ustawprace Then                                 'regulacja czasu pracy
     Gosub Pompastop
    
     Elseif Pauza = Ustawpauze Then
     Praca = 0
     Gosub Pompastart
    
     End If
    loop
  • #8 7269795
    Konto nie istnieje
    Poziom 1  
  • #9 7270225
    Tomekddd
    Poziom 23  
    niestety muszą być te ledy, a są podłaczone w logice trójstanowej czyli na 3 pinach jest 6 ledów z czego każdy moze być niezależnie sterowany

    to jest program w całości i aktualny
    udało mi sie napisac regulowanie i teraz testuje jak to działa
    prosze zerknąć czy będzie dobrze tak jak napisałem (program nie jest skonczony)

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Pind.0 = Output                                      '
    Config Pind.1 = Output                                      '6 led PAUZA
    Config Pind.2 = Output                                      '
    
    Config Pind.3 = Output                                      '
    Config Pind.4 = Output                                      '5 led PRACA
    Config Pind.5 = Output                                      '
    
    Config Pind.6 = Input                                       'praca ustaw
    Config Pind.7 = Input                                       'pauza ustaw
    
    Config Pinb.1 = Output                                      'dioda pompy
    Config Pinb.2 = Output                                      'dioda sekundy
    Config Pinb.3 = Output                                      'pompa
    
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    
    
    Config Watchdog = 2048 , Prescale = 256                     'zabezpieczenie przeciw zawieszeniu
    Start Watchdog
    
    Config Timer1 = Timer , Prescale = 256
    
    On Timer1 Sekunda
    
    Dim Sekundy As Byte                                         'czasomierz
    Dim Minuty As Byte
    
    Enable Interrupts
    Enable Timer1
    
    Counter1 = 34286
    
    S1 Alias Pind.6
    S2 Alias Pind.7
    
     Set Portd.6
     Set Portd.7
    
    
      Dim Ledpauza As Byte                                      'zmienne sygnalizacji ustawień
     Ledpauza = 1
    
      Dim Ledpraca As Byte
     Ledpraca = 1
    
     Dim Pauza As Byte                                          'zmienne czasu pracy i pauzy pompy
     Dim Praca As Byte
    
     Dim Ustawprace As Byte                                     'zmienne ustawień
     Dim Ustawpauze As Byte
     Dim Ustpz As Byte
    
     Ustawprace = 2
     Ustawpauze = 10
     Pauza = 0
     Praca = 0
    
    Do
    Reset Watchdog
     Ustpz = Ustawprace + Ustawpauze
    
     If Praca = Ustawprace Then                                 'regulacja czasu pracy
     Gosub Pompastop
    
     Elseif Pauza = Ustpz Then
     Praca = 0
     Pauza = 0
     Gosub Pompastart
    
     End If
    
    
     If S1 = 0 Then
     Waitms 25
     If S1 = 1 Then                                             ' obsługa przycisku regulacji pauzy
      Ustawprace = Ustawprace + 2
      Elseif Ustawprace => 10 Then
      Ustawprace = 0
     End If
     End If
    
     If S2 = 0 Then
       Waitms 25
       If S2 = 1 Then                                           'obsługa przycisku regulacji pracy
      Ustawpauze = Ustawpauze + 10
      Elseif Ustawpauze => 60 Then
      Ustawpauze = 0
     End If
     End If
    
    
    
    
    
    
    Loop
    End
    
    
    
    
    
     Ledpauza_1:
    Portd.0 = 1                                                 'sugnalizacja ustawień pauzy
    Portd.1 = 0
    Config Pind.2 = Input
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Config Pind.2 = Output
     Return
    
     Ledpauza_2:
    Config Pind.0 = Input
    Portd.1 = 1
    Portd.2 = 0
    Waitms 500
    Config Pind.0 = Output
    Portd.1 = 0
    Portd.2 = 0
     Return
     Ledpauza_3:
    Config Pind.0 = Input
    Portd.1 = 0
    Portd.2 = 1
    Waitms 500
    Config Pind.0 = Output
    Portd.1 = 0
    Portd.2 = 0
     Return
    
     Ledpauza_4:
    Portd.0 = 0
    Portd.1 = 1
    Config Pind.2 = Input
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Config Pind.2 = Output
     Return
    
     Ledpauza_5:
    Portd.0 = 1
    Config Pind.1 = Input
    Portd.2 = 0
    Waitms 500
    Portd.0 = 0
    Config Pind.1 = Output
    Portd.2 = 0
     Return
    
     Ledpauza_6:
    Portd.0 = 0
    Config Pind.1 = Input
    Portd.2 = 1
    Waitms 500
    Portd.0 = 0
    Config Pind.1 = Output
    Portd.2 = 0
     Return
    
    
     Ledpraca_1:                                                'sygnalizacja ustaweń pracy
     Return
    
     Ledpraca_2:
     Return
    
     Ledpraca_3:
     Return
    
     Ledpraca_4:
     Return
    
     Ledpraca_5:
     Return
    
    
    
    Sekunda:
    Cls
    Cursor Off Nobline
     Lcd "PRACA:" ; Praca
     Lcd "   PAUZA:" ; Pauza
     Lowerline
     Lcd "sekund:" ; Sekundy
     Lcd " UP:" ; Ustawprace
     Lcd " UPZ:" ; Ustawpauze
    Toggle Portb.2
    Counter1 = Counter1 + 34286
    Incr Sekundy
    If Sekundy = 60 Then                                        'czasomierz
    Sekundy = 0
    Incr Praca
    Incr Pauza
    If Praca = 10 Then
    Praca = 0
    Elseif Pauza = 60 Then
    Pauza = 0
    End If
    
    End If
    Return
    
    
    
    Pompastart:
    Portb.1 = 0                                                 'Włacz/wyłacz pompe
    Portb.3 = 0
    Return
    
    Pompastop:
    
    Portb.1 = 1
    Portb.3 = 1
    
    Return
    
    
    
    
    
    
    
    Sygledpauza:
    If Ledpauza = 1 Then                                        'obsługa sygnalizacji ustawienia pauzy
    Gosub Ledpauza_1
    Elseif Ledpauza = 2 Then
    Gosub Ledpauza_2
    Elseif Ledpauza = 3 Then
    Gosub Ledpauza_3
    Elseif Ledpauza = 4 Then
    Gosub Ledpauza_4
    Elseif Ledpauza = 5 Then
    Gosub Ledpauza_5
    Elseif Ledpauza = 6 Then
    Gosub Ledpauza_6
    End If
    
    Return
    
    Sygledpraca:                                                'obsługa sygnalizacji ustawień pracy
    
    
    Return
  • #10 7274527
    Tomekddd
    Poziom 23  
    dzięki za drobne wskazówki
    juz program śmiga
REKLAMA