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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-07-02T10:20:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12111&amp;mode</id>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-02T10:20:34+01:00</updated>
<published>2015-07-02T10:20:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133454#p133454</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133454#p133454"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133454#p133454"><![CDATA[
Podciagniecie jest przez 2x 10k, wiec wychodzi ok 5k na linii...<br />Bede pamietac by nie dawac nastepnego..<br />A co do adresacji...nei wiem czemu na tym adresie nie dzialalo..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 2 lip 2015, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-07-02T09:59:36+01:00</updated>
<published>2015-07-02T09:59:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133451#p133451</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133451#p133451"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133451#p133451"><![CDATA[
Tylko weź pod uwagę że magistrala I2C powinna mieć tylko<br />jedno podciągnięcie do VCC .<br /><br />Jeśli masz w drugim module również PullUp to mocniej<br />podciągasz do VCC przez połączenie równoległe rezystorów <br />przyłączonych do magistrali.<br /><br />Możliwe że teraz jeszcze to niczemu nie przeszkadza ale co<br />jeśli do tej magistrali podłączysz jeszcze jeden moduł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 2 lip 2015, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-02T08:59:51+01:00</updated>
<published>2015-07-02T08:59:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133447#p133447</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133447#p133447"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133447#p133447"><![CDATA[
Ok,jest postęp. <br />Pamiec wyjeta,a nadal mam jakies odpowiedzi z ukladu.<br />Soft gdzies ma blad,nie powinienem dostawac nic bez kosci.<br />W tym samym czasie czujnik cisnienia dziala poprawnie,nie zauwazylem ze tez ma pullup.<br />Wiec cos nie tak z obslugs pamieci...nie wiem co.<br />Program w czasie odczytu eeprom nie czyta cisnienia,wiec nie wiem skad te bledne dane..<br />Moze czujnik odpowiada bzdurami?<br /><br />Adres czujnkia cisnienia:<br />BMP085_ADDR (0x77&lt;&lt;1);<br /><br />Adres pamieci:<br />addressw 0xA0<br /><br />Zglupialem..<br /><br /><br /><br />Edit..<br />Dziala!!!<br />Okazuje sie ze pamiec nie moze miec adresu 0xA0...<br />Pod adresem 0xAE dziala bez problemu...<br />Nie pytajcie sie mnie dlaczego tak jest...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 2 lip 2015, o 08:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-02T05:45:32+01:00</updated>
<published>2015-07-02T05:45:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133432#p133432</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133432#p133432"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133432#p133432"><![CDATA[
<div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />A czy czasami nie masz gdzieś dodatkowych rezystorów podciągających <br />np. w innym module  podłączonym do I2C<br /></div><br /><br />Nie, upewniłem się, wyciagajac moduł pamięci..padła komunikacja z czujnikiem cisnienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 2 lip 2015, o 05:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-07-01T23:05:18+01:00</updated>
<published>2015-07-01T23:05:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133426#p133426</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133426#p133426"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133426#p133426"><![CDATA[
A czy czasami nie masz gdzieś dodatkowych rezystorów podciągających <br />np. w innym module  podłączonym do I2C<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 1 lip 2015, o 23:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T22:18:50+01:00</updated>
<published>2015-07-01T22:18:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133420#p133420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133420#p133420"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133420#p133420"><![CDATA[
<div class="quotetitle">wchpikus napisał(a):</div><div class="quotecontent"><br />Czy ta pamiec ma faktycznie 20ua wydajnosc pradowa?<br /></div><br />Jaką ma wydajność to nie wiem. Nie zdziwił bym się, jakby się okazało, że zamiast wystawiać stan wysoki to ustawia się w Hi-z i niech pullupy podnoszą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 22:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T22:13:11+01:00</updated>
<published>2015-07-01T22:13:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133418#p133418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133418#p133418"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133418#p133418"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />Jakie wartości mają R2 i R3 ?<br /></div><br /><br />103 to bedzie 1k?<br /><br /><div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />Zobacz czy będzie działać pamięć po przełożeniu jej z modułu na stykówke (WP i adresy mogą 'wisieć') lub/i odłączeniu kynarowych antenek.<br /></div><br /><br />postaram sie zmienic cos w ukladzie, moze faktycznie cos mam zle zrobione i takie jaja sa..<br />Czy ta pamiec ma faktycznie 20ua wydajnosc pradowa?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T21:47:31+01:00</updated>
<published>2015-07-01T21:47:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133412#p133412</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133412#p133412"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133412#p133412"><![CDATA[
Jakie wartości mają R2 i R3 ?<br /><br />Zobacz czy będzie działać pamięć po przełożeniu jej z modułu na stykówke (WP i adresy mogą 'wisieć') lub/i odłączeniu kynarowych antenek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T21:33:52+01:00</updated>
<published>2015-07-01T21:33:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133409#p133409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133409#p133409"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133409#p133409"><![CDATA[
[quote=&quot;jnk0le&quot;]Przeliczyłem sobie te przekłamania i wychodzi że niektóre jedynki są odczytywane jako zera.<br /><br />Możliwe, że w układzie masz zbyt wysoką pojemność lini sygnałowych do masy (mała wydajność prądowa eeproma ( uA ?) vs 20mA z atmegi robią swoje).<br /><br />Poprawic polaczenia?<br />Dodac cos do ukladu?<br />moduł mam taki, wpiety na goldpiny do plytki uniwersalnej, polaczenia atmega - pamiec - bmp085 na kynarze..<br /><!-- m --><a class="postlink" href="http://www.gotronik.pl/modul-pamiecia-at24c256-i2c-serial-eeprom-p-2385.html" >http://www.gotronik.pl/modul-pamiecia-a ... -2385.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T18:54:18+01:00</updated>
<published>2015-07-01T18:54:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133401#p133401</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133401#p133401"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133401#p133401"><![CDATA[
Przeliczyłem sobie te przekłamania i wychodzi że niektóre jedynki są odczytywane jako zera.<br /><br />Możliwe, że w układzie masz zbyt wysoką pojemność lini sygnałowych do masy (mała wydajność prądowa eeproma ( uA ?) vs 20mA z atmegi robią swoje).<br /><br />twi można bez problemu przetaktowywać w dół - to nie uart .<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/8491/06a888c45d4ed7443faaabe8bb19142e.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/8491/06a888c45d4ed7443faaabe8bb19142e.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T18:38:27+01:00</updated>
<published>2015-07-01T18:38:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133399#p133399</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133399#p133399"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133399#p133399"><![CDATA[
Analizator widzi to co wypływa z uart..<br />Inne predkosci twi?<br />Czy czegos innego?<br />Twi chodzi na 100k lub 400k...innych nie ma chyba.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T12:50:49+01:00</updated>
<published>2015-07-01T12:50:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133355#p133355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133355#p133355"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133355#p133355"><![CDATA[
A jak otrzymujesz inną wartość niż zapisana to co &quot;widzi&quot; analizator ?<br /><br />Pozostaje jeszcze wypróbować inne prędkości (200, 50, 10, 5 kHz itd).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 12:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T12:15:48+01:00</updated>
<published>2015-07-01T12:15:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133349#p133349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133349#p133349"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133349#p133349"><![CDATA[
zegar na 14745600..<br />Dokladnie, dosc dziwaczna...dlatego pytam:)<br />Nigdy nie mialem z eepromem problemów, szczególnie ze twi działa obecnie...jak widać po ramkach..<br /><br />Dziwne jest tez to, ze zapis &quot;0&quot; do pamiecie idzie dobrze, odczyt zawsze jest 0<br />Z &quot;1&quot; jest juz gorzej, losowo 0 i 1 (oczywiscie po zapisie 0 wczesniej).<br /> <br />Przy zapisie 10, losowe dane od 0 do 10...<br />przy 100, losowe od 0 do 100...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 12:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T11:54:49+01:00</updated>
<published>2015-07-01T11:54:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133348#p133348</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133348#p133348"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133348#p133348"><![CDATA[
Dane losowe, ale powtarzają się (96, 64, 32 ...), dosyć dziwaczna sytuacja.<br /><br />Jakie masz taktowanie procka ? <br />Z tego co wiem TWBR nie może być mniejszy niż 10, przez co 1mhz nie pozwala na ustawienie 100kHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 11:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T11:28:23+01:00</updated>
<published>2015-07-01T11:28:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133344#p133344</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133344#p133344"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133344#p133344"><![CDATA[
Dodalem twoja biblioteke, nadal mam to samo..<br />Czyli nie odczytuje danych, losowe wyniki sa.<br />Ramki sa ok, dane poprawne..<br /><br /> do &quot;x&quot; przypisuje 10, 1 10, 100...<br /><br />moj kod:<br /><br />[syntax=c]uart_puts(&quot;zapis= &quot;);uart_puts(&quot;\r\n&quot;);<br />uint16_t i;<br />uint8_t device = 0xA0;<br />for (i=10; i&lt;15;i++){<br />eewrite(device,i,x);<br />uart_puts(&quot;ADRES write= &quot;);uart_putnr(i);uart_puts(&quot; dana= &quot;);uart_putnr(x);uart_puts(&quot;\r\n&quot;);<br />}<br /><br />uart_puts(&quot;odczyt= &quot;);uart_puts(&quot;\r\n&quot;);<br />uint8_t dataout;<br />uint8_t device = 0xA0;<br />uart_puts(&quot;odczyt= &quot;);uart_puts(&quot;\r\n&quot;);<br />uint16_t i;<br /><br />for (i=10; i&lt;15; i++){<br />dataout = eeread(device,i);<br />uart_puts(&quot;ADRES read= &quot;);uart_putnr(i);uart_puts(&quot; dana= &quot;);uart_putnr(dataout);uart_puts(&quot;\r\n&quot;);<br />}[/syntax]<br /><br />[syntax=c]void eewrite(uint8_t device, uint16_t addr, uint8_t dat)<br />{<br />start:<br />twistart();<br />twiwrite(device);<br /><br />if ( (TWSR &amp; 0xF8) == TW_MT_SLA_NACK)<br />{<br />twistop();<br />goto start;<br />}<br /><br />twiwrite(addr &gt;&gt; 8);<br />twiwrite(addr);<br /><br />twiwrite(dat);<br />twistop();<br />}<br /><br />uint8_t eeread(uint8_t device, uint16_t addr)<br />{<br />uint8_t dat;<br />start:<br />twistart();<br />twiwrite(device);<br /><br />if ( (TWSR &amp; 0xF8) == TW_MT_SLA_NACK)<br />{<br />twistop();<br />goto start;<br />}<br /><br />twiwrite(addr &gt;&gt; 8);<br />twiwrite(addr);<br /><br />twistart();<br />twiwrite(device+1);<br />dat = twiread(0); //0 - NOACK<br />twistop();<br /><br />return dat;<br />}[/syntax]<br /><br />Czyli to nie to..<br />odczyt wyglada tak:<br /><br />ADRES write= 10 dana= 100<br />ADRES write= 11 dana= 100<br />ADRES write= 12 dana= 100<br />ADRES write= 13 dana= 100<br />ADRES write= 14 dana= 100<br /><br />ADRES read= 10 dana= 96<br />ADRES read= 11 dana= 100<br />ADRES read= 12 dana= 100<br />ADRES read= 13 dana= 100<br />ADRES read= 14 dana= 96<br /><br /><br />Kazdy nastepny odczyt:<br /><br />ADRES read= 10 dana= 96<br />ADRES read= 11 dana= 96<br />ADRES read= 12 dana= 100<br />ADRES read= 13 dana= 100<br />ADRES read= 14 dana= 100<br /><br />odczyt= <br />ADRES read= 10 dana= 68<br />ADRES read= 11 dana= 68<br />ADRES read= 12 dana= 64<br />ADRES read= 13 dana= 64<br />ADRES read= 14 dana= 64<br /><br />odczyt= <br />ADRES read= 10 dana= 0<br />ADRES read= 11 dana= 0<br />ADRES read= 12 dana= 32<br />ADRES read= 13 dana= 32<br />ADRES read= 14 dana= 32<br /><br />odczyt= <br />ADRES read= 10 dana= 100<br />ADRES read= 11 dana= 96<br />ADRES read= 12 dana= 0<br />ADRES read= 13 dana= 0<br />ADRES read= 14 dana= 0<br /><br />losowe dane...<br />Jak pisalem wyzej, obsluga BMP085 dziala poprawnie na bibliotece TWI...<br /><br />[syntax=c]#include &lt;inttypes.h&gt;<br />#include &lt;compat/twi.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;i2cmaster.h&quot;<br /><br /><br />/* I2C clock in Hz */<br />#define SCL_CLOCK  400000L<br /><br /><br />/*************************************************************************<br /> Initialization of the I2C bus interface. Need to be called only once<br />*************************************************************************/<br />void i2c_init(void)<br />{<br />  /* initialize TWI clock: 100 kHz clock, TWPS = 0 =&gt; prescaler = 1 */<br /><br /><br /><br />TWSR = 0;                         /* no prescaler */<br />TWBR = (uint8_t)(((F_CPU/SCL_CLOCK)-16)/2);  /* must be &gt; 10 for stable operation */<br /><br />}/* i2c_init */<br /><br />uint8_t i2c_sync(void){<br />uint16_t timeout = 100;<br />while(!(TWCR &amp; (1&lt;&lt;TWINT)) &amp;&amp; timeout) {<br />_delay_us(1);<br />timeout--;<br />}<br />return timeout != 0;<br />}<br /><br />uint8_t i2c_waitStop(void){<br />uint16_t timeout = 100;<br />while((TWCR &amp; (1&lt;&lt;TWSTO)) &amp;&amp; timeout) {<br />_delay_us(1);<br />timeout--;<br />}<br />return timeout != 0;<br />}<br />/*************************************************************************<br />  Issues a start condition and sends address and transfer direction.<br />  return 0 = device accessible, 1= failed to access device<br />*************************************************************************/<br />unsigned char i2c_start(unsigned char address)<br />{<br />    uint8_t   twst;<br /><br />// send START condition<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wait until transmission completed (this is stupid!!)<br />if(!i2c_sync()) return 0;<br /><br />// check value of TWI Status Register. Mask prescaler bits.<br />twst = TW_STATUS &amp; 0xF8;<br />if ( (twst != TW_START) &amp;&amp; (twst != TW_REP_START)) return 1;<br /><br />// send device address<br />TWDR = address;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wail until transmission completed and ACK/NACK has been received<br />if(!i2c_sync()) return 0;<br /><br />// check value of TWI Status Register. Mask prescaler bits.<br />twst = TW_STATUS &amp; 0xF8;<br />if ( (twst != TW_MT_SLA_ACK) &amp;&amp; (twst != TW_MR_SLA_ACK) ) return 1;<br /><br />return 0;<br /><br />}/* i2c_start */<br /><br /><br />/*************************************************************************<br /> Issues a start condition and sends address and transfer direction.<br /> If device is busy, use ack polling to wait until device is ready<br /><br /> Input:   address and transfer direction of I2C device<br />*************************************************************************/<br />uint8_t i2c_start_wait(unsigned char address)<br />{<br />    uint8_t   twst;<br /><br />    int retry = 2000;<br />    while ( 1 )<br />    {<br />    // send START condition<br />    TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />    // wait until transmission completed<br />    if(!i2c_sync()) break;<br /><br />    // check value of TWI Status Register. Mask prescaler bits.<br />    twst = TW_STATUS &amp; 0xF8;<br />    if ( (twst != TW_START) &amp;&amp; (twst != TW_REP_START)) continue;<br /><br />    // send device address<br />    TWDR = address;<br />    TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />    // wail until transmission completed<br />    if(!i2c_sync()) break;<br /><br />    // check value of TWI Status Register. Mask prescaler bits.<br />    twst = TW_STATUS &amp; 0xF8;<br />    if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) )<br />    {<br />        /* device busy, send stop condition to terminate write operation */<br />        TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);//|(0&lt;&lt;TWIE);<br /><br />        // wait until stop condition is executed and bus released<br />        if(!i2c_waitStop()) continue;<br /><br />        if(!(retry --)) break;<br />        continue;<br />    }<br />    return 1;<br />    //if( twst != TW_MT_SLA_ACK) return 1;<br />    break;<br />     }<br />return 0;<br />}/* i2c_start_wait */<br /><br /><br />/*************************************************************************<br /> Issues a repeated start condition and sends address and transfer direction<br /> Input:   address and transfer direction of I2C device<br /><br /> Return:  0 device accessible<br />          1 failed to access device<br />*************************************************************************/<br />unsigned char i2c_rep_start(unsigned char address)<br />{<br />    return i2c_start( address );<br /><br />}/* i2c_rep_start */<br /><br /><br />/*************************************************************************<br /> Terminates the data transfer and releases the I2C bus<br />*************************************************************************/<br />void i2c_stop(void)<br />{<br />    /* send stop condition */<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);//|(0&lt;&lt;TWIE);<br /><br />// wait until stop condition is executed and bus released<br />i2c_waitStop();<br /><br />}/* i2c_stop */<br /><br /><br />/*************************************************************************<br />  Send one byte to I2C device<br /><br />  Input:    byte to be transfered<br />  Return:   0 write successful<br />            1 write failed<br />*************************************************************************/<br />unsigned char i2c_write( unsigned char data )<br />{<br />    uint8_t   twst;<br /><br />// send data to the previously addressed device<br />TWDR = data;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wait until transmission completed<br />i2c_sync();<br /><br />// check value of TWI Status Register. Mask prescaler bits<br />twst = TW_STATUS &amp; 0xF8;<br />if( twst != TW_MT_DATA_ACK) return 1;<br />return 0;<br /><br />}/* i2c_write */<br /><br /><br />/*************************************************************************<br /> Read one byte from the I2C device, request more data from device<br /><br /> Return:  byte read from I2C device<br />*************************************************************************/<br />unsigned char i2c_readAck(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWEA);//|(0&lt;&lt;TWIE);<br />i2c_sync();<br />return TWDR;<br />}/* i2c_readAck */<br /><br /><br />/*************************************************************************<br /> Read one byte from the I2C device, read is followed by a stop condition<br /><br /> Return:  byte read from I2C device<br />*************************************************************************/<br />unsigned char i2c_readNak(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br />i2c_sync();<br />//uart_puts(&quot;Adana odczytana z pamieci= &quot;);uart_putnrhex(TWDR);uart_puts(&quot;\r\n&quot;);<br />return TWDR;<br />}/* i2c_readNak */<br /><br /><br /><br /><br /><br />void twi_init(uint8_t twbr_value)<br />{<br />//TWSR = 0x00;<br />TWBR = twbr_value;<br />}<br /><br />void twistart(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 twistop(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTO) | (1&lt;&lt;TWEN);<br />while ((TWCR &amp; (1&lt;&lt;TWSTO)));<br />}<br /><br />void twiwrite(uint8_t 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 />uint8_t twiread(uint16_t ack) // nack 0<br />{<br />TWCR = ack ?<br />  ((1 &lt;&lt; TWINT) | (1 &lt;&lt; TWEN) | (1 &lt;&lt; TWEA))<br />: ((1 &lt;&lt; TWINT) | (1 &lt;&lt; TWEN)) ;<br /><br />while (!(TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br /><br />/*<br />void scan(void)<br />{<br />uart_puts_P(&quot;Scanning for devices on i2c bus ...\r\n\n&quot;);<br /><br />for(uint8_t s = 0; s &lt;= 0x7F; s++)<br />{<br />twistart();<br />twiwrite(SLA_W(s));<br /><br />if(TW_STATUS == TW_MT_SLA_ACK )<br />{<br />uart_puts_P(&quot;Found device at address - 0x&quot;);<br />uart_put_hex(s);<br />uart_puts_P(&quot; (&lt;&lt; 1 for SLA_W) \t 0b&quot;);<br />uart_putintr(s, 2);<br />uart_puts_P(&quot; 0\r\n&quot;);<br /><br />}<br />twistop();<br />}<br />}*/[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 11:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-07-01T09:32:43+01:00</updated>
<published>2015-07-01T09:32:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133336#p133336</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133336#p133336"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133336#p133336"><![CDATA[
<!-- m --><a class="postlink" href="https://github.com/jnk0le/AVR-I2C-libs" >https://github.com/jnk0le/AVR-I2C-libs</a><!-- m --><br /><br />Podawałem to już parę postów wyżej. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Kod sklejony na szybko z gotowców i nieco poprawiony, niedługo pojawi się coś lepszego.<br />W TWI_routines są podstawowe operacje na i2c, a 24C32 eepromy 4-64 kbx8.<br /><br />I jakby co to<br />[syntax=c]main(){<br />        ...<br />        twi_init(TWBR_CALC(100000));<br /><br />        for(uint16_t i=0; i &lt; 4096; i++)<br />        eewrite(SLA_24C_W, i, 0x00);<br /><br />        uart_puts_P(&quot;random read :\r\n&quot;);<br /><br />for(uint16_t i = 0, j=1; i &lt; 1024; i++, j++)<br />{<br />tmp = eeread(SLA_24C_W, i);<br />uart_put_hex(tmp);<br />uart_putc(' ');<br /><br />if(j == 8)<br />{<br />uart_puts(&quot;\r\n&quot;);<br />j = 0;<br />}<br />}<br /><br />uint8_t buf&#91;8&#93;={0x2,0x4,0x8,0x16,0x32,0x62,0x11,0x33};<br /><br />ee_write_page(SLA_24C_W, 128, 8, buf); // 32 byte aligment - read datasheet<br /><br />uart_puts_P(&quot;page read :\r\n&quot;);<br />ee_read_page(SLA_24C_W, 0, 1024, readbuffer);<br /><br />for(uint16_t i = 0, j=1; i &lt; 1024; i++, j++)<br />{<br />uart_put_hex(readbuffer&#91;i&#93;);<br />uart_putc(' ');<br /><br />if(j == 8)<br />{<br />uart_puts(&quot;\r\n&quot;);<br />j = 0;<br />}<br />}<br /><br />}[/syntax]<br /><br />EDIT:<br />[syntax=c]unsigned char i2c_readNak(void)<br />{<br />        TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br />        i2c_sync();<br />        //uart_puts(&quot;Adana odczytana z pamieci= &quot;);uart_putnrhex(TWDR);uart_puts(&quot;\r\n&quot;);<br />        return TWDR;<br />}[/syntax]<br /><br />Spróbuj odczytać TWDR przed sync'em.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 1 lip 2015, o 09:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-07-01T08:30:25+01:00</updated>
<published>2015-07-01T08:30:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133331#p133331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133331#p133331"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133331#p133331"><![CDATA[
to nadal nie to..moge proscic o jakis przykladowy kod zapisu i oczytu?<br />Moje biblioteki sa takie:<br /><br />[syntax=c]unsigned char i2c_start(unsigned char address)<br />{<br />    uint8_t   twst;<br /><br />// send START condition<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wait until transmission completed (this is stupid!!)<br />if(!i2c_sync()) return 0;<br /><br />// check value of TWI Status Register. Mask prescaler bits.<br />twst = TW_STATUS &amp; 0xF8;<br />if ( (twst != TW_START) &amp;&amp; (twst != TW_REP_START)) return 1;<br /><br />// send device address<br />TWDR = address;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wail until transmission completed and ACK/NACK has been received<br />if(!i2c_sync()) return 0;<br /><br />// check value of TWI Status Register. Mask prescaler bits.<br />twst = TW_STATUS &amp; 0xF8;<br />if ( (twst != TW_MT_SLA_ACK) &amp;&amp; (twst != TW_MR_SLA_ACK) ) return 1;<br /><br />return 0;<br /><br />}/* i2c_start */<br /><br /><br />/*************************************************************************<br /> Issues a start condition and sends address and transfer direction.<br /> If device is busy, use ack polling to wait until device is ready<br /><br /> Input:   address and transfer direction of I2C device<br />*************************************************************************/<br />uint8_t i2c_start_wait(unsigned char address)<br />{<br />    uint8_t   twst;<br /><br />    int retry = 2000;<br />    while ( 1 )<br />    {<br />    // send START condition<br />    TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWSTA) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />    // wait until transmission completed<br />    if(!i2c_sync()) break;<br /><br />    // check value of TWI Status Register. Mask prescaler bits.<br />    twst = TW_STATUS &amp; 0xF8;<br />    if ( (twst != TW_START) &amp;&amp; (twst != TW_REP_START)) continue;<br /><br />    // send device address<br />    TWDR = address;<br />    TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />    // wail until transmission completed<br />    if(!i2c_sync()) break;<br /><br />    // check value of TWI Status Register. Mask prescaler bits.<br />    twst = TW_STATUS &amp; 0xF8;<br />    if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) )<br />    {<br />        /* device busy, send stop condition to terminate write operation */<br />        TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);//|(0&lt;&lt;TWIE);<br /><br />        // wait until stop condition is executed and bus released<br />        if(!i2c_waitStop()) continue;<br /><br />        if(!(retry --)) break;<br />        continue;<br />    }<br />    return 1;<br />    //if( twst != TW_MT_SLA_ACK) return 1;<br />    break;<br />     }<br />return 0;<br />}/* i2c_start_wait */<br /><br /><br />/*************************************************************************<br /> Issues a repeated start condition and sends address and transfer direction<br /> Input:   address and transfer direction of I2C device<br /><br /> Return:  0 device accessible<br />          1 failed to access device<br />*************************************************************************/<br />unsigned char i2c_rep_start(unsigned char address)<br />{<br />    return i2c_start( address );<br /><br />}/* i2c_rep_start */<br /><br /><br />/*************************************************************************<br /> Terminates the data transfer and releases the I2C bus<br />*************************************************************************/<br />void i2c_stop(void)<br />{<br />    /* send stop condition */<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWSTO);//|(0&lt;&lt;TWIE);<br /><br />// wait until stop condition is executed and bus released<br />i2c_waitStop();<br /><br />}/* i2c_stop */<br /><br /><br />/*************************************************************************<br />  Send one byte to I2C device<br /><br />  Input:    byte to be transfered<br />  Return:   0 write successful<br />            1 write failed<br />*************************************************************************/<br />unsigned char i2c_write( unsigned char data )<br />{<br />    uint8_t   twst;<br /><br />// send data to the previously addressed device<br />TWDR = data;<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br /><br />// wait until transmission completed<br />i2c_sync();<br /><br />// check value of TWI Status Register. Mask prescaler bits<br />twst = TW_STATUS &amp; 0xF8;<br />if( twst != TW_MT_DATA_ACK) return 1;<br />return 0;<br /><br />}/* i2c_write */<br /><br /><br />/*************************************************************************<br /> Read one byte from the I2C device, request more data from device<br /><br /> Return:  byte read from I2C device<br />*************************************************************************/<br />unsigned char i2c_readAck(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN) | (1&lt;&lt;TWEA);//|(0&lt;&lt;TWIE);<br />i2c_sync();<br />return TWDR;<br />}/* i2c_readAck */<br /><br /><br />/*************************************************************************<br /> Read one byte from the I2C device, read is followed by a stop condition<br /><br /> Return:  byte read from I2C device<br />*************************************************************************/<br />unsigned char i2c_readNak(void)<br />{<br />TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);//|(0&lt;&lt;TWIE);<br />i2c_sync();<br />//uart_puts(&quot;Adana odczytana z pamieci= &quot;);uart_putnrhex(TWDR);uart_puts(&quot;\r\n&quot;);<br />return TWDR;<br />}/* i2c_readNak */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 1 lip 2015, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-06-30T20:23:40+01:00</updated>
<published>2015-06-30T20:23:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133292#p133292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133292#p133292"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133292#p133292"><![CDATA[
Ok sprawdze jutro...moze faktycznie rejestr sie czysci..twdr..nie zauwazylem ze faktycznie delay jest przed odczytem.<br /><br />Mozesz podeslas swoja funkcje send i read?<br />Widze ze robisz to bezposrednio na twi hardware.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 30 cze 2015, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-06-30T16:54:51+01:00</updated>
<published>2015-06-30T16:54:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133273#p133273</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133273#p133273"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133273#p133273"><![CDATA[
Odczytujesz TWDR 25ms po zakończeniu transmisji, możliwe że po wysłaniu 'stopa' wartość rejestru TWDR może być niezdefiniowana.<br /><br />U mnie odczyt zrobiony jest tak<br />[syntax=c]uint8_t twiread(uint16_t ack) // bardzo prawdopodobne rozdzielenie na read ack i read nak.<br />{<br />TWCR = ack ?<br />  ((1 &lt;&lt; TWINT) | (1 &lt;&lt; TWEN) | (1&lt;&lt;TWIE) | (1 &lt;&lt; TWEA))<br />: ((1 &lt;&lt; TWINT) | (1 &lt;&lt; TWEN) | (1&lt;&lt;TWIE)) ;<br /><br />while (!(TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br /><br />uint8_t eeread(uint8_t device, uint16_t addr)<br />{<br />uint8_t dat;<br />start:<br />twistart();<br />twiwrite(device);<br /><br />if ( (TWSR &amp; 0xF8) == TW_MT_SLA_NACK)<br />{<br />twistop();<br />goto start;<br />}<br /><br />twiwrite(addr &gt;&gt; 8);<br />twiwrite(addr);<br /><br />twistart();<br />twiwrite(device+1);<br />dat = twiread(0); //O - NOACK<br />twistop();<br /><br />return dat;<br />}[/syntax]<br /><br />Masz te funkcje z jakiegoś tutoriala czy sam sobie skleiłeś ?<br /><br />A i jeszcze brakuje i2c_stop() po readNAK<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 30 cze 2015, o 16:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-06-30T14:09:53+01:00</updated>
<published>2015-06-30T14:09:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133263#p133263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133263#p133263"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133263#p133263"><![CDATA[
sie za wczesnie...cos znow nie dziala:(<br /><br /><br />[syntax=c]void writeData(unsigned char addr, unsigned char datain)<br />{<br /><br />i2c_start(addressw);<br />i2c_write(addr&gt;&gt; 8);<br />i2c_write(addr);<br />i2c_write(datain);<br />i2c_stop();<br />_delay_ms(25);<br /><br />}<br /><br />int readData(unsigned char addr){<br />uint8_t dataout;<br />i2c_start(addressw);<br />i2c_write (addr &gt;&gt; 8);<br />i2c_write (addr);<br />i2c_rep_start(addressr);<br />i2c_readNak();<br />_delay_ms(25);<br />dataout = TWDR;<br />return dataout;<br />}[/syntax]<br /><br />Troche zmienilem ta funkcje, by nie miala argumentu dataout.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 30 cze 2015, o 14:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-06-30T14:02:55+01:00</updated>
<published>2015-06-30T14:02:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133261#p133261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133261#p133261"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133261#p133261"><![CDATA[
Wrzuć cały kod od writeData i readData.<br /><br />[syntax=c]i = readData(1,&amp;dataout);<br />uart_puts(&quot;PWM_Value_night read from eeprom = &quot;);uart_putnr(i);<br />//a dataout ?[/syntax]<br />tu może być problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 30 cze 2015, o 14:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-06-30T13:17:48+01:00</updated>
<published>2015-06-30T13:17:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133257#p133257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133257#p133257"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133257#p133257"><![CDATA[
Mam jeszcze jeden problem...moze przy okazji:<br /><br />Nie dziala mi przekazywanie parametrow PWM_Value_day i PWM_Value_night do funkcji <br />void zapis_do_pamieci(unsigned char PWM_Value_day,unsigned char PWM_Value_night)..<br /><br />mam takie wyniki:<br />PWM_Value_day przed zapisem = 135<br />PWM_Value_night przed zapisem = 85<br />PWM_Value_day write zapis= 135<br />PWM_Value_night write zapis= 85<br />PWM_Value_day read from eeprom = 0<br />PWM_Value_night read from eeprom = 69<br /><br />Jak widac dane wchodza popranie, ale uz sie nie zapisuja popranie w pamieci..<br /><br />Ustawianie dziala, mam zwracane poprane wartosci, ale jak juz wchodzi do zapisu to jest blad...<br /><br /><br />Gdzie robie blad?<br /><br /><br /><br /><br />[syntax=c]void zapis_do_pamieci(unsigned char PWM_Value_day,unsigned char PWM_Value_night);<br />int exit_podswietlenie_bit;<br />int ustaw_jasnosc(unsigned char *PWM_Value_day,unsigned char *PWM_Value_night, int *menu_brightness_bit,int *menu_brightnessday_bit,int *menu_brightnessnight_bit);//ustawienie dla dnia<br />//void eeprom_write(unsigned int EEPAddress, unsigned char EEPData);<br /><br /><br />uint8_t commandnew;<br />unsigned char bar=5;<br />uint8_t x_kro;<br />uint8_t x_poz;<br />int pozycja;<br />int pozycjanr;<br /><br />uint16_t adc_result;<br /><br /><br /><br />int  podswietlenie(unsigned char PWM_Value_day,unsigned char PWM_Value_night, int *menu_brightness_bit,int *menu_brightnessday_bit,int *menu_brightnessnight_bit){ //ustawienie dla nocy<br />LED1_off;<br />//uart_puts(&quot;exit_podswietlenie_bit exit podswietlenie wejscie= &quot;);uart_putnr(exit_podswietlenie_bit);uart_puts(&quot;\r\n&quot;);<br /><br />while(*menu_brightness_bit == 1 &amp;&amp; *menu_brightnessday_bit == 1 &amp;&amp; *menu_brightnessnight_bit == 0 &amp;&amp; exit_podswietlenie_bit == 0){<br />ir_recive(&amp;commandnew);<br />ustaw_jasnosc( &amp;PWM_Value_day, &amp;PWM_Value_night,  menu_brightness_bit, menu_brightnessday_bit, menu_brightnessnight_bit);<br />OCR2 = bar;<br />uart_puts(&quot;podswietlenir ustaw jasnosc dzien= &quot;);uart_putnr(PWM_Value_day);uart_puts(&quot;\r\n&quot;);<br /><br /><br />if (commandnew == exit &amp;&amp; *menu_brightnessday_bit == 1 &amp;&amp; *menu_brightnessnight_bit == 0 ){ //wyjscie z ustawienia podswietlenia dzien<br /><br />//uart_puts(&quot;wciskam exit= &quot;);uart_putnr(commandnew);uart_puts(&quot;\r\n&quot;);<br />*menu_brightnessday_bit = 0;<br />*menu_brightnessnight_bit = 1;<br />commandnew=255;<br />}<br />}<br /><br />while(*menu_brightness_bit == 1 &amp;&amp; *menu_brightnessday_bit == 0 &amp;&amp;*menu_brightnessnight_bit == 1 &amp;&amp; exit_podswietlenie_bit == 0){ ////wyjscie z ustawienia podswietlenia noc<br />//int i;<br />ir_recive(&amp;commandnew);<br />ustaw_jasnosc(&amp;PWM_Value_day, &amp;PWM_Value_night,  menu_brightness_bit, menu_brightnessday_bit, menu_brightnessnight_bit);<br />OCR2 = bar;<br />uart_puts(&quot;podswietlenir ustaw jasnosc noc= &quot;);uart_putnr(PWM_Value_night);uart_puts(&quot;\r\n&quot;);<br /><br /><br />if (commandnew == exit &amp;&amp; *menu_brightness_bit == 1 &amp;&amp; *menu_brightnessday_bit == 0 &amp;&amp; *menu_brightnessnight_bit == 1 &amp;&amp; exit_podswietlenie_bit == 0){ //funkcja wyjscia i zapisu<br />//unsigned int i;<br />*menu_brightness_bit = 1;<br />*menu_brightnessday_bit = 0;<br />*menu_brightnessnight_bit = 0;<br />exit_podswietlenie_bit = 1;<br /><br /><br /><br />while(*menu_brightness_bit == 1 &amp;&amp; *menu_brightnessday_bit == 0 &amp;&amp;*menu_brightnessnight_bit == 0 &amp;&amp; exit_podswietlenie_bit == 1){<br /><br />ustawienie_pozycji(&amp;pozycja,&amp;pozycjanr);<br />if (pozycjanr &gt; 1){<br />pozycjanr = 0;<br />}<br /><br /><br />uart_puts(&quot;bar= &quot;);uart_putnr(bar);uart_puts(&quot;\r\n&quot;);<br />uart_puts(&quot;PWM_Value_day przed zapisem = &quot;);uart_putnr(PWM_Value_day);uart_puts(&quot;\r\n&quot;);<br />uart_puts(&quot;PWM_Value_night przed zapisem = &quot;);uart_putnr(PWM_Value_night);uart_puts(&quot;\r\n&quot;);<br /><br />if (pozycjanr == 0 &amp;&amp; exit_podswietlenie_bit == 1){ //wyjscie i zapis do pamieci<br /><br />if (commandnew == button_ok){<br />zapis_do_pamieci(PWM_Value_day,PWM_Value_night); //zapis do pamieci<br />*menu_brightness_bit = 0;<br />*menu_brightnessday_bit = 0;<br />*menu_brightnessnight_bit = 0;<br />exit_podswietlenie_bit = 0;<br />GLCD_ClearGraphic();<br />commandnew=255;<br />}<br />}<br />if (pozycjanr == 1 &amp;&amp; exit_podswietlenie_bit == 1){//wyjscie bez zapisu<br /><br />if (commandnew == button_ok){<br />*menu_brightness_bit = 0;<br />*menu_brightnessday_bit = 0;<br />*menu_brightnessnight_bit = 0;<br />exit_podswietlenie_bit = 0;<br />GLCD_ClearGraphic();<br />commandnew=255;<br />}<br />}<br /><br /><br />GLCD_Graph_flash_ins(save,32,35); //wyswietl grafike<br />GLCD_Graph_flash_ins(discard,121,35);<br />GLCD_Graph_flash_ins(minus,pozycja,50);<br />commandnew=255;<br />}<br />GLCD_ClearGraphic();<br />}<br />}<br /><br /><br /><br /><br />return *menu_brightness_bit;<br />}<br /><br />int ustaw_jasnosc(unsigned char *PWM_Value_day,unsigned char *PWM_Value_night, int *menu_brightness_bit,int *menu_brightnessday_bit,int *menu_brightnessnight_bit){<br />if (commandnew == cursor_right){<br />bar = bar +10;<br />commandnew=255;<br />}<br /><br />if (commandnew == cursor_left){<br />bar = bar-10;<br />commandnew=255;<br />}<br /><br />for (x_kro=0; x_kro&lt;bar;x_kro++){ //wyswietlenie bara<br />x_poz =x_kro;<br />GLCD_Graph_flash_ins(kropka,x_poz,30);<br />}<br /><br />GLCD_Graph_flash_cdn(setupbrightness,0,40); //wyswietlenie day<br />if (*menu_brightnessday_bit == 1){<br />GLCD_Graph_flash_ins(day,152,40);<br />}<br />if (*menu_brightnessnight_bit == 1){<br />GLCD_Graph_flash_ins(night,152,40); //wyswietlenie noc<br />}<br />GLCD_Graph_flash_ins(min,0,0);<br />GLCD_Graph_flash_ins(max,214,0);<br /><br />if (*menu_brightnessday_bit == 1){ //przypisanie pwm do zmiennych dla dnia<br />*PWM_Value_day = bar;<br />}<br />if (*menu_brightnessnight_bit == 1){//przypisanie pwm do zmiennych dla nocy<br />*PWM_Value_night = bar;<br />}<br />return *menu_brightness_bit;<br /><br />return *PWM_Value_day;<br />return *PWM_Value_night;<br />}<br /><br /><br /><br /><br /><br /><br />void jasnosc (unsigned char PWM_Value_day,unsigned char PWM_Value_night){<br />if (adc_result&gt;10){<br />OCR2 = PWM_Value_day;<br />}<br /><br />if (adc_result == 0){<br />OCR2 = PWM_Value_night;<br />}<br /><br />}<br /><br /><br />void zapis_do_pamieci(unsigned char PWM_Value_day,unsigned char PWM_Value_night){<br />unsigned char i;<br />unsigned char dataout;<br /><br />writeData(0,PWM_Value_day);<br />writeData(1,PWM_Value_night);<br />uart_puts(&quot;PWM_Value_day write zapis= &quot;);uart_putnr(PWM_Value_day);uart_puts(&quot;\r\n&quot;);<br />uart_puts(&quot;PWM_Value_night write zapis= &quot;);uart_putnr(PWM_Value_night);uart_puts(&quot;\r\n&quot;);<br />i = readData(0,&amp;dataout);<br />uart_puts(&quot;PWM_Value_day read from eeprom = &quot;);uart_putnr(i);uart_puts(&quot;\r\n&quot;);<br />i = readData(1,&amp;dataout);<br />uart_puts(&quot;PWM_Value_night read from eeprom = &quot;);uart_putnr(i);uart_puts(&quot;\r\n&quot;);<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 30 cze 2015, o 13:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-06-30T12:36:34+01:00</updated>
<published>2015-06-30T12:36:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133252#p133252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133252#p133252"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133252#p133252"><![CDATA[
<div class="quotetitle">wchpikus napisał(a):</div><div class="quotecontent"><br />Juz wiem:)<br />Jeju, ale zrobiłem bube...<br /></div><br />I jak zwykle najwięcej problemów sprawia coś nieistotnego <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]void writeData(unsigned char addr, unsigned char *datain){...}<br /><br />//gdzieś w mainie<br />writeData(addr, &amp;data);[/syntax]<br />Powinno działać.<br /><br /><br /><br />Teraz możesz się pozbyć tego delaya stosując coś takiego<br /><br />[syntax=c]void eewrite(uint8_t device, uint16_t addr, uint8_t dat)<br />{<br />start:<br />twistart();<br />twiwrite(device);<br /><br />if ( (TWSR &amp; 0xF8) == TW_MT_SLA_NACK)<br />{<br />twistop();<br />goto start;<br />}<br /><br />twiwrite(addr &gt;&gt; 8);<br />twiwrite(addr);<br /><br />twiwrite(dat);<br />twistop();<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 30 cze 2015, o 12:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-06-30T10:41:39+01:00</updated>
<published>2015-06-30T10:41:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133246#p133246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133246#p133246"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=133246#p133246"><![CDATA[
Juz wiem:)<br />Jeju, ale zrobiłem bube...<br /><br /><br />[syntax=c]void writeData(unsigned char addr, unsigned char *datain)<br />{<br /><br />i2c_start(addressw);<br />i2c_write(addr&gt;&gt; 8);<br />i2c_write(addr);<br />i2c_write(*datain);<br />i2c_stop();<br />_delay_ms(25);[/syntax]<br /><br />Miałem rzutowanie....stad nie działało...ale kicha:)<br /><br />[syntax=c]void writeData(unsigned char addr, unsigned char datain)<br />{<br /><br />i2c_start(addressw);<br />i2c_write(addr&gt;&gt; 8);<br />i2c_write(addr);<br />i2c_write(datain);<br />i2c_stop();<br />_delay_ms(25);[/syntax]<br /><br />Bez rzutowania działa...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 30 cze 2015, o 10:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-06-26T13:29:21+01:00</updated>
<published>2015-06-26T13:29:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=132967#p132967</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=132967#p132967"/>
<title type="html"><![CDATA[Re: 24c256 ic2 atmega128..nie dziala, nie wiadomo czemu..]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12111&amp;p=132967#p132967"><![CDATA[
Zapisalem 20k adresow, odczyt inny niz zapisane dane..<br />Stronami zapisuje sie flash, nie eeprom..<br /><br /><br />Wymieniłem pamięć na inna, to samo...<br /><br /><br />Znalazlem dziwny kod, nei za bardzo rozumiem dlaczego tak to jest robione, juz w kilku przykladach jest tak dziwnie...<br /><br />[syntax=c]// set the 24C256 eeprom address to 0<br />  Wire.beginTransmission(80);<br />  Wire.send(0);  // address low byte<br />  Wire.send(0);  // address high byte<br />  Wire.endTransmission();[/syntax]<br /><br />Ustawienie adresu??<br /><br />[syntax=c]// read 1 byte, from address 0<br />  Wire.requestFrom(80, 1);<br />  while(Wire.available()) {<br />    num = Wire.receive();<br />  }<br />  Serial.print(&quot;num = &quot;);<br />  Serial.println(num, DEC);<br />  <br />  // increment num<br />  num = num + 1;<br />  <br />  // write &quot;num&quot; to 24C256 eeprom at address zero<br />  Wire.beginTransmission(80);<br />  Wire.send(0);    // address low byte<br />  Wire.send(0);    // address high byte<br />  Wire.send(num);  // any more send starts writing<br />  Wire.endTransmission();[/syntax]<br /><br />Czytanie i zapis jasny jest dla mnie..<br />Ale o co to ustawienie adresu??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 26 cze 2015, o 13:29</p><hr />
]]></content>
</entry>
</feed>