Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wyświetlacz, błędna obsługa lowerline [BASCOM]

cugi253 02 Paź 2010 19:54 1685 6
  • #1 02 Paź 2010 19:54
    cugi253
    Poziom 16  

    Witam chciałem napisać kod który będzie powodował ze po tym jak wartość I3 będzie równe zero to będzie migać linia 2 z napisem PIEC i temperatura.
    Napisałem ale miga mi górna linia zamiast dolnej;/ Pomoże ktoś?

    Code:

    If I3 = 0 Then
       Waitms 500
       Display On
       Waitms 500
       Cls
       Lowerline
       Lcd "  PIEC  " ; Ss ; Chr(0) ;

    i następnym problemem jest to że chciałbym po przekroczeniu jakiejs tam wartości I3, włączył sie buzzer.
    Załóżmy ze buuzer jest podpięty pod port B.1 to można tak?

    Code:

    If I3>0 Then
    Pinb.1 = 1
    end if



    inventco.eu - tytuł zmieniłem. Regulamin p.11.1

  • #2 02 Paź 2010 20:34
    Ciapol
    Poziom 24  

    Sugestie:
    - co do LCD popróbuj z "Locate"
    - co do buzzera:

    Cytat:
    Speaker Alias Portd.7
    Sound Speaker , 100 , 10

    To tylko przykład korzystania z buzzera.

    Powinno Ci to wystarczyć do odpalenia helpa i przeszukania odpowiednich tematów.

  • #3 02 Paź 2010 21:01
    cugi253
    Poziom 16  

    z locate tez cos sie nie udaje, wpisuje locate 2,1 i nadal miga górna linia, a powinna chyba dolna;/

  • #6 03 Paź 2010 22:13
    M. S.
    Poziom 34  

    Może tak:

    Code:
    If I3 = 0 Then
    
       Do
       Waitms 500
       Lowerline
       Lcd Spc (16) 'lub tyle ile w linii znaków
       Waitms 500
       Lowerline
       Lcd "  PIEC  " ; Ss ; Chr(0)
       Loop Until ...
       ...

  • #7 04 Paź 2010 22:23
    cugi253
    Poziom 16  

    dzięki działa:)

    dodałem jeszcze buzzerek, ale mam takie pytanie układ ma działać jako termometr informujący o danej temperaturze i bliskości zagotowania wody w obiegu. Kod napisany teraz po przekroczeniu temperatury 70 C zacznie odgrywać melodyjkę, po przekroczeniu 80 inna, a 85 na bardzo piskliwą. Ale potrzebuje coś aby spełniało taka cechę: np. idę zapalić w piecu, dołożę paliwo, jeśli temperatura minie 70 C to naciskam przycisk switch i buzzer przestaje wyć i wtedy ide sobie przymknąć czopuch oraz przepustnice powietrza pierwotnego do piwnicy. Zaczyna ponownie piszczeć dopiero po przekroczeniu 80 C lub gdy temperatura obniży sie poniżej 70 i znów wzrośnie powyżej 70 C.
    Jest to wykonywalne? Mógłby mi ktoś pomóc? Albo naprowadzić jakich komend musiałbym użyć? A Może jakiś inny pomysł spełniający ten warunek? Z góry dziękuje.

    Code:
    'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
    
    'Kontakt duszkowski(malpa)o2.pl


    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7

    Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)

    '*************************************WAŻNE**********************************************
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
    Config Portb.0 = Output
    Speaker Alias Portb.0                                       'deklaracja portu glosnika
    Config 1wire = Portd.5                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer


    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte

    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID




    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników

    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza

    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "  Termometr CO" ;                                        'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd "     PINKI"
    Wait 5
    Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lowerline
    Lcd W
    Wait 3
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
    Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu


    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 2 , 1
     Lcd "  Czujnik 1 OK"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2
    Cls
    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
     Locate 2 , 1
     Lcd "  Czujnik 2 OK"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid2(b))
     Next
    End If
    Wait 2
    Cls
    If Dsid3(8) = Crc8(dsid3(1) , 7) Then
     Locate 2 , 1
     Lcd "  Czujnik 3 OK"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid3(b))
     Next
    End If
    Wait 2


    Cls

    '*******************koniec odczytu ID czujników temperatury*********************

    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika
       1wwrite &HBE
       I2 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid3(1)                                        'wysylam adres trzeciego czujnika
       1wwrite &HBE
       I3 = 1wread(2)

    '--------konwersja temp dla wszystkich dsow
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1

    '

       I1 = I1 * 10
       I1 = I1 / 16
       If I1 > 0 Then Cls                                       'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1                                             'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
       Lcd "Zew" ; Ss ; Chr(0) ;

       I2 = I2 * 10
       I2 = I2 / 16
       If I2 > 0 Then Cls
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 1 , 10
       Lcd "We" ; Ss ; Chr(0) ;

       'I3 = I3 * 10
       'I3 = I3 / 16
       If I3 > 0 Then Cls
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "  PIEC  " ; Ss ; Chr(0) ;



       If I3 >= 70 Then
          Do
             Waitms 1000
             Lowerline
             Lcd Spc(16)
             Waitms 1000
             Lowerline
             Lcd "!!PIEC!!" ; Ss ; Chr(0)
             Sound Speaker , 329 , 63
             Sound Speaker , 369 , 99
          Loop
       End If



       If I3 >= 80 Then
          Do
             Waitms 500
             Lowerline
             Lcd Spc(16)
             Waitms 500
             Lowerline
             Lcd "!!PIEC!!" ; Ss ; Chr(0)
             Sound Speaker , 1975 , 50
             Sound Speaker , 261 , 63
          Loop
       End If



       If I3 >= 85 Then
          Do
             Waitms 200
             Lowerline
             Lcd Spc(16)
             Waitms 200
             Lowerline
             Lcd " !!PIEC!!" ; Ss ; Chr(0)
             Upperline
             Lcd "!!PIEC!!!!PIEC!!"
             Sound Speaker , 587 , 32
             Sound Speaker , 659 , 26

         Loop
       End If
                                                        '





        Loop





    'Koniec programu
    'Pozdrawiam Duch

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME