⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analog_8c-source.html

📁 用AVR453开发的电池保护板的C语言程序,希望对大家有用!
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00247"></a>00247 <a name="l00248"></a>00248   <span class="keywordflow">return</span> temp;<a name="l00249"></a>00249 }<a name="l00250"></a>00250 <a name="l00251"></a>00251 <a name="l00252"></a><a class="code" href="analog_8h.html#3c8244d2ebbad343ccdb735d6da81fcf">00252</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#3c8244d2ebbad343ccdb735d6da81fcf">AtRateTTE</a>(<span class="keywordtype">void</span>)    <span class="comment">// cmd = 6</span><a name="l00253"></a>00253 {<a name="l00254"></a>00254   <span class="keywordtype">signed</span> <span class="keywordtype">long</span> calc;<a name="l00255"></a>00255   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> temp = (<span class="keywordtype">unsigned</span> int)<a class="code" href="bootldr_8h.html#577088f1d553884a9efe4d128010f081">SMBvar_int</a>[<a class="code" href="bootldr_8h.html#a1524e950b31cc765e9520a57e6fa3df">SMBV_AtRate</a>];<a name="l00256"></a>00256 <a name="l00257"></a>00257   <span class="keywordflow">if</span>((<span class="keywordtype">signed</span> <span class="keywordtype">int</span>) temp &lt; 0)     <span class="comment">//For TTE, AtRate must be NEGATIVE &amp; NON-ZERO.</span><a name="l00258"></a>00258   {<a name="l00259"></a>00259     temp = -((<span class="keywordtype">signed</span> int) temp);<a name="l00260"></a>00260 <a name="l00261"></a>00261     <span class="keywordflow">if</span>(<a class="code" href="bootldr_8h.html#c7f9993307a3c3559f56d0353613de62">SMBvariables</a>[<a class="code" href="bootldr_8h.html#9b9498cc5b1927e9d63da15b33c851a4">SMBV_BattMode</a>][<a class="code" href="bootldr_8h.html#c1d4ce681b76fba522c9e4b1c9b08e43">hibyte</a>] &amp; <a class="code" href="bootldr_8h.html#7444c17c928cb175b15b8ed2309a02eb">CAPACITY_MODE</a>)     <span class="comment">//use mW</span><a name="l00262"></a>00262     {<a name="l00263"></a>00263       calc = <a class="code" href="analog_8c.html#f1722fe2bd2d29efe386f8c760effa44">GetCharge_mAmins</a>() * <a class="code" href="pack_8h.html#060b1515ea1272dfdba0a8af7874c585">PACK_MINV</a>;    <span class="comment">//this is now in uWmins</span><a name="l00264"></a>00264       calc = calc / 10000;                      <span class="comment">//this is now in 10mWmins</span><a name="l00265"></a>00265       temp = calc / temp;                       <span class="comment">// (10mWmins / 10mW) = mins</span><a name="l00266"></a>00266     }<a name="l00267"></a>00267     <span class="keywordflow">else</span> <span class="comment">//use mA in calculations</span><a name="l00268"></a>00268     {<a name="l00269"></a>00269       calc = <a class="code" href="analog_8c.html#f1722fe2bd2d29efe386f8c760effa44">GetCharge_mAmins</a>();<a name="l00270"></a>00270       temp = calc / temp;                       <span class="comment">// (mAmins / mA) = mins</span><a name="l00271"></a>00271     }<a name="l00272"></a>00272   }<a name="l00273"></a>00273   <span class="keywordflow">else</span>  <span class="comment">//error</span><a name="l00274"></a>00274     temp = 65535;<a name="l00275"></a>00275 <a name="l00276"></a>00276   <span class="keywordflow">return</span> temp;<a name="l00277"></a>00277 }<a name="l00278"></a>00278 <a name="l00279"></a>00279 <a name="l00280"></a><a class="code" href="analog_8h.html#06c4f2e3d2986433c675adeea96707cf">00280</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#06c4f2e3d2986433c675adeea96707cf">AtRateOK</a>(<span class="keywordtype">void</span>)     <span class="comment">// cmd = 7</span><a name="l00281"></a>00281 {<a name="l00282"></a>00282   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> calc;                            <span class="comment">//used as available capacity</span><a name="l00283"></a>00283   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> temp = (<span class="keywordtype">unsigned</span> int)<a class="code" href="bootldr_8h.html#577088f1d553884a9efe4d128010f081">SMBvar_int</a>[<a class="code" href="bootldr_8h.html#a1524e950b31cc765e9520a57e6fa3df">SMBV_AtRate</a>]; <span class="comment">//used as total rate of consumption</span><a name="l00284"></a>00284 <a name="l00285"></a>00285   <span class="keywordflow">if</span>((<span class="keywordtype">signed</span> <span class="keywordtype">int</span>) temp &lt; 0)     <span class="comment">//For AtRateOK, AtRate must be NEGATIVE &amp; NON-ZERO.</span><a name="l00286"></a>00286   {<a name="l00287"></a>00287     temp = -((<span class="keywordtype">signed</span> int) temp);<a name="l00288"></a>00288 <a name="l00289"></a>00289     <span class="keywordflow">if</span>(<a class="code" href="bootldr_8h.html#c7f9993307a3c3559f56d0353613de62">SMBvariables</a>[<a class="code" href="bootldr_8h.html#9b9498cc5b1927e9d63da15b33c851a4">SMBV_BattMode</a>][<a class="code" href="bootldr_8h.html#c1d4ce681b76fba522c9e4b1c9b08e43">hibyte</a>] &amp; <a class="code" href="bootldr_8h.html#7444c17c928cb175b15b8ed2309a02eb">CAPACITY_MODE</a>)     <span class="comment">//use mW in calculations</span><a name="l00290"></a>00290     {<a name="l00291"></a>00291       calc = <a class="code" href="analog_8c.html#d4163799d5840557b35dc6da99c3daf5">Current1Sec</a>() * <a class="code" href="analog_8c.html#a11443421116209f2df8cb070059ccc3">GetVoltage</a>();      <span class="comment">//in uW (alternate: can use PACK_MINV)</span><a name="l00292"></a>00292       calc = calc / 10000;                      <span class="comment">//in 10mW</span><a name="l00293"></a>00293       temp += calc;     <span class="comment">//combine AtRate and present load; shouldn't overflow!</span><a name="l00294"></a>00294 <a name="l00295"></a>00295       calc = <a class="code" href="analog_8c.html#f1722fe2bd2d29efe386f8c760effa44">GetCharge_mAmins</a>();<a name="l00296"></a>00296       calc = calc * <a class="code" href="pack_8h.html#060b1515ea1272dfdba0a8af7874c585">PACK_MINV</a>;<a name="l00297"></a>00297       calc = calc * 6;                          <span class="comment">//this is now in mW-10Secs</span><a name="l00298"></a>00298       calc = calc / 10;                         <span class="comment">//this is now in 10mW-10Secs</span><a name="l00299"></a>00299     }<a name="l00300"></a>00300     <span class="keywordflow">else</span> <span class="comment">//use mA in calculations</span><a name="l00301"></a>00301     {<a name="l00302"></a>00302       temp += <a class="code" href="analog_8c.html#d4163799d5840557b35dc6da99c3daf5">Current1Sec</a>();                    <span class="comment">//add in the present discharge rate too!</span><a name="l00303"></a>00303       calc = <a class="code" href="analog_8c.html#f1722fe2bd2d29efe386f8c760effa44">GetCharge_mAmins</a>() * 6;            <span class="comment">//convert to 10-second rate</span><a name="l00304"></a>00304     }<a name="l00305"></a>00305 <a name="l00306"></a>00306     <span class="keywordflow">if</span>(calc &gt; temp)<a name="l00307"></a>00307       temp = 65535;     <span class="comment">//return TRUE, as there is enough energy.</span><a name="l00308"></a>00308     <span class="keywordflow">else</span><a name="l00309"></a>00309       temp = 0;         <span class="comment">//return FALSE. We're almost dead!</span><a name="l00310"></a>00310   }<a name="l00311"></a>00311   <span class="keywordflow">else</span>  <span class="comment">//error</span><a name="l00312"></a>00312     temp = 65535;<a name="l00313"></a>00313 <a name="l00314"></a>00314   <span class="keywordflow">return</span> temp;<a name="l00315"></a>00315 }<a name="l00316"></a>00316 <a name="l00317"></a>00317 <a name="l00318"></a><a class="code" href="analog_8h.html#ede1495ee5c44a7241d4d4cc6523c20f">00318</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#ede1495ee5c44a7241d4d4cc6523c20f">GetTemperature</a>(<span class="keywordtype">void</span>)       <span class="comment">// cmd = 8</span><a name="l00319"></a>00319 { <span class="comment">// Returns temperature of MEGA406, in 0.1 degrees Kelvin.</span><a name="l00320"></a>00320   <span class="keywordflow">return</span> <a class="code" href="analog_8c.html#5c282f62b6e03b02aa127a42394eb3b3">ReadTemperature</a>(0);    <span class="comment">//channel 0 is the on-chip sensor.</span><a name="l00321"></a>00321 }<a name="l00322"></a>00322 <a name="l00323"></a>00323 <a name="l00324"></a>00324 <a name="l00325"></a><a class="code" href="analog_8h.html#ce470de6f31e679907a3955576ee852e">00325</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="analog_8c.html#ce470de6f31e679907a3955576ee852e">RelativeSOC</a>(<span class="keywordtype">void</span>)         <span class="comment">// cmd = 13</span><a name="l00326"></a>00326 {<a name="l00327"></a>00327   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> charge = (<a class="code" href="analog_8h.html#a9c10ab1955850ea129fa85effe6a186">RunningAcc</a> * 100) / <a class="code" href="analog_8c.html#e4d5cdf56dbdf521edbff27852086419">MaxTopAcc</a>;<a name="l00328"></a>00328 <span class="comment">//  return (unsigned int) charge;</span><a name="l00329"></a>00329   <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) charge;<a name="l00330"></a>00330 }<a name="l00331"></a>00331 <a name="l00332"></a>00332 <a name="l00333"></a><a class="code" href="analog_8h.html#7f04be2c2ed7c17db3824de3355d8435">00333</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#7f04be2c2ed7c17db3824de3355d8435">AbsoluteSOC</a>(<span class="keywordtype">void</span>)          <span class="comment">// cmd = 14</span><a name="l00334"></a>00334 {<a name="l00335"></a>00335   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> charge = (<a class="code" href="analog_8c.html#eefe99d57b5c90295fb1be3c4f8453cc">GetCharge</a>() * 100);<a name="l00336"></a>00336   charge = charge / <a class="code" href="pack_8h.html#354d79dad6f137ecc73a52a87062984b">PACK_DESIGNCAPTYP</a>;<a name="l00337"></a>00337   <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) charge;<a name="l00338"></a>00338 }<a name="l00339"></a>00339 <a name="l00340"></a>00340 <a name="l00341"></a><a class="code" href="analog_8h.html#0fc39f9030957108d96813b8cbc1ea9f">00341</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#0fc39f9030957108d96813b8cbc1ea9f">RemainingCap</a>(<span class="keywordtype">void</span>)         <span class="comment">// cmd = 15</span><a name="l00342"></a>00342 { <a name="l00343"></a>00343   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> calc;<a name="l00344"></a>00344   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> charge = <a class="code" href="analog_8c.html#eefe99d57b5c90295fb1be3c4f8453cc">GetCharge</a>();    <span class="comment">//in mAH</span><a name="l00345"></a>00345 <a name="l00346"></a>00346   <span class="keywordflow">if</span>(<a class="code" href="bootldr_8h.html#c7f9993307a3c3559f56d0353613de62">SMBvariables</a>[<a class="code" href="bootldr_8h.html#9b9498cc5b1927e9d63da15b33c851a4">SMBV_BattMode</a>][<a class="code" href="bootldr_8h.html#c1d4ce681b76fba522c9e4b1c9b08e43">hibyte</a>] &amp; <a class="code" href="bootldr_8h.html#7444c17c928cb175b15b8ed2309a02eb">CAPACITY_MODE</a>)       <span class="comment">//use mW in calculations</span><a name="l00347"></a>00347   {<a name="l00348"></a>00348     calc = charge * <a class="code" href="analog_8c.html#a11443421116209f2df8cb070059ccc3">GetVoltage</a>();       <span class="comment">//in uWH</span><a name="l00349"></a>00349     charge = calc  / 10000;             <span class="comment">//in 10mWH</span><a name="l00350"></a>00350   }<a name="l00351"></a>00351 <a name="l00352"></a>00352   <span class="keywordflow">return</span> charge;<a name="l00353"></a>00353 }<a name="l00354"></a>00354 <a name="l00355"></a>00355 <a name="l00356"></a>00356 <a name="l00357"></a><a class="code" href="analog_8h.html#437c02cddab6b8e61788f439c91e5606">00357</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="analog_8c.html#437c02cddab6b8e61788f439c91e5606">FullChgCap</a>(<span class="keywordtype">void</span>)           <span class="comment">//cmd = 16</span><a name="l00358"></a>00358 { <a name="l00359"></a>00359   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> calc = <a class="code" href="analog_8c.html#a91f15b9bf2780f2b7b066720b7f7166">GetMaxChg</a>();<a name="l00360"></a>00360 <a name="l00361"></a>00361   <span class="keywordflow">if</span>(<a class="code" href="bootldr_8h.html#c7f9993307a3c3559f56d0353613de62">SMBvariables</a>[<a class="code" href="bootldr_8h.html#9b9498cc5b1927e9d63da15b33c851a4">SMBV_BattMode</a>][<a class="code" href="bootldr_8h.html#c1d4ce681b76fba522c9e4b1c9b08e43">hibyte</a>] &amp; <a class="code" href="bootldr_8h.html#7444c17c928cb175b15b8ed2309a02eb">CAPACITY_MODE</a>)       <span class="comment">//use mW in calculations</span><a name="l00362"></a>00362   {<a name="l00363"></a>00363     calc = calc * <a class="code" href="pack_8h.html#b700b50dd791836e9152b2ded282b10d">PACK_NOMINALV</a>;<a name="l00364"></a>00364     calc = calc / 10000;<a name="l00365"></a>00365   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -