<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">Jo, to bych udelal taky, ale nejdriv
bych pouzil STM32 abych nebojoval s pameti, nemel problemy s
poctem casovacu, neresil ze 64 celociselnych bitu je vypocetni
problem, na float neni HW podpora a pro ADC a UART pouzil DMA...</div>
<div class="moz-cite-prefix">Ale je to projekt do skoly, material je
nejak dan... Samozrejme to jde libovolne programovat vlastnimi
silami, ale popravde nemam naladu zkoumat periferie AVR...</div>
<div class="moz-cite-prefix">At si mladej zkusi uskali arduino
reseni, ono se mu to bude hodit ;-)<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 13.04.2021 v 21:22 Pavel Hudecek
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:8.MxiO%7D.mZGNDy5P78.1WTUz%7D@seznam.cz">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}.MsoChpDefault
{mso-style-type:export-only;}div.WordSection1
{page:WordSection1;}</style>
<div class="WordSection1">
<p class="MsoNormal">Nevím jestli na Arduinu nějak snadno jde si
napsat SW úplně svůj se vším všudy, ale já bych:</p>
<p class="MsoNormal">- Timerem generoval tu PWM</p>
<p class="MsoNormal">- Tímtéž 1ms přerušení pro svoje další
časování</p>
<p class="MsoNormal">- ADC nechal běžet a generovat přerušení</p>
<p class="MsoNormal">- Změřené výsledky zpracovávat jako
vedlejší činnost ve funkci pro čekání</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">PH</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div
style="mso-element:para-border-div;border:none;border-top:solid
#E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="border:none;padding:0cm"><b>Od: </b><a
href="mailto:jaroslav.buchta@hascomp.cz"
moz-do-not-send="true">Jaroslav Buchta</a><br>
<b>Odesláno:</b>úterý 13. dubna 2021 21:01<br>
<b>Komu: </b><a href="mailto:hw-list@list.hw.cz"
moz-do-not-send="true">hw-list@list.hw.cz</a><br>
<b>Předmět: </b>Re: AVR arduino potize</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Tak jsem to trosku prepsal, takhle to na
osciloskopu trva 180us a s AD </p>
<p class="MsoNormal">prevodem necelych 300us. Velke rezervy tam
nejsou.</p>
<p class="MsoNormal">Mimochodem, da se v arduinu nejak jednoduse
pouzit ADC asynchronne? Ze </p>
<p class="MsoNormal">spustim prevod a az je dokoncen, zpracuju,
mezitim delam neco jineho... ?</p>
<p class="MsoNormal">Seriak funguje tusim zasadne synchronne?</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">int16_t CDataProc::GetSignal()</p>
<p class="MsoNormal">{</p>
<p class="MsoNormal"> uint32_t ms = millis();</p>
<p class="MsoNormal"> if (ms - lastMillis > 0)</p>
<p class="MsoNormal"> {</p>
<p class="MsoNormal"> uint16_t sensorValue =
(uint16_t)analogRead(A0);</p>
<p class="MsoNormal"> digitalWrite(13, HIGH);</p>
<p class="MsoNormal"> cycles++;</p>
<p class="MsoNormal"> if (firstPass){</p>
<p class="MsoNormal"> valAvgFilt =
((uint64_t)sensorValue << 24) | 0x7fffffUL;</p>
<p class="MsoNormal"> valSignalFilt =
((uint32_t)sensorValue << 8) | 0x7f;</p>
<p class="MsoNormal"> firstPass = false;</p>
<p class="MsoNormal"> }</p>
<p class="MsoNormal"> else</p>
<p class="MsoNormal"> {</p>
<p class="MsoNormal"> while (ms - lastMillis > 0)</p>
<p class="MsoNormal"> {</p>
<p class="MsoNormal"> lastMillis++;</p>
<p class="MsoNormal"> valAvgFilt =
(valAvgFilt*(coefAvg-1) + </p>
<p class="MsoNormal">(((uint64_t)sensorValue << 24) |
0x7fffffUL))/coefAvg;</p>
<p class="MsoNormal"> valSignalFilt =
(valSignalFilt*(coefSignal-1) + </p>
<p class="MsoNormal">(((uint32_t)sensorValue << 8) |
0x7f))/coefSignal;</p>
<p class="MsoNormal"> }</p>
<p class="MsoNormal"> }</p>
<p class="MsoNormal"> Message();</p>
<p class="MsoNormal"> digitalWrite(13, LOW);</p>
<p class="MsoNormal"> }</p>
<p class="MsoNormal"> return (int16_t(valSignalFilt >>
8)) - (int16_t(valAvgFilt >> 24));</p>
<p class="MsoNormal">}</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Dne 13.04.2021 v 20:33 Jaroslav Buchta
napsal(a):</p>
<p class="MsoNormal">> Diky za tip s tim casovacem, necekal
jsem, ze se da spatne udelat i </p>
<p class="MsoNormal">> 1ms timer ;-)</p>
<p class="MsoNormal">> Vypocty to stiha, predtim to bylo jen
32b a chodilo to stejne, kdyz to </p>
<p class="MsoNormal">> rozsirim na cely program, ktery toho
pocita 10x tolik tak se taky nic </p>
<p class="MsoNormal">> nezmeni. Az budu mit cas, pro
zajimavost si udelam pulzy na nejakem IO </p>
<p class="MsoNormal">> a zmerim, jak to dlouho trva.</p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">> Dne 13.04.2021 v 20:28 Martin Locker
napsal(a):</p>
<p class="MsoNormal">>> Ještě teď koukám, že ty výpočty
nejsou zcela triviální. Ono násobení </p>
<p class="MsoNormal">>> a dělení 64-bitových čísel na
osmibitu při 16MHz bude chvíli trvat. </p>
<p class="MsoNormal">>> Nejsem si jist, že se to za 1ms
stihne (bude to asi dost na hraně, </p>
<p class="MsoNormal">>> chtělo by to změřit).</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> S přáním pevného zdraví</p>
<p class="MsoNormal">>> Martin Locker</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> ----- Původní zpráva -----</p>
<p class="MsoNormal">>> Odesilatel: Jaroslav Buchta
(<a class="moz-txt-link-abbreviated" href="mailto:jaroslav.buchta@hascomp.cz">jaroslav.buchta@hascomp.cz</a>)</p>
<p class="MsoNormal">>> Datum: 13/04/2021 20:06</p>
<p class="MsoNormal">>> Příjemce: HW-news
(<a class="moz-txt-link-abbreviated" href="mailto:hw-list@list.hw.cz">hw-list@list.hw.cz</a>)</p>
<p class="MsoNormal">>> Předmět: AVR arduino potize</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Snazim se pomoct se zpracovanim
signalu, vzorkovani po 1ms a zda se, ze</p>
<p class="MsoNormal">>> neco se v knihovnach seka (tipuju
obsluhu serv) a za 100ms mi to vynecha</p>
<p class="MsoNormal">>> tak 2-3 cykly, za sekundu asi 25
takže je to asi celkem rovnoměrné.</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Dá se nějak pověsit na ISR 1ms od
timeru 0? Podle zdrojaku to na nejakou</p>
<p class="MsoNormal">>> možnost callback fce nevypada
(timer1 je použit pro serva)</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Neřešim zatim teda, jestli to
nevynechava i ta přerušeni. Jako</p>
<p class="MsoNormal">>> doporučuju synovi hodit ten AVR
drek po psovi ale zatim rychlou nahradu</p>
<p class="MsoNormal">>> nemame ;-)</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Zkousel jsem Nucleo303RE, to
funguje i jako arduino hezky ale je to</p>
<p class="MsoNormal">>> velke. Neco velikosti Arduino Nano
s normalnim 32b procesorem neni?</p>
<p class="MsoNormal">>> (nasel uz nejakou exotiku CM4 ale
maji to jen na mouseru a moc se mi to</p>
<p class="MsoNormal">>> nelibi, odkaz ted nemam)</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Jo, a jeste to vynechava znaky
vysilane na serial, zcela nahodne, nekdy</p>
<p class="MsoNormal">>> to jede pul minuty bez vypadku,
nekdy vypadne znak po par sekundach,</p>
<p class="MsoNormal">>> nejaky znamy problem? Terminalem
to neni, zkousel jsem ruzne ktere mi</p>
<p class="MsoNormal">>> normalne fungujou na 115200</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Ono to teda nejak funguje jak jsem
to zkorigoval, ale se.e me to...</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> V loop se volaji v redukovane
verzi jen tyto metody</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> #define MSGPERIOD 1000</p>
<p class="MsoNormal">>> void CDataProc::Message()</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> uint32_t ms = millis();</p>
<p class="MsoNormal">>> if (ms - msgMillis <
MSGPERIOD)</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> return;</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>> msgMillis += MSGPERIOD;</p>
<p class="MsoNormal">>> char s[40];</p>
<p class="MsoNormal">>> sprintf (s, "%10lu, %4u, %5u,
%5u", msgMillis, cycles,</p>
<p class="MsoNormal">>> (uint16_t)(valSignalFilt >>
8), (uint16_t)(valAvgFilt >> 24));</p>
<p class="MsoNormal">>> Serial.println(s);</p>
<p class="MsoNormal">>> cycles=0;</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> uint16_t CDataProc::GetSignal()</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> uint16_t sensorValue =
(uint16_t)analogRead(A0);</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> if (firstPass){</p>
<p class="MsoNormal">>> valAvgFilt =
((uint64_t)sensorValue << 24) | 0x7fffffUL;</p>
<p class="MsoNormal">>> valSignalFilt =
((uint32_t)sensorValue << 8) | 0x7f;</p>
<p class="MsoNormal">>> firstPass = false;</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>> else</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> uint32_t ms = millis();</p>
<p class="MsoNormal">>> if (ms - lastMillis >
0)</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> cycles++;</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>> while (ms - lastMillis
> 0)</p>
<p class="MsoNormal">>> {</p>
<p class="MsoNormal">>> lastMillis++;</p>
<p class="MsoNormal">>> valAvgFilt =
(valAvgFilt*(coefAvg-1) +</p>
<p class="MsoNormal">>> (((uint64_t)sensorValue <<
24) | 0x7fffffUL))/coefAvg;</p>
<p class="MsoNormal">>> valSignalFilt =
(valSignalFilt*(coefSignal-1) +</p>
<p class="MsoNormal">>> (((uint32_t)sensorValue <<
8) | 0x7f))/coefSignal;</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>> Message();</p>
<p class="MsoNormal">>> return (int16_t(valSignalFilt
>> 8)) - (int16_t(valAvgFilt >> 24));</p>
<p class="MsoNormal">>> }</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> Vypis vypada takto napr.</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> 53000, 976, 741, 741</p>
<p class="MsoNormal">>> 54000, 977, 741, 741</p>
<p class="MsoNormal">>> 55000, 976, 741, 74
//vypadek</p>
<p class="MsoNormal">>> 56000, 977, 741, 741</p>
<p class="MsoNormal">>> 57000, 977, 741, 741</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>> 188000, 976, 741, 741</p>
<p class="MsoNormal">>> 189000, 977, 741, 741</p>
<p class="MsoNormal">>> 190000, 976, 741, 741</p>
<p class="MsoNormal">>> 191000, 977, 41, 741
//vypadek</p>
<p class="MsoNormal">>> 192000, 976, 741, 741</p>
<p class="MsoNormal">>> 193000, 977, 741, 741</p>
<p class="MsoNormal">>> 194000, 977, 741, 741</p>
<p class="MsoNormal">>> 15000, 976, 741, 741
//vypadek</p>
<p class="MsoNormal">>> 196000, 977, 741, 741</p>
<p class="MsoNormal">>> 197000, 976, 741, 741</p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>>
_______________________________________________</p>
<p class="MsoNormal">>> HW-list mailing list - sponsored
by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a></p>
<p class="MsoNormal">>> <a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a></p>
<p class="MsoNormal">>>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></p>
<p class="MsoNormal">>><o:p> </o:p></p>
<p class="MsoNormal">>>
_______________________________________________</p>
<p class="MsoNormal">>> HW-list mailing list - sponsored
by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a></p>
<p class="MsoNormal">>> <a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a></p>
<p class="MsoNormal">>>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">><o:p> </o:p></p>
<p class="MsoNormal">>
_______________________________________________</p>
<p class="MsoNormal">> HW-list mailing list - sponsored by
<a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a></p>
<p class="MsoNormal">> <a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a></p>
<p class="MsoNormal">>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">_______________________________________________</p>
<p class="MsoNormal">HW-list mailing list - sponsored by
<a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a></p>
<p class="MsoNormal"><a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a></p>
<p class="MsoNormal"><a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
</body>
</html>