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

Jak podłączyć więcej czujników DS1820 do 89S8252 i wyświetlić na LCD?

marcin_kr7 21 Lip 2006 23:49 2121 13
REKLAMA
  • #1 2840968
    marcin_kr7
    Poziom 11  
    Posty: 40
    Pomógł: 1
    Ocena: 6
    Napisałem w baskomie 8051 coś takiego ale co zrobić żeby podłączyć więcej czujników do tego procka a procek to 89s8252
    Pomocy !


    Cls
    Dim Ar1(9) As Byte , T3 As String * 10 , Tmp As Byte , A As Byte , T1 As Byte
    Dim T As Single

    St:

    Waitms 50

    Config 1wire = P1.1
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &HBE

    Ar1(1) = 1wread(9)

    1wreset


    Tmp = Ar1(1) And 1
    If Tmp = 1 Then Decr Ar1(1)
    T = Makeint(ar1(1) , Ar1(2))
    T = T * 50
    T = T - 25
    T1 = Ar1(8) - Ar1(9)
    T1 = T1 * 100
    T1 = T1 / Ar1(8)
    T = T + T1
    T = T / 100
    T3 = Fusing(t , 00.&&)

    Locate 1 , 1
    Lcd T3


    Goto St
  • REKLAMA
  • #2 2841043
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1060
    to zalezy czy chcesz podlaczyc do jednego pinu to wtedy musisz odczytywac ich seriale lub podlacz kazdy z osobna wtedy powyzszy programik wywolujesz 4 razy za kazdym razem zmieniajac po kazdym poleceniu wwrite wreset numer pinu podajze skladnia jest nastepujaca 1wreset p1.1 1wwrite p1.1
    masz duzy procesor z duza iloscia portow wiec mozesz je podlaczyc osobno. a jesli nie to najpierw w programie zrob sobie mozliwosc odczytu seriali i potem je wywoluj.
  • REKLAMA
  • #3 2841520
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    zawsze możesz użyć czegoś takiego jak multiplekser analogowy CD4057 lub klucze CD4066
    pozdrawiam
  • #4 2841928
    marcin_kr7
    Poziom 11  
    Posty: 40
    Pomógł: 1
    Ocena: 6
    No tak tylko mam wersje demo i w tej chwili okazało się że brakł pamięci morze i w tej kwestii pomrzecie ?
  • #5 2841984
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1060
    no z tymi multiplekserami kolego to juz przesadzileś na CD 4066 to juz mozesz sobie np lm75 przelaczac. magistrala 1wire jest po to aby do jednej koncowki podlaczyc wiele elementow i odczytywac ich seriale lub tak jak napisalem mozna podlaczyc je oddzielnie co wydaje mi sie prostsze jesli tylko sa wolne piny procka z drugiej strony trzeba ciagnac nie potrzebnie kable od kazdego czujnika jesli sa rozlozone dosc rozlegle . przy polaczeniu do jednego pinu mozna je dolaczac rownolegle . kazde rozwiazanie ma swoje zalety i wady.

    Co do bascoma to teraz wersja demo jest do 4kb .a jak ci malo to bede przy kompie kolo 18 to napisz PW to pogadamy moge ci naprzyklad kompilowac twoje programy i nie tylko....
  • REKLAMA
  • #6 2842056
    filip_gd
    Poziom 12  
    Posty: 103
    Pomógł: 1
    Ocena: 2
    Wątek przewijał się już wielokrotnie - poszukaj 2x DS18B20
    różnica między dwoma a 4 czujnikami jest praktycznie żadna pytanie czy starczy ci pamieci ale myślę że powinno.
  • #7 2842416
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Dlatego zaproponowałem multiplekser, mniej pamięci zajmie bo jedna procedura odczyta wszystkie 4 a nawet 15 dallasów.
    Zgadzam się także z faktem , że procek obskoczy bez problemu większą ilość układów 1wire.
    Zastanawiam się jednak dlaczego kolega nie przejdzie na AVR?
    jeżeli programuje w bascomie to żadna różnica, a możliwości nieporównywalne.
  • REKLAMA
  • #8 2842507
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1060
    tez bylbym za przejsciem na avr chociaz posiadam jeden i drugi bascom to do moich zastosowan 20kb pamieci to troche za malo i zazwyczaj stosuje ATMEGA 32 chociaz gdy mi sie program troche rozrosnie to nie wiem czy to juz nie bedzie at128. a tak w ogole to nie moge zaskoczyc z tym multiplekserem bo i tak go musisz sterowac kilkoma pinami nastepna rzecz jest taka jezeli ds beda podlaczone do kilku pinow w tym wypadku 4 to procedure odczytu wywolujesz 4 razy tylko nazwe pinu zmieniamy i bedzie ok. a moze od tych upalow juz nie mysle?
  • Pomocny post
    #9 2842546
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    $large
    Config 1wire = P1.1
    Dim Ar1(9) As Byte , Tmp As Byte , A As Byte , T1 As Byte
    Dim T As Single
    Dim Licznik As Byte
    Dim Temperatura(4) As Integer

    Licznik = 0
    Cls





    Main:

    Waitms 25



    Incr Licznik
    If Licznik = 1 Then
    Config 1wire = P1.1
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Config 1wire = P1.2
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Config 1wire = P1.3
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Config 1wire = P1.4
    1wreset
    1wwrite &HCC
    1wwrite &H44
    End If


    If Licznik = 40 Then
    Config 1wire = P1.1
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Gosub Oblicz_temp
    Temperatura(1) = T
    End If

    If Licznik = 41 Then
    Config 1wire = P1.2
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Gosub Oblicz_temp
    Temperatura(2) = T
    End If

    If Licznik = 42 Then
    Config 1wire = P1.3
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Gosub Oblicz_temp
    Temperatura(3) = T
    End If

    If Licznik = 43 Then
    Config 1wire = P1.4
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Gosub Oblicz_temp
    Temperatura(4) = T
    Licznik = 0
    End If

    Goto Main




    Oblicz_temp:
    Tmp = Ar1(1) And 1
    If Tmp = 1 Then Decr Ar1(1)
    T = Makeint(ar1(1) , Ar1(2))
    T = T * 50
    T = T - 25
    T1 = Ar1(8) - Ar1(9)
    T1 = T1 * 100
    T1 = T1 / Ar1(8)
    T = T + T1
    T = T / 100
    Return


    dawno nie pisałem na 51'
    to powinno zadziałać, robiłem tak kilka lat temu. dorób sobie wyświetlanie temperatur i gotowe.
    nie wstawiaj waitms 750 bo czasami zwolni to cały program.
    mnie nie udało się zmienić portu 1wire w starej wersji bascoma51'
    pewnie, że tak byłoby najprościej.... może ma ktoś pomysł na zmianę portu????
    $large
    Config 1wire = P1.1
    Dim Ar1(9) As Byte , Tmp As Byte , A As Byte , T1 As Byte
    Dim T As Single

    Dim Temperatura(4) As Integer
    Dim C As Byte

    Cls

    C = 1
    Do

    For C = 1 To 4
    Config 1wire = P1.c
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Next
    Waitms 1000
    For C = 1 To 4
    Config 1wire = P1.c
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
    Tmp = Ar1(1) And 1
    If Tmp = 1 Then Decr Ar1(1)
    T = Makeint(ar1(1) , Ar1(2))
    T = T * 50
    T = T - 25
    T1 = Ar1(8) - Ar1(9)
    T1 = T1 * 100
    T1 = T1 / Ar1(8)
    T = T + T1
    T = T / 100
    Temperatura(c) = T
    Next

    Loop
    pozdrawiam
  • #10 2842845
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1060
    wiesz co euromatic musialbym zainstalowac bascoma 8051 ale ten drugi program na pewno ruszy na bascomAVR bo cos podobnego sam robilem ale wlasnie nie wiem czy pojdzie na 8051
  • #11 2843169
    filip_gd
    Poziom 12  
    Posty: 103
    Pomógł: 1
    Ocena: 2
    No właśnie nie rozumiem zamiłowania 8051...
    sam jestem na etapie nauki bascoma
    AVR są o niebo lepsze wedługo mojej opini.
    Chociażby dlatego że ATMEGE128 można kupić za 30zł a 8051 z 128kb pamięci ... ehhh albo majątek albo magistrakla pamięci itd...
    Polecam przejście na avrki pozdr
  • #12 2843232
    janek1815
    Poziom 38  
    Posty: 4513
    Pomógł: 372
    Ocena: 1060
    tez zaczynalem od 8051 ale jak mi braklo pamieci w at4051 to juz sie znim rostalem :)
  • #13 2843300
    filip_gd
    Poziom 12  
    Posty: 103
    Pomógł: 1
    Ocena: 2
    Ja uzywam ATmega128 i chociaż większość programów zużywa mi do 10% pamięci to przy nim zostanę bo jest najbardziej rozwojowy
  • Pomocny post
    #14 2843568
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Jest jeszcze sprawa wydajności prądowej portów, na 51' nie uzyskasz dalekiego zasięgu ( długość kabla dla DS18B20 ). w AVR dajesz rezystor podciągający około 1....1.5k i śmigają, aż miło.
    jeżeli masz wyświetlacz to zrób to komunikacją opartą na numerach seryjnych. To proste i wygodne rozwiązanie.
    pozdrawiam.

