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.

Termometr LED Przesunięcie minusa po zwiększeniu temeratury ujemnej

rafii 07 Sty 2013 22:31 1545 5
  • #1 07 Sty 2013 22:31
    rafii
    Poziom 12  

    Witam. Może od razu na wstępie zaznaczę że dopiero zaczyna przygodę z programowaniem w "bascomie" więc proszę o wyrozumiałość. Zbudowałem sobie termometr na wyświetlaczach 7seg. led na ds18b20 termometr działa poprawnie i pokazuje temp ujemną. Na wszelki wypadek jeszcze napisze jak by ktoś nie wiedział albo się nie domyślił po co użyłem aż 6 wysw led. mianowicie wcześniej pisałem zegarek z ustawieniami który udało mi się napisać i działał poprawnie więc postanowiłem zabrać się za termometr gdyż chcę później te dwa programy ze sobą połączyć. Dobra wróćmy do tematu. Obecnie temperatura wyświetlana jest na trzech pierwszych segmentach od prawej strony tej. jeśli temperatura jest -1.8 używane są trzy wyświetlacze. jak rozbić żeby np po zwiększeniu temperatury do -21.8 (minus) przesunął się na czwarty wyświetlacz i na odwrót. Męczyłem się dziś nad tym cały dzień i nic nie mogłem wymyślić więc bardzo proszę was o pomoc w rozwiązaniu mojego problemu.

    Z Góry dziękuje i pozdrawiam.

    Termometr LED Przesunięcie minusa po zwiększeniu temeratury ujemnej

    załączam kod:

    Code:
    '$regfile = "attiny2313.dat"
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb.0 = Output
            Portb.0 = 1
    Config Portc = &B11111111 : Portc = &B11111111
    Config Portd = &B11111111 : Portd = &B01111111

    Config 1wire = Pind.7

    Config Timer0 = Timer , Prescale = 256
    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 , Wysw1000 As Word , Asd As Bit
    Dim Wysw_pomoc As Word , Ujemna As Byte , W As Bit
    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
    'Wysw1000 = 191
    '****************************
          'Petla glowna
    '****************************
    Do

    Loop
    End
    '****************************
          'Przerwanie timer0
    '****************************




    Przerwanie0:
    Load Timer0 , 125
    Incr Co4ms
     If Co4ms = 1 Then
       Co4ms = 0
       If Ur = 1 Then Gosub Pomiar
       Gosub Wyswietl
       'Set Asd
       '***************************************  co 4ms
       Set Zezw_wysw
       Incr Co100ms
       If Co100ms = 250 Then
         Co100ms = 0
         '*************************************** co 100 ms
         'Ew Flaga Obslugi Przyciskow
         Incr Co1s
         If Co1s = 7 Then
         Co1s = 0
         End If

    Toggle Pomiar_odczyt

           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
              Tempa = Tempa / 16

              If Ur = 0 Then Ur = 1

            Else
              Tempa = 10000

           End If
          End If :
         End If
       End If

    Return

    '***************************
          'Inne Etykiety
    '***************************
    Pomiar:

    Wysw = Tempa
     If Wysw < 100000 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

       If Wysw100 = 0 Then Wysw100 = 10                         'wygaszenie zera wiodšcego

       Wysw1 = Lookup(wysw1 , Tabela)
       Wysw10 = Lookup(wysw10 , Tabela)
       Wysw100 = Lookup(wysw100 , Tabela)

     Else
       Wysw1 = 175                                              'r
       Wysw10 = 175                                             'r
       Wysw100 = 134                                            'E
     End If

    Return

    Wyswietl:

      Incr Mux
      If Mux = 4 Then Mux = 0
      Portc = &B11111111
      Wysw1000 = 255   ' wyłącznie czwartego wyświetlacza
       Wysw100 = 191    ' wyświetlenie (minusa) na trzecim wyświetlaczu


       Select Case Mux
        Case 0:
          Portd = Wysw100
          Portc.2 = 0

        Case 1:
          Portd = Wysw10
          Portc.1 = 0

        Case 2:
          Portd = Wysw1
          Portc.0 = 0

        Case 3:
          Portd = Wysw1000
          Portc.3 = 0
      End Select

    Return
    '*******************************************************************************
                               'Tabele do wyswietlania na wyswietlaczu
    '*******************************************************************************
    Tabela:
        Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255

    0 5
  • #2 08 Sty 2013 20:16
    paavo91
    Poziom 19  

    A musisz to wyświetlać tak jak teraz?
    Zrób żeby wyświetlało NIE -1,2 tylko -01,2 .
    Ja to przynajmniej tak robiłem. Wtedy minusa masz zawsze na jednej pozycji a temperatura i tak nie będzie większa niż 85 stopni w przypadku DSa.

    0
  • #3 09 Sty 2013 00:49
    WOBI
    Poziom 19  

    Zrób to instrukcją Case dla każdego zakresu temperatur pozycjonuj wynik na wyświetlaczu. poczytaj ten temat, wprawdzie jest tam pozycjonowanie dla LCD ale instrukcja case jest użyta i na podstawie tego napiszesz własne pozycjonowanie

    0
  • #4 09 Sty 2013 11:35
    rafii
    Poziom 12  

    Masz namyśli to, jeśli temperatura ujemna to minus ustawiam na stałem na czwartym segmencie, a w zależności od tego jaki jest wynik przesuwam ten wynik jeśli temp < -10 to w prawo i w tedy musiał bym wygaszać ostatnie zero, a jak temp > -10.1 to o jeden w lewo. Czy dobrze to rozumiem ?

    Pozdrawiam.

    0
  • #5 09 Sty 2013 13:16
    WOBI
    Poziom 19  

    Dobrze myślisz. Jeśli są jedności -1 to warunek umieszcza - na odpowiednim miejscu, jeśli dziesiątki -10 to na innym itd. lub
    pierwszy warunek case -9 to -1 zapalasz - i gasisz 0 przed jednościami
    drugi warunek case -99 to -10 zapalasz -
    no i bez znaku case 0 to 99 (gasi znak - na led)

    0
  • #6 09 Sty 2013 15:49
    rafii
    Poziom 12  

    Wydaje mi się ze to chyba jednak nie wyjdzie, a może mi się źle wydaje nie wiem... spędziłem dziś nad tym cały dzień i nic nie mogłem napisać no nie dosłownie, ale wszystko co napisałem nie działało, albo działało nie tak jak trzeba. Drugą sprawa jest to ze w głowie ma jak to powinno działać, ale jak mam to napisać to nie mogę sobie tego poskładać kompletny mętlik mi się robi. Trzecią sprawą jest to że znak minusa się zapala (if minus =1 then wysw =191) i nie mam pojęcia jak i gdzie porozmieszczać te warunki. Czy mógłbyś coś więcej napisać podać jakiś przykład na podstawie tego kodu na pierwszym poście podać gdzie to porozmieszczać i w jaki sposób?

    Zrobiłem sobie coś takiego na (if ): ale tez nie działa tak jak trzeba...

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    Z góry dziękuje.
    Pozdrawiam.

    0