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

Termostat z DS1820 i AT89C2051 - problem z wysokim stanem na pinie 8

tgrabka 13 Wrz 2004 19:02 5488 7
REKLAMA
  • #1 850831
    tgrabka
    Poziom 14  
    Posty: 147
    Ocena: 12
    Mam mały problem. Chciałem przy wykorzystaniu czujnika DS1820 i AT89C2051 zrobić dość dokładny termostat. Jednak mam pewne problemy z kodem źródłowym. gdyż na pinie 8 atmela cały czas mam stan wysoki i nie wiem gdzie jest problem. Może ktoś z was potrafiłby mi pomóc?

    Oto kod źródłowy programu.

    Config 1wire = P3.3
    Declare Sub Read1820
    Dim Bd(9) As Byte
    Dim I As Byte , Tmp As Byte
    Dim T As Integer , T1 As Integer
    Dim X As Byte
    Dim T0 As Integer 'temp włączania grzałki
    Reset P3.4

    Do
    T0 = 160
    1wwrite &HCC : 1wwrite &H44
    Call Read1820
    Waitms 400
    Cls
    If T <= T0 Then
    Set P3.4
    Waitms 100
    Else
    Reset P3.4
    Waitms 100
    End If
    Loop
    End


    Sub Read1820 ' reads sensor ans calculate
    Waitms 250
    Waitms 100 ' T for 0.1 C
    1wreset ' reset the bus
    1wwrite &HCC ' read internal RAM
    1wwrite &HBE ' read 9 data bytest
    Bd(1) = 1wread(9) ' read bytes in array
    1wreset ' reset the bus
    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


    W załączniku podesłałem jeszcze sposób podłączenia czujnika do Atmela.
    Załączniki:
    • Termostat z DS1820 i AT89C2051 - problem z wysokim stanem na pinie 8 dspodl.jpg (70.35 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 851022
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    tgrabka napisał:
    Mam mały problem. Chciałem przy wykorzystaniu czujnika DS1820 i AT89C2051 zrobić dość dokładny termostat. Jednak mam pewne problemy z kodem źródłowym. gdyż na pinie 8 atmela cały czas mam stan wysoki i nie wiem gdzie jest problem. Może ktoś z was potrafiłby mi pomóc?

    Oto kod źródłowy programu.
    ...
    1wwrite &HCC : 1wwrite &H44
    ...


    Witam.

    1)Przed powyższym brak "1wreset"
    2)Dlaczego zakładasz że komunikacja na magistrali jest bezbłędna.

    To na razie tyle.

    Pzdr.
    Piotrek Sz.
  • REKLAMA
  • #3 857263
    tgrabka
    Poziom 14  
    Posty: 147
    Ocena: 12
    Niestety moj problem nadal trwa. Przez chwile bylo OK, ale znow cos sie popsulo. Tym razem w zalaczniku przesylam kod zrodlowy dla Bascoma i spisany w notatniku.

    Problem wciaz mam z zadzialaniem ukladu. Jako temperature minimalna ustawiam 30 stopni. Uklad startuje i na pinie 11 mam 5V (P3.7) czyli wedlug ukladu temperatura przekroczyla 30 stopnii chociaz jest z pewnoscia nizsza od niej. Pin 9 (P3.5) ma stan 0 czyli czujnik dziala. Gdy odlacze DS1820 pokazuje sie tam 5V czyli ta czesc programu dziala. Poza tym sam czujnik tez dziala gdyz podlaczylem go do komputera i lampomittari wykrywa czujnik i pokazuje temperature z niego.

    Co moze byc moim problemem. Prosze o jakas pomoc bo juz sobie wlosy z glowy rwe, a nie wiem co robie zle. Moze to jakis drobny blad w programie ktory przeoczylem...
    Załączniki:
    • termostat.zip (1.36 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 857593
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    masz przynajmniej 2 błędy w programi
    1- sterowanie termostatem jest za pomoca zmiennej TO i deklarujesz wartosc zmiennej 300 czyli 30.0 st C a obliczasz na ds-ie zmienna T
    2- jesli masz czujnik DS18B20 to masz błedne odczytanie temperatury z ds-a
    a na koniec dobra rada przesiadz sie z 51 na AVR-y bo 2k pamieci to moze byc malo na dobry termostat pisany w bascomie
  • REKLAMA
  • #5 857674
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    jacur napisał:
    masz przynajmniej 2 błędy w programi
    1- sterowanie termostatem jest za pomoca zmiennej TO i deklarujesz wartosc zmiennej 300 czyli 30.0 st C a obliczasz na ds-ie zmienna T
    2- jesli masz czujnik DS18B20 to masz błedne odczytanie temperatury z ds-a
    a na koniec dobra rada przesiadz się z 51 na AVR-y bo 2k pamieci to moze byc malo na dobry termostat pisany w bascomie


    Witam.
    I gdzie niby te 2 błędy :?:
    1) W T temperatura z DS-a ,a w T0 temperatura odniesiania i gdzie jest błąd :?:
    2) Kolega napisał że ma DS1820.


    Wymień kwarc na 11059200 :idea:

    Pzdr.
    Piotrek Sz.
  • REKLAMA
  • #6 857894
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    spróbuj wpisac ten program do procka za konwersje z DS-a nie odpowiadam bo uzywam DS18b20 a tam jest to prostsze ale reszta powinna dzialac

    $crystal = 12000000

    Declare Sub Read1820

    Dim Bd(9) As Byte
    Dim I As Byte , Tmp As Byte
    'Dim Crc As Byte
    Dim T As Integer , T1 As Integer
    Dim T0 As Integer
    Dim X As Integer

    Config 1wire = P3.3 ' DS1820 na PIN 7
    Reset P3.4 ' T0 > T
    Reset P3.5 ' blad DS1820
    Reset P3.7 ' T0 < T


    T0 = 300

    Do
    Waitms 100
    CCall Read1820
    'Waitms 400

    If Err = 1 Then ' if there is no sensor
    Set P3.5
    Else
    reset p3.5
    end if

    If T < T0 Then ' sensor present, check CRC
    Set P3.4
    Reset P3.7
    ' Waitms 400 ' CRC OK, print T*10 on LCD
    Else
    Reset P3.4
    Set P3.7
    ' Waitms 200
    End If
    End If
    Loop
    End


    Sub Read1820 ' reads sensor ans calculate
    1wreset
    1wwrite &HCC : 1wwrite &H44 ' start measure
    Waitms 250
    Waitms 250
    Waitms 250
    1wreset ' reset the bus
    1wwrite &HCC ' read internal RAM
    1wwrite &HBE ' read 9 data bytest
    Bd(1) = 1wread(9) ' read bytes in array
    1wreset ' reset the bus
    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
  • #7 2087313
    grabek_radek
    Poziom 21  
    Posty: 579
    Pomógł: 2
    Ocena: 37
    hmmm sorki, ze sie wtracam ale czegos nie rozumiem wy obliczacie a przynajmniej tak jacur robi ze odczytana wartosc z dallasa dzieli przez 10 , wydaje mi sie ze tutaj jest blad. Powinnismy robic tak jesli mamy postac 9 bitowa z dallasa to najstarszy bit mowi nam jaka jest temp dodatnia czy ujemna reszta czyli 8 bitow mowi nam jaka wartosc czyli jesli mamy 000110010 czyli 9 czyli jest rowne 0 czyli dodatnia 00110010 daje nam 50 dziesietnie dzielimy to jeszcze przez 2 i daje nam wynik 25

    przy ujemnej podobnie 9 bit to bedzie 1 tylko pamietam,y ze otrzymany wynik odejmujemy o 256 i dzielimy przez 2!!!
  • #8 2087442
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    grabek_radek napisał:
    hmmm sorki, ze sie wtracam ale czegos nie rozumiem wy obliczacie a przynajmniej tak jacur robi ze odczytana wartosc z dallasa dzieli przez 10 , wydaje mi sie ze tutaj jest blad. Powinnismy robic tak jesli mamy postac 9 bitowa z dallasa to najstarszy bit mowi nam jaka jest temp dodatnia czy ujemna reszta czyli 8 bitow mowi nam jaka wartosc czyli jesli mamy 000110010 czyli 9 czyli jest rowne 0 czyli dodatnia 00110010 daje nam 50 dziesietnie dzielimy to jeszcze przez 2 i daje nam wynik 25

    przy ujemnej podobnie 9 bit to bedzie 1 tylko pamietam,y ze otrzymany wynik odejmujemy o 256 i dzielimy przez 2!!!

    Ty wyliczasz tylko częśc całkowitą temperatury , a jacur jeszcze część ułamkową , by osiągnąć rozdzialczość 0.1 C dla DS1820.

    Piotrek

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z termostatem opartym na mikrokontrolerze AT89C2051 i czujniku temperatury DS1820, gdzie na pinie 8 mikrokontrolera utrzymuje się nieoczekiwany stan wysoki. Autor zgłasza trudności z kodem źródłowym w Bascomie, wskazując na błędne odczyty temperatury i nieprawidłowe działanie układu sterowania grzałką. W odpowiedziach zwrócono uwagę na brak resetu magistrali 1-wire przed komunikacją, możliwe błędy w interpretacji danych z DS1820 oraz niezgodności w deklaracji i użyciu zmiennych temperatury (T i T0). Sugerowano także zmianę kwarcu na 11,0592 MHz dla poprawy działania. Wskazano, że DS1820 wymaga innego sposobu odczytu temperatury niż DS18B20, a także podkreślono konieczność uwzględnienia bitu znaku i części ułamkowej temperatury dla dokładnych pomiarów. Jeden z uczestników zasugerował przejście na mikrokontrolery AVR ze względu na większą pamięć i łatwiejszą implementację. Wskazano również, że problem może wynikać z błędów w kodzie lub nieprawidłowej obsługi magistrali 1-wire, a także z nieodpowiedniej interpretacji danych temperatury z czujnika DS1820.
Wygenerowane przez model językowy.
REKLAMA