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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-25T17:03:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=9839&amp;mode</id>
<entry>
<author><name><![CDATA[Mateo193]]></name></author>
<updated>2014-12-25T17:03:53+01:00</updated>
<published>2014-12-25T17:03:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110397#p110397</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110397#p110397"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110397#p110397"><![CDATA[
Hmm wiecie co panowie działa, trochę nie wiem dlaczego. Na początku miałem A0 do Vcc podłączone (#define PCF8583_ADDR 0xA2)<br />Wgrałem program <strong>matw</strong> ale zmieniłem podłączenie na GND odczytałem takie coś:<br /><a href="http://forum.atnel.pl/_obrazki/o/1349/cb4e2b7a62d78c6093262d50a45bf4c4.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1349/cb4e2b7a62d78c6093262d50a45bf4c4.png" alt="Obrazek" /></a><br />Czyli wszystko okej, zmieniłem w programie na #define PCF8583_ADDR 0xA0 i działa.<img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Dziękuje wszystkim za zaangażowanie przy prezentacji projektu nie zapomnę o was <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1349">Mateo193</a> — 25 gru 2014, o 17:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-12-25T13:22:22+01:00</updated>
<published>2014-12-25T13:22:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110367#p110367</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110367#p110367"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110367#p110367"><![CDATA[
Tylko takie pytanie na szybko bo nie znalazłem w opisie Twojego problem<br />Czy podciągnąłeś linie SCL I SDA poprzez rezystory (np 4,7k) do Vcc ?<br /><br />Aha i jeszcze jedno, kiedyś walczyliśmy ze sprzętowym I2C, który sie zawieszał i remedium okazało się wpisanie odpowiedniej wartości do rejestru TWBR podczas inicjalizacji.<br />U nas dla Atmegi8 i wewnętrzenego oscylatora 8MHz należało wpisać to: &quot;TWBR = 8;&quot;<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2537">Kuźnia</a> — 25 gru 2014, o 13:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-12-25T12:07:41+01:00</updated>
<published>2014-12-25T12:07:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110357#p110357</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110357#p110357"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110357#p110357"><![CDATA[
Witam, <br />sam miewałem różnorakie problemy z i2c, więc na podstawie mojej skromnej wiedzy utworzyłem sobie narzędzie do przeszukiwania magistrali za pomocą sprzętowego TWI i prezentacji wyników w konsoli via UART.<br /><br />Program w każdym cyklu szuka urządzeń w zakresie 0-255 (0x00 - 0xff) i bada stan na magistrali.<br />Dzięki temu możemy dość szybko zdiagnozować czy i jakie urządzenia (na jakich) adresach mamy podpięte.<br /><br />Kod może być niedoskonały, bo jak wspomniałem bazuję na swojej skromnej wiedzy z zakresie C dla uC AVR. Ale dzięki temu forum i informacjom tu znalezionym udało się sklecić to narzędzie, które mam nadzieję pomoże w okiełznaniu problemów z i2c.<br /><br />Domyślnie projekt skonfigurowany jest dla zestawu ATB, czyli ATmega32 @ 11059200, UART @ 19200.<br /><br />Wynik działania na zestawie ATB 1.04<br /><a href="http://forum.atnel.pl/_obrazki/o/2394/d651b857645cf1411901caa49fa77a23.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2394/d651b857645cf1411901caa49fa77a23.jpg" alt="Obrazek" /></a><br /><br />P.S. W moim kodzie w funkcjach odpowiedzialnych za TWI zastosowane są własnie opisywanie przez poprzedników opóźnienia, które pozwalają ograniczyć zawieszenia dając jednoczenie możliwość wyłapywania takich zdarzeń.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 25 gru 2014, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mateo193]]></name></author>
<updated>2014-12-25T11:47:04+01:00</updated>
<published>2014-12-25T11:47:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110355#p110355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110355#p110355"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110355#p110355"><![CDATA[
Dziękuje bardzo za zainteresowanie, nie zauważyłem że pode mną był już taki temat. Trochę mnie zastanawia to zachowanie ponieważ nie ma zwarć miedzy poszczególnymi nóżkami. Wyjście INT z RTC ewidentnie działa. Najbardziej prawdopodobne jest że układ najwyraźniej może być uszkodzony. Czekając do wieczora na pomoc RafPe spróbuje coś sam wydedukować;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1349">Mateo193</a> — 25 gru 2014, o 11:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-12-25T10:56:17+01:00</updated>
<published>2014-12-25T10:56:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110350#p110350</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110350#p110350"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110350#p110350"><![CDATA[
Jak wroce wieczorem to postaram sie wrzucic kod ktory ma w miare obsluge bledow <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Sent from my iPhone using Tapatalk<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 25 gru 2014, o 10:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2014-12-25T10:39:21+01:00</updated>
<published>2014-12-25T10:39:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110348#p110348</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110348#p110348"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110348#p110348"><![CDATA[
Tutaj podobny wątek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post110347.html#p110347" >post110347.html#p110347</a><!-- l --><br /><br />Ogólnie mi pomogło zrobienie to co mówi  savian86. Jednak ktoś może ma właśnie jakieś biblioteki, w których jest to &quot;fajnie&quot; zrobione. Bo to co ja namodizłem u siebie jakoś działa, ale na pewno nie jest uniwersalne <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4068">misiulu</a> — 25 gru 2014, o 10:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2014-12-25T00:40:15+01:00</updated>
<published>2014-12-25T00:40:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110335#p110335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110335#p110335"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110335#p110335"><![CDATA[
Dlatego warto przerobić trochę te standardowe biblioteki do sprzętowego TWI, dorzucić timeouty i obsługę błędów. Kiedyś widziałem fajnie zrobioną obsługę tego w źródłach dla arduino.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 25 gru 2014, o 00:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-12-25T00:15:44+01:00</updated>
<published>2014-12-25T00:15:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110329#p110329</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110329#p110329"/>
<title type="html"><![CDATA[Re: I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110329#p110329"><![CDATA[
TWI sprzętowe będzie zawieszać się jak jest problem z łącznością z układem/układami na magistrali.<br />Programowe i2c tez podpowiada, że coś jest nie tak.<br />Sprawdź dokładnie połączenia, przedzwoń wszystkie nogi PCF-a, szczególnie SCL/SDA/A0, może coś z rezonatorem lub niepoprawny adres układu i2c.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 25 gru 2014, o 00:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mateo193]]></name></author>
<updated>2014-12-24T23:10:11+01:00</updated>
<published>2014-12-24T23:10:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110323#p110323</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110323#p110323"/>
<title type="html"><![CDATA[I2C Sprzętowe zawieszanie się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9839&amp;p=110323#p110323"><![CDATA[
Witam, jako iż przyszedł czas na nieszczęsne I2C postanowiłem zaglądnąć do kodu z książki.<br /><br />Układ pcf8583 mam podłączony do ATB.<br />Wyjście INT do portu PD2 <br />Wejście A0 jest zwarte do VCC<br />Taktowanie atmegi 16 8MHz<br />Dioda z przerwania mruga co 1sekundę.<br />Druga dioda umieszczona jest w funkcji TWI_START() a dokładniej:<br />-przed pętlą &quot;while (!(TWCR&amp;(1&lt;&lt;TWINT)));&quot; zaświeca się<br />-po pętli &quot;while (!(TWCR&amp;(1&lt;&lt;TWINT)));&quot; brak reakcji<br />Czyli program staje w miejscu oczekując na spełnienie warunku<br /><br />I teraz moje pytanie co może być przyczyną takiego zachowania.<br />Dodam także że na programowym I2C na wyświetlaczu wyświetlają się same zera w miejscach godziny<br />(podczas gdy odłączę jakąś z linii SDA lub SCL pojawia się 165:165:165:165<br /><br />Oto mój main.c<br />[syntax=cpp-qt]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-07<br /> *       Autor: Mirosław Kardaś<br /> *<br /> *       Program korzysta ze sprzętowej obsługi I2C/TWI<br /> *       Umożliwia zapis danych do RTC oraz EEPROM a także<br /> *       oczyt z tych urządzeń<br /> *<br /> *       UWAGA!!! programowa wersja dla F_CPU = 8 MHz<br /> *       jeli zmienione zostanie taktowanie na np: 16 MHz<br /> *       wtedy trzeba sobie przerobić opóźnienia w bibliotece<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />// **** UWAGA - wybierz właciwy adres jak niżej **************<br />//#define PCF8583_ADDR 0xA0// gdy A0 --&gt; GND<br />#define PCF8583_ADDR 0xA2// gdy A0 --&gt; VCC<br /><br />// utworzenie typu u08, odpowiednika uint8_t aby kod był bardziej czytelny<br />typedef unsigned char  u08;<br />typedef unsigned short u16;<br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec);<br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd);<br /><br /><br />int main(void) {<br /><br />DDRD |= (1&lt;&lt;PD7);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTD |= (1&lt;&lt;PD7);// załączamy podświetlenie LCD - stan wysoki<br />DDRD |= (1&lt;&lt;PD6);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTD |= (1&lt;&lt;PD6);// załączamy podświetlenie LCD - stan wysoki<br /><br />// Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC<br /><br /><br />// definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy<br />// wskazujący nam później na odpowiednie indeksy w tablicy (buforze)<br />enum {ss=1, mm, hh};<br />uint8_t bufor[4];// rezerwacja bufora 4 bajty<br />uint8_t sekundy, minuty, godziny;<br /><br /><br />lcd_init();<br /><br />i2cSetBitrate( 100 ); // USTAWIAMY prędkość 100 kHz na magistrali I2C<br /><br />sei();<br /><br />lcd_str_P(PSTR(&quot;start...&quot;));<br /><br />// Ustawianie czasu na godzinę: 18:34:27<br />/*<br />bufor[0] = 0;// setne części sekundy<br />bufor[1] = dec2bcd(27);// sekundy<br />bufor[2] = dec2bcd(34);// minuty<br />bufor[3] = dec2bcd(18);// godziny<br />// zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC<br />TWI_write_buf( PCF8583_ADDR, 0x01, 4, bufor );<br />*/<br /><br />while(1) {<br /><br />if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br />TWI_read_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br />sekundy = bcd2dec( bufor[ss] );<br />minuty = bcd2dec( bufor[mm] );<br />godziny = bcd2dec( bufor[hh] );<br /><br />// wyświetlenie czasu na LCD<br />lcd_locate(1,0);<br />if( godziny &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(godziny);<br />lcd_str(&quot;:&quot;);<br />if( minuty &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(minuty);<br />lcd_str(&quot;:&quot;);<br />if( sekundy &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(sekundy);<br /><br /><br />int0_flag=0;<br />}<br /><br />}<br />}<br /><br /><br />// procedura obsługi przerwania INT 0<br />ISR( INT0_vect ) {<br />int0_flag = 1;<br />PORTD ^= (1&lt;&lt;PD7);<br />}<br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}<br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1349">Mateo193</a> — 24 gru 2014, o 23:10</p><hr />
]]></content>
</entry>
</feed>