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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-03-26T18:58:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17989&amp;mode</id>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-03-26T18:58:12+01:00</updated>
<published>2017-03-26T18:58:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185686#p185686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185686#p185686"/>
<title type="html"><![CDATA[Re: TWI-uC zawiesza się w pętli stop]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185686#p185686"><![CDATA[
Ale ze mnie gapa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dziękuję Ci bardzo, wszystko działa jak należy!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 26 mar 2017, o 18:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ShutDownSystem]]></name></author>
<updated>2017-03-26T18:29:07+01:00</updated>
<published>2017-03-26T18:29:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185684#p185684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185684#p185684"/>
<title type="html"><![CDATA[Re: TWI-uC zawiesza się w pętli stop]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185684#p185684"><![CDATA[
[syntax=c]TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);[/syntax]<br />zamień na <br /><br />[syntax=c]TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);[/syntax]<br /><br />i analogicznie w reszcie kodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4804">ShutDownSystem</a> — 26 mar 2017, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-03-26T17:51:24+01:00</updated>
<published>2017-03-26T17:51:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185680#p185680</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185680#p185680"/>
<title type="html"><![CDATA[TWI-uC zawiesza się w pętli stop]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17989&amp;p=185680#p185680"><![CDATA[
Cześć<br /><br />Napotkałem niedawno problem przy obsłudze pamięci EEPROM za pomocą TWI, że uC zawiesza się w pętli oczekującej na wyzerowanie bitu TWST0. Próbowałem różnych metod i nic.<br />Dzisiaj wziąłem do ręki układ PCF8573(16 pin) i również po zapisie czasu do układu uC zawiesza się w pętli stop.<br /><br />Ma ktoś pomysł co może być nie tak?<br /><br />Schemat:<br /><a href="https://obrazkiforum.atnel.pl/16396/85f8eb492e2f891a3a6b0e4d0945dfc2.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16396/85f8eb492e2f891a3a6b0e4d0945dfc2.PNG" alt="Obrazek" /></a><br /><br />Kod:<br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *Obsługa zegara czasu rzeczywistego<br /> *TWI<br /> *ATmega328P<br /> *<br /> *  Created on: 26.03.2017<br /> *      Author: Eagle<br /> */<br /><br />//pliki biblioteczne<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;TWI_lib/twi.h&quot;<br />#include &quot;./uart.h&quot;<br /><br />uint8_t dec2bcd(uint8_t dec);<br />uint8_t bcd2dec(uint8_t bcd);<br /><br />uint8_t time&#91;2&#93;;<br />uint8_t time_rec&#91;2&#93;;<br />uint8_t minuty,godziny;<br />uint8_t dwukropek=':';<br /><br />//funkcja główna<br />int main(void)<br />{<br />//inicjalizacja procesora<br />USART_Init(UBBR_U2X0);<br />twi_init();<br />DDRB |= (1&lt;&lt;PB1);<br />time&#91;0&#93;=dec2bcd(18);<br />time&#91;1&#93;=dec2bcd(16);<br />twi_write_buf(0xd0,0,2,time);//zapis czasu do układu<br />PORTB |= (1&lt;&lt;PB1);//zapal diode<br />//pętla główna<br />while(1)<br />{<br />twi_read_buf(0xd0,0,2,time_rec);<br />godziny=bcd2dec(time_rec&#91;0&#93;);<br />minuty=bcd2dec(time_rec&#91;1&#93;);<br />USART_Transmit(godziny);<br />USART_Transmit(dwukropek);<br />USART_Transmit(minuty);<br /><br />}//koniec pętli głównej<br /><br />}//koniec main<br /><br />uint8_t dec2bcd(uint8_t dec)//zamiana liczby dziesiętnej na format BCD<br />{<br />return ( ((dec/10)&lt;&lt;4) | (dec%10) );<br />}<br /><br />uint8_t bcd2dec(uint8_t bcd)<br />{<br />return ( ((bcd&gt;&gt;4) &amp; 0x0F)*10 + ((bcd) &amp; 0x0F) );<br />}[/syntax]<br /><br />twi.c<br /><br />[syntax=c]/*<br /> * twi.c<br /> *<br /> *Bibilioteka do obsługi interfejsu TWI<br /> *<br /> *  Created on: 16.03.2017<br /> *      Author: Eagle<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/twi.h&gt;<br />#include &quot;twi.h&quot;<br /><br />void i2cSetBitrate(uint16_t bitrateKHz)<br />{<br />uint8_t bitrate_div;<br /><br />bitrate_div = ((F_CPU/1000l)/bitrateKHz);<br />if(bitrate_div &gt;= 16)<br />bitrate_div = (bitrate_div-16)/2;<br /><br />TWBR = bitrate_div;<br />}<br /><br />void twi_waitforcomplete(void)<br />{<br />while(!(TWCR &amp; (1&lt;&lt;TWINT)));//czekamy na zakończenie operacji<br />}<br /><br />void twi_init(void)<br />{<br />TWCR |= (1&lt;&lt;TWEN) | (1&lt;&lt;TWEA);//TWI enable, ACK enable<br />i2cSetBitrate(100);<br />}<br /><br />void twi_start(void)<br />{<br />TWCR |= (1&lt;&lt;TWEN) | (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA);//start bit , zerujemy flagę TWINT<br />twi_waitforcomplete();<br />}<br /><br />void twi_stop(void)<br />{<br />TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);//stop bit<br />while(TWCR &amp; (1&lt;&lt;TWSTO));//oczekiwanie na zakończenie nadawania stop<br />}<br /><br />void twi_startandselect(uint8_t id)<br />{<br />twi_start();<br />twi_sendbyte(id);<br /><br />}<br /><br />void twi_sendbyte(uint8_t data)<br />{<br />TWDR=data;//wpisanie do rejestru wartości którą chcemy wysłac<br />TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />twi_waitforcomplete();<br />}<br /><br />uint8_t twi_readbyte_nack(void)//odebranie 1B danych bez potwierdzenia odbioru(NACK)<br />{<br />TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />twi_waitforcomplete();<br />return TWDR;<br />}<br /><br />uint8_t twi_readbyte_ack(void)//odebranie 1B danych z potwierdzeniem odbioru(ACK)<br />{<br />TWCR |= (1&lt;&lt;TWEA) | (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />twi_waitforcomplete();<br />return TWDR;<br />}<br /><br />void twi_write_buf(uint8_t id,uint8_t address,uint8_t amount,uint8_t *buf)<br />{<br />twi_startandselect(id);<br />twi_sendbyte(address);<br />while(amount--)twi_sendbyte(*buf++);<br />twi_stop();<br />}<br /><br />void twi_read_buf(uint8_t id,uint8_t address,uint8_t amount,uint8_t *buf)<br />{<br />twi_startandselect(id);<br />twi_sendbyte(address);<br />twi_startandselect(id+1);//repeated start<br />while(amount--) *buf++=(amount ? twi_readbyte_ack() : twi_readbyte_nack());<br />twi_stop();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 26 mar 2017, o 17:51</p><hr />
]]></content>
</entry>
</feed>