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

Jak dodać 4 czujniki DS18B20 i większy LCD do Atmega8?

Atheo 04 Gru 2007 00:29 1974 5
  • #1 4549411
    Atheo
    Poziom 11  
    Posty: 66
    Ocena: 15
    Witam,

    jestem początkujący w tej dziedzinie mikrokontrolerów.
    Mam poniżej taki wsadzik 2-óch czujników temperatur DS18B20 + wskaźnik napięcia do Atmega8 na wyświetlaczu Lcd 2*16.
    Chciałbym go przerobić na 4-ry takie czujniki temp, czy mógłby ktoś mi w tym pomóc?
    Chciałbym również do tego zmienić wyświetlacz na 4*16 lub 4*20 z podświetleniem (pytanie: który byłby stosowniejszy?)
    A i czy wystarczy Atmega8 do tego czy wypadałoby dać Atmege16?

    Z góry dziękuje za wszystkie odpowiedzi
    Pozdrawiam
    Załączniki:
    • wys4temp.txt (2.98 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 4549422
    nouki
    Poziom 25  
    Posty: 1222
    Pomógł: 28
    Ocena: 96
    
    
    $regfile = "m8def.DAT"                                   
    $crystal = 1000000                                          
    Config Lcdpin = Pin , Db4 = ............
    Config Lcd = 16 * 2 
    ...
    Config 1wire = ....
    .
    .
    .
    
    Config Adc = Single 
    .
    .
    
    .
    
    Termo:
    
    
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                      
       1wwrite &HBE
       I1 = 1wread(2)
    
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)                                       
       1wwrite &HBE
       I2 = 1wread(2)
    
       1wreset
       1wwrite &H55
       1wverify Dsid3(1)                                       
       1wwrite &HBE
       I3 = 1wread(2)
    
       1wreset
       1wwrite &H55
       1wverify Dsid4(1)                                       
       1wwrite &HBE
       I4 = 1wread(2)
                                             
       1wreset      '  onwersja temp dla wszystkich dsow
       1wwrite &HCC
       1wwrite &H44
    Waitms 700
    
    
    
       I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then Cls                                         
        Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1                                             
       Lcd "x" ; Ss ; Chr(0) ;
    
       I2 = I2 * 10
       I2 = I2 / 16
       'If I2 > 0 Then Cls
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "y" ; Ss ; Chr(0) ;
    
       I3 = I3 * 10
       I3 = I3 / 16
       'If I3 > 0 Then Cls
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 9
       Lcd "z " ; Ss ; Chr(0) ;
    
       I4 = I4 * 10
       I4 = I4 / 16
       'If I4 > 0 Then Cls
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 9
       Lcd "q" ; Ss ; Chr(0) ;
    
       If Pind.2 = 1 Then
       Waitms 800
       Cls
       Goto Voltomierz:
       End If
       Goto Termo:
    
    
    voltomierz:
    
    
    ..........
    .
    .
    .
    .
    .
    
       If Pind.2 = 1 Then
       Waitms 800
       Cls
       Goto termo:
       End If
       Goto voltomierz:
    
    



    masz przykład poprzerabiaj program :)

    Program ma taka wadę ze wszystkie czujniki podłączone sa pod jedno 1wire Ty masz pod 2 co w razie uszkodzenia czujnika bądź wymiany nie zamieni bądź nie zrówna temperatur.
    Musisz przypisać dodatkowe 2 wejścia bądź do obecnych 2 przypisać po jeszcze jednym czujniku.
    Dodatkowo przycisk który będzie zmieniał termo z wolto.

    stosując wyświetlacz 16x4 bądź 20x4 nie ma potrzeby zakładania przycisku wszystko wejdzie .....
    Tylko opłacalność ( cena ) stanowi .......... Większych liter nie będzie tylko ze wszystko na jednym ekranie:)

    P.S wiele błędów w tym programie Twoim:)
  • #3 4549427
    Atheo
    Poziom 11  
    Posty: 66
    Ocena: 15
    to ma być wyświetlanie 4 temperatur na raz wraz z napięciem, bez żadnych przycisków :)
    a co do wyświetlacza to napewno trzeba zmienić, tylko nie wiem który byłby lepszy 4*16 czy 4*20..

    przepraszam za błędy, już kod źródłowy poprawiłem, kompiluje się:)
    Załączniki:
    • wys4temp.txt (2.97 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 4549491
    nouki
    Poziom 25  
    Posty: 1222
    Pomógł: 28
    Ocena: 96
    a jeszcze jedno pytanie
    czy nie prosciej i taniej zastosowac wyświetlacz np od 3310??

    
                'ladowanie biblioteki rejestrow dla ATMEGA8
    $regfile = "m8def.dat"
    
    
    'deklaracja kwarca (wewnetrzny 1 MHz )
    $crystal = 1000000
    
    
    'konfiguracja polaczeń LCD oraz wybor typu
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portd.6 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portb.0 , Rs = Portd.7
    Config Lcd = 16 * 2
    
    'konfiguracja piezzo
    Config Pinc.5 = Output
    Reset Portc.5
    
    
    'konfiguracja 1 -wire
    Config 1wire = Portd.2
    Config 1wire = Portd.3
    
    
    Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32        'znak stopnia
    
    
    'zmienne i podprogramy
    Declare Sub Wysw_temp
    Declare Sub Beep
    
    
    'zmienne dotyczace pomiaru temperatur
    Dim B1 As Byte
    Dim B2 As Byte
    Dim R As Byte
    Dim Znak As String * 1
    Dim Tmp As String * 4
    R = 255
    
    
    'zmienne dotyczące pomiaru napiecia
    Dim Channel As Byte
    Dim W1 As Single
    Dim W As Word
    Dim Vol As String * 4
    
     Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    
    
     Do
    
    
       1wreset Pind , 2
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1 = 1wread(2)
    
       1wreset Pind , 2
       1wwrite &H55
       1wverify Dsid2(1)
       1wwrite &HBE
       I2 = 1wread(2)
    
    
         1wreset Pind , 3
       1wwrite &H55
       1wverify Dsid3(1)
       1wwrite &HBE
       I3 = 1wread(2)
    
       1wreset Pind , 3
       1wwrite &H55
       1wverify Dsid4(1)
       1wwrite &HBE
       I4 = 1wread(2)
    
     
       1wreset Pind , 2
       1wwrite &HCC
       1wwrite &H44
    
        1wreset Pind , 3
       1wwrite &HCC
       1wwrite &H44
       Waitms 800
    
     I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then Cls
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "" ; Ss ; Chr(0) ;
    
       I2 = I2 * 10
       I2 = I2 / 16
       'If I2 > 0 Then Cls
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "" ; Ss ; Chr(0) ;
    
       I3 = I3 * 10
       I3 = I3 / 16
       'If I3 > 0 Then Cls
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 5
       Lcd " " ; Ss ; Chr(0) ;
    
       I4 = I4 * 10
       I4 = I4 / 16
       'If I4 > 0 Then Cls
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 5
       Lcd "" ; Ss ; Chr(0) ;
    
    
    Loop
    
  • #5 4550243
    Atheo
    Poziom 11  
    Posty: 66
    Ocena: 15
    nouki napisał:
    a jeszcze jedno pytanie
    czy nie prościej i taniej zastosować wyświetlacz np od 3310??


    co do wyświetlacza od noki to nie chce, już to przemyślałem i chcę to zrobić na wyświetlaczy 4*16 - co do kosztów to nie ma znaczenia ma być ładnie i przejrzyście:)

    tak jak pisałem chcę mieć wszystko na jednym wyświetlaczu, 4 temp i napięcie, a co do czujników jak któryś padnie to trudno, będzie wskazywał 0, wszystkie czujniki mają być niezależne...

    czyli co rozumiem że na Atmega8 spokojnie wystarczy ??

    pozdrawiam i dzięki za zainteresowanie
  • #6 4551854
    nouki
    Poziom 25  
    Posty: 1222
    Pomógł: 28
    Ocena: 96
    one nie beda niezależnie tylko parami po dwa na port bo tak ma program mozna go oczywiscie zmienic:)
REKLAMA