<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
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;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang=CS link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Tak úspěšně otestováno:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>#define F_CPUnom 20000000L</p><p class=MsoNormal>#define F_CPU (F_CPUnom + (F_CPUnom * (int8_t)SIGROW.OSC20ERR5V) / 1024L)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Dal jsem v 1kHz přerušení invertovat port. Bez korekce osciloskop ukáže 503,něco Hz, takto 500,9. Stejně dopadl i _delay_ms z delay.h.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Zajímavé je, že veškeré pokusy o použití <span lang=EN-US>>>10 </span>místo /1024 selhaly a lezly z toho ňáký MHz. A to včetně varianty, kdy jsem místo (int8_t)SIGROW.OSC20ERR5V) dal natvrdo 6L.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Což znamená, že chybu má nejen DS od Microchipu (opačný směr korekce), ale i wizard v CodeVisionu, kde jsem se inspiroval ohledně <span lang=EN-US>>>10. Původně jsem totiž zkopíroval jím vygenerovaný řádek kódu a místo BaudNěco dal </span>F_CPUnom.<span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>PH</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:sinkomiro@gmail.com">Miroslav Šinko</a><o:p></o:p></p></div><p class=MsoNormal>Jaj, tak to je OK. Ano, rano mudrejsie vecera, pochopil som to naozaj</p><p class=MsoNormal>nespravne :)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>miro</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>št 30. 4. 2020 o 3:23 Pavel Hudecek <edizon@seznam.cz> napísal(a):</p><p class=MsoNormal>> Myslím, že došlo k nedorozumění. Nebudu nic měřit, jen chci místo konstanty F_CPU dát makro, které s použitím SIGROW.OSC20ERR5V vypočítá výrobcem změřenou hodnotu. Žádný build pro každý ks.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Od: Miroslav Šinko</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Pri kusovej vyrobe mozno.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Nominalna hodnota F_CPU je dolezita pre jeden build SW, ktory nahrate do</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> vsetkych MCU seriovo vyrabaneho produktu. Odchylky jednotlivych kusov su</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> v korekcnych registroch a o to sa nijak nestarate. Nie je rozumne mozne</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> merat frekvenciu osc kazdeho MCU, ku kazdemu robit specialny build a</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> uchovavat variant SW s dokumentaciou serioveho cisla vyrobku. Problemy s</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> tym spojene nestoja za to. Staci update SW a mate X-nasobne buildovanie</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> a zlozitu logistiku distribucie.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Este ma napada dalsi dovod, preco pouzit nominalnu F_CPU a korekcny</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> register. Priklad USB-AVR, kde si samotny SW urobil kalibraciu a zapisal</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> do registra. Ked to vezmeme zo siria, da sa robit relativne casta</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> rekalibracia a tak reagovat na zmeny teploty, starnutie suciastok</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> (vseobecne podmienok). Hodnota kalibracneho registra sa pouziva potom na</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> roznych miestach SW pocas runtime, kludne v roznych vypoctoch (inac sa</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> pocita BdRt, inac USB clock, apod). Ak budete mat v zdrojakoch fixnu,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> hoci v danom momente a podmienkach presne nastavenu F_CPU a nikde v kode</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> nebudete brat ohlad na kalibracnu hodnotu, tak popisany sposob</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> rekalibracie nie je mozny.</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> On 29.4.2020 10:20, Pavel Hudecek wrote:</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > Dotaz: Je nějaký důvod, proč místo jednotlivých korekcí na různých</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > místech, nenahradit konstantu F_CPU makrem, nebo funkcí stejného jména,</p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> > ze kterého rovnou vyleze správný Fclk?</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>