DS18B20! kde je jen chyba??

Zdravím Napsal jsem si program, pro teplotni cidlo DS18B20, se zobrazenim na display. ALe nejak mi to ukazuje same nesmysly.
Display je multiplexovany = prvni 4 bity jsou na vyber cisla (aktivace 0), a zbyle 4 bity jsou na cislo, ktere chci zapsat (aktivace log 1).
HLedim do toho pomerne dlouho a nevim proč to neukazuje. Myslíte, že by mi někdo mohl pomoct?? Program je napsaný pro krystal 24MHz. Dík moc
DALAS.ASM (2.28 KB)

Možná se pletu, ale v tvém programu jsem nenašel příkaz SKIP ROM [CCh] a pokud nepoužíváš ROM kód, tak by tam měl být.

Tak jsem do programu doplnil 0CCH, ale změna žádná. Nejpravděpodobněji bude chyba v zobrazeni. nic jiného už mě nnenapadá. ALe taky tam nic nevidím!

Dej sem ten upravený program, kouknu na to.
Pokud chceš vyzkoušet správnost zobrazení, tak dej do „jedn“ „des“ „sto“ nějaké konstantní číslo a hned uvidíš jestli se zobrazuje správně.

Tady je program s přidáním 0CCH.
DALAS.ASM (2.27 KB)

Pořadí musí být:
reset - SKIP ROM [CCh] - CONVERT T [44h] + pauza na dokončení převodu teploty

reset - SKIP ROM [CCh] - READ SCRATCHPAD [BEh] čtení teploty.

Hlavně nezapomeň že první čtyři bity dolního byte jsou desetiny stupně.

Tak jsem to zkoušel opravit, ale změna žádná! Výpis programu je zde:
; name teplomer
org 0

dalas bit P2.0

;-----------------------------hlavni program
hlavni:
call reset
mov A,#0CCh
call zapis
mov A,#044H
call zapis

;--------prodleva 750ms
mov	R7,#255
djnz	R7,$
mov 	R7,#255
djnz	R7,$
mov	R7,#240
djnz	R7,$
;--------konec prodlevy

call 	reset
mov	A,#0CCH
call	zapis
mov	A,#0BEH
call 	zapis
call 	cteni	;nizsi cast
mov	31H,A
call	cteni	;vyssi cast
mov	30H,A

;prevod 2 bytu
mov R6,#4
mov A,30H
zase: rr A
djnz R6,zase
mov B,A

mov	R6,#5
mov	B,31H

zasej: rl A
djnz R6,zasej

orl	A,B

;konecne cislo po prevodu je v A

call	vypis
sjmp	hlavni

;------------------------------konec hlavniho programu
;_____________________________________reset pulz
reset:
clr dalas
;----------------prodleva 480us
mov R7,#255
djnz R7,$
mov R7,#225
djnz R7,$
;----------------konec prodlevy
setb dalas
;----------------prodleva 70us
mov R7,#70
djnz R7,$
;----------------konec prodlevy

jnb	dalas,ano
jmp	reset

ano:
;----------------prodleva 410us
mov R7,#255
djnz R7,$
mov R7,#155
djnz R7,$
;----------------konec prodlevy
ret
;_______________________________________zapis
mov R6,#008H ;8x budu rotovat
zapis:
rrc A
jnc je

mov	R7,#4	
jmp 	neni

je:
mov R7,#48 ;prodleva 48us

neni:
clr dalas
djnz R7,$
setb dalas
;----------------prdleva 128us
mov R7,#128
djnz R7,$
;----------------konec prodlevy
djnz R6,zapis
;----------------300us prodleva
mov R7,#255
djnz R7,$
mov R7,#45
djnz R7,$
;----------------konec prodlevy
ret
;_____________________________________cteni
mov R6,#008H
cteni:
clr dalas
;--------------prodleva 3us
mov R7,#3
djnz R7,$
;--------------konec prodlevy
setb dalas
;--------------prodleva 18us
mov R7,#18
djnz R7,$
;--------------konec prodlevy
mov c,dalas
rrc A
;--------------prodleva 128us
mov R7,#128
djnz R7,$
djnz R6,cteni
;--------------prodleva 300us
mov R7,#255
djnz R7,$
mov R7,#45
djnz R7,$
;--------------konec prodlevy
ret

vypis:
nop
mov B,#100
div AB
orl A,#11010000b ;stovky
mov P0,A
mov R7,#200
djnz R7,$

nop
mov	A,#0	
mov	A,B		;nacist zbytek po deleni
mov	B,#0
mov	B,#10
div	AB
orl	A,#10110000b	;desitky
mov	P0,A
mov	R7,#200
djnz	R7,$
mov	A,#0

nop
mov	A,B
orl	A,#01110000b
mov	P0,A
mov	R7,#200
djnz	R7,$		;jednotky

ret
nop

end

Já už fakt nevím! Čučím do toho jak z jara, a furt nic!

Se správností celého programu ti neporadím, používám PIC a píšu v C.
Tady bude muset poradit někdo jiný.

OK! Ale i tak dík za snahu!

ahoj predevsim mas chybo v te prodleve 750ms pro konverzi teploty (44h) ty tym mas ve skutecnosti 750us a to je pro to cidlo malo. Bohate ti staci i 500ms. Muzes to vyresit treba takhle:

del500ms: mov r7,#250d ;
mov r6,#250d
mov r5,#8h

znovu: djnz r7,$ ; toto je zakladni cyklus ktery trva 250 us (pro krystal 24 MHz)
djnz r6,znovu ; tady nechas ten zakladni cyklus probehnout 250 krat to to ti hodi celkem 62.5 ms

             mov r6,#250d ; tady musis r6 znovu naplnit pro dalsi opakovani protoze je vynulovany

             djnz r5,znovu ; a tady nechas tech 62.5 ms zopakovat 8x tj 62.5 x 8 = 500 ms

             ret

jen do toho drive ci pozdeji to pujde :wink:

dale jsem se na to jeste nedival tak nevim jestli tam neni jeste neco oprav si to zpozdeni a dej pak vedet co a jak

to:Jirka.Jirka tak co už ti to jde? beru od tebe trochu inspirace. :slight_smile:

No jeste se mi to nepodarilo rozbehnout! Zkouším nový program s výpisem na LCD display, ten už něco měří. V pokoji mi ukazuje <7 st. (což vypovídá o tom, že v “teplota” mám hodnotu 127.) Při zahřátí se mění zobrazení na displeji, ale blbě.
PS: neví někdo, jak v tomto souboru zobrazím na LCD display ty dva bajty v HEXA (bajt1, bajt2)??
LCD-TEPL.ASM (5.04 KB)

Tak dámy a pánové. Program jsem rozchodil a přikládám jej. (Program navržen pro délku trvání jednoho djnz = 1,25us).
TEPLOMER.ASM (5.05 KB)

A to jsi na to přišel sám, nebo s něčí pomocí.

No abych řekl pravdu, tak po konzultaci ještě na jednom foru, jsem to nějak rozlousknul. Ale určitě na tom nemám zásluhu jenom, já, ale vy všichni co jste mi jakkoliv pomohli.

Mohu se zeptat pro jakej uP jsi to psal?

to je snad jasne. 8051

jj! Přesně tak! je to psané pro 8051.

jj už mi to seplo, myslel jsem ž e jsem v sekci AVR a nějak mi tam neseděl DPTR. :slight_smile:

Zdravím všechny bastlíře.
Dovolte, abych sem umístil plně funkční program pro přečtení 64-bitové adresy jednoho dallasu DS18B20, který text vypíše v HEXA na LCD display 16x2. A také bonus, program, pro měření tří teplot, pomocí 3 DS18B20, připojenéch pomocí 1wire sběrnice.
Tak doufám že se ve všem vyznáte. A že jsem někomu z vám pomohl.
TEPLVIC.ASM (7.7 KB)
ADRESA.ASM (4.84 KB)