forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Konverze výstupu čidla SHT71 - výpočet relativní vlhkosti
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 12 říjen 2010, 17:25    Předmět: prevod Citovat

Nakonec jsem nasel tuhle matematickou knihovnu, myslite, ze by mohla pomoct?

http://www.dhservis.cz/rutiny_soubory/fpmath.htm

Sam bych to asi napsat nedokazal..Nemuzu na to prijit..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 12 říjen 2010, 17:36    Předmět: Citovat

Tohle je float. Najdi si spíš celočíselnou, bude to jednodušší.

Třeba tu: http://www.8051projects.net/downloads47.html
V souboru MATH32.INC je rutina "Mul_16": 32b * 16b.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 12 říjen 2010, 21:50    Předmět: Citovat

Supr, uz to nasobi, ted mam vysledne cislo obrovske a uz jen posunout 23x doprava, nebo vydelit 2^23.Snazsi asi bude rotovat 23x doprava, jen musim prijit na to, jak to udelat ve 4 bytech..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 12 říjen 2010, 22:13    Předmět: Citovat

Rozhodně jednodušší bude posun Very Happy
Způsob: rotace přes C.

Optimalizace:
Když se nad tím zamyslíš, zjistíš, že vpodstatě tě zajímá jen nejvyšší byte a 1 bit z nižšího. Spodní 2B tím posunem zahodíš. Jelikož je výsledek číslo 0-100, tak v nejvyšším bytu je z výsledku 7b a osmý je níže. Když provedeš rotaci doleva 3. bytu přes C, posuneš onen bit do C. Když hned na to provedeš tu samou rotaci s nejvyšším bytem, ten bit v C se ti tam zapíše. A máš hotovo. V nejvyšším byte je výsledek a ostatní tě nezajímá Wink.

edit: ještě jsem přešel výpočet a vejdeš se do 32b (4B) i když pro násobení použiješ místo 2^23 číslo 2^24 (nejdřív C2*hodnota, pak odečíst zbytek vzorce). V tom případě nemusíš nic posouvat a výsledek je rovnou nejvyšší byte.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 12 říjen 2010, 23:13    Předmět: Citovat

Ano diky moc, take me to napadlo, ze se vejdu s prehledem, ikdyz to vynasobim 2^24. Cidlo uz na LCD ukazuje 58%. Zmenil jsem tedy jen konstantu a uz si beru jen posledni byte. zda se mi to jednodussi:-)V horni polovine stupnice vsak pomerne dost narusta chyba(ve 100% je chyba temer 12%)
Predpokladam, ze kdybych chtel zapojit jeste konstantu c3 musel bych udelat to same. c3*2^24=-26,76 pronasobit s udajem a opet vydelit 2^24..V tomto pripade by to nejvyssi cislo mohlo byt ~27*3300=89100, takze bych musel ulozit cislo to 3 byte a to pote pronasobit s jednim bajtem. Je to tak?

Jinak moc dekuju za tvou trpelivost, bez tebe bych nad tim marne sedel jeste par dni navic..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 13 říjen 2010, 9:12    Předmět: Citovat

Nn, všechny výpočty dělej ve 32 bitech s vynásobenýma konstantama a teprve na úplný závěr provedeš shift (ve tvém případě prostě jen zahodíš dolní 3B).
y=C2*2^24*x - |C1|*2^24 - |C3|*2^24*x*x. Nemá smysl dělat mezivýsledek 3. konstanty ve 3B, když to stejně pak budeš odečítat od 4B čísla. Zbytečně by sis to komplikoval. Nezapomeň, že u C3 je druhá mocnina - budeš tedy násobit 2x. Jednou samotnou hodnotu se sebou, výsledek necháš ve 32b, pak podruhý konstantou. Tohle odečteš od výsledku prvního násobení (s C2). Od výsledku ještě odečteš (vynásobenou) C1 a máš hotovo. Ve 4.B máš výsledek.

Ta chyba je docela velká. V DS píšou 3% bez linearizace, ale je pravda, že papír snese všechno. Otázkou taky je, s čím to porovnáváš.
100% by mělo jít ověřit. Při 100% totiž snad začíná pára kondenzovat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 13 říjen 2010, 14:48    Předmět: Prevod Citovat

Jasne. Uz jsem to pronasobil. Vyuzivam volani porad te same rutiny nasobeni a davam ji jen jine operandy. Zda se mi to efektivni.
Shrnuti: Nyni pocitam takovouto rovnici
RH{%}=-2 + 0.0367*SHT - 1.5955e-6*SHT*SHT, konstantu c1 jiz neprepocitavam a vysledna nejvetsi chyba je 0,1%.

Chybu jsem spočítal jako rozdíl procentualnich hodnot originalniho vypoctu z DS a vypoctu s kvantovanymi koeficienty. Prilozim pro zajimavost..Vynesl jsem zavislost do grafu, z nehoz je to pomerne hezky zrejme..



SHT71.xls
 Komentář:
Vyneseni zavislosti relativni vlhkosti na vystupu cidla SHT71.

Stáhnout
 Soubor:  SHT71.xls
 Velikost:  1.42 MB
 Staženo:  340 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
ondra.cer
Častý přispěvatel
Častý přispěvatel


Založen: 6.3.2008
Příspěvky: 30

PříspěvekZaslal: 13 říjen 2010, 17:42    Předmět: Citovat

Výpočet relativní vlhkosti, senzor SHT71.

Původní vzorec:
RH = (0.0367*SO)-(SO*SO*0.0000015955)-2.0468

Upravený vzorec pro výpočet v ASM (3bajtové proměnné):
RH*10 = (SO*367/1000)-(SO*SO/62676)-20
(*10 pro zobrazení jednoho des. místa)

Výpočet není 100% přesný, viz V_SHT71.xls



V_SHT71.xls
 Komentář:

Stáhnout
 Soubor:  V_SHT71.xls
 Velikost:  92 kB
 Staženo:  243 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 13 říjen 2010, 19:04    Předmět: Re: Prevod Citovat

Zbyyna napsal:
...konstantu c1 jiz neprepocitavam...

Všechny konstanty musí být použité přednásobené aby výpočet souhlasil.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
Jdi na stránku Předchozí  1, 2
 
Strana 2 z 2
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)