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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-22T17:49:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=4871&amp;mode</id>
<entry>
<author><name><![CDATA[bigbencycu]]></name></author>
<updated>2013-11-22T17:49:23+01:00</updated>
<published>2013-11-22T17:49:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58194#p58194</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58194#p58194"/>
<title type="html"><![CDATA[Re: Atmega + czujnik wilgotności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58194#p58194"><![CDATA[
Sporo błędów wywala ten program. WinAvr, Programmers Notepad.<br /><br />Compiling C: dht.c<br />avr-gcc -c -mmcu=atmega16 -I. -gstabs -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./dht.lst  -std=gnu99 -MMD -MP -MF .dep/dht.o.d dht.c -o dht.o <br />In file included from dht.c:7:<br />dht11.h:27: warning: function declaration isn't a prototype<br />dht11.h:28: warning: function declaration isn't a prototype<br />In file included from dht.c:10:<br />uart.h:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'UART_H'<br />In file included from dht.c:10:<br />uart.h:193:2: error: #endif without #if<br />dht.c: In function 'main':<br />dht.c:17: warning: implicit declaration of function 'uart_init'<br />make.exe: *** [dht.o] Error 1<br /><br />&gt; Process Exit Code: 2<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2070">bigbencycu</a> — 22 lis 2013, o 17:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bigbencycu]]></name></author>
<updated>2013-11-22T10:40:45+01:00</updated>
<published>2013-11-22T10:40:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58154#p58154</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58154#p58154"/>
<title type="html"><![CDATA[Re: Atmega + czujnik wilgotności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58154#p58154"><![CDATA[
Nikt nie jest w stanie pomóc? Taka funkcja:<br />[syntax=c]unsigned char read(void) { <br />int start=0;<br />int PRESENCE=0;<br />if(bit_is_clear(PORT_1Wire,IN)) start=1;<br /> <br />while(start==1){<br />if(bit_is_clear(PORT_1Wire,IN)) {start=0;USART_Transmit('1');} <br />}<br />if(bit_is_set(PORT_1Wire,IN)) {<br />_delay_us(30);<br />if(bit_is_set(PORT_1Wire,IN)) {PRESENCE=1;USART_Transmit('o');} else USART_Transmit('n');}<br />}[/syntax]<br /><br />Wyświetla w terminalu: 1n1ooo.....oooooo  czyli cały czas stan wysoki od czujnika. Czy czujnik może być uszkodzony czy to jednak wina kodu?<br /><br /><br />Udało mi się sprawdzić czujnik na płytce arduino. Działa. Czyli wina leży po stronie programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2070">bigbencycu</a> — 22 lis 2013, o 10:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bigbencycu]]></name></author>
<updated>2013-11-21T18:06:17+01:00</updated>
<published>2013-11-21T18:06:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58066#p58066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58066#p58066"/>
<title type="html"><![CDATA[Atmega + czujnik wilgotności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4871&amp;p=58066#p58066"><![CDATA[
Witam,<br />Proszę o pomoc z odczytem danych z czujnika wilgotności. Jestem na etapie inicjalizacji tzn. wysłania impulsu START do czujnika.<br />Wg noty katalogowej <!-- m --><a class="postlink" href="http://www.adafruit.com/datasheets/DHT22.pdf" >http://www.adafruit.com/datasheets/DHT22.pdf</a><!-- m --><br />czujnik powinien odpowiedzieć stanem niskim (1) przez 80us oraz stanem wysokim (0) przez 80us. Udało mi się to uzyskać. Wyniki otrzymuję w hyperterminal.<br /><br />Czujnik jest podpięty jak tutaj <!-- m --><a class="postlink" href="http://www.pocketmagic.net/wp-content/uploads/2012/11/atmega8_dht22.png" >http://www.pocketmagic.net/wp-content/u ... _dht22.png</a><!-- m --><br />Jednak do PD2.<br /><br /><br />Nie wiem jak odzyskać dane o wartości temp. i wilgotności.<br /><br />&quot;DATA=8 bit integral RH data+8 bit decimal RH data+8 bit integral T data+8 bit decimal T data+8 bit checksum&quot;<br /><br />Czyli należy odebrać 40bit danych. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br /><br />//#define F_CPU 16000000UL<br />#define FOSC 1000000<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br /><br /><br />#define IN 2<br />#define PORT_1Wire PIND<br />#define SET_1Wire DDRD &amp;= ~_BV(IN)<br />#define CLEAR_1Wire DDRD |= _BV(IN)<br /><br />void USART_Init(unsigned int ubrr)<br />{<br />   /* Set baud rate */<br />   <br />  UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />   /* Enable receiver and transmitter */<br />   UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />   /* Set frame format: 8data, 1stop bit */<br />  UCSRC = (1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);<br />}<br /><br /><br />void USART_Transmit(char data )<br />{<br />/* Wait for empty transmit buffer */<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) );<br />/* Put data into buffer, sends the data */<br /><br />UDR = data;<br />}<br /><br />uint8_t odbierz(void)<br />{<br />while ( !( UCSRA &amp; (1&lt;&lt;RXC)) );<br />_delay_us(1000);<br />return UDR;<br />}<br /><br /><br />void USART_Byte_Transmit(char *data )<br />{<br />int dlugosc;<br /><br />int i;<br />for(i=0;i&lt;8;i++){<br />USART_Transmit(data&#91;i&#93;);<br />}<br /><br /><br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />//uC signal start<br />unsigned char START(void)<br />{<br />unsigned char PRESENCE=0;<br />CLEAR_1Wire;<br />_delay_us(500);<br />SET_1Wire;<br />_delay_us(40);<br /><br />if(bit_is_clear(PORT_1Wire, IN))<br />{PRESENCE=1;USART_Transmit('c');USART_Transmit('1');}<br />else<br />{PRESENCE=0;USART_Transmit('c');USART_Transmit('0');}<br /><br />_delay_us(100);<br /><br />if(bit_is_set(PORT_1Wire, IN))<br />{PRESENCE=1;USART_Transmit('s');USART_Transmit('1');}<br />else<br />{PRESENCE=0;USART_Transmit('s');USART_Transmit('0');}<br />_delay_us(60);<br />return PRESENCE;<br />}<br /><br /><br />unsigned char read(void)<br />{<br />unsigned char PRESENCE=0;<br />unsigned char Pres1=0;<br />unsigned char Pres2=0;<br />unsigned char sprawdz=0;<br />if(bit_is_clear(PORT_1Wire,IN)) sprawdz=1; else sprawdz=0;<br /><br />if(sprawdz==1){<br />_delay_us(50);<br />if(bit_is_set(PORT_1Wire,IN)) Pres1=1; else Pres2=0;<br />_delay_us(40);<br />if(bit_is_set(PORT_1Wire,IN)) Pres1=1; else Pres2=0;<br />if(Pres1==Pres2) PRESENCE=1; else PRESENCE=0;<br />}<br />_delay_us(30);<br />return(PRESENCE);<br />}<br /><br />unsigned char read_byte(void)<br />{<br />unsigned char i;<br />unsigned char wartosc;<br /><br />for(i=0; i&lt;8; i++)<br />{<br /> if(read()) wartosc|=0x01&lt;&lt;i;<br /> _delay_us(10);<br />}<br />return(wartosc);<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />int main(void)<br />{<br />unsigned char sprawdz;<br />char temp1=0,temp2=0,temp3=0,temp4=0,temp5=0;<br />//uint8_t odebrano;<br />    USART_Init(MYUBRR);<br />sprawdz=START();<br />while(1){<br /><br />if(sprawdz==1){<br />temp1=read_byte();<br />temp2=read_byte();<br />temp3=read_byte();<br />temp4=read_byte();<br />temp5=read_byte();<br /><br /><br />}<br />}<br />return 0;<br />} <br /><br /><br /><br /><br />}[/syntax]<br /><br />Czyli wg noty katalogowej.<br />1. PC przez 500us utrzymuje stan niski na linii.<br />2. PC przez 40us utrzymuje stan wysoki i czeka na odpowiedź czujnika<br />3. Czujnik utrzymuje stan niski na linii przez 80us oraz wysoki przez 80us.<br />4. Czujnik zaczyna transmisję, 50us stan niski, oraz odpowiednio stan wysoki przez 26-28us to logiczne 0 lub 70us stan wysoki to logiczne 1.<br />5. i znowu jak w pkt. 4<br /><br />Proszę o sprawdzenie kodu programu. Na razie mam problem z wysłaniem temp1 do terminala (krzaki).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2070">bigbencycu</a> — 21 lis 2013, o 18:06</p><hr />
]]></content>
</entry>
</feed>