zabunom sam s Ebaya narucio DS18B20 umjesto DS1820 i sada mi ovaj program koji imam napisan za DS1820 ne radi.Koliko sam skuzio po datasheetu ds1820 ima rezoluciju 9 bita a DS18B20 ima rezoluciju 12 bita.
Sto treba promjenit u kodu da prepoznaje DS18B20.
zezam se cijelo popdne bez rezultata
Code: Select all
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 29.11.2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
define OSC 10
TRISA = %0000000 'Postavi sve pinove porta A kao izlazni
TRISB = %00000000 'Postavi sve pinove porta B kao izlazne
TRISC = $00 'Postavi sve pinove porta C kao IZLAZNI
TRISD = $00 'Postavi sve pinove porta D kao izlazne
TRISE = %111 'Postavi sve pinove porta E kao ulazne
ADCON1 = 7 ' PORTA i PORTE su digitalni ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
'VARIJABLE ZA MULTIPLEXIRANJE
BROJ VAR WORD
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ3 VAR BYTE
BROJ4 VAR BYTE
I VAR BYTE
'VARIJABLE MJERENJA TEMPERATURE
symbol DQ = PORTE.2
V VAR WORD
T VAR WORD
temperatura Var Word ' Promen.za cuvanje izmer. temp.
count_remain Var Byte ' Ostatak
count_per_c Var Byte ' Ostatak po stepenu C
porta=%0000000
OWOut DQ, 1, [$CC, $44] ' Start merenja temperature, obavezno pre glavne petlje
Pocetak:
' POCETAK PROGRAMA
gosub Merenje ' ZOVI SUBRUTINU ZA MJERENJE TEMPERATURE
'IZDVAJANJE BROJEVA IZ TEMPERATURE ZA PRIKAZ NA DISPLEJU
BROJ1 = T DIG 3
BROJ2 = T DIG 2
BROJ3 = T DIG 1
BROJ4 = t dig 0
'MULTIPLEKSIRANJE DISPLEJA I PRIKAZ
PORTB=BROJ1
HIGH PORTB.7
PAUSE 2
LOW PORTB.7
PORTB=BROJ2
HIGH PORTB.6
PAUSE 2
LOW PORTB.6
PORTB=BROJ3
HIGH PORTB.5
PAUSE 2
LOW PORTB.5
PORTB=BROJ4
HIGH PORTB.4
PAUSE 2
LOW PORTB.4
'NEXT I
'PALJENJE MINUS PREDZNAKA
If v < 20000 then 'AKO JE TEMP VECA OD NULE NE SVIJETLI MINUS
portA.0 = 0
Else
HIGH PORTA.0 'AKO JE TEMP MANJA OD NULE SVIJETLI MINUS
endif
GOTO Pocetak
Merenje: 'SUBRUTINA ZA MJERENJE TEMPERATURE
OWOut DQ, 1, [$CC, $BE] ' Procitaj izmerenu temperaturu
OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Prikazi temperaturu u DEC obliku
temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
v=20000-temperatura
If V >= 20000 then ' nad 0 C.
Temperatura=V-20000
Else
Temperatura=20000-V ' pod 0 C
EndIf
'VARIJABLA T ZA IZDVAJANJE BROJEVA IMA VRIJEDNOST TEMPERATURA
t=temperatura
' Malopre procitana temperatura, pa je meri opet...
OWOut DQ, 1, [$CC, $44]
Return
end