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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-12-16T18:27:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=4404&amp;mode</id>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-12-16T18:27:48+01:00</updated>
<published>2013-12-16T18:27:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=61418#p61418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=61418#p61418"/>
<title type="html"><![CDATA[Re: SHT71 + filmik z działania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=61418#p61418"><![CDATA[
I to juz ostatnia aktualizacja. Trochę zostało spraw poprawionych m.in. stosowanie jump w crc, co jest po prostu zakazane i nie wolno z tego korzystać. Sprawa z sht zostaje przeze mnie zamknięta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 16 gru 2013, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-11-21T17:17:39+01:00</updated>
<published>2013-11-21T17:17:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=58053#p58053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=58053#p58053"/>
<title type="html"><![CDATA[Re: SHT71 + filmik z działania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=58053#p58053"><![CDATA[
AKTUALIZACJA<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 21 lis 2013, o 17:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-10-09T08:16:52+01:00</updated>
<published>2013-10-09T08:16:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52303#p52303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52303#p52303"/>
<title type="html"><![CDATA[Re: SHT71]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52303#p52303"><![CDATA[
Faktycznie ma to mega znaczenie - thx za info <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />. Teraz działa dużo płynniej i lepiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 9 paź 2013, o 08:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-10-07T21:01:40+01:00</updated>
<published>2013-10-07T21:01:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52220#p52220</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52220#p52220"/>
<title type="html"><![CDATA[Re: SHT71]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52220#p52220"><![CDATA[
jeden nop to bezczyunność 1 taktu zegara. W nocie jest, że dla zasilania 5V masz maksymalne taktowanie 10MHz na lisnii SCL, ja mam 11+, więc daje 2 takty.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 7 paź 2013, o 21:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-12-16T18:24:47+01:00</updated>
<published>2013-10-07T18:32:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52198#p52198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52198#p52198"/>
<title type="html"><![CDATA[SHT71 + filmik z działania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4404&amp;p=52198#p52198"><![CDATA[
Aktualizacja programu. Program jest nieblokujący. <br /><br />SHT.c:<br />[syntax=c]#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;../makra.h&quot;<br />#include &quot;../LCD/lcd.h&quot;<br />#include &quot;../CRC/crc.h&quot;<br />#include &quot;twi.h&quot;<br />#include &quot;sht.h&quot;<br /><br /><br /><br />volatile uint8_t next_meas;<br />volatile uint8_t temp_to_read;<br />volatile uint8_t humi_to_read;<br />volatile uint8_t data_ready_to_read;<br /><br />void sht71_soft_reset(uint8_t pin_sck, uint8_t pin_data)<br />{<br />twi_connection_reset(pin_sck, pin_data);<br />twi_write_command(SHT71_RESET, pin_sck, pin_data);<br />_delay_ms(11);//wait minimum 11ms before next command<br />}<br /><br />void sht71_read_status_register(uint8_t pin_sck, uint8_t pin_data)<br />{<br />twi_start_transmision(pin_sck, pin_data);//start transmission in device<br />twi_write_command(SHT71_STATUS_REG_R, pin_sck, pin_data);<br />SHT.status_reg = twi_read_byte(ACK, pin_sck, pin_data);<br />SHT.check_sum = twi_read_byte(NACK,pin_sck, pin_data);<br />}<br /><br />void sht71_write_status_register(uint8_t status, uint8_t pin_sck, uint8_t pin_data)<br />{<br />twi_start_transmision(pin_sck, pin_data);<br />twi_write_command(SHT71_STATUS_REG_W, pin_sck, pin_data);<br />twi_write_command(status, pin_sck, pin_data);<br />}<br /><br />uint8_t send_command(uint8_t pin_sck, uint8_t pin_data, uint8_t command)<br />{<br />int8_t val_help;<br />uint8_t error=0;<br /><br />twi_start_transmision(pin_sck, pin_data);//start transmission<br />val_help = twi_write_command(command, pin_sck, pin_data);<br />if(val_help == -1)<br />{<br />error++;<br />}<br />return error;<br />}<br /><br />uint8_t read_meas_sht71(uint8_t command,uint8_t pin_sck, uint8_t pin_data)<br />{<br />static uint8_t value_crc;<br /><br />uint8_t error=0;<br />uint8_t msb_data=0;<br />uint8_t lsb_data=0;<br /><br /><br /><br />value_crc = crc8(command,CRC8INIT);<br />if(command == SHT71_MEASURE_HUMI)<br />{<br />msb_data = twi_read_byte(ACK,pin_sck, pin_data);<br />VALUE_SHT.value_humidity = (msb_data &lt;&lt; 8);<br />value_crc = crc8(msb_data,value_crc);<br />lsb_data = twi_read_byte(ACK, pin_sck, pin_data);<br />VALUE_SHT.value_humidity |= lsb_data;<br />value_crc = crc8(lsb_data,value_crc);<br />VALUE_SHT.checksum = twi_read_byte(NACK, pin_sck, pin_data);<br />VALUE_SHT.checksum = bit_swap_byte(VALUE_SHT.checksum);<br />if(VALUE_SHT.checksum != value_crc)<br />{<br />error++;<br />}<br /> }<br />if(command == SHT71_MEASURE_TEMP)<br />{<br />msb_data = twi_read_byte(ACK, pin_sck, pin_data);<br />VALUE_SHT.value_temperature = (msb_data&lt;&lt;8);<br />value_crc = crc8(msb_data,value_crc);<br />lsb_data = twi_read_byte(ACK, pin_sck, pin_data);<br />VALUE_SHT.value_temperature |= lsb_data;<br />value_crc = crc8(lsb_data,value_crc);<br />VALUE_SHT.checksum = twi_read_byte(NACK, pin_sck, pin_data);<br />VALUE_SHT.checksum = bit_swap_byte(VALUE_SHT.checksum);<br />if(VALUE_SHT.checksum != value_crc)<br />{<br />error++;<br />}<br />}<br />value_crc =0;<br />return error;<br /><br />}<br /><br />uint8_t bit_swap_byte(uint8_t byte)<br />{<br />  int i;<br />  uint8_t result=0;<br />  i=8;<br />  do{<br />  result &lt;&lt;= 1;//shift in left<br /><br />  if (0x01 &amp; byte) //if 1<br />{<br />  result |= 0x01;//add1 to MSB<br />}<br />  byte=(byte&gt;&gt;1);//shift in right<br />  }while(--i);<br />  return result;<br />}<br />//if 1 - measurnment humidity<br />//if -2 measurnment temperature<br />double convert_humidity(uint16_t measurement_humidity, uint16_t measurement_temperature, uint8_t indeks)<br />{<br />double p_humidity;<br />double c1=-4.0; // for 12 Bit<br />double c2=+0.0405; // for 12 Bit<br />double c3=-0.0000028; // for 12 Bit<br />double t1=+0.01; // for 14 Bit @ 3V<br />double t2=+0.00008; // for 14 Bit @ 3V<br />double d2=0.01;<br />double d1=-40.0;<br />double value_meas=0;<br /><br />uint16_t rh=measurement_humidity; // rh: Humidity &#91;Ticks&#93; 12 Bit<br />uint16_t t=measurement_temperature;<br />double rh_lin; // rh_lin: Humidity linear<br />double rh_true; // rh_true: Temperature compensated humidity<br /><br />double tempC;<br /><br />if(indeks == 1)<br />{<br />tempC = 0.0;<br />rh_lin=c3*rh*rh + c2*rh + c1; //calc. humidity from ticks to &#91;%RH&#93;<br />rh_true=(tempC-25)*(t1+t2*rh)+rh_lin; //calc. temp compensated humidity &#91;%RH&#93;<br />if(rh_true&gt;100)rh_true=100; //cut if the value is outside of<br />if(rh_true&lt;0.1)rh_true=0.1; //the physical possible range<br /><br />p_humidity=rh_lin; //return humidity&#91;%RH&#93;<br />value_meas = p_humidity;<br />}<br /><br />if(indeks == 2)<br />{<br />tempC = d2*t+d1;<br />value_meas = tempC;<br />}<br />return value_meas;<br />}<br /><br />double measure_sht71_temp_or_humi(uint8_t pin_sck, uint8_t pin_data,uint8_t command, uint8_t which_meas)<br />{<br />static uint8_t command_send_to_sht71;<br />uint8_t error=0;<br />double value_meas=0.0;<br /><br />if(command_send_to_sht71 == 0)<br />{<br />error = send_command(TWI_PIN_SCK,TWI_PIN_DATA,command);<br />if(!error )<br />{<br />command_send_to_sht71 = 1;<br />}<br />else<br />{<br />error = 0;<br />command_send_to_sht71 = 0;<br />}<br />}<br /><br />if( command_send_to_sht71 == 1 &amp;&amp; !(PIN(SHT71_DDR_PORT) &amp; (1&lt;&lt;pin_data)))<br />{<br />error = read_meas_sht71(command,pin_sck,pin_data);<br />if(!error)<br />{<br />value_meas =  convert_humidity(VALUE_SHT.value_humidity,VALUE_SHT.value_temperature,which_meas);<br />data_ready_to_read = TRUE;<br />command_send_to_sht71 = 0;<br />}<br /><br />}<br />return value_meas;<br />}<br /><br />void meas_humi_and_temp(void)<br />{<br /><br />if(next_meas == 0)<br />{<br />meas_temp_humi&#91;0&#93; = measure_sht71_temp_or_humi(TWI_PIN_SCK,TWI_PIN_DATA,SHT71_MEASURE_HUMI,1);<br /><br />if(data_ready_to_read == TRUE)<br />{<br />humi_to_read = TRUE;<br />data_ready_to_read = FALSE;<br />next_meas = 1;<br />}<br />}<br />if(next_meas == 1)<br />{<br />meas_temp_humi&#91;1&#93; = measure_sht71_temp_or_humi(TWI_PIN_SCK,TWI_PIN_DATA,SHT71_MEASURE_TEMP,2);<br />if(data_ready_to_read == TRUE)<br />{<br />temp_to_read = TRUE;<br />data_ready_to_read = FALSE;<br />next_meas = 2;<br />}<br />}<br />}[/syntax]<br />SHT.h:<br />[syntax=c]#ifndef SHT_H_<br />#define SHT_H_<br /><br />#include &lt;inttypes.h&gt;<br />#include &lt;avr/io.h&gt;<br /><br /><br />//makra ports for sensor humidity and temperature<br />#define TWI_PIN_DATA PC7 //DATA1<br />#define TWI_PIN_SCK PC6 //SCK1<br /><br />//adr command r/w<br />#define SHT71_STATUS_REG_W 0x06 //000 0011 0<br />#define SHT71_STATUS_REG_R 0x07 //000 0011 1<br />#define SHT71_MEASURE_TEMP 0x03 //000 0001 1<br />#define SHT71_MEASURE_HUMI 0x05 //000 0010 1<br />#define SHT71_RESET 0x1e //000 1111 0<br /><br />#define ACK 1<br />#define NACK 0<br /><br />extern volatile uint8_t next_meas;<br /><br /><br /><br />typedef struct<br />{<br />volatile uint8_t status_reg;<br />volatile uint8_t check_sum;<br />}SHT71;<br />SHT71 SHT;<br /><br />volatile double vtemp;<br /><br />typedef struct<br />{<br />volatile uint16_t value_humidity;<br />volatile uint16_t value_temperature;<br />volatile uint8_t checksum;<br />}VALUE_SHT71;<br />VALUE_SHT71 VALUE_SHT;<br /><br />volatile double meas_temp_humi&#91;2&#93;;<br /><br />extern volatile uint8_t data_ready_to_read;<br />extern volatile uint8_t humi_to_read;<br />extern volatile uint8_t temp_to_read;<br />typedef  enum { FALSE = 0, TRUE } BOOL;<br /><br /><br />void sht71_soft_reset(uint8_t pin_sck, uint8_t pin_data);<br />void sht71_read_status_register(uint8_t pin_sck, uint8_t pin_data);<br />void sht71_write_status_register(uint8_t status, uint8_t pin_sck, uint8_t pin_data);<br />uint8_t read_meas_sht71(uint8_t command, uint8_t pin_sck, uint8_t pin_data);<br />uint8_t bit_swap_byte(uint8_t byte);<br />double convert_humidity(uint16_t measurement_humidity, uint16_t measurement_temperature, uint8_t indeks);<br />double measure_sht71_temp_or_humi(uint8_t pin_sck, uint8_t pin_data,uint8_t command, uint8_t which_meas);<br />uint8_t send_command(uint8_t pin_sck, uint8_t pin_data, uint8_t command);<br />void meas_humi_and_temp(void);<br />#endif /* SHT_H_ */[/syntax]<br /><br />crc.c:<br />[syntax=c]#include &quot;crc.h&quot;<br /><br />typedef struct<br />{<br />volatile uint8_t flags_crc8:1;<br />}FLAGS_CRC;<br />FLAGS_CRC CRC;<br /><br /><br />uint8_tcrc8( uint8_t data_in, uint8_t crc_init )<br />{<br /><br /><br /><br />uint8_t  data=0;<br />uint8_t crc=0;<br /><br /><br />crc = crc_init;<br /><br /><br />data = data_in;<br /><br /><br />for(int bit_po_bicie = 0 ; bit_po_bicie &lt; bit_in_bajt ; bit_po_bicie++ )<br />{<br /><br /><br />if( ((crc &amp; 0x80) ^ ((data &amp; 0x80))) &amp;&amp; CRC.flags_crc8 == 0 )<br />{<br />crc &lt;&lt;= 1;<br />crc ^= MASK_XOR;<br />crc |= 0x01;<br />CRC.flags_crc8 = 1;<br />}<br />if(CRC.flags_crc8 == 0)<br />{<br />crc &lt;&lt;=1;<br />}<br />data &lt;&lt;= 1;<br />CRC.flags_crc8 = 0;<br />}<br /><br /><br /><br />return crc;<br /><br /><br />}[/syntax]<br /><br />crc.h:<br />[syntax=c]#ifndef CRC_H_<br />#define CRC_H_<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;inttypes.h&gt;<br /><br /><br />#define CRC8INIT 0x00<br />#define MASK_XOR ((1&lt;&lt;5) | (1&lt;&lt;4))<br />#define bit_in_bajt 8<br />#define ostatni_bajt 8<br /><br />uint8_tcrc8( uint8_t data_in, uint8_t crc_init );<br /><br />#endif /* CRC_H_ */[/syntax]<br /><br />twi.c:<br />[syntax=c]#include &lt;avr/delay.h&gt;<br /><br />#include &quot;twi.h&quot;<br />#include &quot;../makra.h&quot;<br /><br /><br />// generates a transmission start<br />//       _____         ________<br />// DATA:      |_______|<br />//           ___     ___<br />// SCK : ___|   |___|   |______<br />void twi_start_transmision(uint8_t pin_sck, uint8_t pin_data)<br />{<br />DDR(SHT71_DDR_PORT) |= ((1&lt;&lt;pin_sck) | (1&lt;&lt;pin_data)); //out<br /><br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//DATA=1<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);//SCK=0<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);//SCK=1<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);//DATA=0<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);//SCK=0<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);//SCK=1<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//DATA=1<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);//SCK=0<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br /><br /><br />}<br /><br />int8_t twi_write_command(uint8_t BAJT_COM, uint8_t pin_sck, uint8_t pin_data)<br />{<br />uint8_t check;<br />DDR(SHT71_DDR_PORT) |= ((1&lt;&lt;pin_data) | (1&lt;&lt;pin_sck));//out<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />for (int i=0x80;i&gt;0;i/=2) //0b10000000, 0b01000000, 0b00100000, ...<br />{<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />if(i &amp; BAJT_COM )<br />{<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);<br />}<br />else<br />{<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);<br />}<br /><br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />}<br />DDR(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);//PORT as in<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />if(!(PIN(SHT71_DDR_PORT) &amp; (1&lt;&lt;pin_data)))<br />{<br />check = 1;<br />}<br />if(PIN(SHT71_DDR_PORT) &amp; (1&lt;&lt;pin_data))<br />{<br />check = -1;<br />}<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />return check;<br />}<br /><br />uint8_t twi_read_byte(uint8_t acknowledge, uint8_t pin_sck, uint8_t pin_data)<br />{<br />uint8_t read_bajt=0;<br />DDR(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);<br />DDR(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />PORT(SHT71_DDR_PORT) |=(1&lt;&lt;pin_data); //release DATA-line<br /><br />for (int i=0x80;i&gt;0;i/=2)<br />{<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br /><br />if(PIN(SHT71_DDR_PORT) &amp; (1&lt;&lt;pin_data))<br />{<br />read_bajt |= i;<br />}<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />}<br /><br />if(acknowledge==1)<br />{<br />DDR(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//out<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_data);//is ack = 1 LOW<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />}<br />if(acknowledge==0)<br />{<br />DDR(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//out<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);//is ack = 1 LOW<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />}<br />return read_bajt;<br /><br />}<br /><br />void twi_connection_reset(uint8_t pin_sck, uint8_t pin_data)<br />{<br />DDR(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data) | (1&lt;&lt;pin_sck);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_data);<br />PORT(SHT71_DDR_PORT) &amp;= ~~(1&lt;&lt;pin_sck);<br /><br />for(int i=0; i&lt;9 ; i++)//9 cycles<br />{<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) |= (1&lt;&lt;pin_sck);<br />asm volatile(&quot;NOP&quot;);<br />asm volatile(&quot;NOP&quot;);<br />PORT(SHT71_DDR_PORT) &amp;= ~(1&lt;&lt;pin_sck);<br />}<br />twi_start_transmision(pin_sck, pin_data);<br /><br />}[/syntax]<br />twi.h:<br />[syntax=c]#ifndef TWI_H_<br />#define TWI_H_<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;inttypes.h&gt;<br /><br /><br />#define SHT71_DDR_PORT C<br /><br /><br />void twi_start_transmision(uint8_t pin_sck, uint8_t pin_data);<br />int8_t twi_write_command(uint8_t BAJT_COM, uint8_t pin_sck, uint8_t pin_data);<br />uint8_t twi_read_byte(uint8_t acknowledge, uint8_t pin_sck, uint8_t pin_data);<br />void twi_connection_reset(uint8_t pin_sck,uint8_t pin_data);<br /><br /><br />#endif /* TWI_H_ */[/syntax]<br /><br />main.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;LCD/lcd.h&quot;<br />#include &quot;SHT/sht.h&quot;<br /><br />#define PIN_TEST (1&lt;&lt;PD4)<br /><br />uint8_t stopien&#91;&#93; = {6,6,0,0,0,0,0,0};<br /><br /><br />int main(void)<br />{<br />DDRD |= PIN_TEST;<br />PORTD &amp;= ~PIN_TEST;<br /><br />LCD_DDR = 0xff;//out<br />LCD_PORT = 0x00;//state low<br /><br />lcd_init();//init lcd<br />lcd_set_xy(0,0);<br />stdout = &amp;mystdout;<br />printf(&quot;jest okey&quot;);<br />_delay_ms(1000);<br />lcd_clear();<br /><br />lcd_defchar(0,stopien);<br /><br /><br /><br />while(1)<br />{<br />PORTD |= PIN_TEST;<br />meas_humi_and_temp();<br />if(temp_to_read == TRUE &amp;&amp; humi_to_read == TRUE &amp;&amp; next_meas == 2)<br />{<br />lcd_set_xy(0,0);<br />printf(&quot;%.2f&quot;, meas_temp_humi&#91;0&#93;);<br />lcd_str_P(PSTR(&quot;%RH&quot;));<br />lcd_set_xy(1,0);<br />printf(&quot;%.2f&quot;, meas_temp_humi&#91;1&#93;);<br />lcd_char(0x80);<br />lcd_str_P(PSTR(&quot;C  &quot;));<br />next_meas = 0;<br />meas_temp_humi&#91;0&#93;  = 0.0;<br />meas_temp_humi&#91;1&#93; = 0.0;<br />temp_to_read = FALSE;<br />humi_to_read = FALSE;<br />}<br />PORTD&amp;= ~PIN_TEST;<br />_delay_us(10);<br />PORTD |= PIN_TEST;<br /><br />}<br />return 0;<br />}[/syntax]<br /><br /><br />No i filmik z działania:<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><span style="color: #FF0000">Jako link do filmu na YT dajemy sam 11 znakowy identyfikator - Różowy J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 7 paź 2013, o 18:32</p><hr />
]]></content>
</entry>
</feed>