Nastavení konfiguračního registru u DS18B20

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Jackxl

Nastavení konfiguračního registru u DS18B20

#1 Příspěvek 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?
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#2 Příspěvek 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í.
Jackxl

#3 Příspěvek 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?
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#4 Příspěvek 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. :wink:
Žádnej učenej z nebe nespadl ...
Jackxl

#5 Příspěvek 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ů.
Jackxl

#6 Příspěvek 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
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#7 Příspěvek 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
Jackxl

#8 Příspěvek 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.
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#9 Příspěvek 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....
Jackxl

#10 Příspěvek 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.
Přílohy
Datasheet teplotniho cidla DS18B20.txt
(276.5 KiB) Staženo 175 x
Návštěvník

#11 Příspěvek 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.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#12 Příspěvek 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?
Žádnej učenej z nebe nespadl ...
Jackxl

#13 Příspěvek 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.
Návštěvník

#14 Příspěvek 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 8-)
masar
Příspěvky: 14453
Registrován: 03 pro 2005, 00:00

#15 Příspěvek od masar »

Anonym píše:Strč čidlo pod křídlo a když ukáže mezi 36,5 a 37°C tak 8-)

Vidíš, ecce homo - nedoceněný teplotní normál. :wink:
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“