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

[ATMEGA8][Bascom] Termometr wyświetlanie na całym ekranie.

Buster1994 24 Kwi 2011 23:51 4046 6
  • #1 9436502
    Buster1994
    Poziom 15  
    Witam.

    Zrobiłem sobie termometr na atmedze8, na czujniku ds18b20, wszystko ładnie działa, lecz temperaturę mam wyświetloną tylko na górnej linii wyświetlacza, a chciałbym, żeby temperatura była wyświetlana duża na 2 liniach wyświetlacza. Jest to wyświetlacz 2x16. Czy ktoś mógłby mi pomóc w napisaniu kodu do wyświetlania tej temperatury na całości wyświetlacza czyli na 2 liniach?

    Pozdrawiam.
  • #2 9436545
    gts1991
    Użytkownik obserwowany
    Dodano po 99999999 [sekundy]:
    Nie. Możesz wyśrodkować albo dać w dolnej linii.
    Albo zmień na LCD graficzny np KS0108 albo T6963c i tam takich ograniczeni nie ma :D
  • #3 9436554
    piotrva
    VIP Zasłużony dla elektroda
    A właśnie że się da!
    Trzeba tylko umiejętnie skorzystać z możliwości zdefiniowania własnych znaków na lcd... Swego czasu na forum był taki zegarek na dwie linie, tak jak kolega chce
  • #4 9436562
    Buster1994
    Poziom 15  
    Da się na 1000% ponieważ przed tym miałem tzw "piórnik ściągę" i pokazywało temperaturę i czas w 2 linijkach jakby jako jedna. Tylko właśnie nie wiem jak to dokładnie napisać ponieważ nie mogę ogarnąć tego w kodzie z tego "piórnika" Teraz chcę żeby tak pokazywało tylko temperaturę.

    Ogólnie ten "piórnik ściągę" rozpatroszyłem na części pierwsze żeby stworzyć termometr do pieca CO bo ogólnie ściągi mi już nie potrzebne :)


    P.S. O Znalazłem nawet zdjęcie z owym zegarem i temperaturą właśnie w tym "piórniku" :
    [ATMEGA8][Bascom] Termometr wyświetlanie na całym ekranie.

    P.S.2. Tu jest kod właśnie tego piórnika. Wcale nie widzę tam jakiejś definicji własnych znaków. Gdyby ktoś wychwycił te momentu w kodzie które muszę wkleić do mojego kodu był bym bardzo wdzięczny !

    
    '******************************************************************************'
    '*       Program Piórnik Mini wersja 1.0 Beta                                 *'
    '* Pomysł: FICU                                                               *'
    '* Programista: Jacek R (Black Jack)  Kompilator: BASCOM AVR                  *'
    '* Procesor: ATMega8 - 8 MHz.                                                 *'
    '* EEPROM: 24c64                      LCD: 2 linie po 16 znaków               *'
    '******************************************************************************'
    ' konfiguracja dla kompilatora
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    ' konfiguracja urządzeń CPU
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pinc.2 , Db5 = Pinc.3 , Db6 = Pinb.2 , Db7 = Pinb.1 , E = Pinc.1 , Rs = Pinc.0
    Config Rc5 = Pind.2
    Config Timer1 = Timer , Prescale = 256
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    ' deklaracja procedur
    On Timer1 Czas_sys
    Declare Sub Godziny
    Declare Sub Wys_czas
    Declare Sub Txt_edit
    Declare Sub Ustaw_czas
    
    ' deklaracje zmiennych
    Dim Address As Byte , Command As Byte
    Dim Godz As Byte
    Dim Minuty As Byte
    Dim Sek As Byte
    Dim Nowy_czas As Bit
    Dim Ekran As Bit
    Dim Gora As Bit
    Dim Dol As Bit
    Dim Odswierz As Bit
    Dim Cykl As Bit
    Dim Wart_bcd As Byte
    Dim Bufor As Byte
    
    Dim Adr_eep As Word At &H69                                 'Taka nietypowa zmienna
    Dim Adr_low As Byte At &H69 Overlay                         'jest jedna?, mimo iż
    Dim Adr_hi As Byte At &H6A Overlay                          'zdefiniowano 3.
    Dim I As Byte
    
    ' deklaracje stałych
    Const Piornik_id = 0
    Const Podst_czasu = 49911                                   'przedtem 34286
    Const In_eep = 160                                          'Adresy dla EEPROM
    Const Out_eep = 161
    Const Max_eep = 8160
    Const Null = 0
    Deflcdchar 0 , 28 , 8 , 8 , 30 , 5 , 6 , 5 , 32             'Def ikony IRed
    
    ' program główny
    Enable Interrupts
    Enable Timer1
    Stop Timer1
    Set Nowy_czas
    Reset Ekran
    Counter1 = Podst_czasu
    Call Ustaw_czas
    Start Timer1
    Cursor Off
    Cls
    Adr_eep = 0
    Odswierz = 0
    Set Cykl
    Do
       If Nowy_czas = 1 And Ekran = 0 Then
          Call Godziny
          Call Wys_czas
       End If
       If Nowy_czas = 1 And Ekran = 1 Then
          Call Godziny
          If Gora = 1 And Adr_eep <= Max_eep Then
             Adr_eep = Adr_eep + 16
             Reset Gora
          End If
          If Dol = 1 And Adr_eep > 15 Then
             Adr_eep = Adr_eep - 16
             Reset Dol
          End If
          If Odswierz = 1 Then
             Call Txt_edit
             Odswierz = Not Odswierz
          End If
       End If
       Getrc5(address , Command)
       Command = Command And &B01111111
       Select Case Command
       Case 11 : Ekran = Not Ekran
                 Set Odswierz
                 Cls
       Case 12 : If Ekran = 1 Then
                   Set Gora
                   Set Odswierz
                  End If
       Case 13 : If Ekran = 1 Then
                   Set Dol
                   Set Odswierz
                  End If
       End Select
    Loop
    End                                                         'end program
    
    ' opis procedur
    Czas_sys:
       Counter1 = Counter1 + Podst_czasu
       Cykl = Not Cykl
       If Cykl = 1 Then
          Incr Sek
       End If
       Set Nowy_czas
    Return
    
    Sub Godziny
       If Sek = 60 Then
          Sek = 0
          Incr Minuty
          If Minuty = 60 Then
             Minuty = 0
             Incr Godz
             If Godz = 24 Then
                Godz = 0
             End If
          End If
       End If
    End Sub
    
    Sub Wys_czas
          Locate 1 , 5
          Wart_bcd = Makebcd(godz)
          If Godz < 10 Then
             Lcd " " ; Wart_bcd ; ":"
          Else
             Lcd Bcd(wart_bcd) ; ":"
          End If
          Wart_bcd = Makebcd(minuty)
          Lcd Bcd(wart_bcd) ; ":"
          Wart_bcd = Makebcd(sek)
          Lcd Bcd(wart_bcd) ;
          Locate 1 , 16
          Lcd Chr(0)
          Lowerline
          Reset Nowy_czas
    End Sub
    
    Sub Txt_edit
       Home Upper
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cstart
       I2cwbyte Out_eep
       For I = 1 To 32
          I2crbyte Bufor , Ack
          If I = 17 Then
             Lowerline
          End If
          If Bufor < 128 Then
             Lcd Chr(bufor)
          Else
             Lcd " "
          End If
       Next I
       I2crbyte Bufor , Nack
       If Bufor < 128 Then
          Lcd Chr(bufor)
       Else
          Lcd " "
       End If
       I2cstop
       Reset Nowy_czas
    End Sub
    
    Sub Ustaw_czas
       Cls
       Call Wys_czas
       Lcd " Ustaw godzine"
       Do
          Getrc5(address , Command)
          Command = Command And &B01111111
          Select Case Command
          Case 11 : Incr Sek
                     If Sek = 60 Then
                        Sek = 0
                     End If
          Case 12 : Incr Minuty
                     If Minuty = 60 Then
                        Minuty = 0
                     End If
          Case 13 : Incr Godz
                     If Godz = 24 Then
                        Godz = 0
                     End If
          End Select
          Waitms 250
          Call Wys_czas
          Lcd " Ustaw godzine"
       Loop Until Command = 10
    End Sub
  • #5 9436586
    piotrva
    VIP Zasłużony dla elektroda
    No to wrzuć kod tego piornika.
    I pomyśl nad tym zdefiniowaniem znaków, bo to nie trudne;-)
  • #6 9437028
    Buster1994
    Poziom 15  
    Nie mam pojęcia jak te znaki definiować. A może ktoś już znalazł w tym kodzie te linijki które musiałbym wpisać w kod termometru ?

    Chwila chwila... To nie ten kod wam wysłałem... Tu jest prawidłowy i te znaki chyba są tam zdefiniowane :) Tylko prosił bym o wyszczególnienie dokładnie najpotrzebniejszych znaków do pokazywania Temperatury :)

    Kod: text
    Zaloguj się, aby zobaczyć kod


    To jest prawidłowy kod z tego piórnika który pokazywał zegar na całym wyświetlaczu .
  • #7 9444186
    Snikers
    Poziom 24  
    To jeszcze podepnę się z moją czcionką





    [ATMEGA8][Bascom] Termometr wyświetlanie na całym ekranie. [ATMEGA8][Bascom] Termometr wyświetlanie na całym ekranie.
REKLAMA