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

[Atmega16][Bascom] Komputer motocyklowy - sprawdzenie

Mad Jaro 02 Lut 2011 00:06 1212 0
  • #1 9090381
    Mad Jaro
    Poziom 16  
    Zaczynam pisać program do Komputera motocyklowego opisywanego w wątku:
    Link

    Chciałbym prosić o sprawdzenie, jak na razie udało mi się uruchomić temperatury, oraz napięcia.

    Z tym, że mam tylko jeden przycisk do sterowania wszystkim, użyłem funkcji skoków do podprogramów i nie wiem czy to nie będzie się później komplikować, ponieważ w podprogramie SHITF chcę zrobić ustawianie wartości przy której zapali się dioda LED, a miało by ono działać na zasadzie:

    -przytrzymanie przycisku przez 3sec. po czym wartość zaczęła by migać. Następnie pojedyncze przyciśnięcia zmieniają wartość co 500 w przedziale 1500-15000. Przytrzymanie przycisku przez 3sec. na wybranej wartości powiedzmy 4000 zapisuje wartość.


    Nie wiem również, gdzie umieścić warunek Alarmu tak, aby działał niezależnie jaki podprogram jest w danym czasie uruchomiony (obecnie w podprogramie TEMP OIL i tylko w nim działa)




    '--------------------KONFIGURACJA-----------------------------------------------
    $regfile = "m16def.dat"                                     'informuje kompilator o pliku
    
    $crystal = 8000000                                          'informuje kompilator o częstotliwości oscylatora
    
    Config 1wire = Porta.3                                      'konfiguracja portu 1wire
    Config Porta.4 = Input                                      'port wejściowy POMIAR_AKU
    Config Porta.5 = Output                                     'port wyjściowy SHIFT LED
    Config Porta.6 = Input                                      'port wejściowy PALIWO
    Config Porta.7 = Input                                      'port wejściowy PRZYCISK
    
    Config Portb.1 = Output                                     'port wyjściowy podświetlenie LCD
    
    Config Portc.0 = Output                                     'port wyjściowy wyświetlacz LED segment A
    Config Portc.1 = Output                                     'port wyjściowy wyświetlacz LED segment B
    Config Portc.2 = Output                                     'port wyjściowy wyświetlacz LED segment C
    Config Portc.3 = Output                                     'port wyjściowy wyświetlacz LED segment D
    Config Portc.4 = Output                                     'port wyjściowy wyświetlacz LED segment E
    Config Portc.5 = Output                                     'port wyjściowy wyświetlacz LED segment F
    Config Portc.6 = Output                                     'port wyjściowy wyświetlacz LED segment G
    Config Portc.7 = Output                                     'port wyjściowy wyświetlacz LED zasilanie RED
    
    Config Portd.0 = Input                                      'port wejściowy BIEG_1
    Config Portd.1 = Input                                      'port wejściowy BIEG_2
    Config Portd.2 = Input                                      'port wejściowy TACHO_PULSE
    Config Portd.3 = Input                                      'port wejściowy SPEED_PULSE
    Config Portd.4 = Input                                      'port wejściowy BIEG_3
    Config Portd.5 = Input                                      'port wejściowy BIEG_4
    Config Portd.6 = Input                                      'port wejściowy BIEG_5
    Config Portd.7 = Input                                      'port wejściowy BIEG_6
    
    
    
    Config Lcd = 16 * 2                                         'konfiguracja typu wyťwietlacza LCD
    
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.5 , Db6 = Portb.2 , Db7 = Portb.4 , E = Portb.7 , Rs = Portb.6
                                                                 'konfiguracja linii
                                                                 'do których pinów dołączono wyťwietlacz LCD
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja wewnętrznego przetwornika A/C
    
    
    Reset Portb.1                                               'Sterowanie podświetleniem: Reset - włączone Set - wyłączone
    
    Cursor Off
    
    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             ' znak stopnia
    Deflcdchar 2 , 32 , 16 , 9 , 5 , 3 , 15 , 32 , 32           ' znak strzałki dół
    Deflcdchar 1 , 32 , 30 , 24 , 20 , 18 , 1 , 32 , 32         ' znak strzalki góra
    Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32        ' czyste pole
    
    '--------------------POWITANIE--------------------------------------------------
    Cls
    Locate 1 , 1
    Lcd "  test  " ;
    Locate 2 , 1
    Lcd "  test  "
    Wait 2
    Cls
    '--------------------TEMPERATURA------------------------------------------------
    
    Dim Adresy(16) As Byte
    Dim S As Byte
    Dim Ss As String * 6
    Dim W As Byte
    Dim T As Integer
    Dim T2 As Integer
    Dim I As Integer
    Dim I2 As Integer
    Dim Oil(9) As Byte
    Dim Zew(9) As Byte
    
    Adresy(9) = 1wsearchfirst()
    Adresy(1) = 1wsearchnext()
    W = 1wirecount()
    '--------------------NAPIĘCIA---------------------------------------------------
    
    Dim Wart_ac As Word
    Dim V As Single
    Dim R As Single
    Dim Wart_nap As String * 4
    Dim Wart_ac1 As Word
    Dim V1 As Single
    Dim R1 As Single
    Dim Wart_nap1 As String * 4
    
    '-------------------------------KONFIGURACJE MANU-------------------------------
    
    Porta.7 = 1                                                 'podciagam port - przycisk
    Dim A As Byte , B As Byte
    Declare Sub Temp1
    Declare Sub Temp2
    Declare Sub Pal
    Declare Sub Lad
    Declare Sub Obr
    Declare Sub Shif
    Declare Sub Przyc
    Const Maxa = 5                                              'maksymalna ilosc podprogramow
    
    
    '-------------------------------PETLA GLOWNA------------------------------------
    Cls
    Do
    
    Debounce Pina.7 , 0 , Przyc , Sub
    
    On A Gosub Temp1 , Temp2 , Pal , Lad , Obr , Shif
    
    Loop
    '-------------------------------TEMP OIL----------------------------------------
    Sub Temp1
    
    1wreset
    1wwrite &H55                                                ' Będę wysyłał adres
    1wwrite Adresy(1) , 8                                       ' Wysyłam adres
    1wwrite &HBE                                                ' Komenda dla czujnika o wysłanym adresie
    Oil(1) = 1wread(9)
    1wreset
    1wwrite &H55
    1wwrite Adresy(9) , 8
    1wwrite &HBE
    Zew(1) = 1wread(9)
    1wreset
    1wwrite &HCC                                                ' Komenda skip ROM, czyli słuchajcie wszyscy
    1wwrite &H44                                                ' Komenda convert T
    Waitms 800
    
    Cls
    T = Makeint(oil(1) , Oil(2))
    T = T * 10
    T = T / 16
    If T > I Then
    I = T
    If T > 0 Then
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(1)
    Locate 1 , 1
    Lcd "Temp.Oil"
    Else
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(1)
    Locate 1 , 1
    Lcd "Temp.Oil"
    End If
    Elseif T < I Then
    I = T
    If T > 0 Then
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(2)
    Locate 1 , 1
    Lcd "Temp.Oil"
    Else
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(2)
    Locate 1 , 1
    Lcd "Temp.Oil"
    End If
    Else
    I = T
    If T > 0 Then
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(3)
    Locate 1 , 1
    Lcd "Temp.Oil"
    Else
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(3)
    Locate 1 , 1
    Lcd "Temp.Oil"
    End If
    End If
    
      If T >= 250 Then                                          ' jezeli temp T> 25'C to...
    Lowerline
    Ss = Str(t)
    Ss = Format(ss , "  0.0")
    Locate 1 , 1
    Lcd " ALARM  "
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(1)
    Set Porta.5                                                 'zapal diode LED
    Waitms 100
    Toggle Porta.5                                              'zgas diode
    End If
    
    End Sub
    '-------------------------------TEMP AIR----------------------------------------
    Sub Temp2
    
    1wreset
    1wwrite &H55                                                ' Będę wysyłał adres
    1wwrite Adresy(1) , 8                                       ' Wysyłam adres
    1wwrite &HBE                                                ' Komenda dla czujnika o wysłanym adresie
    Oil(1) = 1wread(9)
    1wreset
    1wwrite &H55
    1wwrite Adresy(9) , 8
    1wwrite &HBE
    Zew(1) = 1wread(9)
    1wreset
    1wwrite &HCC                                                ' Komenda skip ROM, czyli słuchajcie wszyscy
    1wwrite &H44                                                ' Komenda convert T
    Waitms 800
    
    
    Cls
    T2 = Makeint(zew(1) , Zew(2))
    T2 = T2 * 10
    T2 = T2 / 16
    If T2 > I2 Then
    I2 = T2
    If T2 > 0 Then
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(1)
    Locate 1 , 1
    Lcd "Temp.Air"
    Else
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(1)
    Locate 1 , 1
    Lcd "Temp.Air"
    End If
    Elseif T2 < I2 Then
    I2 = T2
    If T2 > 0 Then
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(2)
    Locate 1 , 1
    Lcd "Temp.Air"
    Else
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(2)
    Locate 1 , 1
    Lcd "Temp.Air"
    End If
    Else
    I2 = T2
    If T2 > 0 Then
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(3)
    Locate 1 , 1
    Lcd "Temp.Air"
    Else
    Ss = Str(t2)
    Ss = Format(ss , "  0.0")
    Locate 2 , 1
    Lcd Ss ; Chr(0) ; " " ; Chr(3)
    Locate 1 , 1
    Lcd "Temp.Air"
    End If
    End If
    End Sub
    '-------------------------------FUEL--------------------------------------------
    Sub Pal
    Cls
    Start Adc
    Cursor Off
    
    Wart_ac = Getadc(6)
    V = Wart_ac * 0.004887585533
    R = V
    Wart_nap = Fusing(r , "#.##" )
    Wart_nap = Format(wart_nap , "    ")
    
    Cls
    Locate 1 , 1
    Lcd "  FUEL  "
    Locate 2 , 1
    Lcd Wart_nap ; "V "
     Waitms 800
    
    End Sub
    '-------------------------------CHARGER-----------------------------------------
    Sub Lad
    Cls
    Start Adc
    Cursor Off
    
    Wart_ac = Getadc(4)
    V = Wart_ac * 0.004887585533
    R = V * 4.83
    Wart_nap = Fusing(r , "#.#" )
    Wart_nap = Format(wart_nap , "     ")
    
    Cls
    Locate 1 , 1
    Lcd "CHARGER"
    Locate 2 , 1
    Lcd Wart_nap ; "V "
     Waitms 800
    End Sub
    '-------------------------------OBR---------------------------------------------   'podprogram obroty silnika
    Sub Obr
       Cls
       Locate 1 , 1
       Lcd "OBR"
       Locate 2 , 1
       Lcd ""
       Waitms 800
    End Sub
    '-------------------------------SHIFT-------------------------------------------   'podprogram ustawień wartości OBR przy których zapali się dioda LED
    Sub Shif
       Cls
       Locate 1 , 1
       Lcd "SHIFT"
       Locate 2 , 1
       Lcd ""
       Waitms 800
    End Sub
    '-------------------------------------------------------------------------------
    Sub Przyc
          Incr A
          If A > Maxa Then A = 0
    End Sub
REKLAMA