Rutiny pre DS18B20-odštartovanie meranie, po 700ms vyčítanie

Zdravím.
Poraďte prosím niekto,odkiaľ by som zohnal funkčnú rutinku pre PIC v asm.
ktorá by v DS18B20 odštartovala meranie a po nutnom čase 700ms by vyčítala hodnoty z oboch výst.registrov a prerátala by ich napr do dvoch desiatkových čísel(celé stupne a desatiny)v dvoch registroch.Vytvoriť to podľa datashetu z DS18B20 je nad moje sily.Ďakujem.
Relatko.

:arrow_right: administrator: přejmenováno z "Rutiny pre DS18B20"

cau koukni na Pandatron maj to tam pekne popsany a dobre citelnej kod ,cesky, da se to z neho vytahnou :slight_smile:

Vďaka za tip.
Zmastil som to ako teplomer ktorý zobrazuje temp.na štyroch 7segmentovkách.Teplotu meria presne,akurát počas prerušenia na malý okamih zhasne displej.Neviem si z tým rady a prosím o pomoc
skúsenejších.Vďaka .Relatko.
Video004.rar (263 KB)
zobraz.asm (9.91 KB)

na segmentovky používám driver SAA1064T. funguje na I2C komunikaci takže to zabere jen dva piny na procesoru. naposledy zobrazenou hodnotu zobrazuje dokud nevypnu napájení a nebo dokud tam nepošlu jiné informace. takže jednoduše pošlu teplotu na displej a pak si v klidu měřim a počítám a teplota je tam pořád zobrazená.

Já bych to otočil. Řízení multiplexu bych dal do přerušení a DS bych obsluhoval ve volném čase. Nevím, jak přesně dlouho trvá měření a vyčtení teploty s DS, ale na tom ti právě ten displej problikne, protože měříš a zárověn převádíš teplotu na DEC v přerušení a multiplex obsluhuješ ve volném čase. Nebo řízení multiplexu a čtení DS do přerušení, ale výpočet a převod teploty na DEC bych dělal v hlavní smyčce. Snad jsem to napsal srozumitelně :smiley:

Nemyslím že je to týmto.
Zaujímavé je však to ,že som to skúšal bez merania teploty iba som po inic.MCU načítal ľubovolné čísla do reg.TEMPNM a TEMPDP v prerušení prebehol podprogram hex dec(rozdelí číslo na jednotky,desiatky a stovky) a ono to aj tak bliká v takte 1 sekunda.Keď som to urobil bez prerušenia ,nebol problém.Zobrazovalo mi na displeji načítané hodnoty,bez "žmurkania"Hardvérová chyba je absolútne vylúčena lebo po nahratí iného programu to funguje bezchybne.Pripájam program ktorý na tomto istom hardvéry šlape bez problémom.Taktiež sa počas prerušenia vykonávajú prepočty a nič nebliká.Ide o odpočítavanie času.Po zapnutí nahodí na displej 8:00:00 a po 1sek.odpočíta až na 0:00:00.
Relatko.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují!
casovac.asm (8.53 KB)

Jakej máš krystal? Pokud máš 4Mhz,tak to přesně odpovídá, že se ti to sekne v přerušení na GOTO PREPOCET.

Áno.Má rovno 4Mhz.Relatko

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují!

Displej obsluhuješ 1x za 12.5ms, ale po 1s ti skočí na displej za 200ms. A to se opakuje co 1s.

Nechápem odkiaľ sa tých 200ms zoberie v tom prípade keď v programe nič nerobým z tep.čidlom iba po inic.MCU načítam do reg.:
MOVLW .123
MOVWF TEMPNM
MOVLW .4
MOVWF TEMPDP
a aj tak mi to bliká.Nemám túto verziu prog.pri sebe ,ale večer ju sem dám.Relatko.

Tak jinak

Krokuju to v MPLABu. Dám si Breakpoint na START movf desatiny,0;načítaj obsah reg.desatiny do WREG
a pustím START tak dlouho, než dojedu na 1.032405 vteřin, tak si vynuluju počítadlo kroků, aby věděl, kolik je to přesně a další skok na break, a tady je ta chyba, tento skok trvá přesně 216.90000 ms. Jinak to trvá 12.587000 ms, což je dobře. Ale těch 216.90000 ms je ten problik!!!

Jen takový nápad, nebylo by lepší obsluhovat LED v přerušení a zbytek v někde v hlavní smyčce. Pak by to blikat nemělo, ne?

Viz o 8 příspěvků víše.

Áno,máš pravdu.Budem mať chvilinku času tak to od toho miesta kde naposledy zobrazil na displeji odkrokujem.On ten program sa niekde zašije na 216.90000 ms a až potom pokračuje zobrazovanie.Zatiaľ vďaka.
Relatko.

Ale jak jsem psal víše,pak i Petr, multiplex bych dělal přes přerušení, a zbytek někde v hlavní smyčce. Pak se nemusíš starat o multiplex, protože už ti do toho nic “nepoleze”.
Jediný případ je, že zapisuješ do vnitřní EEPROM, to se vypíná globální přerušení. To ten displej problikne, ale není to tak jak u tebe.

Tak to jsem přehlíd.
Ale stejně, pokud by byla obsluha LED v přerušení, tak by nic blikat nemělo. Je to tak ?

To se ti stává často :blush: :blush: :blush: :blush: :blush:

Dle mého názoru je lepší v tomhle případě využít přerušení na časování multiplexu.

Vďaka za rady.Konečne som našiel chybu v programe.Použil som tie isté premenné (TMP1 a TMP2) v dvoch podprogramoch a oni sa navzájom “pobili”.Už to šlape ako sa patrí.
Relatko.