Podsumowanie tematu

✨ Dyskusja dotyczy podłączenia wielu czujników temperatury DS1820 (DS18B20) do mikrokontrolera 89S8252 i wyświetlania odczytów na LCD przy użyciu Bascoma 8051. Wskazano, że magistrala 1-wire umożliwia podłączenie wielu czujników do jednego pinu, jednak wymaga odczytu unikalnych numerów seryjnych każdego czujnika. Alternatywnie można podłączyć czujniki do osobnych portów mikrokontrolera i wywoływać procedurę odczytu dla każdego pinu z osobna. Zasugerowano także użycie multiplekserów analogowych CD4057 lub kluczy CD4066 do przełączania sygnałów, choć rozwiązanie to jest mniej popularne i bardziej skomplikowane. Wskazano ograniczenia pamięci w wersji demo Bascoma (4 KB) oraz zalecenia dotyczące przejścia na mikrokontrolery AVR (np. ATmega32, ATmega128) ze względu na większą pamięć i lepsze możliwości, w tym lepszą wydajność prądową portów i łatwiejsze sterowanie magistralą 1-wire. Przykładowy kod pokazuje cykliczne odczytywanie temperatur z kilku pinów, konwersję danych i wyświetlanie na LCD. Podkreślono, że magistrala 1-wire jest zaprojektowana do obsługi wielu urządzeń na jednej linii, co jest wygodne przy rozległym rozmieszczeniu czujników. Zalecane jest stosowanie rezystora podciągającego 1-1.5 kΩ dla poprawy stabilności sygnału i zasięgu magistrali.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA