Problem med DS18B20 temp sensorer.
Hi ,
copy paste error form forum must be this i thnik
Raw_temp= (j2 >>
or j1
@EDIT shl not shf sorry
Kod: Markera allt
copy paste error form forum must be this i thnik
Raw_temp= (j2 >> 8) or j1
Raw_temp= (j2 >>

@EDIT shl not shf sorry
Kod: Markera allt
Raw_temp= (j2 << 8) or j1
Senast redigerad av kimmi 1 juli 2007, 16:37:47, redigerad totalt 2 gånger.
- JimmyAndersson
- Inlägg: 26571
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Det ser ut som om allt fungerar nu.
När jag mäter ifrån sensor 1. ( sensor på labbkort) säger den att det är 25.1
När jag mäter ifrån sensor 2. ( sensor i kylskåpet ) säger den att det är 9,6C
och det kanske kan stämma.
koden som jag använder mig av är följande.
--------------------------
program DS18B20_test
dim Raw_temp as word
TempC, comma as word
i, j1, j2, minus as byte
text as char[14]
main:
'DDRC.3 =1 ' put RW on GND --> PORTC.3=0
'PORTC.3 =0 ' to work on GLCD connector
Lcd_Init(PORTD, 6, 4, PORTA, LCD_HI_NIBBLE)
Lcd_Out(1,1,"Temeperature :")
Lcd_Cmd(LCD_CURSOR_OFF)
do
ow_reset(PORTC,6) ' onewire reset signal
ow_write($CC) ' issue command to DS1820
ow_write($44) ' issue command to DS1820
delay_us(120)
i = ow_reset(PORTC,6)
ow_write($CC) ' issue command to DS1820
ow_write($BE) ' issue command to DS1820
j1 = ow_read ' get result
j2 = ow_read ' get result (assuming the temperature is positive)
minus= j2 >> 3
if minus = $1F then ' Checking temp.(+ or -)
j2= not j2
j1=-j1
end if
Raw_temp= (j2 <<
or j1 ' Getting RAW data
if minus = $1F then
Lcd_Chr(2,1,"-") ' Write temp. sign (+ or -) on LCD
else
Lcd_Chr(2,1,"+")
end if
TempC=(Raw_temp and $0FF0) >> 4 ' WHOLE NUMBER
comma=(j1 and $0F) * 625 ' DECIMAL
WordToStr(TempC,text) ' Write temp. whole number on LCD
Lcd_Chr(2, 2, text[0])
Lcd_Chr(2, 3, text[1])
Lcd_Chr(2, 4, 46) '"."
WordToStr(comma,text) ' Write temp. decimal number on LCD
Lcd_Chr(2, 5, text[0])
Lcd_Chr(2, 6, text[1])
Lcd_Chr(2, 7, text[2])
Lcd_Chr(2, 8, text[3])
lcd_chr(2, 9, 223) ' "degree" character
lcd_chr(2, 10,"C")
Delay_ms(500)
loop until false ' endless loop
end.
--------------------------
När jag mäter ifrån sensor 1. ( sensor på labbkort) säger den att det är 25.1
När jag mäter ifrån sensor 2. ( sensor i kylskåpet ) säger den att det är 9,6C
och det kanske kan stämma.
koden som jag använder mig av är följande.
--------------------------
program DS18B20_test
dim Raw_temp as word
TempC, comma as word
i, j1, j2, minus as byte
text as char[14]
main:
'DDRC.3 =1 ' put RW on GND --> PORTC.3=0
'PORTC.3 =0 ' to work on GLCD connector
Lcd_Init(PORTD, 6, 4, PORTA, LCD_HI_NIBBLE)
Lcd_Out(1,1,"Temeperature :")
Lcd_Cmd(LCD_CURSOR_OFF)
do
ow_reset(PORTC,6) ' onewire reset signal
ow_write($CC) ' issue command to DS1820
ow_write($44) ' issue command to DS1820
delay_us(120)
i = ow_reset(PORTC,6)
ow_write($CC) ' issue command to DS1820
ow_write($BE) ' issue command to DS1820
j1 = ow_read ' get result
j2 = ow_read ' get result (assuming the temperature is positive)
minus= j2 >> 3
if minus = $1F then ' Checking temp.(+ or -)
j2= not j2
j1=-j1
end if
Raw_temp= (j2 <<

if minus = $1F then
Lcd_Chr(2,1,"-") ' Write temp. sign (+ or -) on LCD
else
Lcd_Chr(2,1,"+")
end if
TempC=(Raw_temp and $0FF0) >> 4 ' WHOLE NUMBER
comma=(j1 and $0F) * 625 ' DECIMAL
WordToStr(TempC,text) ' Write temp. whole number on LCD
Lcd_Chr(2, 2, text[0])
Lcd_Chr(2, 3, text[1])
Lcd_Chr(2, 4, 46) '"."
WordToStr(comma,text) ' Write temp. decimal number on LCD
Lcd_Chr(2, 5, text[0])
Lcd_Chr(2, 6, text[1])
Lcd_Chr(2, 7, text[2])
Lcd_Chr(2, 8, text[3])
lcd_chr(2, 9, 223) ' "degree" character
lcd_chr(2, 10,"C")
Delay_ms(500)
loop until false ' endless loop
end.
--------------------------
hi ,
du måste andvenda (code) nær du poster code >>>>
Kan du testa detta
se om det blir helt fejl nu ...
du måste andvenda (code) nær du poster code >>>>

Kod: Markera allt
Raw_temp= (j2 << 8) or j1 ' Getting RAW data
Kod: Markera allt
Raw_temp= (j2 << 8) + j1 ' Getting RAW data
Senast redigerad av kimmi 1 juli 2007, 17:15:31, redigerad totalt 1 gång.
Och ett test till.
Nu funkar det.
Kod: Markera allt
Raw_temp= (j2 << 8) + j1 ' Getting RAW data
Både code-taggen och själva koden fungerar mycket bra.
Ny fråga.
DQ signalen, den som går till PC7 på atmega16. Använder jag ett 10k motstånd.
Enligt information ifrån manualen.
på PC6 har jag en till DS18B20 sensor. den som ligger i kylen just nu.
Den DS18B20 sensorn har en ca 3 meter lång kabel till sig ifrån labbkortet.
Vart är bäst att sätta detta 10k motståndet. och spelar det någon roll vart man sätter det.
EDIT. förtydligande.
mottståndet sitter inte mellan sensorn och ATMega, utan på VCC till kabeln mellan sensorn och ATMega16
alt 1.
<DS18B20 sensor + 10k motstånd> ---------3 meter kabel------- <Atmega16>
alt 2.
<DS18B20 sensor> ------------ 3 meter kabel -------- <10k motstånd + atmega16>
Just nu kör jag på alternativ 1.
det vill säga motståndet sitter vid DS18B20 sensorn ( i kylen) ifrån den går det en 3 meter kabel till labbkortet där ATmega16 sitter
Ny fråga.
DQ signalen, den som går till PC7 på atmega16. Använder jag ett 10k motstånd.
Enligt information ifrån manualen.
på PC6 har jag en till DS18B20 sensor. den som ligger i kylen just nu.
Den DS18B20 sensorn har en ca 3 meter lång kabel till sig ifrån labbkortet.
Vart är bäst att sätta detta 10k motståndet. och spelar det någon roll vart man sätter det.
EDIT. förtydligande.
mottståndet sitter inte mellan sensorn och ATMega, utan på VCC till kabeln mellan sensorn och ATMega16
alt 1.
<DS18B20 sensor + 10k motstånd> ---------3 meter kabel------- <Atmega16>
alt 2.
<DS18B20 sensor> ------------ 3 meter kabel -------- <10k motstånd + atmega16>
Just nu kör jag på alternativ 1.
det vill säga motståndet sitter vid DS18B20 sensorn ( i kylen) ifrån den går det en 3 meter kabel till labbkortet där ATmega16 sitter
Hi ,
vilken a dom code funker
ang: 10 Kohm speller ingen rolle men jeg vill sætta den på avr om noget hender med kablet
vilken a dom code funker
Kod: Markera allt
Raw_temp= (j2 << 8) or j1 ' Getting RAW data
ellse
Raw_temp= (j2 << 8) + j1 ' Getting RAW data
hint : "or" eller "+"