<?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=8478&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-09-15T20:40:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=8478&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-09-15T20:40:25+01:00</updated>
<published>2014-09-15T20:40:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95588#p95588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95588#p95588"/>
<title type="html"><![CDATA[Re: Użycie timera do układu mierzącego temperaturę i wilgotn]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95588#p95588"><![CDATA[
<div class="quotetitle">Maverick napisał(a):</div><div class="quotecontent"><br />Chciałbym zapytać czy wprowadzenie <br />[syntax=c]TCCR2 |= (1&lt;&lt;WGM21); TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20); OCR2 = 78; TIMSK |= (1&lt;&lt;OCIE2);[/syntax]<br />do main.c zmieni coś w działaniu programu?<br /></div><br />Przerwania wydłużą krótkie opóźnienia jeśli akurat podczas ich wykonywania nastąpi to przerwanie. Błąd będzie tym większy im mniejsze jest taktowanie i dłuższa funkcja obsługi przerwania.<br />Oprócz powyższego kodu należy dodać jeszcze funkcję obsługi przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 15 wrz 2014, o 20:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Maverick]]></name></author>
<updated>2014-09-11T14:47:07+01:00</updated>
<published>2014-09-11T14:47:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95088#p95088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95088#p95088"/>
<title type="html"><![CDATA[Użycie timera do układu mierzącego temperaturę i wilgotność]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8478&amp;p=95088#p95088"><![CDATA[
Witam!<br />Mam zapytanie dotyczące użycia timera sprzętowego. <br />Na mojej płytce stykowej mam podłączony czujnik DHT11, który współpracuje z atmegą 8. Jeżeli chodzi o sam kod też jest dość prosty<br /><br />dht11.c<br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;dh11.h&quot;<br /><br /><br />#if DHT_FLOAT == 1<br />int8_t dht_getdata(float *temperature, float *humidity) {<br />#endif<br />uint8_t bits&#91;5&#93;;<br />uint8_t i,j = 0;<br /><br />memset(bits, 0, sizeof(bits));<br /><br /><br />DHT_DDR |= (1&lt;&lt;DHT_INPUTPIN); //output<br />DHT_PORT |= (1&lt;&lt;DHT_INPUTPIN); //high<br />_delay_us(100);<br /><br /><br />DHT_PORT &amp;= ~(1&lt;&lt;DHT_INPUTPIN); //low<br /><br />#if DHT_TYPE == DHT_DHT11<br />_delay_us(500);<br />#endif<br />DHT_PORT |= (1&lt;&lt;DHT_INPUTPIN); //high<br />DHT_DDR &amp;= ~(1&lt;&lt;DHT_INPUTPIN); //input<br />_delay_us(40);<br /><br /><br />if((DHT_PIN &amp; (1&lt;&lt;DHT_INPUTPIN))) {<br />return -1;<br />}<br />_delay_us(80);<br /><br />if(!(DHT_PIN &amp; (1&lt;&lt;DHT_INPUTPIN))) {<br />return -1;<br />}<br />_delay_us(80);<br /><br /><br />uint16_t timeoutcounter = 0;<br />for (j=0; j&lt;5; j++) { //read 5 byte<br />uint8_t result=0;<br />for(i=0; i&lt;8; i++) {//read every bit<br />timeoutcounter = 0;<br />while(!(DHT_PIN &amp; (1&lt;&lt;DHT_INPUTPIN))) { //wait for an high input (non blocking)<br />timeoutcounter++;<br />if(timeoutcounter &gt; DHT_TIMEOUT) {<br />return -1; //timeout<br />}<br />}<br />_delay_us(30);<br />if(DHT_PIN &amp; (1&lt;&lt;DHT_INPUTPIN)) //if input is high after 30 us, get result<br />result |= (1&lt;&lt;(7-i));<br />timeoutcounter = 0;<br />while(DHT_PIN &amp; (1&lt;&lt;DHT_INPUTPIN)) { //wait until input get low (non blocking)<br />timeoutcounter++;<br />if(timeoutcounter &gt; DHT_TIMEOUT) {<br />return -1; //timeout<br />}<br />}<br />}<br />bits&#91;j&#93; = result;<br />}<br /><br /><br />DHT_DDR |= (1&lt;&lt;DHT_INPUTPIN); //output<br />DHT_PORT |= (1&lt;&lt;DHT_INPUTPIN); //low<br />_delay_us(100);<br /><br /><br />if ((uint8_t)(bits&#91;0&#93; + bits&#91;1&#93; + bits&#91;2&#93; + bits&#91;3&#93;) == bits&#91;4&#93;) {<br />//return temperature and humidity<br />#if DHT_TYPE == DHT_DHT11<br />uint16_t rawhumidity = bits&#91;0&#93;&lt;&lt;8 | bits&#91;1&#93;;<br />uint16_t rawtemperature = bits&#91;2&#93;&lt;&lt;8 | bits&#91;3&#93;;<br />if(rawtemperature &amp; 0x8000) {<br />*temperature = (float)((rawtemperature &amp; 0x7FFF) / 10.0) * -1.0;<br />} else {<br />*temperature = (float)(rawtemperature)/10.0;<br />}<br />*humidity = (float)(rawhumidity)/10.0;<br />#endif<br />return 0;<br />}<br /><br />return -1;<br />}<br /><br />#if DHT_FLOAT == 1<br />int8_t dht_gettemperaturehumidity(float *temperature, float *humidity) {<br />#endif<br />return dht_getdata(temperature, humidity);<br />}[/syntax]<br /><br />dht11.h<br />[syntax=c]#ifndef DHT11_H_<br />#define DHT11_H_<br /><br />#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br /><br />//setup port<br />#define DHT_DDR DDRD<br />#define DHT_PORT PORTD<br />#define DHT_PIN PIND<br />#define DHT_INPUTPIN PD1<br /><br />//sensor type<br />#define DHT_DHT11 1<br />#define DHT_TYPE DHT_DHT11<br /><br />//enable decimal precision (float)<br /><br />#if DHT_TYPE == DHT_DHT11<br />#define DHT_FLOAT 1<br />#endif<br /><br />//timeout retries<br />#define DHT_TIMEOUT 200<br /><br />//functions<br />#if DHT_FLOAT == 1<br />extern int8_t dht_gettemperature(float *temperature);<br />extern int8_t dht_gethumidity(float *humidity);<br />extern int8_t dht__gettemperaturehumidity(int8_t *temperature, int8_t *humidity);<br /><br />#endif<br /><br />#endif /* DHT11_H_ */[/syntax]<br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;math.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;DHT11/dht11.h&quot;<br /><br /><br />const uint8_t znak_stopien&#91;&#93; PROGMEM = {6,9,9,6,32,32,32,32};// wzór znaku stopień w pamięci FLASH<br /><br />uint8_t znak_linia&#91;&#93;  = {32,1,3,6,12,24,16,32 };<br /><br /><br /><br /><br />int main(void)<br />{<br /><br /><br />char printbuf&#91;10&#93;;<br /><br />DDRD |= (1&lt;&lt;PD2);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTD |= (1&lt;&lt;PD2);// załączamy podświetlenie LCD - stan wysoki<br /><br /><br />lcd_init();<br /><br />sei();<br /><br /><br />#if DHT_FLOAT == 1<br />float temperature = 0;<br />float humidity = 0;<br />#endif<br /><br />        <br />        if(dht_gettemperaturehumidity(&amp;temperature, &amp;humidity) != -1)<br />        {<br /><br />           #if DHT_FLOAT == 1<br />           dtostrf(temperature, 3, 1, printbuf);<br />           #endif<br />           lcd_locate(0,0);<br />           lcd_str(&quot;TEMPERATURE&quot;);<br />           lcd_locate(0,13);<br />           lcd_str(printbuf);<br />           lcd_locate(0,18);<br />           lcd_str(&quot;\x81&quot;&quot;C&quot;);<br /><br />           #if DHT_FLOAT == 1<br />           dtostrf(humidity, 3, 1, printbuf);<br />           #endif<br />           lcd_locate(1,0);<br />           lcd_str(&quot;HUMIDITY&quot;);<br />           lcd_locate(1,13);<br />           lcd_str(printbuf);<br />           lcd_locate(1,19);<br />           lcd_str(&quot;%&quot;);<br /><br />           }<br /><br />}<br /><br />}[/syntax]<br />Chciałbym zapytać czy wprowadzenie <br />[syntax=c]TCCR2 |= (1&lt;&lt;WGM21); TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20); OCR2 = 78; TIMSK |= (1&lt;&lt;OCIE2);[/syntax]<br />do main.c zmieni coś w działaniu programu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2203">Maverick</a> — 11 wrz 2014, o 14:47</p><hr />
]]></content>
</entry>
</feed>