| Автор |
Съобщение |
|
alexander_hadjieff
Ранг: Минаващ
Регистриран на: Сря Ное 09, 2005 12:10 am Мнения: 3
|
 помощ за DS1820
Трябва ми програма за АСЕМБЛЕР за този термометър. Но т.к. фабрично е настроен да показва през 0,5 градуса искам да показва с по-голяма точност - до 0,01 градус или в най-добрия случай 0,001. По-надолу прилагам програмата, която извежда на екрана температурата, но с точност до 0,5 градуса. Тази програма трябва да се разшири. Предварително благодаря!!!
start:
call res1820
mov a, #occh
call w1820
mov a, #044h
call w1820
call t1s
call res1820
mov a, #0cch
call w1820
mov a, #obch
call w1820
call r1820
mov 60h, #0
clr c
rrc a
jnc k1
mov 60h, #5
k1: mov b, #10
div ab
mov 61h, b
mov 62h, a
mov a, 62h
orl a, #30h
call cout
mov a, 61h
orl a, #30h
call cout
mov a, #'.'
call cout
mov a, 60h
orl a, #30h
call cout
call newline
jmp start
|
| Сря Ное 09, 2005 12:31 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
DS1820 не позволява такава точност (дори в 12 бита режим)има писано по тая тема във форума поразрови се малко търси други датчици за такава точност
|
| Сря Ное 09, 2005 12:44 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
За тази точност Pt100/1000 или нещо на принципа на кварцовите термометри .... с термодвойка също е възможно, но там има и други специфики, не че с pt100 няма да има де 
|
| Сря Ное 09, 2005 1:53 am |
|
 |
|
alexander_hadjieff
Ранг: Минаващ
Регистриран на: Сря Ное 09, 2005 12:10 am Мнения: 3
|
Знам. че не позволява такава точност, но моя преподавател изисква да се няправи програмата без значение от точността. Това е само за трениране на писането на програми. А аз по-принцип не съм учил програмиране. Или това, което съм учил не е достатъчно. Просто ми трябва само програма, която да направи разряд след десетичната запетая до стотни или хилядни. Много ще съм благодарен на някой, ако напише някаква такава програма.
|
| Сря Ное 09, 2005 11:34 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Хм .. как да прави разряд след десеттичната запетая, сензора ти дава 12 битово число , и каквото и да го правиш то си е 12 битово, единствения вариант е от там нататък да го измисляш, един случаен генератор и си правиш нужните числа, друг начин няма.
chart[record_number][k-1]=0.0625*(256*recive_data[k*2]+recive_data[k*2-1]);
ето това е сметката в РС-то която правя за температурата, като данните ми са 16 битови .. не знам защо съм го правил така това преобразуване ...  , за сконите говоря ....т.е. виждаш едно умножение с 0.0625 .. не знам как я виждаш тая точност т 0.01 градуса, от 0-120 какъвто е обхвата ти трявбат дота повече битове от 10 ....това са си 12000 отчета, 14 бита, не знам каква програма си преставяш.
п.с. нищо не ти пречи вместо 0.0625 да пишеш 0.062547589475 
|
| Сря Ное 09, 2005 12:00 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Мериш 50 пъти и вземаш средно аритметично. Ще имаш РЕЗОЛЮЦИЯ 10 миликелвина.
|
| Сря Ное 09, 2005 8:06 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
ами ..... резолюция ....... почти като интерполацията при скенерите .. ама там поне има малко математика 
|
| Сря Ное 09, 2005 8:29 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
А ти какво очакваш? С ръжен да хванеш SOT-23 ли ?
|
| Сря Ное 09, 2005 10:34 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Исках да кажа че с тоя термометър вс еая как ще го направиш, дали ще сложиш измислени цифрицки на константата или ще осредняваш n отчета .... 
|
| Сря Ное 09, 2005 10:52 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
На практика почти е така.
|
| Сря Ное 09, 2005 10:57 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Ако имаш 10-битово АЦП и направиш 2 на N-та измервания с него, вземеш средноаритметичното от тези измервания, ще разшириш обхвата на АЦП-то до N-битово. Логиката е проста: реалната стойност е да речем X[V], първия път мериш X1[V], втория X2[V], средноаритметичното е много по-близко до реалната стойност отколкото ако вземеш поотделно X1[V] или X2[V]. На подобен принцип работят Sigma Delta АЦП-тата, на които можеш да разширяваш и свиваш разредността по твое желание и които са много точни, но са за бавни процеси.
Според мен, ако направиш и сумираш стойността на 2 на N-та измервания с DS1820 в една резултатна клетка, след което махнеш част от младшите битове, които ще се клатят като пиян човек на хоро, можеш спокойно да направиш измерването от 12-битово на да речем 16-битово. Например, имам LM335Z, вързан към 10-битово АЦП на PIC18F2520, правя 1024 измервания, става 20 битово АЦП, но от изследване на резултата разбрах, че на младшите 6-бита не мога да разчитам, тъй че ги махам. Получава се 14-битово АЦП, при което измерената стойност е много стабилна, а теглото на 1 бит при даденото Vref = 3.98V е
242.9 uV и ми дава основание да изписвам измерената стойност с 1 десета от градуса ( 242.9uV делено на 10mV на градус при LM335Z дава 0.024 градуса разделителна способност ) . При съпоставка на така направен термометър със сензор Pt1000 в термокамера, се оказа че грешката ми е 1 десета от градуса в обхвата от 30 до 100 градуса.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Ное 10, 2005 12:38 am |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Така е, аз ползвам 12 битово АЦП, за измерване на температура в обхват 0-1200 градуса, за една стойност извършвам 2048 измервания и вземам старшите 16 бита за изчисление на точната стойност в градуси. Това ми позволява да работя с точност 1/16 от градуса при регулиране, което е напълно достатъчно. Разбирасе е добре да има и малко филтриране при измерванията.
|
| Чет Ное 10, 2005 11:07 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Пирев, това е вярно, ама ако имаш да се бориш само срещу бял шум. Когато грешките ти се дължат на : нелинейност на конвертора, отместване, температурни грешки в референса и/или конвертора, грешки във 'signal conditionig' и др. такива - просто не става.
|
| Чет Ное 10, 2005 11:16 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Абе разширяване на бхвата май не се прави просто с много измервания, с това верно имаш точност, но разширение ......доколкото си спомням, дано не греша, в дебелите книги едно врее тоя вариант го имаше, ама там менят и опорното, и така получават разширение на обхвата. многото измервания могат да намалят влиянието на немонотонноста на ADC ама не виждам как може да получиш по точно, да речем да мръднеш с 1 бит общо, въпрки че и това ми се вижда много. Матемтически не си го обеснявам имаш х+х+х+х+х .... /n което е усредняване, не виждам как такова усредняване може да даде резултат с по голяма рарядност от х. Може да елиминира флуктоации в Х но според мен до тук ....
|
| Чет Ное 10, 2005 11:21 am |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
Въпроса с разширяването е доста сложен, според мен много зависи дали ще се получи от това какво има преди АЦП-то. Но от практиката знам че може да се получи.
|
| Чет Ное 10, 2005 11:37 am |
|
|