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

2x DS1820 + Bascom AVR+ LCD 2x16 Odczyt na osobnych portach.

ShEvU_elektro 22 Lis 2005 22:07 10896 18
REKLAMA
  • #1 2016668
    ShEvU_elektro
    Poziom 25  
    Posty: 995
    Pomógł: 26
    Ocena: 22
    Witam.

    Mam problem ponieważ niewiem jak to zrobić :/. W ostateczności moze być z jednego portu ale żeby można było "nazwać" temperatury np. "Na zewnatrz" mam taki program ale wyświetla temp w osobnych liniach i zawsze nazwa "temp:' Prosze o pomoć bo zupełnie niewiem jak to zrealizować. :(

    w załączniku program

    Pozdrawiam
    Załączniki:
    • program.txt (1.82 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 2016983
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    A po co takie cuda?
  • #3 2017015
    ShEvU_elektro
    Poziom 25  
    Posty: 995
    Pomógł: 26
    Ocena: 22
    Chce zrobić sobie termometr taki :) temp. na zewnatrz i wewnątrz :)
  • #4 2017142
    ImPuLs
    Poziom 23  
    Posty: 567
    Pomógł: 64
    Ocena: 36
    Jeżeli mają być tylko 2 czujniki to spróbuj pętlę główną zmienić na poniższą:
    
     Do
     Home
     Call Odcz_temp(1)
    
       If Temperatura(2) = 0 Then
          Lcd "Wewn :  " ; Temperatura(1) ; Chr(0) ; "C"
          Else
          Lcd "Wewn : -" ; Temperatura(1) ; Chr(0) ; "C"
        End If
    
     Lowerline
    
     Call Odcz_temp(2)
       If Temperatura(2) = 0 Then
          Lcd "Zewn :  " ; Temperatura(1) ; Chr(0) ; "C"
          Else
          Lcd "Zewn : -" ; Temperatura(1) ; Chr(0) ; "C"
       End If
     Loop
     End
    
  • REKLAMA
  • #5 2028070
    ShEvU_elektro
    Poziom 25  
    Posty: 995
    Pomógł: 26
    Ocena: 22
    niestety wywala błedy w linijkach odcz_temp1 i odcz_temp2 :(. Nieiwme jak to rozwiązać :(. Zależy mi aby były różne nazwy czujnikow
  • #6 2028263
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    ShEvU_elektro napisał:
    niestety wywala błedy w linijkach odcz_temp1 i odcz_temp2 :(. Nieiwme jak to rozwiązać :(. Zależy mi aby były różne nazwy czujnikow

    W temacie piszesz ... Odczyt na osobnych portach , a w kodzie masz je na wspólnej magistrali , więc pytam jak to ma być :?:

    Piotrek
  • #7 2028540
    ShEvU_elektro
    Poziom 25  
    Posty: 995
    Pomógł: 26
    Ocena: 22
    Może być na osobnych ale nie musi :) ważne aby można było "nazywac" czujniki czyli "zew" "wew"
  • #8 2029484
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    To może spróbuj cos takiego:
    
    ...
    Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32
    
    Dim T1 As Integer , K As Byte , L As Byte
    
    
    Dim Status As Eram Byte At 1
    Dim Eid(16) As Eram Byte At 2
    
    Main:
    Cls
    Do
    L = 0
    '--------------------
    For K = 1 To 9 Step 8
    Home
    1wverify Eid(k)       'sprawdź , czy układ o podanym ID  ,podłączony jest do magistrali 1wire
       If Err = 1 Then
          Cls
          Lcd "Error" ;
          Wait 1
       Else
          1wreset
          1wwrite &H55       'match rom j/n
          1wwrite Eid(k) , 8       'podaję ID
          1wwrite &H44       'convert  - wykonać pomiar temperatury
          Waitms 800       'parasite power - zasilanie linia DQ
          1wreset
          1wwrite &H55       'zaraz podam ID układu , z którym chcę "rozmawiać"
          1wwrite Eid(k) , 8       'podaję ID
          1wwrite &HBE       'będę odczytywał Scratchpad układu , którego ID podałem
          T1 = 1wread(2)
          T1 = T1 / 2
          Lcd Lookupstr(L , Lcdstr)
          Lcd T1 ; Chr(1) ; "C   "
          Incr L
    
    End If
    Next K
    '--------------------
    Loop
    
    $eeprom
    Data 0 , 0
    Tz:
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8       'ID termometru zewn.
    Tw:
    Data 9 , &H0A , &H0B , &H0C , &H0D , &H0E , &H0F , &H10       'ID termometru wewn.
    $data
    Lcdstr:
    Data "Tzewn:" , "Twewn:"
    
    

    Niestety , ale ID DS-ów musisz odczytać i wpisać jako dane w DATA dla eepromu , lub rozbudować program o ich konfigurację :(
    To taki powiedzmy "punkt wyjściowy" ;)

    Piotrek

    PS
    Przy programowaniu procka , nie zapomnij zaprogramować jego wewnętrznego EEpromu.
  • REKLAMA
  • #9 2642044
    maniio
    Poziom 14  
    Posty: 149
    Pomógł: 3
    Ocena: 9
    Dopisze sie do tego tematu po podobny do mojego problemu...

    zrobilem sobie termometr i na jednym czujniku dziala swietnie ale podlaczylem drugi i zmienilem program i jest jakas lipa :/

    sprawdzam czy widzi 2 czujniki i program pokazuje ze 2 czujniki sa, ale nic mi nie wyswietla :( wiecie moze co moze byc przyczyna?

    
    Liczba_ukl = 1wirecount()                   
    If Liczba_ukl > 0 Then
       Id(1) = 1wsearchfirst()
       For I = 1 To 8
          Writeeeprom Id(i) , I
       Next I
    End If
    
    If Liczba_ukl > 1 Then
       Id(1) = 1wsearchnext()
       J = 0
          For I = 9 To 16
             Incr J
             Writeeeprom Id(j) , I
          Next I
    End If
    
    do
    
    Call Odcz_temp
             setfont font8x8
             Lcdat 1 , 1 , "" ; Liczba_ukl                     'wyswietla mi 2 czyli obydwa czujniki sa oki.....
             If Temperatura(2) = 0 Then
                Lcdat 4 , 20 , "" ; Temperatura(1)
             Else                                               'wyświetla temperatury ujemne
                Lcdat 4 , 20 , "-" ; Temperatura(1)
             End If
    loop
    end
    '--------------------------------------------------
    Sub Odcz_temp
    
          For I = 1 To 8
             Readeeprom Id(i) , I
          Next I
    
       1wreset
       Call Zapisz_id
       1wwrite &H44
       Waitms 750
       1wreset
       Call Zapisz_id
       1wwrite &HBE
    
       Temperatura(1) = 1wread(2)
       1wreset
       If Temperatura(2) > 0 Then
          Temperatura(1) = 256 - Temperatura(1)
       End If
       Temperatura(1) = Temperatura(1) / 2
    End Sub
    '--------------------------------------------------
    Sub Zapisz_id
    
       1wwrite &H55
       For I = 1 To 8
          1wwrite Id(i)
       Next I
    End Sub
    


    wszystkie zmienne sa tylu byte nie potrafie znales bledu :(
    program sie kompliluje oczywiscie....
  • REKLAMA
  • #10 2642529
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    A powiedz mi co to jest za twór :?:
    
    subwoofer Zapisz_id
       1wwrite &H55
       For I = 1 To 8
          1wwrite Id(i)
       Next I
    End subwoofer 
    

    Bo to mi nie wygląda ani na etykietę , ani na funkcję , a tym bardziej na podprogram i w żaden sposób nie mogę TEGO skompilować , w takiej postaci :(

    Piotrek

    PS
    Zajrzyj tu:
    http://www.mcselec.com/index.php?option=com_content&task=view&id=75&Itemid=57
  • #11 2644701
    maniio
    Poziom 14  
    Posty: 149
    Pomógł: 3
    Ocena: 9
    program spisalem z ksiazki "Programowanie AVR w jezyku Bascom" autor takie cos sobie wymyslil, ja dopiero sie ucze dlatego przerobilem go do swoich potrzeb ale za "chiny ludowe" nie wiem dlaczego nie chce mi wyswietlic mierzonej temperatury, powtarzam ze program kompiluje mi sie wiec nie wiem w czym problem.... :/

    co do linku ktory kolega mi dal to bardzo dziekuje, wlasnie go analizuje i byc moze uda mi sie uruchomic....

    edit 1

    mam pytanko, czy musze zapisywac numer ID do pamieci EEPROM?

    [b]edit2[/]

    no to juz wiem ze nie musze program dzila, napisalem w oparciu o program z podanego wyzej linku i jest OK :)

    pozdrawiam i dziekuje
  • #12 2654103
    Konto nie istnieje
    Konto nie istnieje  
  • #13 3052410
    Chivo
    Poziom 27  
    Posty: 1325
    Pomógł: 81
    Ocena: 130
    witam

    wgralem sobie ten 1 program po zmianach ofkoz na swoje ustawienia i wyswietla mi ze czujnik komunikuje sie z prockiem tylko temp to -0 stopni i nic sie nie zmienia. Uklada sklada sie z Atmegi8, czujnika ds18b20 (narazie testuje na jednym, docelowo 3) i LCD-eka. Czy ktos mial cos podobnego i jak rozwiazal ten problem?
  • #14 3053314
    wielebny_xxl
    Poziom 12  
    Posty: 10
    Pomógł: 5
    Witam
    Dzis dopracowalem do wlasnych potrzeb kod, ktory jest na wspolnym porcie, gdzies znalazlem, nawet dziala :D. Ale mam male obiekcje co do przejscia temperatury z plus na minus lub z minus na plus, ma dziwne odczyty, jesli ktos zna rozwiazanie to prosze o info
    Pozdrawiam
    Załączniki:
    • ds1820 2 x sensor.txt (7.08 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 3176633
    Konto nie istnieje
    Konto nie istnieje  
  • #17 3182453
    Konto nie istnieje
    Konto nie istnieje  
  • #19 4036399
    schutters
    Poziom 11  
    Posty: 19
    Ocena: 2
    może się przyda ja mam coś takiego i napewno działa

    
    $large
    Config Lcdpin = Pin , Db4 = P0.0 , Db5 = P0.1 , Db6 = P0.2 , Db7 = P0.3 , E = P0.4 , Rs = P0.5
    Config Lcd = 16 * 2
    Dim Bd(9) As Byte
    Dim X As Byte , Tmp As Byte
    Dim T As Integer , T1 As Integer
    Declare Sub Ds1
    Declare Sub Ds2
    Declare Sub Ds
    Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32
     Reset P0.6
     Reset P3.2
     Reset P3.3
    Cls
    Cursor Off
    Do
       1wwrite &HCC P3.5 : 1wwrite &H44 P3.5
          Call Ds1
             Home
                Lcd "PIEC:" ; "     " ; T ; Chr(0) ; "C"
                   Home
                      Locate 1 , 10
                         Lcd X ; ","
       1wwrite &HCC P3.6 : 1wwrite &H44 P3.6
          Call Ds2
             Home
                Lowerline
                   Lcd "BOJLER:" ; "   " ; T ; Chr(0) ; "C"
                      Home
                         Lowerline
                            Locate 2 , 10
                               Lcd X ; ","
    Loop
    Sub Ds1
    Waitms 250
    Waitms 100                                                    ' T for 0.1 C
       1wreset P3.5                                               ' reset the bus
       1wwrite &HCC P3.5                                          ' read internal RAM
       1wwrite &HBE P3.5                                          ' read 9 data bytest
       Bd(1) = 1wread(9 , P3.5)
       1wreset P3.5                                               'P3.6                                               ' read bytes in array
       Call Ds
    End Sub
    
    Sub Ds2
    Waitms 250
    Waitms 100                                                    ' T for 0.1 C
       1wreset P3.6                                               ' reset the bus
       1wwrite &HCC P3.6                                          ' read internal RAM
       1wwrite &HBE P3.6                                          ' read 9 data bytest
       Bd(1) = 1wread(9 , P3.6)
       1wreset P3.6                                               'P3.6                                               ' read bytes in array
       Call Ds
    End Sub
    Sub Ds
          Tmp = Bd(1) And 1                                       ' 0.1C precision
          If Tmp = 1 Then Decr Bd(1)
          T = Makeint(bd(1) , Bd(2))
          T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
          T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
          X = T / 10
    End Sub
    

Podsumowanie tematu

✨ Dyskusja dotyczy realizacji odczytu temperatury z dwóch czujników DS1820 (DS18B20) podłączonych do mikrokontrolera AVR programowanego w Bascom z wyświetlaczem LCD 2x16. Autor chciał uzyskać wyświetlanie temperatur z dwóch czujników na osobnych portach lub wspólnej magistrali 1-Wire, z możliwością nadawania indywidualnych nazw ("zewnętrzny", "wewnętrzny"). Pojawiły się problemy z implementacją funkcji odczytu temperatury dla dwóch czujników, błędy w linijkach kodu oraz nieprawidłowe wyświetlanie wartości. Wskazano, że czujniki DS1820 mogą być podłączone do jednej magistrali 1-Wire, a rozróżnienie odbywa się poprzez unikalne ID każdego czujnika. Zaproponowano przykładowe fragmenty kodu w Bascom, które realizują odczyt temperatury z dwóch czujników i wyświetlanie ich z przypisanymi nazwami na LCD. Poruszono też kwestie zapisu ID czujników do pamięci EEPROM, który nie jest konieczny. Wskazano na problemy z odczytem temperatur ujemnych i konieczność uwzględnienia korekcji CRC. Użytkownicy dzielili się fragmentami kodu i linkami do materiałów pomocniczych. W dyskusji pojawiły się przykłady konfiguracji pinów LCD, obsługi magistrali 1-Wire oraz implementacji funkcji pomiaru temperatury dla kilku czujników DS1820/DS18B20 pod mikrokontrolerem AVR z Bascom.
Wygenerowane przez model językowy.
REKLAMA