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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-08-27T16:35:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16076&amp;mode</id>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T16:33:59+01:00</updated>
<published>2016-08-27T16:33:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167275#p167275</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167275#p167275"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167275#p167275"><![CDATA[
9.99999e+011, na dev-cpp po odjęciu miliona. Na avr-ze też sprawdze, ale po &quot;teście czasowym&quot; mojego układu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 16:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2016-08-27T16:35:16+01:00</updated>
<published>2016-08-27T16:26:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167274#p167274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167274#p167274"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167274#p167274"><![CDATA[
Witaj,<br /><br />Ponieważ liczby typu <strong>float</strong> służą do całkiem innych celów to raz. A dwa, że takie liczby mają skończoną dokładność ( rozdzielczość ? ).<br /><br />Im mniejsza wartość całkowita takiej liczby (wartość po lewej stronie przecinka), tym większa dokładność.<br /><br />A teraz zamiast <br />[syntax=c]spiTimeout--;[/syntax]<br /><br />wpisz<br />[syntax=c]spiTimeout -= 1000000.0;[/syntax]<br />czyli odejmuj nie wartość 1 jak poprzednio, lecz jeden milion (tak, aby zobaczyć efekt już przy pierwszym odejmowaniu. Napisz jaką wartość teraz ma Twoje <strong>spiTimeout</strong> ?<br /><br />Najdokładniejsze liczby zmiennoprzecinkowe są wówczas, kiedy wartość całkowita liczby (ta po lewej stronie przecinka) jest równa 0.<br /><br />Dlatego też, w przypadku tak wielkiej wartości całkowitej liczby typu <strong>float</strong>, jaką ładowałeś do <strong>spiTimeout</strong>, odejmując nawet 50000 nie zmieni się wartość <strong>spiTimeout</strong><br /><br />A wynika to ze specyfiki zapisu takiej liczby w 4 bajtach ( pojedyncza precyzja). Nie jestem orłem w liczbach typu float, więc starałem się wytłumaczyć tak jak ja to widzę.<br /><br />Zapoznaj się też z <a href="https://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa"  class="postlink">https://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 27 sie 2016, o 16:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T15:27:11+01:00</updated>
<published>2016-08-27T15:27:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167269#p167269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167269#p167269"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167269#p167269"><![CDATA[
Sprawdziłem to, ale nie na AVR-ze tylko na szybko napisałem sobie to w dev-cpp. No i pokazało, że tyle samo, czyli 1e12. Dlaczego tak się dzieje?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />Na AVR-ze też sprawdziłem i efekt ten sam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2016-08-27T15:12:06+01:00</updated>
<published>2016-08-27T15:12:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167268#p167268</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167268#p167268"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167268#p167268"><![CDATA[
Witaj,<br /><br />Już wiadomo coś więcej.... <br /><br />A teraz mała zagadka. Skoro u Ciebie<br />[syntax=c]float spiTimeout = 1000000000000;[/syntax]<br /><br />to sprawdź i napisz jaką wartość będzie miał spiTimeout po<br />[syntax=c]spiTimeout--;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 27 sie 2016, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T15:07:50+01:00</updated>
<published>2016-08-27T15:07:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167267#p167267</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167267#p167267"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167267#p167267"><![CDATA[
Ano właśnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Na podstawie obazka Kolegi <strong>robertomic</strong>, cytując klasyczną reklamę: <em>wyraził więcej niż tysiąc słów</em>. Zwróciły moją uwagę pull-upy i coś mnie uderzyło. Otóż pull-upy miałem cały czas, jednakże zapomniałem, że zewnętrzne, na płytce z czujnikiem. Jak właczyłem wewnętrzne pull-upy zaraz po mainie:<br />[syntax=c]int main (void)<br />{<br />//PORTE.DIRSET = 0xFF;<br /><br />PORTE.PIN0CTRL  =    PORT_OPC_PULLUP_gc;<br />PORTE.PIN1CTRL  =    PORT_OPC_PULLUP_gc;<br />&#91;...&#93;[/syntax]<br /><br />to po kompilacji i wgraniu wsadu jeszcze raz &quot;zaburzyłem&quot; komunikację po I2C i teraz się nie wiesza, ani po przerwaniu linii SDA jak i SCL. Jak włączę zasilanie i od razu linie są przerwane to też przechodzi dalej.<br />Wiem, że standard I2C wymaga pull-upów. Czy wszystko się zawiesza jeśli ich nie ma z tego powodu, że wtedy na wyjściach typu open-drain, jakimi są SDA i SCL mamy efekt &quot;wiszenia w powietrzu&quot; i nieustalone potencjały?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">gizmo5418 napisał(a):</div><div class="quotecontent"><br />Witaj,<br /><br />[syntax=c]spiTimeout = 1000000000000;[/syntax]<br /><br />Możesz to opisać ? co to i do czego, i jaką wielkość zmiennej zadeklarowałeś ? uint64_t czy może uint128_t ?<br /></div><br /><br />uint64_t kompilator mi przyjął, ale uint128_t już nie. Istnieje w ogóle taka duża zmienna całkowitoliczbowa?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-27T14:54:45+01:00</updated>
<published>2016-08-27T14:54:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167265#p167265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167265#p167265"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167265#p167265"><![CDATA[
a.. zeruje się w pętlach while <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 27 sie 2016, o 14:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T14:43:57+01:00</updated>
<published>2016-08-27T14:43:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167264#p167264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167264#p167264"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167264#p167264"><![CDATA[
Oto cały kod 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;stdlib.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdbool.h&gt;<br />#include &quot;SPI.h&quot;<br />#include &quot;nRF24L01.h&quot;<br />#include &quot;nRF24L01_memory_map.h&quot;<br />#include &quot;twi_master_driver.h&quot;<br />#include &quot;avr_compiler.h&quot;<br /><br />#define NUM_BYTES3<br /><br />#define SLAVE_ADDRESS    0x40// Adres czujnika na magistrali TWI<br /><br />// CPU speed 32MHz, BAUDRATE 100kHz and Baudrate Register Settings <br />#define CPU_SPEED       32000000<br />#define BAUDRATE100000<br />#define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)<br /><br />#define SHIFTED_DIVISOR 0x988000// This is the 0x0131 polynomial shifted to farthest left of three bytes<br /><br />TWI_Master_t twiMaster;// Struktura twiMaster<br /><br />//char binBuffer&#91;8&#93; = {0,0,0,0,0,0,0,0};<br />char *binBuffer;<br /><br />uint8_t sendBuffer&#91;NUM_BYTES&#93; = {0xFE, 0xE3, 0xE5};// sekwencja rozkazów wysyłanych do czujnika<br />/*<br />0x80 - I2C address + write<br />0x81 - I2C address + read<br />0 - 0xe3 - trig temp meas hold master<br />1 - 0xe5 - trig humid meas hold master<br />2 - 0xf3 - trig temp meas no hold master<br />3 - 0xf5 - trig humid meas no hold master<br />4 - 0xfe - soft reset<br />  <br />0,1,2,3 - bufPos <br />*/<br /><br /><br />char buffer_out1&#91;32&#93;;<br />void callbackData ( void * nRF_RX_buff , uint8_t len );<br />void Osc32MHz(void);<br />void Osc2MHz(void);<br /><br />volatile bool timer1000ms= false;<br />bool nrfAck= false;<br /><br />float spiTimeout = 1000000000000;<br /><br />int main (void)<br />{<br />uint8_t BufPos = 0;<br /><br />Osc32MHz();// włączenie wewnętrznego oscylatora 32MHz<br /><br />/* Initialize TWI master. */<br />TWI_MasterInit(&amp;twiMaster,<br />&amp;TWIE,<br />TWI_MASTER_INTLVL_LO_gc,<br />TWI_BAUDSETTING);<br /><br />// konfiguracja przerwań<br />TCC0.INTCTRLA=TC_OVFINTLVL_HI_gc;<br />PMIC.CTRL=PMIC_LOLVLEN_bm | PMIC_HILVLEN_bm;<br /><br />// konfiguracja  timera<br />TCC0.CTRLB=TC_WGMODE_NORMAL_gc;// tryb normalny<br />TCC0.PER=31250;// przerwanie co ok. 1sek.<br />//TCC0.PER=200;<br />TCC0.CTRLA=TC_CLKSEL_DIV1024_gc;<br /><br /><br />PORTC_DIR|= 0xFF;<br />PORTC_OUT |= 0xFF;<br /><br />    nRF_init();<br />register_nRF_RX_Event_Callback(callbackData);<br />    sei();<br /><br />TWI_MasterWrite(&amp;twiMaster,// soft reset czujnika<br />SLAVE_ADDRESS,<br />&amp;sendBuffer&#91;BufPos&#93;,<br />1);<br /><br />while ((twiMaster.status != TWIM_STATUS_READY) &amp;&amp; (spiTimeout &gt; 0)) {<br />spiTimeout--;<br />}<br />if (spiTimeout == 0)<br />{<br />//MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;<br />TWIE_MASTER_STATUS &amp;= ~(1&lt;&lt;TWI_MASTER_BUSSTATE1_bp);<br />TWIE_MASTER_STATUS |= (1&lt;&lt;TWI_MASTER_BUSSTATE0_bp);<br />}<br />spiTimeout = 1000000000000;<br /><br />BufPos++;<br /><br />PORTA.DIRSET = PIN4_bm;<br />PORTA.DIRSET = PIN2_bm;<br />while(1)<br />{<br /><br />#if TRYB == 1<br />PORTA.OUTSET = PIN4_bm;<br />if (timer1000ms)<br />{<br />PORTA.OUTCLR = PIN4_bm;<br /><br />// pomiar temperatury ***************************<br />TWI_MasterWriteRead(&amp;twiMaster,<br />SLAVE_ADDRESS,<br />&amp;sendBuffer&#91;BufPos&#93;,<br />1,<br />3);<br /><br />while ((twiMaster.status != TWIM_STATUS_READY) &amp;&amp; (spiTimeout &gt; 0)) {<br />/* Wait until transaction is complete. */<br />spiTimeout--;<br />}<br /><br />if (spiTimeout == 0)<br />{<br />//MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;<br />TWIE_MASTER_STATUS &amp;= ~(1&lt;&lt;TWI_MASTER_BUSSTATE1_bp);<br />TWIE_MASTER_STATUS |= (1&lt;&lt;TWI_MASTER_BUSSTATE0_bp);<br />}<br />spiTimeout = 1000000000000;<br /><br />uint8_t byte0 = twiMaster.readData&#91;0&#93;;<br />uint8_t byte1 = twiMaster.readData&#91;1&#93;;<br />uint8_t byte2 = twiMaster.readData&#91;2&#93;;<br /><br />//itoa(byte1, binBuffer, 10);<br />sprintf(binBuffer, &quot;%d&quot;, byte0);<br /><br />//nRF_SendDataToAir( ( uint8_t * ) &quot;Pozdrowienia.\r\n&quot; );<br />nRF_SendDataToAir( ( uint8_t * ) binBuffer );<br />if( buffer_out1&#91;0&#93; != 0 )<br />{<br />memset(buffer_out1, 0, 32);<br />}<br />while(TX_flag);// czekaj na koniec transmisji<br />if (MAX_RET_flag)<br />{<br />MAX_RET_flag = 0;<br />PORTA.OUTSET = PIN2_bm;// zaświecenie diody - debugger<br />}<br />//nRF_SendDataToAir((uint8_t*)byte0);<br />/*<br />// przeliczenie na temperaturę<br />uint16_t temp = 0;<br />float t = 0;<br /><br />temp = ((uint8_t)byte0&lt;&lt;8)|((uint8_t)byte1&gt;&gt;2);<br />t = (175.72*((uint32_t)temp*100000&gt;&gt;16));<br />t = -46.85+(t/100000);<br /><br />//itoa(t, binBuffer, 10 );<br /><br />dtostrf(t,5,2,binBuffer);<br /><br />//nRF_SendDataToAir( ( uint8_t * ) &quot;Pozdrowienia.\r\n&quot; );<br />nRF_SendDataToAir( ( uint8_t * ) binBuffer );<br /><br /><br />if( buffer_out1&#91;0&#93; != 0 )<br />{<br />memset(buffer_out1, 0, 32);<br />}<br />//while(TX_flag == 1);<br />*/<br />timer1000ms = false;<br />}<br />#endif<br /><br />#if TRYB == 2<br /><br /><br />nRF_RX_EVENT();<br /><br /><br />#endif<br />}<br />}<br /><br /><br />void callbackData ( void * nRF_RX_buff, uint8_t len )<br />{<br />PORTA.DIRSET = PIN3_bm;<br />PORTA.OUTSET = PIN3_bm;<br />_delay_ms(500);<br />PORTA.OUTCLR = PIN3_bm;<br />}<br /><br />void Osc32MHz(void) {<br />OSC.CTRL     =    OSC_RC32MEN_bm;       // włączenie oscylatora 32MHz<br />while(!(OSC_STATUS &amp; (1&lt;&lt;OSC_RC32MRDY_bp))); // czekanie na ustabilizowanie się generatora<br />CPU_CCP      =    CCP_IOREG_gc;         // odblokowanie zmiany źródła sygnału<br />CLK.CTRL     =    CLK_SCLKSEL_RC32M_gc; // zmiana źródła sygnału na RC 32MHz<br />}<br /><br />void Osc2MHz(void) {<br />OSC.CTRL     =    OSC_RC2MEN_bm;// włączenie oscylatora 2MHz<br />while(!(OSC_STATUS &amp; (1&lt;&lt;OSC_RC2MRDY_bp))); // czekanie na ustabilizowanie się generatora<br />CPU_CCP      =    CCP_IOREG_gc;// odblokowanie zmiany źródła sygnału<br />CLK.CTRL     =    CLK_SCLKSEL_RC2M_gc;// zmiana źródła sygnału na RC 2MHz<br />}<br /><br />ISR(TCC0_OVF_vect) {                            // przerwanie od przepełnienia TCC0<br />timer1000ms = true;<br />}<br /><br />/*! TWIC Master Interrupt vector. */<br />ISR(TWIE_TWIM_vect)<br />{<br />TWI_MasterInterruptHandler(&amp;twiMaster);<br />}[/syntax]<br /><br /><strong>Daro69</strong> - tak, to jest timer zliczający w dół <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Taki pseudo-timer, bo nie używam tutaj sprzętowego timera tylko dałem po prostu bardzo dużą liczbę, której szybkość zliczania zależy od prędkości taktowania. Rozwiązanie chamskie i na szybko, bo na razie testuję ideę, jak pójdzie to sobie zrobię to samo na timerze sprzętowym.<br /><strong>gizmo5418</strong> - spiTimer dałem jako float, bo wiedziałem, że jego zakres łapie taką dużą liczbę. Nie dawałem uint64_t czy uint128_t bo nie wiedziałem, że są takie duże typy, przynajmniej do tej pory się na nie nie natknąłem. I tak, wiem, żeby floatów unikać w uC, ale jestem na etapie testów, więc sobie pozwoliłem.<br />I nie - nie z pudełka po butach <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Chodzi mi o przewód łączący procesor z czujnikiem. Jak przerywam połączenie wyciągając przewód, który je łączy to mam zawieszenie wykonywania programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 14:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-27T14:36:23+01:00</updated>
<published>2016-08-27T14:36:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167262#p167262</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167262#p167262"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167262#p167262"><![CDATA[
dekrementacja w pierwszym ifie, a kiedy zero - wykonuje funkcje z drugiego ifa i w nim się nastawia ponownie na wpisaną wartość. A tak to nastawia się za każdym obiegiem pętli.<br />Tak myślę. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 27 sie 2016, o 14:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2016-08-27T14:32:47+01:00</updated>
<published>2016-08-27T14:32:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167261#p167261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167261#p167261"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167261#p167261"><![CDATA[
Witaj,<br /><br />Tak wiem, tylko co to za liczba jest do tej zmiennej wpisywana, i jaką wielkość ma zadeklarowaną<br /><br />[syntax=c]spiTimeout[/syntax]<br /><br />char, uint8_t, uint16_t, uint32_t, uint64_t .........<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 27 sie 2016, o 14:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-27T14:25:26+01:00</updated>
<published>2016-08-27T14:25:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167260#p167260</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167260#p167260"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167260#p167260"><![CDATA[
witam,<br />To wygląda na timer odliczający w dół .<br />tylko dlaczego nie jest wewnątrz ifa drugiego .?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 27 sie 2016, o 14:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2016-08-27T14:29:03+01:00</updated>
<published>2016-08-27T14:19:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167259#p167259</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167259#p167259"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167259#p167259"><![CDATA[
Witaj,<br /><br />[syntax=c]spiTimeout = 1000000000000;[/syntax]<br /><br />Możesz to opisać ? co to i do czego, i jaką wielkość zmiennej zadeklarowałeś ? uint64_t czy może uint128_t ?<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Do obsługi samego I2C wykorzystuję bibliotekę Atmela udostępnioną w internecie....<br /></div><br /><br />Jeżeli nie wiesz co się wiesza w &quot;firmowej&quot; bibliotece, to dlaczego nie napisać swojej obsługi I2C ?<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />.....Teraz, po wyjęciu przewodu SDA program jest wykonywany dalej. Jednak jak wyjmę przewód SCL to dalej jest zawieszony.....<br /></div><br /><br />Ten przewód SDA lub SCL to kolega wyciąga z......... zgaduję - z szarego pudełka po butach ?<br /><br />Bardzo przepraszam, za taki ton mojej odpowiedzi, ale nie mogłem się powstrzymać. Natomiast z tego ścinka kodu, który wkleiłeś nawet szklana kula nie jest w stanie pomóc.....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 27 sie 2016, o 14:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T13:41:06+01:00</updated>
<published>2016-08-27T13:41:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167257#p167257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167257#p167257"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167257#p167257"><![CDATA[
Chodzi o pull-upy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 13:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robertomic]]></name></author>
<updated>2016-08-27T13:32:27+01:00</updated>
<published>2016-08-27T13:32:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167256#p167256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167256#p167256"/>
<title type="html"><![CDATA[Re: Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167256#p167256"><![CDATA[
<img src="https://obrazkiforum.atnel.pl/13232/3bd942293d4884ff89980e75540af1b0.png" alt="Obrazek" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13232">robertomic</a> — 27 sie 2016, o 13:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2016-08-27T12:51:59+01:00</updated>
<published>2016-08-27T12:51:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167253#p167253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167253#p167253"/>
<title type="html"><![CDATA[Xmega128A3 - obsługa błędów w transmisji I2C.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16076&amp;p=167253#p167253"><![CDATA[
Cześć wszystkim <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Obsługuję czujnik temperatury i wilgotności HTU21D, magistrala I2C, procesor XMega 128A3. Do obsługi samego I2C wykorzystuję bibliotekę Atmela udostępnioną w internecie. Transmisja przebiega dobrze, o ile nic nie zakłóci linii SDA/SCL i zasilania czujnika. Zauważyłem jednak, że jak wyjmę przewód którejś z linii, czyli SDA lub SCL to program permanentnie się zawiesza. Próbowałem temu zaradzić software'owo i oto, co wypociłem.<br /><br />W bibliotece Atmela dodałem linijkę włączającą timeout, co wyczytałem w DS do procesora:<br />[syntax=c]MASTER.CTRLB = TWI_MASTER_TIMEOUT_50US_gc;[/syntax]<br /><br />Nie spełniło to jednak moich oczekiwań, gdyż po wyjęciu SDA lub SCL dalej się zawieszał.<br /><br />Dodałem więc takie coś w pliku main.c, na przykładzie wysyłki komendy soft-resetu do czujnika:<br />[syntax=c]TWI_MasterWrite(&amp;twiMaster,// soft reset czujnika<br />SLAVE_ADDRESS,<br />&amp;sendBuffer&#91;BufPos&#93;,<br />1);<br /><br />while ((twiMaster.status != TWIM_STATUS_READY) &amp;&amp; (spiTimeout &gt; 0)) {<br />spiTimeout--;<br />}<br />if (spiTimeout == 0)<br />{<br />//MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;<br />TWIE_MASTER_STATUS &amp;= ~(1&lt;&lt;TWI_MASTER_BUSSTATE1_bp);<br />TWIE_MASTER_STATUS |= (1&lt;&lt;TWI_MASTER_BUSSTATE0_bp);<br />}<br />spiTimeout = 1000000000000;[/syntax]<br /><br />Po osiągnięciu zera przez licznik timeout'u chcę wymusić stan IDLE na linii I2C.<br /><br />Teraz, po wyjęciu przewodu SDA program jest wykonywany dalej. Jednak jak wyjmę przewód SCL to dalej jest zawieszony. Nie mam pomysłu jak temu zaradzić, dlatego proszę uprzejmie o wskazówki i pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />PS: I2C sprzętowy, na przerwaniach. W załączniku biblioteka Atmela.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 27 sie 2016, o 12:51</p><hr />
]]></content>
</entry>
</feed>