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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-11T16:18:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=12907&amp;mode</id>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-09-11T16:18:25+01:00</updated>
<published>2015-09-11T16:18:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139556#p139556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139556#p139556"/>
<title type="html"><![CDATA[Re: DHT11 + Atmega32 16Mhz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139556#p139556"><![CDATA[
Każda znaleziona biblioteka do DTH w sieci wywiesza procka i timery sprzętowe na sporą ilość czasu ....<br />włącz sobie diodę która będzie migała np co 25ms i na własne oczy zobaczysz że odczyt DTH wywiesza cały program a w niektórych przypadkach jest to strasznie uciążliwe dlatego też dobrym rozwiązaniem będzie postarać się zamienić delay na timery <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 11 wrz 2015, o 16:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Andrzej]]></name></author>
<updated>2015-09-11T14:16:17+01:00</updated>
<published>2015-09-11T14:16:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139550#p139550</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139550#p139550"/>
<title type="html"><![CDATA[Re: DHT11 + Atmega32 16Mhz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139550#p139550"><![CDATA[
To Ja porzucę Ci biblioteki do dht11<br /><br />DHT11.c<br /><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;dht11.h&quot;<br /><br />#define DHT11_ERROR 255<br /><br />/*<br /> * pobieranie danych z dht11<br /> */<br />uint8_t dht11_getdata(uint8_t select) {<br />uint8_t bits&#91;5&#93;;<br />uint8_t i,j = 0;<br /><br />memset(bits, 0, sizeof(bits));<br /><br />//reset port<br />DHT11_DDR |= (1&lt;&lt;DHT11_INPUTPIN); //output<br />DHT11_PORT |= (1&lt;&lt;DHT11_INPUTPIN); //high<br />_delay_ms(100);<br /><br />//send request<br />DHT11_PORT &amp;= ~(1&lt;&lt;DHT11_INPUTPIN); //low<br />_delay_ms(18);<br />DHT11_PORT |= (1&lt;&lt;DHT11_INPUTPIN); //high<br />_delay_us(1);<br />DHT11_DDR &amp;= ~(1&lt;&lt;DHT11_INPUTPIN); //input<br />_delay_us(39);<br /><br />//check start condition 1<br />if((DHT11_PIN &amp; (1&lt;&lt;DHT11_INPUTPIN))) {<br />return DHT11_ERROR;<br />}<br />_delay_us(80);<br />//check start condition 2<br />if(!(DHT11_PIN &amp; (1&lt;&lt;DHT11_INPUTPIN))) {<br />return DHT11_ERROR;<br />}<br />_delay_us(80);<br /><br />//read the data<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 />while(!(DHT11_PIN &amp; (1&lt;&lt;DHT11_INPUTPIN))); //wait for an high input<br />_delay_us(30);<br />if(DHT11_PIN &amp; (1&lt;&lt;DHT11_INPUTPIN)) //if input is high after 30 us, get result<br />result |= (1&lt;&lt;(7-i));<br />while(DHT11_PIN &amp; (1&lt;&lt;DHT11_INPUTPIN)); //wait until input get low<br />}<br />bits&#91;j&#93; = result;<br />}<br /><br />//reset port<br />DHT11_DDR |= (1&lt;&lt;DHT11_INPUTPIN); //output<br />DHT11_PORT |= (1&lt;&lt;DHT11_INPUTPIN); //low<br />_delay_ms(100);<br /><br />//check checksum<br />if (bits&#91;0&#93; + bits&#91;1&#93; + bits&#91;2&#93; + bits&#91;3&#93; == bits&#91;4&#93;) {<br />if (select == 0) { //return temperature<br />return(bits&#91;2&#93;);<br />} else if(select == 1){ //return humidity<br />return(bits&#91;0&#93;);<br />}<br />}<br /><br />return DHT11_ERROR;<br />}<br /><br />/*<br /> * get temperature (0..50C)<br /> */<br />int8_t dht11_gettemperature() {<br />uint8_t ret = dht11_getdata(0);<br />if(ret == DHT11_ERROR)<br />return -1;<br />else<br />return ret;<br />}<br /><br />/*<br /> * get humidity (20..90%)<br /> */<br />int8_t dht11_gethumidity() {<br />uint8_t ret = dht11_getdata(1);<br />if(ret == DHT11_ERROR)<br />return -1;<br />else<br />return ret;<br />}[/syntax]<br /><br />i DHT11.h<br /><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 parameters<br />#define DHT11_DDR DDRC<br />#define DHT11_PORT PORTC<br />#define DHT11_PIN PINC<br />#define DHT11_INPUTPIN PC5<br /><br />extern int8_t dht11_gettemperature();<br />extern int8_t dht11_gethumidity();<br /><br />#endif[/syntax]<br /><br />Reszta to już powinna być prosta  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7001">Andrzej</a> — 11 wrz 2015, o 14:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojciech123]]></name></author>
<updated>2015-09-11T06:12:57+01:00</updated>
<published>2015-09-10T23:19:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139520#p139520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139520#p139520"/>
<title type="html"><![CDATA[DHT11 + Atmega32 16Mhz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12907&amp;p=139520#p139520"><![CDATA[
Witam wszystkich. Mam problem z czujnikiem DHT11.<br /><br />Oto mój kod pliku nagłówkowego:<br /><br />[syntax=c]#ifndef DHT11_H_<br />#define DHT11_H_<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />//DHT11 macros<br /><br />#define DHT11_PIN 0<br />#define DHT11_IN DDRA&amp;=~(1&lt;&lt;DHT11_PIN)<br />#define DHT11_OUT DDRA|=(1&lt;&lt;DHT11_PIN)<br />#define DHT11_ON PORTA|=(1&lt;&lt;DHT11_PIN)<br />#define DHT11_OFF PORTA&amp;=~(1&lt;&lt;DHT11_PIN)<br /><br /><br />//Timer macros<br /><br />#define reset TCCR0&amp;=~(1&lt;&lt;CS02)&amp;~(1&lt;&lt;CS01)&amp;~(1&lt;&lt;CS00)//makro stop timer<br />#define set_1024 TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00)// makro start timer z preskalerem 1024<br />#define set_256 TCCR0 |= (1&lt;&lt;CS02)<br />#define set_64 TCCR0 |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00)<br />#define set_8 TCCR0 |= (1&lt;&lt;CS01)<br /><br />int fail = 0;<br /><br /><br /><br /><br />int licznik = 0;<br /><br />void get_data(uint8_t * pointer )<br />{<br />_delay_ms(2000);<br /><br />DHT11_OUT;<br />DHT11_OFF;<br /><br />set_1024;<br />TCNT0 = 0;<br />while( TCNT0 &lt; 156  );<br />TCNT0 = 0;<br />while( TCNT0 &lt; 156 );<br />reset;<br /><br />set_8;<br />TCNT0 = 0;<br />DHT11_ON;<br />while( TCNT0 &lt; 60  );<br />reset;<br />DHT11_IN;<br /><br /><br />TCNT0 = 0;<br /><br />while (!(PINA &amp; (1 &lt;&lt; DHT11_PIN)))<br />{<br />if (TCNT0 &gt;= 200) break;<br />}<br /><br />TCNT0 = 0;<br /><br />while (PINA &amp; (1 &lt;&lt; DHT11_PIN)) {<br />if (TCNT0 &gt;= 200) break;<br />}<br /><br />TCNT0 = 0;<br /><br />for(int i = 0; i&lt;5; ++i )<br />{<br />for(int j = 7; j&gt;=0; --j )<br />{<br />TCNT0 = 0;<br />while (!(PINA &amp; (1 &lt;&lt; DHT11_PIN)));<br /><br />TCNT0 = 0;<br />while (PINA &amp; (1 &lt;&lt; DHT11_PIN));<br /><br />licznik = TCNT0;<br /><br />if(licznik &gt;= 52 &amp;&amp; licznik &lt;= 60 )(*pointer)&amp;=~(1&lt;&lt;j);<br /><br />if(licznik &gt;= 120 &amp;&amp; licznik &lt;= 180 )(*pointer)|=(1&lt;&lt;j);<br />}<br />pointer++;<br /><br />}<br /><br />reset;<br /><br />}<br /><br /><br />#endif /* DHT11_H_ */[/syntax]<br /><br /><br />Oraz funkcji main:<br /><br />[syntax=c]#ifndef F_CPU<br />#define F_CPU 16000000UL // 16 MHz clock speed<br />#endif<br /><br />#define D0 eS_PORTD0<br />#define D1 eS_PORTD1<br />#define D2 eS_PORTD2<br />#define D3 eS_PORTD3<br />#define D4 eS_PORTD4<br />#define D5 eS_PORTD5<br />#define D6 eS_PORTD6<br />#define D7 eS_PORTD7<br />#define RS eS_PORTC6<br />#define EN eS_PORTC7<br /><br /><br /><br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;lcd_woj.h&quot; //Can be download from the bottom of this article<br />#include &quot;DHT11.h&quot;<br /><br />uint8_t dane&#91;5&#93; = { 0b10100001, 0b00000001, 0b11000000, 0b00000001, 0b00000001};<br /><br /><br />uint8_t* pointer = &amp;dane&#91;0&#93;;<br /><br />int main(void)<br />{<br />_delay_ms(2000);<br /><br />  DDRD = 0xFF;<br />  DDRC = 0xFF;<br /><br />  Lcd8_Init();<br /><br />  while(1)<br />  {<br /><br />  get_data(pointer);<br />  Lcd8_Set_Cursor(2,7);<br />  Lcd8_Write_Char(dane&#91;0&#93;);<br />  Lcd8_Set_Cursor(1,7);<br />  Lcd8_Write_Char(dane&#91;2&#93;);<br />  _delay_ms(5000);<br /><br />  Lcd8_Clear();<br /><br />  }<br />}[/syntax]<br /><br />Czy mógłby mi ktoś powiedzieć co robię źle pisząc ten plik nagłówkowy lub wywołując funkcję już w pliku głównym?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10262">Wojciech123</a> — 10 wrz 2015, o 23:19</p><hr />
]]></content>
</entry>
</feed>