DS1820 i stała temperatura

Mój DS1820 podpięty pod 2051 pokazuje ciągle 85.0 stopni. O co mu chodzi, może zbyt mocno go podgrzałem przy lutowaniu ?

Longos

Listnig programu w Bascom-ie:

'Praca dyplomowa ' BASCOM College ' (EdW 2001.01 str. 20)

' Temat : "Termometr z Dallas DS1820" ' wersja 1.1 (20.03.2001) ' Compiler : BASCOM 8051 LIBRARY V 2.06 ' Used ROM : &H7A3 1955 (dec) > Ok

' Poprawki do ver. 1.0: ' - poprawiony błąd odczytu temp > 41,5 st.C (bo Waitms działa tylko dla wartości 1-255) ' - optymalizacja kodu (skrócenie): ' - przerzucenie polecenia 1Wreset do podprocedury skróciło program o 15 bajtów ' - drobna poprawka procedury wyświetlania temperatury (Wysw_temp)

'Części składowe: ' TEST BOARD AVT-2500 z AT89C2051 i LCD, ' DS1820 na magistrali 1WIRE

'Autor : ' Artur Schwartz ' snipped-for-privacy@rumia.edu.pl ' (058) 671-52-30

' Konfiguracja sprzętowa : 1WIRE, LCD

' 1 Wire: ' P 1.0

' LCD: ' RS - P1.2 ' EN - P1.3 ' DB4 - P1.4 ' DB5 - P1.5 ' DB6 - P1.6 ' DB7 - P1.7

' 1 Wire commands: ' 1. Read ROM - 33h ' 2. Match ROM - 55h ' 3. Search ROM - F0h ' 4. Skip ROM - CCh ' 5. Alarm Search - ECh ' Convert T - 44h ' Read Scratchpad - BEh ' WriteScratchpad - 4Eh ' Copy Scratchpad - 48h ' Recall E2 - B8h ' Read Power Supl - B4h

' Konfiguracja programowa : Config 1wire = P1.0 ' wskazanie kompilatorowi do którego pinu podłączamy magistralę Config Lcd = 16 * 1a 'wyświetlacz LCD Deflcdchar 0 , 238 , 234 , 238 , 224 , 224 , 224 , 224 , 224 'definicja symbolu "stopień"

' Zmienne Dim Is_device As Bit 'zmienna wskazująca czy na magistrali jest urządzenie Dim Number(8) As Byte 'tu przechowamy serial number urządzenia

Dim T(2) As Byte 'tu przechowamy odczytaną wartość z DS1820 Dim X As Byte Dim R As Byte Dim Temp As Single 'wartość temperatury po przekształceniach Dim Str_temp As String * 5 'string do wyświetlenia temperatury

' Stałe Const R_rom = &H33 '1. Read ROM - 33h Const Con_t = &H44 'Convert - 44h Const M_rom = &H55 '2. Match ROM - 55h Const R_src = &HBE 'Read Scratchpad - BEh

' Komunikaty Const Kom_1 = "Termometr 1.1" 'Komunikat powitalny Const Kom_2 = "Temp. :" Const Minus = "-" Const Celcj = "C" 'symbol stopni CELCJUSZA Const Err_1 = "Error: " 'komunikat błędu - np. przerwa na 1WIRE Const Err_2 = "No Device !" 'komunikat błędu - brak urządzenia

'Deklaracje procedur Declare Sub Read_numbers 'Odczytaj SerialNumber urządzenia Declare Sub Pomiar_temp 'Dokonaj pomiaru temperatury Declare Sub Match_rom 'Wywołaj urządzenie na magistrali Declare Sub Wysw_temp 'Konwertuj/wyświetl odczytaną wartość Declare Sub 1w_reset

' Początek programu Cls Is_device = 1 'Na początek zakładamy, że urządzenie jest na magistrali Cursor Off Lcd Kom_1 'Powitanie Wait 1 Cls Cursor Off

Lcd Kom_2

Do 'początek pętli programowej 1w_reset 'inicjacja magistrali 1WIRE If Err = 1 Then 'jeżeli żaden układ nie odpowiedział 'na wezwanie to: Is_device = 0 ' brak urządzenia Cls ' wyczyść wyświetlacz Lcd Err_1 ; Err_2 ' wyświetl komunkikat Waitms 250 ' zaczekaj 250 ms Else Call Read_numbers 'przeczytaj serial układu 1WIRE Call Pomiar_temp 'Odczytaj temperaturę Call Wysw_temp 'Wyświetl odczytaną wartość na LCD End If Loop ' Koniec programu

'Procedury

Sub Read_numbers 'Odczytaj/zapamiętaj SerialNumber urządzenia

If Is_device = 0 Then 'jeśli był poprzednio wyświetlony błąd Cls Lcd Kom_2 ' wyczyść teksty i już nie rób "czyszczenia" Is_device = 1 ' wyświetlacza następnym razem End If 1wwrite R_rom 'żądanie podania przez odnaleziony 'układ jego numeru seryjnego For R = 1 To 8 Number(r) = 1wread() 'odczytaj z magistrali 1WIRE kolejne 'bajty numeru układu i zapamiętaj Next R End Sub

Sub Pomiar_temp 'Dokonaj pomiaru temperatury

1w_reset 'inicjacja magistrali 1WIRE Call Match_rom 'Wybierz konkretne urządzenie 1wwrite Con_t 'Convert T Waitms 250 'Idle DS1820 Waitms 250 'Idle DS1820 (w sumie 500 ms) 1w_reset 'inicjacja magistrali 1WIRE Call Match_rom 'Wybierz konkretne urządzenie 1wwrite R_src 'żądanie odczytania temperatury T(1) = 1wread() 'odczytaj z magistrali 1WIRE 1 bajt T(2) = 1wread() 'odczytaj z magistrali 1WIRE 2 bajt 1w_reset 'inicjacja magistrali 1WIRE End Sub

Sub Match_rom 'Wywołaj urządzenie na magistrali

1wwrite M_rom 'Żądanie "Match ROM" For R = 1 To 8 1wwrite Number(r) ' dla urządzenia o SerialNum. If Err = 1 Then 'jeżeli Błąd Is_device = 0 ' ustaw Brak_Urządzenia Cls ' wyczyść wyświetlacz Lcd Err_1 ; R ' wyświetl komunkikat Wait 1 ' chwilkę zaczekaj/wyświetlaj End If Next R End Sub

Sub Wysw_temp 'Konwertuj/wyświetl odczytaną wartość

Locate 2 , 2 If T(2) = 0 Then 'Temperatury dodatnie Temp = T(1) / 2 ' oblicz temperaturę Else 'Temperatury ujemne X = 256 - T(1) ' oblicz temperaturę Temp = X / 2 ' oblicz temperaturę Lcd Minus ' znak "minus" dla ujemnych End If Str_temp = Fusing(temp , ###.&) ' przekształć do string Lcd Str_temp ; Chr(0) ; Celcj ; " " 'Wyświetl temperaturę End Sub

Sub 1w_reset ' dla skrócenia kodu 1wreset End Sub

Reply to
Longos
Loading thread data ...

..

..

Witam. Ciągłe wskazania +85 C oznacza tylko jedno: za mało czasu na konwersję temperatury.Daj 750 ms i powinno byc ok.

Pzdr. Piotrek Sz.

Reply to
Piotrek Sz.

... lub coś z zasilaniem. mi się kiedyś uszkodził termometr i działał tylko przy zasilaniu pasożytniczym. przy 3 przewodach pokazywał właśnie

85st czyli wartośc domyślną.

PC

Reply to
Pablo C

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.