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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11006&amp;mode</id>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2015-03-12T16:18:09+01:00</updated>
<published>2015-03-12T16:18:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123246#p123246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123246#p123246"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123246#p123246"><![CDATA[
Stworzyłem sobie bibliotekę od obsługi TWI, ma ona zawartość<br /><br />[syntax=c]#include &quot;I2C.h&quot;<br /><br /><br />void i2c_init(uint64_t speed)<br />{<br />TWSR &amp;= ~((1&lt;&lt;TWPS0) | (1&lt;&lt;TWPS1));<br />TWBR = ((F_CPU/(speed*1000))-16)/2;<br />}<br /><br />void i2c_start(void)<br />{<br />    TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA) | (1&lt;&lt;TWEN);<br />    while(!(TWCR &amp;(1&lt;&lt;TWINT)));<br />}<br /><br />void i2c_stop(void)<br />{<br />TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTO);<br />while(!(TWCR &amp; (1&lt;&lt;TWSTO)));<br />}<br /><br />void i2c_write(char data)<br />{<br />TWDR = data;<br />TWCR |= (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);<br />while(!(TWCR &amp; (1&lt;&lt;TWINT)));<br />}<br /><br />unsigned char i2c_read(char ack)<br />{<br />TWCR |= (1&lt;&lt;TWINT) | (ack&lt;&lt;TWEA) | (1&lt;&lt;TWEN);<br />while(!(TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}[/syntax]<br /><br />W funkcji main wywołuję<br />[syntax=c]int main ()<br />{<br />LCD_Initalize();<br />LCD_WriteText(&quot;test&quot;);<br />i2c_init(100);<br /><br />        //reset MS5611<br />i2c_start();<br />i2c_write(0xEC);<br />i2c_write(0x1E);<br />i2c_stop();<br /><br />while(1)<br />{<br /><br /><br />//dalszy kod programu<br /><br />}[/syntax]<br /><br />Jest to wysłanie polecenia reset do układu MS5611, i niestety nie działa to do końca jak należy. Na oscylogramie widać że pierwszy bajt danych jest wysyłany (SLA+W) ale drugi bajt tylko fragment.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/3936/dfd853572c9e6ccb524c39c136ee36dc.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3936/dfd853572c9e6ccb524c39c136ee36dc.png" alt="Obrazek" /></a><br />Kilka poradników przeczytałem ale wszędzie praktycznie taka sama procedura obsługi TWI jaką ja zastosowałem tutaj w projekcie.<br /><br />Czy może ktoś rzucić okiem i podpowiedzieć co jest nie w porządku z kodem ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 12 mar 2015, o 16:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2015-03-10T22:57:16+01:00</updated>
<published>2015-03-10T22:57:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123005#p123005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123005#p123005"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123005#p123005"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Witam<br />Masz błąd w przypisaniu bitów:<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br /><br />    TWCR = (1&lt;&lt;TWINT) | (1&lt;TWSTA) | (1&lt;&lt;TWEN);<br /><br />GeSHi<br /><br />1&lt;TWSTA<br /><br />Pozdr.<br /></div><br /><br />I tu był błąd, dzięki za wskazówkę. Terasz działa poprawnie.<br />Drobna pomyłka ale wyłożyła wszystkie moje próby. Tyle razy analizowałem kod a nie zwróciłem uwagi na poprawność składni.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 10 mar 2015, o 22:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-03-10T22:40:56+01:00</updated>
<published>2015-03-10T22:40:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123002#p123002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123002#p123002"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=123002#p123002"><![CDATA[
Witam<br />Masz błąd w przypisaniu bitów:<br />[syntax=c]TWCR = (1&lt;&lt;TWINT) | (1&lt;TWSTA) | (1&lt;&lt;TWEN);[/syntax]<br />1<strong>&lt;</strong>TWSTA<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 10 mar 2015, o 22:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2015-03-10T21:55:03+01:00</updated>
<published>2015-03-10T21:55:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122994#p122994</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122994#p122994"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122994#p122994"><![CDATA[
Wyjaśnij proszę skąd się to bierze, przecież wysłanie samego bitu startu polega tylko na zmianie stanu na linii SDA i tam gdzie jest tylko jeden master nie ma możliwości walki o arbitraż, więc nic nie powinno zakłócić wysłaniu bitu startu. Po zrealizowaniu tego znacznik TWINT powinien przybrać wartość zero.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 10 mar 2015, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2015-03-10T21:46:51+01:00</updated>
<published>2015-03-10T21:46:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122990#p122990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122990#p122990"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122990#p122990"><![CDATA[
Nie mając nic podpiętego do sprzętowego TWI, program zawisnie w funkcji TWI_start(), a dokładnie tutaj:<br />[syntax=c]while(!(TWCR &amp;(1&lt;&lt;TWINT)));[/syntax]<br />Można to obejść np. wprowadzając dodatkowy licznik w tej pętli while(), który po przekroczeniu pewnej ustalonej przez ciebie wartości opuści tą pętlę nieskończoną.<br /><br />Tutaj znajdziesz kawałek mojego kodu, który wykrywa błędy na linii TWI: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic9839.html" >topic9839.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 10 mar 2015, o 21:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2015-03-10T21:38:56+01:00</updated>
<published>2015-03-10T21:38:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122986#p122986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122986#p122986"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122986#p122986"><![CDATA[
<div class="quotetitle">matw napisał(a):</div><div class="quotecontent"><br />A powiedz, masz podłączone jakiekolwiek urządzenie na magistrali TWI?<br /></div><br />Na próbę nic nie podpiąłem jeszcze, chciałem na sucho wypróbować konfigurację, ale brak urządzenia nie powinien wpłynąć na wystawienie bitu start czy też samej ramki z adresem przez uP. Bit start polega na zmianie linii danych z 1 na 0 i jest wykonywany przez układ master w moim przypadku atmegę. Dopiero po wysłaniu adresu slave master oczekuje na odpowiedź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 10 mar 2015, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2015-03-10T21:27:51+01:00</updated>
<published>2015-03-10T21:27:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122983#p122983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122983#p122983"/>
<title type="html"><![CDATA[Re: Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122983#p122983"><![CDATA[
A powiedz, masz podłączone jakiekolwiek urządzenie na magistrali TWI?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 10 mar 2015, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2015-03-10T20:50:14+01:00</updated>
<published>2015-03-10T20:50:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122973#p122973</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122973#p122973"/>
<title type="html"><![CDATA[Próby z TWI - pytania początkującego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11006&amp;p=122973#p122973"><![CDATA[
Witajcie<br /><br />Zacząłem pierwsze próby z TWI na atmega8. Napisałem na początek funkcje wysłania bitu start oraz stop. Wygląda to tak (narazie wszystko w pliku main.c)<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/twi.h&gt;<br />#include &lt;util/delay.h&gt;<br />#define F_CPU 16000000UL<br /><br />void twi_init(void);<br />void twi_start(void);<br />void twi_stop(void);<br /><br /><br />void twi_init(void)<br />{<br />TWSR = (1&lt;&lt;TWPS1);<br />TWBR = 0x32;<br />}<br /><br />void twi_start(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;TWSTA) | (1&lt;&lt;TWEN);<br />while(!(TWCR &amp;(1&lt;&lt;TWINT)));<br />}<br /><br />void twi_stop(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTO);<br />}[/syntax]<br /><br />A w funkcji main wystawiam bit startu po czym po chwili go zdejmuję (po 2000ms)<br /><br />[syntax=c]int main ()<br />{<br />while(1)<br />{<br />twi_start();<br />_delay_ms(200);<br />twi_stop();<br />}<br />}[/syntax]<br /><br />Sęk w tym że na linii danych SDA nie widać zmiany stanu na niski, linia SDA jak i SCL stoją w stanie wysokim.<br /><br />Może ktoś podpowiedzieć jaki warunek jest niespełniony ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 10 mar 2015, o 20:50</p><hr />
]]></content>
</entry>
</feed>