<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY dir=ltr>
<DIV dir=ltr>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: 'Calibri'; COLOR: #000000">
<DIV>To bude nějaké nedorozumění.</DIV>
<DIV> </DIV>
<DIV>Z přerušení máme dvě čísla:</DIV>
<DIV>součet součinů, dejme tomu volatile uint64 pSum</DIV>
<DIV>počet součinů, dejme tomu volatile uint32 pCnt</DIV>
<DIV> </DIV>
<DIV>Protože by při zpracování mohlo nastat přerušení od AD, zakážeme přerušení, 
provedeme výpočty a přerušení ihned povolíme (nevím, jak se to dělá/jmenuje na 
tomto MCU):</DIV>
<DIV>zakazatInt();</DIV>
<DIV>pTmp = pSum/(uint64)pCnt;</DIV>
<DIV>pSum=0; pCnt=0;</DIV>
<DIV>povolitInt();</DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV style="FONT: 10pt tahoma">
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>Nyní spočítáme výkon a energii:</FONT></DIV>
<DIV><FONT size=3 face=Calibri>p = (float)pTmp * epCalConst;</FONT></DIV>
<DIV><FONT size=3 face=Calibri>E+= p/3600.0; // pokud to děláme 1x za s a chceme 
Wh</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>přičemž eeprom float epCalConst je konstanta pro 
kalibraci výkonu a obsahuje vše potřebné k tomu, aby se z průměrného součinu 
hodnot těch dvou kanálů ADC stal průměrný výkon ve W, případně pokud ho nechceme 
k ničemu použít, může tam být i 1/3600, nebo něco jiného abychom z periody 
zpracování dostali hodiny. Může tam být i 1/renormalizace, když při obsluze int 
od AD kromě násobení AD1*AD2 ještě např. shiftujeme, aby součin nebyl moc velký. 
Tzn. aby se jich do pSum vešlo dost a aby byla dostatečná přesnost.</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>Protože přerušení bylo zakázáno mnohem kratší 
dobu než měřící cyklus, nic se mezitím nemohlo ztratit. První nová data se občas 
započítají třeba o 100 ns později, když přerušení kvůli zákazu nastane opožděně. 
(Předpokládám, že řadič přerušení není debilní a přerušení v době zákazu se 
neztratí, ale nastane ihned po povolení)</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>Protože ve výpočtu nefiguruje perioda měření, 
může AD běžet jak nejrychleji umí a je nám jedno kolik to je. Jen musíme mít 
jistotu, že pSum nepřeteče (viz renormalizace).</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>(tedy takhle bych to dělal na 8bitovém AVR při 
1-16 MHz, pro 32b na stovkách MHz to bude ještě snazší, např. v přerušení možná 
půjde použít float a odpadne renormalizace)</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV><FONT size=3 face=Calibri>PH</FONT></DIV>
<DIV><FONT size=3 face=Calibri></FONT> </DIV>
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A title=michal.grunt@gmail.com 
href="mailto:michal.grunt@gmail.com">Michal Grunt</A> </DIV>
<DIV><B>Sent:</B> Saturday, June 11, 2016 1:19 PM</DIV>
<DIV><B>To:</B> <A title=hw-list@list.hw.cz 
href="mailto:hw-list@list.hw.cz">HW-news</A> </DIV>
<DIV><B>Subject:</B> RE: Jednoduchý měřák</DIV></DIV></DIV>
<DIV> </DIV></DIV>
<DIV 
style='FONT-SIZE: small; TEXT-DECORATION: none; FONT-FAMILY: "Calibri"; FONT-WEIGHT: normal; COLOR: #000000; FONT-STYLE: normal; DISPLAY: inline'>
<DIV>
<DIV style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif">Asi by to taky 
takto šlo. Ale to přijdu o část dat, když bude časovač nebo přerušení zastavené 
a budu se věnovat displeji, že? Teda ne že by to bylo zásadní, ale jestli to 
myslím tak jak to myslíte vy.</DIV></DIV>
<DIV dir=ltr>
<HR>
<SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif; FONT-WEIGHT: bold">Od:</SPAN><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif"><A 
href="mailto:edizon@seznam.cz">Pavel Hudecek</A></SPAN><BR><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif; FONT-WEIGHT: bold">Odesláno:</SPAN><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif">‎10. ‎6. ‎2016 
16:48</SPAN><BR><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif; FONT-WEIGHT: bold">Komu:</SPAN><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif"><A 
href="mailto:hw-list@list.hw.cz">HW-news</A></SPAN><BR><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif; FONT-WEIGHT: bold">Předmět:</SPAN><SPAN 
style="FONT-SIZE: 11pt; FONT-FAMILY: calibri,sans-serif">Re: Jednoduchý 
měřák</SPAN><BR><BR></DIV>Nevím jak rychlý je ten procesor, jestli to přerušení 
tahle nebude trvat moc <BR>dlouho.<BR><BR>Já bych v něm jen vynásobil ty dvě 
hodnoty, výsledek přičetl do nějaké <BR>proměnné a inkrementoval nějaký čítač 
vzorků.<BR><BR>V rámci zobrazování bych pak jednou za čas (např. 1 s) zakázal 
přerušení, tu <BR>proměnnou vydělil počtem vzorků, výsledek vynásobil kalibrační 
konstantou, <BR>aby vznikly W. Obě původní hodnoty vynulovat, povolit přerušení. 
Zůstal nám <BR>průměrný výkon ve W za poslední 1 s, tedy taky energie v J, 
kterou lze někam <BR>připočítat a při zobrazování třeba vydělit 3,6M, aby z toho 
byly např. kWh.<BR><BR>PH<BR><BR>-----Původní zpráva----- <BR>From: Michal 
Grunt<BR>Zdravím, potřeboval bych tedy zkontrolovat zda mám u STM32F103 
dobře<BR>nastavený ADC. Záměr je následující:<BR>Je použit ADC1 a dva kanály 
(PA0, PA1). Na ADC je nastaven trigr<BR>časovač TIM3 (nyní 1hz, aby to šlo 
sledovat i okem) a DMA v circle<BR>mode.<BR><BR>Potřebuji vzorkovat určitou 
frekvencí (napětí a proud) a tedy znát i<BR>přesně interval mezi měřením a z 
toho vypočítat Wh. Jak je to<BR>nastaveno nyní tak to funguje (při tom 1hz), ale 
je otázka jestli je<BR>toto dobré řešení a zda když změním vzorkování třeba na 
10khz a<BR>upravím vzoreček pro výpočet tak zda to bude 
fungovat.<BR><BR>http://pastebin.com/f8y9jEuh</DIV></DIV></DIV></BODY></HTML>