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

Termometr jednopunktowy - obsługa wyświetlacza

Chester11-86 19 Paź 2011 16:25 1901 2
REKLAMA
  • #1 10043572
    Chester11-86
    Poziom 16  
    Witam!
    Zbudowałem termometr w oparciu o ten schemat:
    Termometr jednopunktowy - obsługa wyświetlacza
    tylko zamiast wyświetlacza 3 pozycyjnego użyłem 4 pozycyjnego:
    http://sklep.avt.pl/photo/_pdf/TOF5462.pdf
    Jeden segment (DIG.4.) podpiąłem pod PIND.6.

    Oto program jaki napisałem:
    '****************************
               'Konfiguracja
    '****************************
    $regfile = "attiny2313.dat"
    $crystal = 12000000
     
    Config Portb = &B11111111 : Portb = &B11111111
    Config Portd = &B11111111 : Portd = &B11111111
     
    Config 1wire = Pind.5
     
    Config Timer0 = Timer , Prescale = 64
    Enable Timer0 : On Timer0 Przerwanie0
     
     
    Enable Interrupts
    '****************************
          'Zmienne
    '****************************
    Dim Lsb As Byte
    Dim Msb As Byte
    Dim Co4ms As Byte , Co100ms As Byte , Co1s As Byte
    Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte , Wysw100 As Byte
    Dim Wysw_pomoc As Word
    Dim Tempa As Word
    Dim Mux As Byte
     
    Dim Zezw_wysw As Bit
    Dim Pomiar_odczyt As Bit
    Dim Minus As Bit
    Dim Ur As Bit
    '****************************
          'Wartosci Poczatkowe
    '****************************
    Reset Pomiar_odczyt
    Reset Ur
    Wysw1 = 191
    Wysw10 = 191
    Wysw100 = 191
    '****************************
          'Petla glowna
    '****************************
    Do
     
    If Zezw_wysw = 1 Then
      Reset Zezw_wysw                                           'co 4ms
      Wysw = Tempa
     
      If Ur = 1 Then Gosub Przelicz
      Gosub Wyswietl
    End If
     
    Loop
    End
    '****************************
          'Przerwanie timer0
    '****************************
    Przerwanie0:
    Timer0 = 5
    Incr Co4ms
     If Co4ms = 3 Then
       Co4ms = 0
       '***************************************  co 4ms
       Set Zezw_wysw
       Incr Co100ms
       If Co100ms = 25 Then
         Co100ms = 0
         '*************************************** co 100 ms
         'ew flaga obslugi przyciskow
         Incr Co1s
         If Co1s = 7 Then
           Co1s = 0
           '*************************************** co 1s
           Pomiar_odczyt = Not Pomiar_odczyt
     
           Disable Interrupts
           1wreset
     
           If Pomiar_odczyt = 1 Then
            1wwrite &HCC
            1wwrite &H44
           Else
            If Err = 0 Then
     
              1wwrite &HCC
              1wwrite &HBE
              Lsb = 1wread():
              Msb = 1wread():
     
              Minus = Msb.7
     
              Tempa = Msb * 256
              Tempa = Tempa + Lsb
     
     
              If Minus = 1 Then
                Tempa = Not Tempa
                Tempa = Tempa + 1
              End If
     
              Tempa = Tempa * 10                                'temperatura *10
              Tempa = Tempa / 16
     
              If Ur = 0 Then Ur = 1
     
            Else
              Tempa = 10000                                     'Er wyswietli wyswietlacz potem
            End If
           End If
     
           Enable Interrupts
           '***************************************
         End If
         '***************************************
       End If
       '***************************************
     End If
     
    Return
    '****************************
          'Inne Etykiety
    '****************************
    Przelicz:
     If Wysw < 1000 Then
       Wysw_pomoc = Wysw Mod 10
       Wysw1 = Wysw_pomoc
       Wysw = Wysw / 10
       Wysw_pomoc = Wysw Mod 10
       Wysw10 = Wysw_pomoc
       Wysw = Wysw / 10
       Wysw_pomoc = Wysw Mod 10
       Wysw100 = Wysw_pomoc
     
       Wysw1 = Lookup(wysw1 , Tabela)
       Wysw10 = Lookup(wysw10 , Tabela2)
       Wysw100 = Lookup(wysw100 , Tabela)
     
       Wysw1000 = 255
       If Wysw100 = 192 Then 
         Wysw100 = Lookup(wysw100 , Tabela)                         'wygaszenie zera wiodšcego
         if Minus = 1 then Wysw100.6 = 0
       else
         if Minus = 1 then Wysw1000.6 = 0
       end if
     
     
     Else
       Wysw1 = 175                                              'r
       Wysw10 = 175                                             'r
       Wysw100 = 134                                            'E
       Wysw1000 = 255
     End If
     
    Return
     
     
    Wyswietl:
     
      Incr Mux
      If Mux = 4 Then Mux = 0
     
      Select Case Mux
        Case 0:
         Set Portd.6
          Portb = Wysw100
         Reset Portd.2
     
        Case 1:
         Set Portd.2
          Portb = Wysw10
         Reset Portd.1
     
        Case 2:
         Set Portd.1
         Portb = Wysw1
         Reset Portd.0
     
        Case 3:
         Set Portd.0
         Portb = Wysw1000
         Reset Portd.6
     
      End Select
     
    Return
     
    '****************************
     
    '****************************
     
     
    '*******************************************************************************
                               'Tabele do wyswietlania na wyswietlaczu
    '*******************************************************************************
    Tabela:
        Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255
    'znak:    0     1     2     3     4     5     6     7     8     9     pusty
     
    Tabela2:
        Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 , 255
    'znak:    0.    1.  2.    3.   4.   5.  6.   7.   8.  9.    pusty
    '*******************************************************************************
     
    '*******************************************************************************

    Ale niestety popełniłem błąd i nie wiem gdzie ponieważ program nawet nie chce się skompilować.
    Osiągnąć chciałem to aby temperatura byłą wyświetlana na DIG4, DIG3, DIG2 a znak temperatur ujemnych "-" powinien się wyświetlać na DIG1 chyba ze będzie temperatura jednocyfrowa np -4,5 stopnia to znak "-" na DIG2 :)
    Mam nadzieję, że w miarę zrozumiale to wyjaśniłem :)

    Z góry dziękuję za odpowiedź!
    Pozdrawiam!

    Projekt nie jest kolegi autorstwa więc proszę podać źródło projektu.
    Robak


    Oczywiście już poprawiam swój błąd :)
    Źródło: http://mirley.firlej.org/termometr_uniwersalny
  • REKLAMA
  • Pomocny post
    #2 10043658
    sp3ots
    Poziom 38  
    Witam !
    A gdzie masz zadeklarowaną zmienną:
    Wysw1000 ?
    Pozdrawiam. Stefan
  • #3 10045233
    Chester11-86
    Poziom 16  
    Wielkie dzięki za pomoc :)

    Temat do zamknięcia :)
REKLAMA