<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=8&amp;t=23541&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-01-15T23:01:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=23541&amp;mode</id>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-01-15T23:01:00+01:00</updated>
<published>2021-01-15T23:01:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23541&amp;p=230606#p230606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23541&amp;p=230606#p230606"/>
<title type="html"><![CDATA[Czy dobrze uśredniam wartość ADC?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23541&amp;p=230606#p230606"><![CDATA[
Cześć, próbuję zrobić termometr z analogowym czujnikiem temperatury TMP36 i mikrokontrolerem Atmega32A-PU.  Czy mój sposób uśredniania wartości ADC jest poprawny? Jeżeli nie to jak to powinienem robić?<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;HD44780.h&quot;<br /><br />#define F_CPU 1000000UL<br /><br />#define VREF_DIVIDED 25<br /><br />uint16_t adc_value;<br />uint16_t voltage_value;<br />int16_t cz_d, cz_u;<br />int16_t temp;<br />char decimal_buffer&#91;33&#93;;<br />char fraction_buffer&#91;33&#93;;<br /><br />void ADC_init(void);<br /><br />int16_t average_adc(void);<br /><br />int main(void)<br />{<br />// LCD init<br />LCD_Initalize();<br /><br />// ADC init<br />ADC_init();<br /><br />while (1)<br />{<br />adc_value = average_adc();<br />voltage_value = adc_value * VREF_DIVIDED;<br />temp = voltage_value / 10 - 500;<br />cz_d = temp/10;<br />cz_u = temp%10;<br /><br />itoa(cz_d, decimal_buffer, 10);<br />itoa(cz_u, fraction_buffer, 10);<br />LCD_Clear();<br />LCD_GoTo(2, 0);<br />LCD_WriteText(&quot;Temperatura:&quot;);<br />LCD_GoTo(6, 1);<br />LCD_WriteText(decimal_buffer);<br />LCD_WriteText(&quot;.&quot;);<br />LCD_WriteText(fraction_buffer);<br />_delay_ms(500);<br />}<br />}<br /><br />void ADC_init(void)<br />{<br />DDRA &amp;= ~(1 &lt;&lt; PA5) | ~(1 &lt;&lt; PA6) | ~(1 &lt;&lt; PA4);<br />ADMUX |= (1 &lt;&lt; REFS1) | (1 &lt;&lt; REFS0); // Vref = 2.56V<br />ADMUX |= (1 &lt;&lt; MUX0) | (1 &lt;&lt; MUX2); // Pomiar na ADC5<br />ADCSRA |= (1 &lt;&lt; ADEN) | (1 &lt;&lt; ADPS0) | (1 &lt;&lt; ADPS1); // Włączenie ADC i preskaler = 64<br />}<br /><br />int16_t average_adc(void)<br />{<br />int16_t correct_adc;<br />int16_t temp;<br /><br />for(int i = 0; i&lt;64; i++)<br />{<br />ADCSRA |= (1 &lt;&lt; ADSC);<br />while(ADCSRA &amp; (1 &lt;&lt; ADSC));<br />temp+=ADC;<br />}<br />correct_adc = temp / 64;<br /><br />return correct_adc;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 15 sty 2021, o 23:01</p><hr />
]]></content>
</entry>
</feed>