Jak spočítat složitý vzorec? – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Jak spočítat složitý vzorec? – Mikrokontroléry – Fórum – Programujte.comJak spočítat složitý vzorec? – Mikrokontroléry – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
David
~ Anonymní uživatel
131 příspěvků
24. 5. 2013   #1
-
0
-

Zdravím,

řeším úlohu, ve které mám změřit A/D převodníkem stejnosměrné napětí a poté podle vzorce 10^(1,667xU-9.33), kde U je naměřené napětí, převést změřenou hodnotu na tlak. Neporadili byste mi někdo vhodný způsob, jak se s tímto vzorcem vypořádat? Našel jsem nějakou funkci pow z knihovny math.h, ale nevím, jestli je to optimální řešení. Používám 10bitový převodník. Rád bych se co nejvíc vyhnul všem float popř. doublům. Prosil bych případně co nejjasnější popis, jak to udělam, jsem totiž velký začátečník. :)

Předem děkuji za reakce.

Nahlásit jako SPAM
IP: 89.103.179.–
Reklama
Reklama
hlucheucho+10
Posthunter
24. 5. 2013   #2
-
0
-

V tomto případu se float či obdobnému datovému typu vyhnout v podstatě nelze. V exponentu mocniny vyjde desetinné číslo, jiná možnost než funkce pow mne nenapadá. Je otázka, jaké nároky na početní výkon to bude mít a zda použitý mikrokontrolér bude "stíhat", to souvisí i s vzorkovací frekvencí. Také záleží na tom, co se bude s naměřenou hodnotou dál dělat. Pokud se má poslat do PC, asi bych spíš poslal do PC "surovou" hodnotu z ADC a přepočet na tlak provedl až v PC.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
David
~ Anonymní uživatel
131 příspěvků
24. 5. 2013   #3
-
0
-

Nene, vypočtená hodnota se zobrazuje na LCD displeji, tudíž přepočet musí proběhnout v mikrokontroléru. Používám ATmega16 a tohle je v podstatě vše, co musí zvládnout.  

Nahlásit jako SPAM
IP: 90.178.95.–
KIIV+42
God of flame
24. 5. 2013   #4
-
0
-

zkousel sem orientacne ty hodnoty a vzorec v excelu a at sem zkousel jakykoliv vstup, tak vychazely vysledky pomerne extremni (at uz extremne maly nebo se to uz ani nedarilo vypocitat v ramci bunky)

takze kdo vi, jestli si s tou matematikou nebudes muset poradit jinak.. nejakou aproximaci nebo dokonce prevodni tabulku (napriklad 128 hodnot na jejich odpovidajici tlaky... a posledni 3 bity zahodit - beztak budou pravdepodobne skakat)

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
David
~ Anonymní uživatel
131 příspěvků
24. 5. 2013   #5
-
0
-

Dobře, popřemýšlím nad tím. Jen kdybych zatím chtěl spočítat a zobrazit, jaké mi to změřilo napětí, tak musím vynásobit to navzorkované číslo (0 - 1023) kvantizačním krokem? A jak ho spočítám u 10bitového převodníku? Je to 5/1024? Mám totiž na vstupu dělič 10k a 10k, protože reference je Ucc (+5 V) a půjde mi tam od 0 do 10 V. Nerad bych teda udělal nějakou blbou chybu už takhle zezačátku.. 

Nahlásit jako SPAM
IP: 90.178.95.–
KIIV+42
God of flame
24. 5. 2013   #6
-
0
-

no delic je jasnej, do tabulky by to stacilo vydelit 4(256 hodnot) nebo 8 (128 hodnot) nebo 16 kdyby ti stacilo 64hodnot :D

pak by ses vyhnul prepoctum...

akorat bacha jaky ma vystupni odpor ten senzor - aby ti to pak odporovy delic neovlivnil natolik, ze by z toho nelezlo nic kloudnyho

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
hlucheucho+10
Posthunter
24. 5. 2013   #7
-
0
-

