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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-04-07T05:56:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18086&amp;mode</id>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2017-04-07T05:56:37+01:00</updated>
<published>2017-04-07T05:56:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186505#p186505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186505#p186505"/>
<title type="html"><![CDATA[Re: Problem z DHT11]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186505#p186505"><![CDATA[
spróbuj tak:<br /><br />dth22.c<br />[syntax=c]#include &quot;dth221.h&quot;<br />//#include &quot;iom32.h&quot;<br />//#define DHT22_DATA_BIT_COUNT 40<br />char zmienna&#91;8&#93;;<br />//int readDHT22(int8_t *temp_integral, int8_t *temp_integralmin, int8_t *temp_integralmax, uint8_t *temp_decimal, uint8_t *temp_decimalmin,<br />//uint8_t *temp_decimalmax, uint8_t *hum_integral, uint8_t *hum_decimal, uint8_t *rawTem, uint8_t *rawHum, int32_t *rawTemperature_min, int32_t *rawTemperature_max,int *rawTemperatureout,int *rawHumidityout)<br /><br />int readDHT22(int *temp_integral, int *temp_integralmin, int *temp_integralmax, int *temp_decimal, int *temp_decimalmin,<br />int *temp_decimalmax, int *hum_integral, int *hum_decimal, int *rawTem, int *rawHum, int *rawTemperature_min, int *rawTemperature_max,int *rawTemperatureout,int *rawHumidityout)<br />{<br />        uint8_t retryCount = 0;<br />        uint8_t bitTimes&#91;DHT22_DATA_BIT_COUNT&#93;;<br />        int rawHumidity = 0;<br />        int rawTemperature = 0;<br />        uint8_t checkSum = 0, csPart1, csPart2, csPart3, csPart4;<br />        int i;<br /><br />        // Pin needs to start HIGH, wait until it is HIGH with a timeout<br />        retryCount = 0;<br />        cli();<br />        DDRB &amp;= ~(1 &lt;&lt; ( PB7 ));                                                        //DIRECT_MODE_INPUT(reg, bitmask);<br />        sei();<br />        do<br />        {<br />                if(retryCount &gt; 125)<br /><br /><br />    uart_puts(&quot;DHT_BUS_HUNG&quot;);uart_puts(&quot;\r\n&quot;);<br />               //return DHT_BUS_HUNG;<br />                retryCount++;<br />                _delay_us(2);<br />        } while( !( PINB &amp; ( 1 &lt;&lt; PB7 ) ) );                            //!DIRECT_READ(reg, bitmask)<br /><br />        // Send the activate pulse<br />        cli();<br />        PORTB &amp;= ~(1 &lt;&lt; ( PB7 ));                                                       //DIRECT_WRITE_LOW(reg, bitmask);<br />        DDRB |= 1 &lt;&lt; ( PB7 );                                                           //DIRECT_MODE_OUTPUT(reg, bitmask); // Output Low<br />        sei();<br />        _delay_ms(20);                                                                          // spec is 1 to 10ms<br />        cli();<br />        DDRB &amp;= ~(1 &lt;&lt; ( PB7 ));                                                      // Switch back to input so pin can float<br />        sei();<br /><br />        // Find the start of the ACK signal<br />        retryCount = 0;<br />        do<br />        {<br />                if (retryCount &gt; 25)                                                    //(Spec is 20 to 40 us, 25*2 == 50 us)<br />                {<br /><br /><br />                uart_puts(&quot;return DHT_ERROR_NOT_PRESENT: &quot;);uart_puts(&quot;\r\n&quot;);<br />                return 1;<br />                //return DHT_ERROR_NOT_PRESENT;<br />                }<br />                retryCount++;<br />                _delay_us(2);<br />        } while( PINB &amp; ( 1 &lt;&lt; PB7 ) );<br /><br /><br />        // Find the transition of the ACK signal<br />        retryCount = 0;<br />        do<br />        {<br />                if (retryCount &gt; 50)                                                    //(Spec is 80 us, 50*2 == 100 us)<br />                {<br /><br /><br />                uart_puts(&quot;DHT_ERROR_ACK_TOO_LONG: &quot;);uart_puts(&quot;\r\n&quot;);<br />                //return DHT_ERROR_ACK_TOO_LONG;<br />                }<br />                retryCount++;<br />                _delay_us(2);<br />        } while( !(PINB &amp; ( 1 &lt;&lt; PB7 )) );<br /><br />        // Find the end of the ACK signal<br />        retryCount = 0;<br />        do<br />        {<br />                if (retryCount &gt; 50)                                                    //(Spec is 80 us, 50*2 == 100 us)<br />                {<br /><br />                uart_puts(&quot;DHT_ERROR_ACK_TOO_LONG: &quot;);uart_puts(&quot;\r\n&quot;);<br />                //printf(&quot;\n\r&quot;);<br />                //return DHT_ERROR_ACK_TOO_LONG;<br />                }<br />                retryCount++;<br />                _delay_us(2);<br />        } while( PINB &amp; ( 1 &lt;&lt; PB7 ) );<br /><br />        // Read the 40 bit data stream<br />        for(i = 0; i &lt; DHT22_DATA_BIT_COUNT; i++)<br />        {<br />                // Find the start of the sync pulse<br />                retryCount = 0;<br />                do<br />                {<br />                        if (retryCount &gt; 35)                                            //(Spec is 50 us, 35*2 == 70 us)<br />                        {<br /><br /><br />                        uart_puts(&quot;DHT_ERROR_SYNC_TIMEOUT: &quot;);uart_puts(&quot;\r\n&quot;);<br />                        //printf(&quot;\n\r&quot;);<br />                        //return DHT_ERROR_SYNC_TIMEOUT;<br />                        }<br />                        retryCount++;<br />                        _delay_us(2);<br />                } while( !(PINB &amp; ( 1 &lt;&lt; PB7 )) );<br /><br />                // Measure the width of the data pulse<br />                retryCount = 0;<br />                do<br />                {<br />                        if (retryCount &gt; 50)                                            //(Spec is 80 us, 50*2 == 100 us)<br />                        {<br /><br />                        uart_puts(&quot;DHT_ERROR_SYNC_TIMEOUT: &quot;);uart_puts(&quot;\r\n&quot;);<br />                        //printf(&quot;\n\r&quot;);<br />                        //return DHT_ERROR_DATA_TIMEOUT;<br />                        }<br />                        retryCount++;<br />                        _delay_us(2);<br />                } while( PINB &amp; ( 1 &lt;&lt; PB7 ) );<br />                bitTimes&#91;i&#93; = retryCount;<br />        }<br /><br />        // translate bitTimes<br />        // 26~28us == logical 0<br />        // 70us    == logical 1<br />        // here treshold is 40us<br />        for(i = 0; i &lt; 16; i++)<br />        {<br />                if( bitTimes&#91;i&#93; &gt; 20 ) rawHumidity |= (1 &lt;&lt; (15 - i));<br /><br />        }<br /><br />        for(i = 0; i &lt; 16; i++)<br />        {<br />                if( bitTimes&#91;i + 16&#93; &gt; 20 ) rawTemperature |= (1 &lt;&lt; (15 - i));<br /><br />        }<br /><br />        for(i = 0; i &lt; 8; i++)<br />        {<br />                if(bitTimes&#91;i + 32&#93; &gt; 20) checkSum |= (1 &lt;&lt; (7 - i));<br /><br /><br />        }<br />        *rawHumidityout=rawHumidity;<br />        *rawTemperatureout=rawTemperature;<br /><br /><br />        csPart1 = rawHumidity &gt;&gt; 8;<br />        csPart2 = rawHumidity &amp; 0xFF;<br />        csPart3 = rawTemperature &gt;&gt; 8;<br />        csPart4 = rawTemperature &amp; 0xFF;<br />        uart_puts(&quot;csPart1: &quot;); uart_putnr(csPart1); ;uart_puts(&quot;\r\n&quot;);<br />        uart_puts(&quot;csPart2: &quot;); uart_putnr(csPart2); ;uart_puts(&quot;\r\n&quot;);<br />        uart_puts(&quot;csPart3: &quot;); uart_putnr(csPart3); ;uart_puts(&quot;\r\n&quot;);<br />        uart_puts(&quot;csPart4: &quot;); uart_putnr(csPart4); ;uart_puts(&quot;\r\n&quot;);<br />        uart_puts(&quot;checkSum: &quot;); uart_putnr(checkSum); ;uart_puts(&quot;\r\n&quot;);<br /><br /><br />        *rawHum = rawHumidity;<br />        *rawTem = rawTemperature;<br /><br />        if (rawTemperature &gt; *rawTemperature_max)<br />           *rawTemperature_max = rawTemperature;<br /><br />        if (rawTemperature &lt; *rawTemperature_min)<br />           *rawTemperature_min = rawTemperature;<br /><br /><br />// checksum OK to liczymy temperature i zwracamy na koncu 1<br />        if( checkSum == ((csPart1 + csPart2 + csPart3 + csPart4) &amp; 0xFF )) //&amp;<br />{<br />                // raw data to sensor values<br /><br />                //*hum_integral = (uint8_t)(rawHumidity / 10.0);<br />                //*hum_decimal = (uint8_t)(rawHumidity % 10);<br /><br />//                *hum_integral = (rawHumidity / 10.0);<br />//                *hum_decimal = (rawHumidity % 10);<br />                *hum_integral = (rawHumidity / 10);<br />                *hum_decimal = (rawHumidity % 10);<br /><br /><br />                if(rawTemperature &amp; 0x8000)     // Check if temperature is below zero, non standard way of encoding negative numbers!<br />                {<br />                        rawTemperature &amp;= 0x7FFF; // Remove signal bit<br />                        //*temp_integral = (int8_t)(rawTemperature / 10.0) * -1;<br />                        //*temp_decimal = (uint8_t)(rawTemperature % 10);<br /><br />//                        *temp_integral = (rawTemperature / 10.0) * -1;<br />//                        *temp_decimal = (rawTemperature % 10);<br />                }<br />                *temp_integral = (rawTemperature / 10);<br />                *temp_decimal = (rawTemperature % 10);<br />                *temp_integralmin = (*rawTemperature_min / 10);<br />                *temp_decimalmin = (*rawTemperature_min % 10);<br />                *temp_integralmax = (*rawTemperature_max / 10);<br />                *temp_decimalmax =(*rawTemperature_max % 10);<br /><br /><br />        //*rawHum = (uint8_t)rawHumidity;<br />        //*rawTem = (uint8_t)rawTemperature;<br />                uart_puts(&quot;rawHumidity= &quot;);uart_putnr(rawHumidity);uart_puts(&quot;\r\n&quot;);<br /><br />                uart_puts(&quot;hum_integral= &quot;);uart_putnr(*hum_integral);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;hum_decimal = &quot;);uart_putnr(*hum_decimal);uart_puts(&quot;\r\n&quot;);<br /><br />                uart_puts(&quot;rawTemperature= &quot;);uart_putnr(rawTemperature);uart_puts(&quot;\r\n&quot;);<br /><br />                uart_puts(&quot;temp_integral= &quot;);uart_putnr(*temp_integral);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;temp_decimal = &quot;);uart_putnr(*temp_decimal);uart_puts(&quot;\r\n&quot;);<br /><br />                uart_puts(&quot;rawTemperature_max dth= &quot;);uart_putnr(*rawTemperature_max);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;temp_integralmax dth= &quot;);uart_putnr(*temp_integralmax);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;temp_decimalmax dth= &quot;);uart_putnr(*temp_decimalmax);uart_puts(&quot;\r\n&quot;);<br /><br /><br />                uart_puts(&quot;rawTemperature_min dth= &quot;);uart_putnr(*rawTemperature_min);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;temp_integralmin dth= &quot;);uart_putnr(*temp_integralmin);uart_puts(&quot;\r\n&quot;);<br />                uart_puts(&quot;temp_decimalmin dth= &quot;);uart_putnr(*temp_decimalmin);uart_puts(&quot;\r\n&quot;);<br /><br /><br /><br /><br />        //uart_puts(&quot;checksum ok = &quot;);uart_putnr(checkSum);uart_puts(&quot;\r\n&quot;);<br />return 1;<br />}<br />//jezeli blad w checksum-ie to return 0<br />else<br />uart_puts(&quot; blad w checksum &quot;);uart_puts(&quot;\r\n&quot;);<br />return 0;<br /><br />}[/syntax]<br /><br />dth22.h[syntax=c]/* DHT22.h<br /> *<br /> * DHT22 sensor AVR library<br /> *<br /> * Code by funkytransistor published at AVR Freaks forum:<br /> * http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;file=viewtopic&amp;p=974797<br /> *<br /> * Modified by Miguel Moreto in order to return four values:<br /> *   Integer part or temperature<br /> *   Decimal part of temperature<br /> *   Integer part of humidity<br /> *   Decimal part of humidity<br /> *<br /> * Miguel Moreto, Brazil, 2012.<br /> */<br />#ifndef _DHT22_H_<br />#define _DHT22_H_<br /><br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define DHT22_DATA_BIT_COUNT 40<br /><br />typedef enum<br />{<br />  DHT_ERROR_NONE = 0,<br />  DHT_BUS_HUNG=1,<br />  DHT_ERROR_NOT_PRESENT=2,<br />  DHT_ERROR_ACK_TOO_LONG=3,<br />  DHT_ERROR_SYNC_TIMEOUT=4,<br />  DHT_ERROR_DATA_TIMEOUT=5,<br />  DHT_ERROR_CHECKSUM=6,<br />} DHT22_ERROR_t;<br />//int readDHT22(int8_t *temp_integral, int8_t *temp_integralmin, int8_t *temp_integralmax, uint8_t *temp_decimal, uint8_t *temp_decimalmin,<br />//uint8_t *temp_decimalmax, uint8_t *hum_integral, uint8_t *hum_decimal, uint8_t *rawTem, uint8_t *rawHum, int32_t *rawTemperature_min, int32_t *rawTemperature_max,int *rawTemperatureout,int *rawHumidityout);<br />int readDHT22(int *temp_integral, int *temp_integralmin, int *temp_integralmax, int *temp_decimal, int *temp_decimalmin,<br />int *temp_decimalmax, int *hum_integral, int *hum_decimal, int *rawTem, int *rawHum, int *rawTemperature_min, int *rawTemperature_max,int *rawTemperatureout,int *rawHumidityout);<br /><br />#endif[/syntax]<br /><br /><br /><br />wywolujesz:<br />[syntax=c]odczytdth=readDHT22(&amp;temp_integral, &amp;temp_integralmin, &amp;temp_integralmax, &amp;temp_decimal, &amp;temp_decimalmin,<br />    &amp;temp_decimalmax, &amp;hum_integral, &amp;hum_decimal, &amp;rawTem, &amp;rawHum,  &amp;rawTemperature_min, &amp;rawTemperature_max, &amp;rawTemperatureout, &amp;rawHumidityout);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 7 kwi 2017, o 05:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2017-04-07T04:49:42+01:00</updated>
<published>2017-04-07T04:49:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186504#p186504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186504#p186504"/>
<title type="html"><![CDATA[Re: Problem z DHT11]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186504#p186504"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 7 kwi 2017, o 04:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avgorny]]></name></author>
<updated>2017-04-06T22:01:39+01:00</updated>
<published>2017-04-06T22:01:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186494#p186494</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186494#p186494"/>
<title type="html"><![CDATA[Problem z DHT11]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18086&amp;p=186494#p186494"><![CDATA[
Witam,<br />Przygotowuję właśnie projekt na studia i moim celem jest urządzenie oparte na ATmega służące do pomiaru temperatury i wilgotności. Napotkałem taki problem że DHT11 cały czas zwraca mi -1 dla tem oraz wilgotności. Czy ktoś się spotkał już z takim problemem? Wiem że jest to błąd podczas sprawdzania sumy kontrolnej ale niestety nie umiem się z tym uporać.<br />Będę wdzięczny za pomoc.<br /><br />Troszeczkę szczegółów:<br />ATmega8 z wewnętrznym oscylatorem,<br />LCD HD44780:<br />RS  PC0<br />RW PC1<br />E    PC2<br />D4  PC3<br />D5  PC4<br />D6  PC2<br />D7  PC1<br /><br />DHT11:<br />DATA: PC5<br /><br />Kod programu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Konfiguracja sygna??w steruj?cych wy?wietlaczem.<br />// Mo?na zmieni? stosownie do potrzeb.<br />//<br />//-------------------------------------------------------------------------------------------------<br />#define LCD_RS_DIR      DDRC<br />#define LCD_RS_PORT    PORTC<br />#define LCD_RS_PIN      PINC<br />#define LCD_RS         (1 &lt;&lt; PC0)<br /><br />#define LCD_RW_DIR      DDRC<br />#define LCD_RW_PORT      PORTC<br />#define LCD_RW_PIN      PINC<br />#define LCD_RW         (1 &lt;&lt; PC1)<br /><br />#define LCD_E_DIR      DDRC<br />#define LCD_E_PORT      PORTC<br />#define LCD_E_PIN      PINC<br />#define LCD_E         (1 &lt;&lt; PC2)<br /><br />#define LCD_DB4_DIR      DDRC<br />#define LCD_DB4_PORT   PORTC<br />#define LCD_DB4_PIN      PINC<br />#define LCD_DB4         (1 &lt;&lt; PC3)<br /><br />#define LCD_DB5_DIR      DDRC<br />#define LCD_DB5_PORT   PORTC<br />#define LCD_DB5_PIN      PINC<br />#define LCD_DB5         (1 &lt;&lt; PC4)<br /><br />#define LCD_DB6_DIR      DDRB<br />#define LCD_DB6_PORT   PORTB<br />#define LCD_DB6_PIN      PINB<br />#define LCD_DB6         (1 &lt;&lt; PB2)<br /><br />#define LCD_DB7_DIR      DDRB<br />#define LCD_DB7_PORT   PORTB<br />#define LCD_DB7_PIN      PINB<br />#define LCD_DB7         (1 &lt;&lt; PB1)<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Instrukcje kontrolera Hitachi HD44780<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br />#define HD44780_CLEAR               0x01<br /><br />#define HD44780_HOME               0x02<br /><br />#define HD44780_ENTRY_MODE            0x04<br />   #define HD44780_EM_SHIFT_CURSOR      0<br />   #define HD44780_EM_SHIFT_DISPLAY   1<br />   #define HD44780_EM_DECREMENT      0<br />   #define HD44780_EM_INCREMENT      2<br /><br />#define HD44780_DISPLAY_ONOFF         0x08<br />   #define HD44780_DISPLAY_OFF         0<br />   #define HD44780_DISPLAY_ON         4<br />   #define HD44780_CURSOR_OFF         0<br />   #define HD44780_CURSOR_ON         2<br />   #define HD44780_CURSOR_NOBLINK      0<br />   #define HD44780_CURSOR_BLINK      1<br /><br />#define HD44780_DISPLAY_CURSOR_SHIFT   0x10<br />   #define HD44780_SHIFT_CURSOR      0<br />   #define HD44780_SHIFT_DISPLAY      8<br />   #define HD44780_SHIFT_LEFT         0<br />   #define HD44780_SHIFT_RIGHT         4<br /><br />#define HD44780_FUNCTION_SET         0x20<br />   #define HD44780_FONT5x7            0<br />   #define HD44780_FONT5x10         4<br />   #define HD44780_ONE_LINE         0<br />   #define HD44780_TWO_LINE         8<br />   #define HD44780_4_BIT            0<br />   #define HD44780_8_BIT            16<br /><br />#define HD44780_CGRAM_SET            0x40<br /><br />#define HD44780_DDRAM_SET            0x80<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Deklaracje funkcji<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br />void LCD_WriteCommand(unsigned char);<br />unsigned char LCD_ReadStatus(void);<br />void LCD_WriteData(unsigned char);<br />unsigned char LCD_ReadData(void);<br />void LCD_WriteText(char *);<br />void LCD_GoTo(unsigned char, unsigned char);<br />void LCD_Clear(void);<br />void LCD_Home(void);<br />void LCD_Initalize(void);<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Koniec pliku HD44780.h<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br /><br /><br />//-------------------------------------------------------------------------------------------------<br />// Wy?wietlacz alfanumeryczny ze sterownikiem HD44780<br />// Sterowanie w trybie 4-bitowym bez odczytu flagi zaj?to?ci<br />// z dowolnym przypisaniem sygna??w steruj?cych<br />// Plik : HD44780.c   <br />// Mikrokontroler : Atmel AVR<br />// Kompilator : avr-gcc<br />// Autor : Rados?aw Kwiecie?<br />// ?r?d?o : http://radzio.dxp.pl/hd44780/<br />// Data : 24.03.2007<br />//-------------------------------------------------------------------------------------------------<br /><br />//#include &quot;HD44780.h&quot;<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja wystawiaj?ca p?bajt na magistral? danych<br />//<br />//-------------------------------------------------------------------------------------------------<br />void _LCD_OutNibble(unsigned char nibbleToWrite)<br />{<br /><br />if(nibbleToWrite &amp; 0x01)<br />   LCD_DB4_PORT |= LCD_DB4;<br />else<br />   LCD_DB4_PORT  &amp;= ~LCD_DB4;<br /><br />if(nibbleToWrite &amp; 0x02)<br />   LCD_DB5_PORT |= LCD_DB5;<br />else<br />   LCD_DB5_PORT  &amp;= ~LCD_DB5;<br /><br />if(nibbleToWrite &amp; 0x04)<br />   LCD_DB6_PORT |= LCD_DB6;<br />else<br />   LCD_DB6_PORT  &amp;= ~LCD_DB6;<br /><br />if(nibbleToWrite &amp; 0x08)<br />   LCD_DB7_PORT |= LCD_DB7;<br />else<br />   LCD_DB7_PORT  &amp;= ~LCD_DB7;<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja wystawiaj?ca p?bajt na magistral? danych<br />//<br />//-------------------------------------------------------------------------------------------------<br />unsigned char _LCD_InNibble(void)<br />{<br />unsigned char tmp = 0;<br /><br />if(LCD_DB4_PIN &amp; LCD_DB4)<br />   tmp |= (1 &lt;&lt; 0);<br />if(LCD_DB5_PIN &amp; LCD_DB5)<br />   tmp |= (1 &lt;&lt; 1);<br />if(LCD_DB6_PIN &amp; LCD_DB6)<br />   tmp |= (1 &lt;&lt; 2);<br />if(LCD_DB7_PIN &amp; LCD_DB7)<br />   tmp |= (1 &lt;&lt; 3);<br />return tmp;<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu bajtu do wy?wietacza (bez rozr?nienia instrukcja/dane).<br />//<br />//-------------------------------------------------------------------------------------------------<br />void _LCD_Write(unsigned char dataToWrite)<br />{<br />LCD_DB4_DIR |= LCD_DB4;<br />LCD_DB5_DIR |= LCD_DB5;<br />LCD_DB6_DIR |= LCD_DB6;<br />LCD_DB7_DIR |= LCD_DB7;<br /><br />LCD_RW_PORT &amp;= ~LCD_RW;<br />LCD_E_PORT |= LCD_E;<br />_LCD_OutNibble(dataToWrite &gt;&gt; 4);<br />LCD_E_PORT &amp;= ~LCD_E;<br />LCD_E_PORT |= LCD_E;<br />_LCD_OutNibble(dataToWrite);<br />LCD_E_PORT &amp;= ~LCD_E;<br />while(LCD_ReadStatus()&amp;0x80);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja odczytu bajtu z wy?wietacza (bez rozr?nienia instrukcja/dane).<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br />unsigned char _LCD_Read(void)<br />{<br />unsigned char tmp = 0;<br />LCD_DB4_DIR &amp;= ~LCD_DB4;<br />LCD_DB5_DIR &amp;= ~LCD_DB5;<br />LCD_DB6_DIR &amp;= ~LCD_DB6;<br />LCD_DB7_DIR &amp;= ~LCD_DB7;<br /><br />LCD_RW_PORT |= LCD_RW;<br />LCD_E_PORT |= LCD_E;<br />tmp |= (_LCD_InNibble() &lt;&lt; 4);<br />LCD_E_PORT &amp;= ~LCD_E;<br />LCD_E_PORT |= LCD_E;<br />tmp |= _LCD_InNibble();<br />LCD_E_PORT &amp;= ~LCD_E;<br />return tmp;<br />}<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu rozkazu do wy?wietlacza<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteCommand(unsigned char commandToWrite)<br />{<br />LCD_RS_PORT &amp;= ~LCD_RS;<br />_LCD_Write(commandToWrite);<br />}<br /><br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja odczytu bajtu statusowego<br />//<br />//-------------------------------------------------------------------------------------------------<br />unsigned char LCD_ReadStatus(void)<br />{<br />LCD_RS_PORT &amp;= ~LCD_RS;<br />return _LCD_Read();<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja zapisu danych do pami?ci wy?wietlacza<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteData(unsigned char dataToWrite)<br />{<br />LCD_RS_PORT |= LCD_RS;<br />_LCD_Write(dataToWrite);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja odczytu danych z pami?ci wy?wietlacza<br />//<br />//-------------------------------------------------------------------------------------------------<br />unsigned char LCD_ReadData(void)<br />{<br />LCD_RS_PORT |= LCD_RS;<br />return _LCD_Read();<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja wy?wietlenia napisu na wyswietlaczu.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_WriteText(char * text)<br />{<br />while(*text)<br />  LCD_WriteData(*text++);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja ustawienia wsp?rz?dnych ekranowych<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_GoTo(unsigned char x, unsigned char y)<br />{<br />LCD_WriteCommand(HD44780_DDRAM_SET | (x + (0x40 * y)));<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja czyszczenia ekranu wy?wietlacza.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Clear(void)<br />{<br />LCD_WriteCommand(HD44780_CLEAR);<br />_delay_ms(2);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Funkcja przywr?cenia pocz?tkowych wsp?rz?dnych wy?wietlacza.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Home(void)<br />{<br />LCD_WriteCommand(HD44780_HOME);<br />_delay_ms(2);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />// Procedura inicjalizacji kontrolera HD44780.<br />//<br />//-------------------------------------------------------------------------------------------------<br />void LCD_Initalize(void)<br />{<br />unsigned char i;<br />LCD_DB4_DIR |= LCD_DB4; // Konfiguracja kierunku pracy wyprowadze?<br />LCD_DB5_DIR |= LCD_DB5; //<br />LCD_DB6_DIR |= LCD_DB6; //<br />LCD_DB7_DIR |= LCD_DB7; //<br />LCD_E_DIR    |= LCD_E;   //<br />LCD_RS_DIR    |= LCD_RS;  //<br />LCD_RW_DIR    |= LCD_RW;  //<br />_delay_ms(15); // oczekiwanie na ustalibizowanie si? napiecia zasilajacego<br />LCD_RS_PORT &amp;= ~LCD_RS; // wyzerowanie linii RS<br />LCD_E_PORT &amp;= ~LCD_E;  // wyzerowanie linii E<br />LCD_RW_PORT &amp;= ~LCD_RW;<br />for(i = 0; i &lt; 3; i++) // trzykrotne powt?rzenie bloku instrukcji<br />  {<br />  LCD_E_PORT |= LCD_E; //  E = 1<br />  _LCD_OutNibble(0x03); // tryb 8-bitowy<br />  LCD_E_PORT &amp;= ~LCD_E; // E = 0<br />  _delay_ms(5); // czekaj 5ms<br />  }<br /><br />LCD_E_PORT |= LCD_E; // E = 1<br />_LCD_OutNibble(0x02); // tryb 4-bitowy<br />LCD_E_PORT &amp;= ~LCD_E; // E = 0<br /><br />_delay_ms(1); // czekaj 1ms <br />LCD_WriteCommand(HD44780_FUNCTION_SET | HD44780_FONT5x7 | HD44780_TWO_LINE | HD44780_4_BIT); // interfejs 4-bity, 2-linie, znak 5x7<br />LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_OFF); // wy??czenie wyswietlacza<br />LCD_WriteCommand(HD44780_CLEAR); // czyszczenie zawartos?i pamieci DDRAM<br />LCD_WriteCommand(HD44780_ENTRY_MODE | HD44780_EM_SHIFT_CURSOR | HD44780_EM_INCREMENT);// inkrementaja adresu i przesuwanie kursora<br />LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_ON | HD44780_CURSOR_OFF | HD44780_CURSOR_NOBLINK); // w??cz LCD, bez kursora i mrugania<br />}<br /><br />/*<br />DHT11 Library 0x01<br /><br />copyright (c) Davide Gironi, 2011<br /><br />Released under GPLv3.<br />Please refer to LICENSE file for licensing information.<br /><br />References:<br />  - DHT-11 Library, by Charalampos Andrianakis on 18/12/11<br /><br />*/<br /><br /><br /><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 /><br />/*<br />DHT11 Library 0x01<br /><br />copyright (c) Davide Gironi, 2011<br /><br />Released under GPLv3.<br />Please refer to LICENSE file for licensing information.<br />*/<br /><br /><br />#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 /><br />#define DHT11_ERROR 255<br /><br />/*<br /> * get data from 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 />}<br /><br /><br /><br /><br />int main(void)<br />{<br />        char printbuff&#91;100&#93;;<br /> <br />        //init uart<br />        //uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );<br /> <br />        //init interrupt<br />        sei();<br />      LCD_Initalize();<br />        int8_t temperature = 0;<br />        int8_t humidity = 0;<br />      LCD_GoTo(0,0);<br />      LCD_WriteText(&quot;Hello&quot;);<br />      _delay_ms(100);<br />      LCD_Clear();<br />        while(1)<br />        {<br />               humidity = dht11_gethumidity();<br />               temperature = dht11_gettemperature();<br /> <br />                itoa(temperature, printbuff, 10);<br />                //uart_puts(printbuff);<br />            LCD_GoTo(0,0);<br />            LCD_WriteText(&quot;Temp:&quot;);<br />            LCD_GoTo(6,0);<br />            LCD_WriteText(printbuff);<br />                itoa(humidity, printbuff, 10);<br />                //uart_puts(printbuff); uart_puts(&quot;\r\n&quot;);<br />            LCD_GoTo(0,1);<br />            LCD_WriteText(&quot;Wilg:&quot;);<br />            LCD_GoTo(6,1);<br />            LCD_WriteText(printbuff);<br /> <br /> <br />                _delay_ms(1500);<br />        }<br /> <br />        return 0;<br />}<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16812">avgorny</a> — 6 kwi 2017, o 22:01</p><hr />
]]></content>
</entry>
</feed>