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

[BASCOM] Sprawdzenie kodu

Nerod 04 Lip 2013 09:13 1491 3
  • #1 04 Lip 2013 09:13
    Nerod
    Poziom 8  

    Witam

    Z wycinków kilku programów chciałem zrobić jeden duży barkuje kilku rzeczy
    i zwiazku z tez pytania


    W jaki sposób mogę zwiększyć ilość wejść i wyjść żeby zmieścić wszystko ? ( patrz 1 PINY )

    brakuje ustawiania podlewania względem kalendarza zielonego pojęcia nie mam jak z pcf mogłbym ustawić godzinę i czas podlewania np 18:00]przez 1 min ?

    brakuje lcd , i dobrze ustawionych pinów ale szukam narazie samego procesora który opsłuży 12 urządzeń ewentualnie zmienie na 2 procesory

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    [

    0 3
  • #2 04 Lip 2013 09:38
    Kuniarz
    Moderator Projektowanie

    Fatalnie analizuje się cudzy program, a jeszcze gorzej zlepek kilku programów...
    Spróbuję za to odpowiedzieć na konkretne pytania.

    1. Ilość wyjść/wejść zależy od wybranego procesora. Widzę, że chcesz się bawić w obsługę karty SD, więc proponuję przynajmniej Atmega32. Ma wystarczającą ilość pinów do obsłużenia tego wszystkiego.

    2. Z układu PCF odczytujesz aktualną datę i czas, musisz sobie w programie zdefiniować tablice, w których zapisujesz godziny podlewania. Jeśli aktualna godzina = godzina z tablicy to włączasz podlewanie na 1 min i ustawiasz flagę, że o tej godzinie podlewanie już się wykonało.

    3. Przestań wymyślać dwuprocesorowy system ;-) Wszystko zmieścisz w jednym. Kłania się punkt 1

    0
  • #3 05 Lip 2013 09:06
    Nerod
    Poziom 8  

    tutaj znalazłem dość duży kod który myślę że spełnia moje oczekiwania można zadać nawet 10x różnych pór kiedy ma włączać pompę i na jak długo tylko usunę godziny i może nawet ich ilość bo jedna czy dwie to wystarczy

    Code:
    '##########Konfiguracja zewnętrzna##########
    
    $sim
    $regfile = "m8def.dat"
    $crystal = 16000000

    Config Portc.0 = Input                                      'przyciski 1
    Config Portc.1 = Input                                      'przycisk 2
    Config Portc.2 = Input                                      'przycisk 3
    Config Portc.3 = Input                                      'przycisk 4
    Config Portd.3 = Input                                      'przycisk 5
    Config Portd.5 = Input                                      'przycisk 6

    Config Portb = Output                                       'LCD
    Config Portd.0 = Output                                     'LCD pobudzenie
    Config Portd.4 = Output                                     'pompa

    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley UPT M16
    Config Lcd = 16 * 2
    Cls
    Cursor Off Noblink

    Config 1wire = Pind.7                                       'DS18B20


    Config Scl = Portc.5
    Config Sda = Portc.4


    Pompa Alias Portd.4                                         'pin przypisany do zminnej pompa
    Lcd_light Alias Portd.0
    Sw1 Alias Portc.0                                           'Lewo
    Sw2 Alias Portc.1                                           'prawo




    Sw3 Alias Portc.2                                           'góra
    Sw4 Alias Portc.3                                           'dół
    Sw5 Alias Portd.3                                           'menu
    Sw6 Alias Portd.5                                           'pompa



    Set Portc.0
    Set Portc.1
    Set Portc.2
    Set Portc.3
    Set Portd.3
    Set Portd.5



    Declare Sub Odcz_temp
    Declare Sub W_pompa
    Declare Sub Ustaw_czas
    Declare Sub Ustaw_h
    Declare Sub Ustaw_m
    Declare Sub Menu
    Declare Sub Ustaw_temp
    Declare Sub Ustawienie1
    Declare Sub Ustawienie2
    Declare Sub Ustawienie3
    Declare Sub Ustawienie4
    Declare Sub Ustawienie5
    Declare Sub Ustawienie6
    Declare Sub Ustawienie7
    Declare Sub Ustawienie8
    Declare Sub Ustawienie9
    Declare Sub Ustawienie10



    '*** DEKLARACJA PROCEDUR SUB ***
    Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte)
    Declare Sub Gettime


    Enable Interrupts
    '#########Konfiguracja Koniec##########

    '#########Zmienne##########

    Dim Sw As Byte , Sw1 As Byte , Sw2 As Byte , Sw3 As Byte , Sw4 As Byte , Sw5 As Byte , Sw6 As Byte
    Dim Autolight As Byte

    Dim Menu As Bit

    Dim Ustaw1 As Integer , Uhp1 As Integer , Ump1 As Integer , Uhk1 As Integer , Umk1 As Integer       'ustawienie programatora 1
    Dim Zero As Integer


    Dim Menuu As Byte , Plus As Byte , Sett As Bit,
    Dim Minus As Byte

    Dim S As Byte , M As Byte , H As Byte , D As Byte , Month As Byte
    Dim Wm As Byte , Yd As Byte

    Dim Temperatura(2) As Byte                                  'DS1820
    Dim T_ust As Integer ,                                      'termostat

    Dim Warunek1 As Bit , Warunek2 As Bit , Watunek3 As Bit

    Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte
    Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte
    Dim Zapisz_czas As Bit

    Dim Pompa As Byte

    '##########Zmienne koniec#########

    '##########Początek##########

    Lcd_light = 0
    Autolight = 20
    Cls
    Lcd "Sterownik Pompy"                                       'wyświtetl " "
    Lowerline                                                   'przejdz do nowej lini
    Lcd "Cyrkulacji"                                            'wyświetl " "

    Wait 5                                                      'czekaj 5sek

    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'stopien

    Cls
    Do
        Call Gettime
        Call Odcz_temp
        Home
       Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s)
       Lowerline
       If Temperatura(2) = 0 Then
          Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
       Else
          Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
          End If


    If Sw5 = 0 Then
       Waitms 25
          If Sw5 = 0 Then

             Call Menu                                          'wejście do menu

          End If
    End If

    If Sw6 = 0 Then
       Waitms 25
       If Sw6 = 0 Then

          Call W_pompa                                          'ręczne włączenie pompu

       End If
    End If


     Loop
    End                                                         'end program

    '##########MENU##########
    Sub Menu
    Menuu = 1
    Waitms 200
    Cls
    Locate 1 , 1
    Select Case Menuu
    Case Is = 1                                                 'Ustaw zad. temp.
    Case Is = 2                                                 'Ustaw aktualny czas
    Case Is = 3                                                 'Programator 1
    Case Is = 4                                                 'Programator 2
    Case Is = 5                                                 'Programator 4
    Case Is = 6                                                 'Programator 5
    Case Is = 7                                                 'Programator 6
    Case Is = 8                                                 'Programator 7
    Case Is = 9                                                 'Programator 8
    Case Is = 10                                                'Programator 9
    Case Is = 11                                                'Programator 10
    End Select

    If Sw5 = 0 And Menuu < 12 Then
    Incr Menuu
    Waitms 222
    End If

    If Sw5 = 0 And Menuu = 12 Then
    Menuu = 1
    Waitms 222
    End If

    If Sett = 0 And Menuu = 1 Then                              'ustawienie zadanej temperatury
    Call Ustaw_temp
    End If

    If Sett = 0 And Menuu = 2 Then
    Call Settime(10 , 1 , 1 , 29 , 11)                          'ustaw zegar
    End If

    If Sett = 0 And Menuu = 3 Then
    Call Ustawienie1
    End If

    If Sett = 0 And Menuu = 4 Then
    Call Ustawienie2
    End If

    If Sett = 0 And Menuu = 5 Then
    Call Ustawienie3
    End If

    If Sett = 0 And Menuu = 6 Then
    Call Ustawienie4
    End If

    If Sett = 0 And Menuu = 7 Then
    Call Ustawienie5
    End If

    If Sett = 0 And Menuu = 8 Then
    Call Ustawienie6
    End If

    If Sett = 0 And Menuu = 9 Then
    Call Ustawienie7
    End If

    If Sett = 0 And Menuu = 10 Then
    Call Ustawienie8
    End If

    If Sett = 0 And Menuu = 11 Then
    Call Ustawienie9
    End If

    If Sett = 0 And Menuu = 12 Then
    Call Ustawienie10
    End If

    Wait 7


    End Sub Menu
    '##########MENU KONIEC##########

    '##########Ustaw zadaną temperature
    Sub Ustaw_temp
    Cls

    Lcd "Ustaw Temp. zad."
    Lowerline
    Lcd "      " ; T_ust ; Chr(0) ; "C"

    If Sett = 0 And Ustaw1 = 1 Then                             'temp w góre
       If Sw3 = 0 Then
          Waitms 25
             If Sw3 = 0 Then
                T_ust = T_ust + 1
             End If
       End If
       If Sw4 = 0 Then                                          'temp w dół
          Waitms 25
             If Sw4 = 0 Then
                T_ust = T_ust - 1
             End If
       End If
    End If
    Wait 7                                                      'poczekaj 7 sek i wyjdz do aktualnej godziny i aktualnej temperatury
    Cls
    End Sub

    '##########Ustawienia programatora#########
    Sub Ustawienie1

    Ustaw1 = 1
    Waitms 200
    Cls


    Locate 1 , 1
    Select Case Menuu
    Case Is = 1
    Lcd "Prog1 Godz pocza"
    Case Is = 2
    Lcd "Prog1 Min pocza"
    Case Is = 3
    Lcd "Godz. koncowa"
    Case Is = 4
    Lcd "Min. koncowa"
    End Select

    Lowerline
    Lcd Uhp1 ; ":" ; Ump1 ; " - " ; Uhk1 ; ":" ; Umk1

    If Sw2 = 0 And Ustaw1 < 4 Then                              'poruszanie sie w ustawieniu programatora
    Incr Ustaw1
    Waitms 222
    End If

    If Sw2 = 0 And Ustaw1 = 4 Then
    Ustaw1 = 1
    Waitms 222
    End If


    If Sw1 = 0 And Ustaw1 > 1 Then
    Decr Ustaw1
    Waitms 222
    End If

    If Sw1 = 0 And Ustaw1 = 1 Then
    Ustaw1 = 4
    Waitms 222
    End If



    If Sett = 0 And Ustaw1 = 1 Then                             'ustawienie godziny początkowej
       If Sw3 = 0 Then
          Waitms 25
             If Sw3 = 0 Then
                Uhp1 = Uhp1 + 1
             End If
       End If
       If Sw4 = 0 Then
          Waitms 25
             If Sw4 = 0 Then
                Uhp1 = Uhp1 - 1
             End If
       End If
    End If

    If Sett = 0 And Ustaw1 = 2 Then                             'ustawienie minuty początkowej
       If Sw3 = 0 Then
          Waitms 25
             If Sw3 = 0 Then
                Ump1 = Ump1 + 1
             End If
       End If
       If Sw4 = 0 Then
          Waitms 25
             If Sw4 = 0 Then
                Ump1 = Ump1 - 1
             End If
       End If
    End If

    If Sett = 0 And Ustaw1 = 3 Then                             'ustawienie godziny końcowej
       If Sw3 = 0 Then
          Waitms 25
             If Sw3 = 0 Then
                Uhk1 = Uhk1 + 1
             End If
       End If
       If Sw4 = 0 Then
          Waitms 25
             If Sw4 = 0 Then
                Uhk1 = Uhk1 - 1
             End If
       End If
    End If

    If Sett = 0 And Ustaw1 = 4 Then                             'ustawienie minuty końcowej
       If Sw3 = 0 Then
          Waitms 25
             If Sw3 = 0 Then
                Umk1 = Umk1 + 1
             End If
       End If
       If Sw4 = 0 Then
          Waitms 25
             If Sw4 = 0 Then
                Umk1 = Umk1 - 1
             End If
       End If
    End If

    'dopisanie warunków: jeżeli czas początkowy jest równy czasu końcowemu wtedy warunek jest spełniony, a jeżeli nie to warunek będzie spełniony jak
    'godzina aktualna będzie równa lub większa od godziny nastawionej(uhp1)
    'minuta aktualna jest większa bądz równa od minuty ustawionej (umk1)
    'godzina aktualna jest mniejsza bądz równa od godziny ustawionej koncowej (uhk1)
    'minuta aktualna jet mniejsza bądz równa od minuty ustawionej końcowej (umk1)




    Wait 7                                                      'poczekaj 7 sek i wyjdz do aktualnej godziny i aktualnej temperatury
    Cls

    End Sub

    Sub Ustawienie2

    End Sub


    Sub Ustawienie3

    End Sub


    Sub Ustawienie4

    End Sub


    Sub Ustawienie5

    End Sub


    Sub Ustawienie6

    End Sub


    Sub Ustawienie7

    End Sub


    Sub Ustawienie8

    End Sub


    Sub Ustawienie9

    End Sub


    Sub Ustawienie10

    End Sub
    '#########Koniec ustawien programatora


    '##########CZAS##########

    Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
        'values are stored as BCD values so convert the values first
        'zapis
     Cls
      Lcd "Ustaw czas"
      Lowerline
      Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s)

           If Sw1 = 0 Then                                      'ustaw godzine
             Waitms 25
             If Sw1 = 0 Then
                        If Sw3 = 0 Then
                           Waitms 25
                           If Sw3 = 0 Then
                              H1 = H1 + 1
                           End If
                        End If
                        If Sw4 = 0 Then
                           Waitms 25
                           If Sw4 = 0 Then
                              H1 = H1 - 1
                           End If
                        End If
             End If
          End If


          If Sw2 = 0 Then                                       'ustaw minute
            Waitms 25
            If Sw2 = 0 Then
                       If Sw3 = 0 Then
                          Waitms 25
                          If Sw3 = 0 Then
                             M1 = M1 + 1
                          End If
                       End If

                       If Sw4 = 0 Then
                          Waitms 25
                          If Sw4 = 0 Then
                            M1 = M1 - 1
                          End If
                       End If
            End If
          End If
     S = 0                                                      'wyzeruj sekundy

        S1 = Makebcd(s1)                                        'seconds
        M1 = Makebcd(m1)                                        'minutes
        H1 = Makebcd(h1)                                        'hours
        D1 = Makebcd(d1)                                        'days
        Month1 = Makebcd(month1)                                'months


        I2cstart                                                'inicjalizacja magistrali I2C
        I2cwbyte &HA0                                           'podanie adresu PCF do zapisu
        I2cwbyte 0                                              'select control register
        I2cwbyte 8                                              'set year and day bit for masking
        I2cstop                                                 'generate stop

        I2cstart                                                'generate start
        I2cwbyte &HA0                                           'write mode
        I2cwbyte 2                                              'select seconds Register
        I2cwbyte S1                                             'write seconds
        I2cwbyte M1                                             'write minutes
        I2cwbyte H1                                             'Write Hours
        I2cwbyte D1                                             'write days
        I2cwbyte Month1                                         'write months
        I2cstop
    Cls
    End Sub
    '##########Koniec ustaw czas##########
    '##########Odczyt czasu##########

      'odczyt
    Sub Gettime
        I2cstart                                                'generate start
        I2cwbyte &HA0                                           'write addres of PCF8583
        I2cwbyte 2                                              'select second register

        I2cstart                                                'generate repeated start
        I2cwbyte &HA1                                           'write address for reading info
        I2crbyte S , Ack                                        'read seconds
        I2crbyte M , Ack                                        'read minutes
        I2crbyte H , Ack                                        'read hours
        I2crbyte Yd , Ack                                       'read year and days
        I2crbyte Wm , Nack                                      'read weekday and month
        I2cstop                                                 'generate stop
    End Sub

    '#########Koniec odczytu czasu########



    '##########Pompa##########
    W_pompa:

     Cls
     Lcd "Reczne Wł. Pompy"
     Lowerline


       If Sw6 = 0 Then
          Waitms 25
             If Sw6 = 0 Then
                Pompa = 1
             End If
       End If
      If Pompa = 1 Then
          Lcd "Wałączona"
      End If

      If Pompa = 0 Then
          Lcd "Wyłączona"
      End If
      Wait 7
      Cls
     Return

    '##########Odczyt temperatury##########
    Sub Odcz_temp

       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
       1wreset
       1wwrite &HCC
       1wwrite &HCB

       Temperatura(1) = 1wread(2)

       1wreset
       If Err = 1 Then

          Cls
          Lcd "Brak Ukladu!!!"
          Lowerline
          Lcd "Podlacz czujnik"
          Do

          Loop
       End If

       If Temperatura(2) > 0 Then
          Temperatura(1) = 256 = Temperatura(1)
       End If
       Temperatura(1) = Temperatura(1) / 2

    End Sub
    '##########Odczyt Temperatury Koniec##########

    0
  • #4 05 Lip 2013 09:09
    Kuniarz
    Moderator Projektowanie

    A nie myślałeś, żeby samodzielnie coś napisać ? Satysfakcja gwarantowana ! Oczywiście zaczynając od małych kroków - najpierw procedura obsługi RTC, później ustawianie czasu, później sterowanie ręczne itd itd.
    Wrzucasz tu kawał programu i... czego właściwie oczekujesz ?

    0