to máš nějakou Pirani od Pfeiffer Vacuum?

Na dobře čitelné zobrazení stačí 3 vzorky za sekundu, takže máš na všechno cca 300ms. Spočítat a zformátovat výsledek na C-string by za tu dobu nemělo být problém. Pokud máš 0 - 10V, tak ten údaj bude vcelku stabilní, důležité je správně ošetřit vstup a napájení. S jakou přesností se to má měřit? Bude rozlišení 10 bitů stačit?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
David
~ Anonymní uživatel
131 příspěvků
24. 5. 2013   #8
-
0
-

Jojo, přesně tu. :) Ja myslim, ze ty kiloohmy jsou okay. Ona má celkem velký rozsah. Představuji si čísla jako 1.15e-6 mbar. U tohohle myslím, že vím. Převést výsledek na řetězec a pak zobrazit ve správným formátu (tuším %1.2e). Na to by mělo 10bitů stačit v pohodě, ne?

Nahlásit jako SPAM
IP: 90.178.95.–
hlucheucho+10
Posthunter
25. 5. 2013   #9
-
0
-

že sis nevzal digitální, na tu mám pro AT Megu i hotovej SW.

Na výstup měrky lze zapojit nejméně 10k zátěž.

Pokud to má měřit celý rozsah od atmosférického tlaku (cca 980 mbar, měrka měří max 1000) až po 1e-6, tak bych zvolil  24 bitový převodník. 10 bitů se hodí tak na tlak v meteorologický stanici nebo tělesnou teplotu.

nejseš náhodou z ÚFM?

hu

Nahlásit jako SPAM
IP: 188.95.60.–
David
~ Anonymní uživatel
131 příspěvků
26. 5. 2013   #10
-
0
-

Já moc na výběr neměl. :D Má to sloužit spíš k orientačnímu měření. Mají k tomu na fakultě i originální vyhodnocovací jednotku a asi chtěj holt udělat ještě jednu. Bohužel už se na tom moc měnit nedá. Musim se spokojit s tim, co mam. Já tam mám dělič 10k a 10k v sérii. Nene, FEL.

Nahlásit jako SPAM
IP: 90.178.95.–
hlucheucho+10
Posthunter
26. 5. 2013   #11
-
0
-

Pokud ti stačí 1024 hodnot na 0 - 10V, proč ne. Můžeš si pro ukázku pohrát s Excelem a nechat si těch 1024 hodnot napětí přepočítat na odpovídající hodnoty tlaku. S tím ADC 24 bitů: vhodný je AD7793, připojuje se do SPI. Musí být v plechový krabici kvůli stínění.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
prdelnatý anděl
~ Anonymní uživatel
33 příspěvků
22. 6. 2013   #12
-
0
-

10^(1,667xU-9.33) hmm.

Můžeš si dovolit nějakou odchylku? Pokud nechceš zabřednout do racionálních čísel, dá se pracovat s celočíselnými zlomky (předpokládám, že alespoň násobení a dělení je přípustné). Například, kdybys vše na za čátku vynásobil 1024, provedl výpočet a poté 1024 vydělil, pak by to bylo:

10^((1707 * U - 9554) / 1024)

A to 10^x bys mohl zpracovat - pro celou část v cyklu x10 - a pro racionální část tabulkově (x od 0 do 1) nebo pomocí určité numerické metody nebo interpolací s využitím druhé popř. vyšších derivací.

Nahlásit jako SPAM
IP: 213.151.77.–
hlucheucho+10
Posthunter
22. 6. 2013   #13
-
0
-

#12 prdelnatý anděl
zbytečně komplikovaný. Vzhledem k nárokům na výkon je přijatelné to spočítat přímo s funkcemi z math.h. 3x za sekundu to pravděpodobně zvládne s defaultním taktováním 1 MHz, není problém pro jistotu jít až na 8MHz

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý