Stránka 1 z 2
Nastavení konfiguračního registru u DS18B20
Napsal: 01 zář 2009, 23:20
od Jackxl
Nazdar.Dostal jsem se k čidlu DS18B20.Narozdíl od spousty uživatelů mně měření funguje.Jenomže měří s továrním nastavením na 12bitů a já bych chtěl jenom na 10.Zkouším pořád zapisovat do scratchpadu,ale pořád mi to nějak nejede.Nevíte někdo,jak se to má změnit?
Napsal: 01 zář 2009, 23:44
od Bernard
S použitím funkce WRITE SCRATCHPAD zapíšeš 3 bajty - Th, Tl a konfigurační. Konfigurační bude mít hodnotu 3Fh.
S použitím funkce COPY SCRATCHPAD přepíšeš SCRATCHPAD do EEPROM, aby sa konfigurace zachovala i při vypnutí.
Napsal: 02 zář 2009, 21:04
od Jackxl
Jo,dík.Včera už jsem na to přišel.Taky ale musíš mít správně napsaný pořadí příkazů.Nemůžeš si zapsat scratchpad kdekoli.
Ted mám jinej problém,teploměr mi ukazuje o dva stupně víc než rtuťovej.Nemá se to čidlo nějak synchronizovat nebo kalibrovat nebo tak něco?
Napsal: 03 zář 2009, 06:55
od Chenzee
Kalibrované je z výroby ... a přesnost deklarovaná v datasheetu je +-0,5°C v rozsahu -10 až +85°C. Co třeba chyba na rtuťovým teploměru? Nebo Chyba v zobrazení, převodu na BCD nebo tak něco? Kdyžtak si načtenou hodnotu ulož do EEPROM a načti programátorem, tak zjistíš, zda je hodnota načtená z čidla opravdu taková, jakou ji vidíš ty na zobrazovači.

Napsal: 03 zář 2009, 09:57
od Jackxl
Jenomže já žádný zobrazovač nepoužívám.Mám program pro snímájí dat z portu COM a tak vidím každý byte,který přijde a zatím to přepočítávám na kalkulačce.Takže se zobrazením problém není.Zkusím zkrátit čas po konverzi,protože jsem ještě nechal čas 800ms po továrním nastavení 12bitů a ted mám těch 10b.Nemyslím si ale,že to je tím,protože na 12bitů to taky bylo mimo o několik stupnů.
Napsal: 03 zář 2009, 09:59
od Jackxl
Mohli by jste ještě zkontrolovat program,jestli jsem někde neudělal chybu?
TEPLOMER:
SETB DS18B20
NOP
NOP
NOP
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#4Eh
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#03Fh
CALL VYSLANI
MOV A,#0BEh
CALL VYSLANI
CALL CTENI
MOV TEPLSB,A
CALL CTENI
MOV TEPMSB,A
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#044h
CALL VYSLANI
CALL ZPO800MS
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#0BEh
CALL VYSLANI
CALL CTENI
MOV DATA1,A
CALL CTENI
MOV DATA2,A
RET
;*******************************************************************************
RESET:
CLR DS18B20
CALL ZPO480US
SETB DS18B20
CALL ZPO70US
uvolni: MOV C,DS18B20
JNC uvolni
CALL ZPO410US
RET
;*******************************************************************************
CTENI: MOV POCETBITU,#8
ct1: CLR DS18B20
NOP
NOP
NOP
NOP
NOP
NOP
SETB DS18B20
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DS18B20
RRC A
; CALL ZPO100US
CALL ZPO55US
DJNZ POCETBITU,ct1
RET
;CCh
;ConvertT 44h
;*******************************************************************************
VYSLANI:
MOV POCETBITU,#8
vys1: RRC A
JNC vyst0
vyst1: CLR DS18B20
NOP;ZPOZDENI 15US PUVODNE NEBYLO,BYLO 3
NOP
NOP
NOP
NOP
NOP
SETB DS18B20
CALL ZPO64US
; CALL ZPO45US
; CALL ZPO100US
jmp vys2
vyst0:
CLR DS18B20
; CALL ZPO100US
CALL ZPO60US
SETB DS18B20
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
vys2: DJNZ POCETBITU,vys1
RET
Napsal: 03 zář 2009, 19:06
od Pawalo
možná sem vocas ale něco mi tam v tom kódu nesedí.
(to červené)
.
.
.
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#4Eh
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#03Fh
CALL VYSLANI
RESET
SKIP ROM
MOV A,#0BEh
CALL VYSLANI
CALL CTENI
MOV TEPLSB,A
CALL CTENI
MOV TEPMSB,A
.
.
.
pokud na to dobře koukám v datashitu tak by vždy měl začínat RESET puls, pak ROM příkaz a pak nějakej další příkaz
Napsal: 03 zář 2009, 21:32
od Jackxl
Ano,ROM příkaz je taky přeskočení paměti.Pokud máte na sběrnici připojeno pouze jedno čidlo,tak můžete ROM příkazy, jako třeba čtení,přeskočit.
Napsal: 04 zář 2009, 12:00
od Pawalo
nevim jestli sme se pochopili ale pro upřesnění
vždy se žačne RESET pulsem, pak následuje nějaký ROM příkaz (jako je třeba SKIP, READ, SEARCH) dále následuje hlavní příkaz (CONVERT TEMP, COPY SCRATCHPAD, READ SCRATCHPAD, WRITE SCRATCH.)
ve vašem případě to bude takto:
RESET
SKIP ROM
WRITE SCRATCHPAD
zapis 00h
zapis 00h
zapis 03Fh
pak tam pokračujete příkazem READ SCRATCHPAD a proto aby jste mohl pokračovat dalším příkazem je potřeba znovu vyvolat RESET, ROM příkaz a pak až samotnný příkaz. takže program by měl pokračovat:
RESET
SKIP ROM
READ SCRATCHPAD
cti a ulož do TEPLSB
cti a uloz do TEPMSB
cely to bude vypadat takto:
RESET
SKIP ROM
WRITE SCRATCHPAD
zapis 00h
zapis 00h
zapis 03Fh
RESET
SKIP ROM
READ SCRATCHPAD
cti a ulož do TEPLSB
cti a uloz do TEPMSB
jestli kecám kraviny tak mě prosim někdo opravte, ale tímto postupem s čidlem pracuji já a vždy mě to tak fungovatlo....
Napsal: 04 zář 2009, 12:28
od Jackxl
Ano,už jsem si toho všiml také.Ale upravil jsem to na
TEPLOMER:
SETB DS18B20
NOP
NOP
NOP
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#0BEh
CALL VYSLANI
CALL CTENI
MOV TEPLSB,A
CALL CTENI
MOV TEPMSB,A
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#4Eh
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#00h
CALL VYSLANI
MOV A,#03Fh
CALL VYSLANI
CALL ZPO100MS
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#044h
CALL VYSLANI
CALL ZPO180MS
CALL RESET
MOV A,#0CCh
CALL VYSLANI
MOV A,#0BEh
CALL VYSLANI
CALL CTENI
MOV DATA1,A
CALL CTENI
MOV DATA2,A
RET
což by i podle Vás mělo být správně a stále to ukazuje o několik stupnů víc(při teplotě asi 23st asi o 2st).Nebo to má být ještě jinak?Přepisoval jsem to podle osnovy v následujícím uloženém souboru.Tento soubor je DOC,musíte přepsat koncovku.
Napsal: 04 zář 2009, 12:43
od Návštěvník
Pokud to čidlo srovnáváš s nějakým pokojovým teploměrem, tak se ničemu nediv. Já když doma dám na stejné místo tři různé (rtuťové a lihové) teploměry, tak po ustálení mají rozptyl skoro 3 stupně. Vezmi lékařský teploměr a ohřej si vodu na 35-40°C a to teprve srovnávej.
Napsal: 04 zář 2009, 13:41
od Chenzee
nebo zkus vzít jiné čidlo a zkus jej načíst, zda budou hodnoty stejné či rozdílné. Ve tvém případě bych ale programu moc nedával za vinu tuto chybu, prostě buďt ochodí nebo ne, ale že by to špatně měřilo by mohlo být pouze v případě nedostatečného času na převod. To je jediné. Takže opravdu může být to čidlo trošku mimo, jen ještě jak že přepočítáváš tu hodnotu? Nemáš chybu někde v zaokrouhlení přepočtu?
Napsal: 04 zář 2009, 14:10
od Jackxl
V jednom bytu mi např. přijde 01 a v nižším bytu přijde AC.
Když to dáte dohromady v bináru máte 110101100 což představuje mocniny dvojky,kde nejnižší bit je 2na -4,což je 0,0625st.
Když to přepočtu,tak to je 1*16+1*8+0*4+1*2+0*+1*0,5+1*0,25 = 26,75st.Tak jak by mohla být chyba v přepočtu?
PS:Další čidlo,když to nebude fungovat,koupím skoro až za měsíc.
Napsal: 04 zář 2009, 14:16
od Návštěvník
Jackxl píše:PS:Další čidlo,když to nebude fungovat,koupím skoro až za měsíc.
Strč čidlo pod křídlo a když ukáže mezi 36,5 a 37°C tak

Napsal: 04 zář 2009, 14:20
od masar
Anonym píše:Strč čidlo pod křídlo a když ukáže mezi 36,5 a 37°C tak

Vidíš, ecce homo - nedoceněný teplotní normál.
