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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-11-25T21:52:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=23059&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-25T21:52:16+01:00</updated>
<published>2020-11-25T21:52:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=230000#p230000</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=230000#p230000"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=230000#p230000"><![CDATA[
<div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />Aż się boję co napisze Mirek<br /></div><br />Ale czego się bać - jakby się okazało, że masz rację - to ja tam honorowo wszedłbym pod stół i odszczekał to co mówiłem <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> bez krępacji i żadnego problemu - ciesząc się z takiego wynalazku i jeszcze bym ci podziękował za dodatkowe i to kilo bajty <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ale na razie niestety nie mam czasu tego sprawdzić i dlatego na razie nie wchodzę pod stół - ale może ktoś w międzyczasie sprawdzi ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />i da znać ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 lis 2020, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-25T20:55:15+01:00</updated>
<published>2020-11-25T20:55:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229998#p229998</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229998#p229998"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229998#p229998"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Toż masz UART i możesz sobie wypluć wynik - całą zawartość pamięci w HEX na terminal i porównać. Jak podejdziesz do tego w ten sposób - to jeszcze więcej się nauczysz jeśli chodzi o te pamięci<br /></div><br />dzięki Mirek <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Nie wiem czemu tak się męczyłem na lcd <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />, <br />W każdym razie poszedłem za radą Mirka i zacząłem testować pamięć, używając PuTTY<br /><br />Zapisałem na raty do <strong>24C04A Atmela</strong> 4 tablice z tekstem (ok. 2000 bajtów) w prost z noty Atmegi32 aby ładnie porównać zawartość tablic z wyświetlonym tekstem w PuTTY <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i okazuje się że cały zapisany text w <strong>eeprom-ie Atmela24C04A</strong> został poprawnie wyświetlony  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Aż się boję co napisze Mirek <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br /><br />A po niżej kod wypluwający zawartość pamięci(do 2200bajtów) do PuTTY.<br />[syntax=c]int main(void) {<br />lcd_init();           // inicjalizacja lcd<br />inicjalizacja_USART();<br />i2cSetBitrate(100);   // ustalam prędkosc magistrali I2C na 100 kHz<br />DDRC |= (1&lt;&lt;PC7);     // dioda do debugowania<br />led_OFF;<br />uint16_t Adres_eeprom=0;  // wybieram adres w pamięci od 0 do 8191<br /><br />/*char tablica1&#91;&#93;=&quot;1-tablica 341 bajtow. --- Program Flash memory space is divided in two sections, the Boot program section and the\r\n&quot;<br />&quot;Application Program section. Both sections have dedicated Lock bits for write and read/write\r\n&quot;<br />&quot;protection. The SPM instruction that writes into the Application Flash memory section must\r\n&quot;<br />&quot;reside in the Boot Program section.\r\n\r\n&quot;;<br /><br />char tablica2&#91;&#93;=&quot;2-tablica 588 bajtow. --- During interrupts and subroutine calls, the return address Program Counter (PC) is stored on the\r\n&quot;<br />&quot;Stack. The Stack is effectively allocated in the general data SRAM, and consequently the Stack\r\n&quot;<br />&quot;size is only limited by the total SRAM size and the usage of the SRAM. All user programs must\r\n&quot;<br />&quot;initialize the SP in the reset routine (before subroutines or interrupts are executed). The Stack\r\n&quot;<br />&quot;Pointer SP is read/write accessible in the I/O space. The data SRAM can easily be accessed&quot;<br />&quot;\r\nthrough the five different addressing modes supported in the AVR architecture\r\n\r\n&quot;;<br /><br />char tablica3&#91;&#93;=&quot;3-tablica 480 batow. --- The memory spaces in the AVR architecture are all linear and regular memory maps.\r\n&quot;<br />&quot;A flexible interrupt module has its control registers in the I/O space with an additional global\r\n&quot;<br />&quot;interrupt enable bit in the Status Register. All interrupts have a separate interrupt vector in the\r\n&quot;<br />&quot;interrupt vector table. The interrupts have priority in accordance with their interrupt vector posi-\r\n&quot;<br />&quot;tion. The lower the interrupt vector address, the higher the priority.&quot;;<br /><br />char tablica4&#91;&#93;=&quot;\r\n\r\n4-tablica 597 bajtow. --- The high-performance Atmel *AVR* ALU operates in direct connection with all the 32 general\r\n&quot;<br />&quot;purpose working registers. Within a single clock cycle, arithmetic operations between general\r\n&quot;<br />&quot;purpose registers or between a register and an immediate are executed. The ALU operations\r\n&quot;<br />&quot;are divided into three main categories – arithmetic, logical, and bit-functions. Some implementa-\r\n&quot;<br />&quot;tions of the architecture also provide a powerful multiplier supporting both signed/unsigned\r\n&quot;<br />&quot;multiplication and fractional format. See the “Instruction Set” section for a detailed description.\r\n&quot;;<br />*/<br />  //EEPROM_24C04A_write_tab(_24C04_ADR, 0, sizeof(tablica1), tablica1);<br />  //EEPROM_24C04A_write_tab(_24C04_ADR, 340, sizeof(tablica2), tablica2);<br />          //EEPROM_24C04A_write_tab(_24C04_ADR, 930, sizeof(tablica3), tablica3);<br />  //EEPROM_24C04A_write_tab(_24C04_ADR, 1430, sizeof(tablica4), tablica4);<br /><br />/*   // do czyszczenia całego eeprom-mu<br />while(1){<br />EEPROM_24C04A_write(_24C04_ADR, Adres_eeprom, 0); // zpelniam eepromm zerami<br />Adres_eeprom++;<br />if(Adres_eeprom&gt;8191)while(1)led_ON; // zaswiecam led jak koniec kasowania, chwilę trwa kasowanie.<br />}<br />//  */<br /><br />//uart_putint(sizeof(tablica4), 10);<br /><br />while(1){<br />uint8_t a=EEPROM_24C04A_read(_24C04_ADR, Adres_eeprom); // do zmiennej &quot;a&quot; zapisuję bajt z eepromu<br />//uart_putint(Adres_eeprom,10);<br />//uart_puts(&quot; komurka = &quot;);<br />uart_putc(a);<br />//uart_transmit(0x0D);<br />//uart_transmit(0x0A);<br />Adres_eeprom++; // zwiększam adres do sprawdzenia.<br />if(Adres_eeprom&gt;2200)while(1);// gdy przekroczę wartość pamięci ztrzymuje proram<br />}<br />}[/syntax]<br /><br />jeszcze funkcja do zapisywania tablicy do pamięci <strong>24C04A Atmela</strong> oczywiście napisana niechlujnie <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" />  ale do testowania wystarczy.<br />[syntax=c]void EEPROM_24C04A_write_tab(uint8_t device, uint16_t subAddr,uint16_t len, char *tab){<br />while(len){<br />I2C_start();<br />I2C_write(device);<br />I2C_write(subAddr / 256); // ustalam stronę<br />I2C_write(subAddr % 256); // ustalam nr.bajtu na stronie<br />I2C_write(*(tab++));<br />I2C_stop();<br />_delay_ms(5);<br />subAddr++;<br />len--;<br />}<br />}[/syntax]<br /><br />Pozdrawiam. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2747">steter</a> — 25 lis 2020, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-24T22:17:01+01:00</updated>
<published>2020-11-24T22:17:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229993#p229993</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229993#p229993"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229993#p229993"><![CDATA[
<div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />według mnie kostce ATMEL718 24C04A fabryka dała 8192 bajty pamięci.<br /></div><br />Oooo Panie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no to teraz zaszalałeś albo popłynąłeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... tu piszesz że 8192 bajty a za chwilę<br /><br /><div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />Tak Adam12 nie dość że mogę potwierdzić że Twoja Atmel24C04A ma 1024 bajty,<br /></div><br />to zdecyduj się <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... a pamięć jak pamięć ma - czy tego chcesz czy nie - jedynie 512 bajtów ... tylko ty jeszcze musisz dostrzec w swoim kodzie, że zjadasz własny ogon ... a jak się rozpędzisz to może dojdziesz do 16 kB ?<br /><br /><div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />I tak w ogóle, to bardzo się cieszę, że dostała mi się własnie ta dziwna pamięć Atmela24C04A dzięki temu przypadkowi bardzo dużo się nauczyłem o transmisji I2C, oraz zacząłem bardziej rozumieć noty katalogowe z układami pracującymi z transmisją I2C.<br /></div><br />No a tu to się z tobą zgadzam w 100% ... że warto rozgryzać takie przypadki, tego nikt ci nie odbierze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tylko nie szalej proszę z tymi odkryciami.<br /><br />Musisz zrozumieć, że te pamięci zapisywane są stronami -  i dlatego zjadasz własny ogon licząc sobie adres do 8192 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Zamiast robić tak przedziwne testy - zapisz lepiej do tej pamięci albo inaczej, spróbuj zapisać więcej niż 512 bajtów - chociażby 513 i później spróbuj je odczytać wszystkie naraz. Toż masz UART i możesz sobie wypluć wynik - całą zawartość pamięci w HEX na terminal i porównać. Jak podejdziesz do tego w ten sposób - to jeszcze więcej się nauczysz jeśli chodzi o te pamięci <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 lis 2020, o 22:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-24T19:35:33+01:00</updated>
<published>2020-11-24T19:35:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229989#p229989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229989#p229989"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229989#p229989"><![CDATA[
<strong>Dotyczy tylko pamięci EEPROM firmy Atmel 24C04A !</strong><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />KOLOSALNA RÓŻNICA jest - i nie działa tu nic na krzyż<br /></div> Mirek, chylę czoła <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />No ale dobrze ci się wydaje, że to niemożliwe - bo nie jest możliwe  pamięci jest tyle ile stwórca czyli fabryka dała ...<br /></div><br />według mnie kostce <strong>ATMEL718 24C04A</strong> fabryka dała 8192 bajty pamięci.<br /><br />A kto jest w posiadaniu takiej własnie kostki może sprawdzić, ja sprawdziłem na dwóch egzemplarzach.<br />[syntax=c]// Funkcja do zapisu pojedynczego bajtu do pamięci<br />void EEPROM_24C04A_write(uint8_t device, uint16_t subAddr, uint8_t data){<br />I2C_start();<br />I2C_write(device);<br />I2C_write(subAddr / 256); // ustalam stronę<br />I2C_write(subAddr % 256); // ustalam nr.bajtu na stronie<br />I2C_write(data);<br />I2C_stop();<br />_delay_ms(5);<br />}<br />// Funkcja do odczytu pojedynczego bajtu z pamięci<br />uint8_t EEPROM_24C04A_read(uint8_t device, uint16_t subAddr){<br />I2C_start();<br />I2C_write(device);<br />I2C_write(subAddr / 256); // ustalam stronę<br />I2C_write(subAddr % 256); // ustalam nr.bajtu na stronie<br />I2C_start();<br />I2C_write(device+1);<br />uint8_t data=I2C_read(NACK);<br />I2C_stop();<br />return data;<br />}[/syntax]<br /><br />i krótki programik do testowania.<br />[syntax=c]#define led_ON PORTC &amp;=~(1&lt;&lt;PC7)<br />#define led_OFF PORTC |=(1&lt;&lt;PC7)<br /><br />int main(void) {<br />lcd_init();           // inicjalizacja lcd<br />i2cSetBitrate(100);   // ustalam prędkość magistrali I2C na 100 kHz<br />DDRC |= (1&lt;&lt;PC7);     // dioda do debugowania<br />led_OFF;<br /><br />uint16_t Adres_eeprom=4879;  // wybieram adres w pamięci od 0 do 8191<br />uint8_t DATA=13;      // zmienna do zapisania w pamięci<br /><br />EEPROM_24C04A_write(_24C04_ADR, Adres_eeprom, DATA); // zapisuję do pojedynczej komórki eeprom<br />Adres_eeprom=0; // do testowania zeruję adres komórki aby sprawdzać od początku<br /><br />/*   // do czyszczenia całego eeprom-mu<br />while(1){<br />EEPROM_24C04A_write(_24C04_ADR, Adres_eeprom, 0); // zapełniam eepromm zerami<br />Adres_eeprom++;<br />if(Adres_eeprom&gt;8191)while(1)led_ON; // zaświecam led jak koniec kasowania, chwilę trwa kasowanie.<br />}<br />//  */<br />while(1){<br />uint8_t a=0;<br />a=EEPROM_24C04A_read(_24C04_ADR, Adres_eeprom); // do zmiennej &quot;a&quot; zapisuję bajt z eepromu<br /><br />lcd_locate(0, 0);<br />lcd_str(&quot;Adres = &quot;);<br />lcd_str(&quot;    &quot;);<br />lcd_locate(0, 8);<br />lcd_long_int(Adres_eeprom);<br /><br />lcd_locate(2, 0);<br />lcd_str(&quot;Data  = &quot;);<br />lcd_str(&quot;   &quot;);<br />lcd_locate(2, 8);<br />lcd_long_int(a);<br /><br />Adres_eeprom++; // zwiększam adres do sprawdzenia.<br /><br />if(a==DATA)while(1)led_ON;    // gdy pobrany bajt jest równy wcześniej zapisanemu, zatrzymaj program i załącz led<br />if(Adres_eeprom&gt;8191)while(1);// gdy przekroczę wartość pamięci zatrzymuję program<br />}<br />}[/syntax]<br /><br /><div class="quotetitle">Adam12 napisał(a):</div><div class="quotecontent"><br />Przy okazji wyszło mi, że pamięć ma organizację 32 strony x 32 bity z czego z kolei wynika, że ma pojemność 1024 bajty czyli dwa razy więcej niż powinna mieć (8kb zamiast 4kb). Robiłem testy zapisując całą pamięć różnymi wartościami i rzeczywiście udało mi się taką pojemność zapisać i odczytać. Sam już nic z tego nie rozumiem. Może uda Wam się to też potwierdzić.<br /></div><br />Tak <strong>Adam12</strong> nie dość że mogę potwierdzić że Twoja <strong>Atmel24C04A</strong> ma 1024 bajty, to jeszcze zapytać Cię czy sprawdzałeś możliwość zapisania większego obszaru pamięci w tej kostce?<br /><br />I tak w ogóle, to bardzo się cieszę, że dostała mi się własnie ta dziwna pamięć <strong>Atmela24C04A</strong> dzięki temu przypadkowi bardzo dużo się nauczyłem o transmisji I2C, oraz zacząłem bardziej rozumieć noty katalogowe z układami pracującymi z transmisją I2C.<br /><br />Pozdrawiam. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2747">steter</a> — 24 lis 2020, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-21T21:55:48+01:00</updated>
<published>2020-11-21T21:55:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229943#p229943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229943#p229943"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229943#p229943"><![CDATA[
<div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />A może kostki nie problematyczne można adresować jak z końcówką A, (czyli strona, i nr.bajtu) ktoś sprawdzał?<br /></div><br />Jak myślisz - skąd by wyniknął taki wątek ? gdyby działały tak samo. Toż dostęp do nich jest CAŁKOWICIE INNY, nie tam że coś troszkę ... że jakaś mała różnica - KOLOSALNA RÓŻNICA jest - i nie działa tu nic na krzyż ... czyli jednym sposobem nie obsłużysz tej drugiej poprawnie. Kolega Adam zrobił niezły investigejszyn i jego kod działa bez pudła i na 10000% dobrze, można ślicznie tę pamięć nim zapisywać i odczytywać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2020, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-21T21:32:33+01:00</updated>
<published>2020-11-21T21:32:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229941#p229941</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229941#p229941"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229941#p229941"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />chym... posiadam dwa różne programatory do pamięci i w jednym nie ma rozróżnienia na 24C04 i 24C04A, ale jest on stary i powiedzmy że może nie mieć.<br />Natomiast drugi jest nowszy i faktycznie ma rozróżnienie. Co prawda nie znalazłem problematycznej pamięci, ale zapakowałem do programatora tę standardową bez literki na końcu. I dziwna sprawa, ale programator odczytuje poprawnie jej zawartość przy wybraniu obu pozycji... <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> Więc albo jest &quot;użytkownikoodporny&quot; i sam wybiera właściwą komunikację, albo opcja z literką A została dodana na podstawie dostępnej w necie noty bez testowania fizycznego egzemplarza pamięci  <img src="https://forum.atnel.pl/images/smilies/icon_mad.gif" alt=":x" title="Wściekły" /><br /></div><br /><br />A może kostki <strong> nie problematyczne</strong> można adresować jak z końcówką A, (czyli strona, i nr.bajtu) ktoś sprawdzał? <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=2747">steter</a> — 21 lis 2020, o 21:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2020-11-21T21:03:24+01:00</updated>
<published>2020-11-21T21:03:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229940#p229940</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229940#p229940"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229940#p229940"><![CDATA[
chym... posiadam dwa różne programatory do pamięci i w jednym nie ma rozróżnienia na 24C04 i 24C04A, ale jest on stary i powiedzmy że może nie mieć.<br />Natomiast drugi jest nowszy i faktycznie ma rozróżnienie. Co prawda nie znalazłem problematycznej pamięci, ale zapakowałem do programatora tę standardową bez literki na końcu. I dziwna sprawa, ale programator odczytuje poprawnie jej zawartość przy wybraniu obu pozycji... <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> Więc albo jest &quot;użytkownikoodporny&quot; i sam wybiera właściwą komunikację, albo opcja z literką A została dodana na podstawie dostępnej w necie noty bez testowania fizycznego egzemplarza pamięci  <img src="https://forum.atnel.pl/images/smilies/icon_mad.gif" alt=":x" title="Wściekły" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lis 2020, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-21T20:15:33+01:00</updated>
<published>2020-11-21T20:15:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229935#p229935</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229935#p229935"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229935#p229935"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />24C04 i 24C04A od microchipa<br /></div><br />nie dość że jest rozróżnienie to jeszcze na dodatek ciężko albo w ogóle nie można wpaść na notę do tej Atmelowskiej 24c04A niestety. Dlatego podałem wyżej link do postu gdzie jeden z kolegów ładnie rozgryzł tą kostkę. Ja sprawdzałem i jest idealnie tak jak to ten kolega pokazał - a pojemność pamięci jak najbardziej się zgadza. Więc nie ma co kombinować - tylko sprawdzić właściwymi źródłami z postu wcześniej - w których można zobaczyć sposób dostępu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2020, o 20:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2020-11-21T15:27:22+01:00</updated>
<published>2020-11-21T15:27:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229931#p229931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229931#p229931"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229931#p229931"><![CDATA[
Fakt nie spojrzałem na dużo wcześniejsze posty. Dziwna sprawa, poszukam w szpargałach tej konkretnej kości. Będe miał na czym testować. Ale trochę to dziwne i wręcz nie do pomyślenia bo przecież są programatory do tych pamięci i tam nie ma rozróżnienia na 24C04 i 24C04A od microchipa  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lis 2020, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-21T15:07:58+01:00</updated>
<published>2020-11-21T15:07:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229930#p229930</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229930#p229930"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229930#p229930"><![CDATA[
Witaj <strong>xentis</strong> , dziękuję za zainteresowanie się tym nieco dziwnym tematem. <br />Wygląda na to, że nie przeczytałeś tego tematu od początku, gdy zastosuję się do noty, to po prostu komunikacja z tą właśnie kostką nie działa jak należy. <br /><br /><div class="quotetitle">Adam12 napisał(a):</div><div class="quotecontent"><br />Ale tu nie chodzi o adres pamięci. Chodzi o to, że ta akurat AT24C04A ma całkiem odmienny sposób adresowania poszczególnych komórek do odczytu i zapisu. Najpierw trzeba podać stronę, a następnie bajt na tej stronie. Taki sposób nie jest opisany w żadnej nocie katalogowej dotyczącej tej pamięci. W przypadku zwykłej pamięci 24C04 podaje się po prostu adres kolejnego bajtu.<br /></div><br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2747">steter</a> — 21 lis 2020, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2020-11-21T14:41:30+01:00</updated>
<published>2020-11-21T14:41:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229929#p229929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229929#p229929"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229929#p229929"><![CDATA[
Jak na moje oko to namieszałeś. W tych pamięciach nie ma czegoś takiego jak numer strony, tak jak to próbujesz wysyłać w funkcji, no chyba że coś mi umknęło bo w funkcjach masz raz I2C_cośtam() a raz TWI_cośtam(), tak jakbyś poskładał tę funkcję z dwóch różnych źródeł...<br />Według noty strona to poprostu wielkość bufora ram w tej pamięci,(nota microchipa do kości 24C04A <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/11183F.pdf"  class="postlink">http://ww1.microchip.com/downloads/en/DeviceDoc/11183F.pdf</a>):<br /><a href="https://obrazkiforum.atnel.pl/6265/1730b7d90c5a534c9e573fef34b6c7d4.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/6265/1730b7d90c5a534c9e573fef34b6c7d4.png" alt="Obrazek" /></a><br /><br /><div class="quotetitle">steter napisał(a):</div><div class="quotecontent"><br />A skoro w żadnej nocie, nie ma poprawnej informacji o zapisie i odczycie tego eepromu, to również info o pojemności może być błędne.<br /></div>Jak nie ma jak jest:<br /><a href="https://obrazkiforum.atnel.pl/6265/08d7cb2bc29e0f8a1764cdc13be458f3.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/6265/08d7cb2bc29e0f8a1764cdc13be458f3.png" alt="Obrazek" /></a> <br />Masz nawet rozrysowane przebiegi całego zapisu stronicowego.<br />Aby zapisać stronę danych wysyłasz start, następnie bajt kontrolny składający się z 4 bitów identyfikujących typ, 2 bitów adresowych (zgodnie z podłączanymi nogami adresowymi pamięci), 1 bitu bloku oraz zerowy bit zapisu, następnie bajt adresujący - czyli od jakiego miejsca ma być zapisywana strona, następnie osiem bajtów danych zakończone stopem. Po tej sekwencji trzeba odczekać czas podany w nocie typowo 0.4*N[ms] gdzie N to liczba wysłanych bajtów, bo można wysłać mniej niż 8, ale nie więcej. Nota podaje jeszcze max. wartość krytyczną czasu jako 1*N[ms], jest to czas potrzebny na przepisanie danych z pamięci ram do eeprom, w tym czasie pamięć nie odpowie na próby komunikacji.<br />Wysłanie więcej niż 8 bajtów spowoduje nadpisanie pierwszych wysłanych danych czyli jeśli wyślesz 9 bajtów danych ostatni dziewiąty zapisze się w pierwszym bajcie bufora i zostanie zapisany do eeprom jako pierwszy, czyli niejako pierwszy bajt danych zostanie utracony.<br />Jest jeszcze jedna rzecz, mianowicie nota podaje że pamięć jest podzielona na 2 bloki (każdy po 256 bajtów), nie jest możliwy zapis inkrementacyjny na granicy bloku, tzn jeśli chcesz zapisać 8 bajtową stronę to nie możesz jako adres podać np 250 bo 250+8=258 czyli wyjdziesz poza blok a to spowoduje że dwa ostatnie bajty zostaną zapisane na adresie 1 i 2.<br /><br />Powyższe wywnioskowane z noty microchipa do kostki 24C04A, nie testowałem, bo nie posiadam akurat pamięci 24C04A, ale z tego co kiedyś się bawiłem kostką innego producenta to tamta pamięć miała jakby zależność typu wielkość strony = wielkość bloku, czyli przy zapisie stronicowym trzeba było dokładnie wyliczyć początek strony bo inaczej podczas zapisu ta została &quot;zrolowana&quot;.<br />Wygląda że pamięci 04A od microchipa produkowane są bez konwencji podziału na typowe strony jak wcześniej to miało miejsce, co zresztą piszą na końcu noty:<br /><a href="https://obrazkiforum.atnel.pl/6265/f2a71fd53d9488ef81b7cf05cf2ebb00.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/6265/f2a71fd53d9488ef81b7cf05cf2ebb00.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lis 2020, o 14:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-21T12:22:39+01:00</updated>
<published>2020-11-21T12:22:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229928#p229928</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229928#p229928"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229928#p229928"><![CDATA[
Hmm, <br />Zapisuję zmienną o wartości 10 na stronę 1 do 250 bajtu<br />Sprawdzam każde 16 bajtów na 32 stronach i nie znajduję wcześniej zapisanej zmiennej z wartością 10<br />sprawdzam więc 32 bajty na 32 stronach i dalej nic<br />sprawdzam więc 256 bajtów na 32 stronach i znajduję na 1 stronie w 250 bajcie wcześniej zapisaną zmienną o wartości 10.?<br /><br />o co chodzi?<br /><br />funkcje z których korzystam.<br />[syntax=c]void TWI_write_EEPROM(uint8_t device, uint8_t strona, uint8_t nr_bajtu, uint8_t data ){<br />I2C_start();<br />I2C_write(device);<br />TWI_write(strona);<br />I2C_write(nr_bajtu);<br />I2C_write(data);<br />I2C_stop();<br />_delay_ms(5);<br /><br />}<br />uint8_t TWI_read_EEPROM(uint8_t device, uint8_t strona, uint8_t nr_bajtu){<br />uint8_t data;<br />I2C_start();<br />I2C_write(device);<br />TWI_write(strona);<br />I2C_write(nr_bajtu);<br />I2C_start();<br />I2C_write(device+1);<br />data=I2C_read(NACK);<br />I2C_stop();<br />return data;<br />}[/syntax]<br /><br />A tu kod do testowania.<br />[syntax=c]#define led_ON PORTC &amp;=~(1&lt;&lt;PC7)<br />#define led_OFF PORTC |=(1&lt;&lt;PC7)<br /><br />#define zakres_sprawdzania_adresu_bajtu 253<br />// ustawiamy zakres sprawdzania adresu bajtu na stronach<br /><br />int main(void) {<br />lcd_init();           // inicjalizacja lcd<br />inicjalizacja_I2C();  // inicjalizacja I2C<br />DDRC |= (1&lt;&lt;PC7);     // dioda do debugowania<br />led_OFF;<br /><br />uint8_t DATA=10;<br />uint8_t a=0;<br />uint8_t strona=0;<br />uint8_t nr_bajtu=0;<br /><br />//TWI_write_EEPROM(eeprom, 1, 250, DATA); // na stronę 1 do bajtu 250 zapisuję licbę 10<br /><br />while(1) {<br />/*   // do czyszczenia całego eeprom-mu<br />while(1){<br />TWI_write_EEPROM(eeprom, strona, nr_bajtu, 0);<br />nr_bajtu++;<br />if(!nr_bajtu){<br />strona++;<br />if(strona&gt;31){<br />strona=0;<br />while(1)led_ON;<br />}<br />}<br />}<br />   */<br />a=TWI_read_EEPROM(eeprom, strona, nr_bajtu); // czytam z eepromu do zmiennej<br /><br />lcd_locate(0, 0);          //<br />lcd_str(&quot;   &quot;);            //<br />lcd_locate(0, 0);          //<br />lcd_long_int(strona);      //<br />                                   //<br />lcd_locate(2, 0);          //<br />lcd_str(&quot;   &quot;);            //  tu poprostu wyświetlam na lcd nr strony, nr bajtu i zmienną pobraną z pamięci<br />lcd_locate(2, 0);          //<br />lcd_long_int(nr_bajtu);    //<br />                                   //<br />lcd_locate(2,13);          //<br />lcd_str(&quot;   &quot;);            //<br />lcd_locate(2,13);          //<br />lcd_long_int(a);           //<br /><br />if(a==DATA)while(1)led_ON;// gdy pobrany bajt jest równy wcześniej zapisanemu, zatrzymaj program i załącz led<br /><br />nr_bajtu++; // kolejny adres bajtu do sprawdzenia<br /><br />if(nr_bajtu &gt; zakres_sprawdzania_adresu_bajtu || !nr_bajtu){ // jak adres bajtu przekroczył limit to wyzeruj i następna strona<br />nr_bajtu=0;<br />strona++;<br />if(strona&gt;31)while(1);// jak sprawdzone wszystkie strony to stoimy<br />}<br />}<br />}[/syntax]<br /><br />Oczywiście nie ma co głowy zawracać, bo pamięć działa w zakresie deklarowanym przez producenta, ale jak by ktoś był w posiadaniu akurat tej pamięci Atmel718 24C04A i przy ciepłej herbatce się nudził <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> to może wyprowadzi mnie na prostą. <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=2747">steter</a> — 21 lis 2020, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-21T10:30:48+01:00</updated>
<published>2020-11-21T10:30:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229927#p229927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229927#p229927"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229927#p229927"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />A mi wychodzi że ma 32 strony x 256 bitów.( co wydaje się nie możliwe )<br /></div><br />No ale dobrze ci się wydaje, że to niemożliwe - bo nie jest możliwe <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> pamięci jest tyle ile stwórca czyli fabryka dała ...<br /><br />Coś tam musiałeś pomyliś jednak w kodzie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2020, o 10:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-21T09:51:11+01:00</updated>
<published>2020-11-21T09:51:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229926#p229926</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229926#p229926"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229926#p229926"><![CDATA[
Wszystko działa jak należy, jako tylko Ciekawostkę, chciałem dociec jaką pojemność ma ten typ pamięci, <div class="quotetitle">Adam12 napisał(a):</div><div class="quotecontent"><br />Przy okazji wyszło mi, że pamięć ma organizację 32 strony x 32 bity z czego z kolei wynika, że ma pojemność 1024<br /></div> <br />A mi wychodzi że ma 32 strony x 256 bitów.( co wydaje się nie możliwe ) <br />A skoro w żadnej nocie, nie ma poprawnej informacji o zapisie i odczycie tego eepromu, to również info o pojemności może być błędne.<br /><br />To po prostu ciekawe, jak ktoś nie ma czasu, lub po prostu ochoty, to luz, obawiałem się tylko że błędnie testuję tego eeproma.<br /><br />Więc żadnego problemu Mirku niema:)<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2747">steter</a> — 21 lis 2020, o 09:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-21T06:29:16+01:00</updated>
<published>2020-11-21T06:29:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229925#p229925</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229925#p229925"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229925#p229925"><![CDATA[
Przecież masz w tym wątku pełny poprawny kod źródłowy do obsługi tej pamięci<br /><br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/post226636.html#p226636" >post226636.html#p226636</a><!-- l --><br /><br />więc nie wiem za bardzo w czym problem?<br /><br />a jeśli chodzi o pin WP to zaglądaj do not PDF, wtedy zawsze lepiej zrozumiesz o co chodzi i dlaczego może wisieć spokojnie w powietrzu, oto info wprost z noty pdf<br /><br /><a href="https://obrazkiforum.atnel.pl/54/737860f9967bd9d60fde08aa7af41dd4.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/54/737860f9967bd9d60fde08aa7af41dd4.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2020, o 06:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[steter]]></name></author>
<updated>2020-11-20T22:50:19+01:00</updated>
<published>2020-11-20T22:50:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229924#p229924</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229924#p229924"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=229924#p229924"><![CDATA[
Witam,<br /><br />Dawno mnie na forum nie było, akurat miałem taki sam problem jak koledzy wyżej, dlatego postanowiłem napisać o swoich spostrzeżeniach.<br />Zacząłem się bawić i testować tą samą dziwną pamięć eeprom (ATMEL718 24C04A), i u mnie wygląda to tak jak by miała ona 32 strony, a na każdej stronie 255 bajtów. Napisałem krótki program według zaleceń (j.w) wydaje się wręcz nie możliwe, żeby było tak dużo pamięci, proszę wyprowadźcie mnie z błędnego myślenia jeśli się mylę, a jak macie chwilkę czasu, to przetestujcie, oczywiście sprawa dotyczy tylko tej dziwnej pamięci ATMEL718 24C04A.<br />Dziwię się również dlaczego w zestawie noga  &quot;WP&quot; wisi w powietrzu? czy nie powinna być ściągnięta do GND, Układ oczywiście działa.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;I2C/I2C.h&quot;<br />#include &quot;LCD/lcd.h&quot;<br /><br />int main(void) {<br /><br />lcd_init();           // inicjalizacja lcd<br />inicjalizacja_I2C();  // inicjalizacja I2C<br />DDRC |= (1&lt;&lt;PC7);     // dioda do debugowania<br /><br />//uint8_t dana=7;<br />TWI_write_EEPROM(eeprom, 0, 255, 2); // TWI_write_EEPROM(adres_kostki, strona, adres, DATA);<br />TWI_write_EEPROM(eeprom, 1, 254, 3);<br />TWI_write_EEPROM(eeprom, 2, 253, 4);<br />TWI_write_EEPROM(eeprom, 2, 252, 5);<br />TWI_write_EEPROM(eeprom, 5, 222, 6);<br />TWI_write_EEPROM(eeprom, 5, 122, 7);<br />TWI_write_EEPROM(eeprom, 25, 122, 8);<br /><br />uint8_t a=0;<br />uint8_t strona=0;<br />uint8_t adres=0;<br />uint16_t suma=0;<br /><br />while(1) {<br /><br />/*   // do czyszczenia całego eeprom-mu<br />while(1){<br /><br />TWI_write_EEPROM(eeprom, strona, adres, 0);<br /><br />adres++;<br />if(!adres){<br />strona++;<br />if(strona&gt;31){<br />strona=0;<br />while(1){<br />PORTC &amp;=~(1&lt;&lt;PC7);<br />}<br />}<br />}<br />}<br />    */<br />a=TWI_read_EEPROM(eeprom, strona, adres);<br /><br />lcd_locate(0, 0);<br />lcd_str(&quot;   &quot;);<br />lcd_locate(0, 0);<br />lcd_long_int(strona);<br /><br />lcd_locate(2, 0);<br />lcd_str(&quot;   &quot;);<br />lcd_locate(2, 0);<br />lcd_long_int(adres);<br /><br />lcd_locate(2,13);<br />lcd_str(&quot;   &quot;);<br />lcd_locate(2,13);<br />lcd_long_int(a);<br /><br />suma = suma + a;<br /><br />lcd_locate(0,13);<br />lcd_str(&quot;   &quot;);<br />lcd_locate(0,13);<br />lcd_long_int(suma);<br /><br />adres++;<br /><br />if(!adres){<br />strona++;<br />if(strona&gt;31){<br />strona=0;<br />PORTC &amp;=~(1&lt;&lt;PC7);<br />while(1);<br />}<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2747">steter</a> — 20 lis 2020, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-04-26T16:43:51+01:00</updated>
<published>2020-04-26T16:43:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226671#p226671</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226671#p226671"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226671#p226671"><![CDATA[
<div class="quotetitle">Adam12 napisał(a):</div><div class="quotecontent"><br />Ale tu nie chodzi o adres pamięci. Chodzi o to, że ta akurat AT24C04A ma całkiem odmienny sposób adresowania poszczególnych komórek do odczytu i zapisu. Najpierw trzeba podać stronę, a następnie bajt na tej stronie. Taki sposób nie jest opisany w żadnej nocie katalogowej dotyczącej tej pamięci. W przypadku zwykłej pamięci 24C04 podaje się po prostu adres kolejnego bajtu.<br /></div><br />No właśnie jakby nie wszyscy to dostrzegają ... a wkurzające jest jakby trochę że kostka ma symbol niestety mylący nieco bo jak standardowa 24c04 wszystkich innych producentów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 kwi 2020, o 16:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2020-04-26T15:59:33+01:00</updated>
<published>2020-04-26T15:59:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226670#p226670</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226670#p226670"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226670#p226670"><![CDATA[
Ale tu nie chodzi o adres pamięci. Chodzi o to, że ta akurat AT24C04A ma całkiem odmienny sposób adresowania poszczególnych komórek do odczytu i zapisu. Najpierw trzeba podać stronę, a następnie bajt na tej stronie. Taki sposób nie jest opisany w żadnej nocie katalogowej dotyczącej tej pamięci. W przypadku zwykłej pamięci 24C04 podaje się po prostu adres kolejnego bajtu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 26 kwi 2020, o 15:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojtas14136]]></name></author>
<updated>2020-04-26T13:46:49+01:00</updated>
<published>2020-04-26T13:46:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226662#p226662</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226662#p226662"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226662#p226662"><![CDATA[
wszytko śmiga jeszcze wczoraj wieczorem próbowałem , wszystko jest tak jak powinno być także dziękuje za pomoc wszystkim, życzę miłego dnia <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21357">wojtas14136</a> — 26 kwi 2020, o 13:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-04-26T12:07:59+01:00</updated>
<published>2020-04-26T12:07:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226652#p226652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226652#p226652"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226652#p226652"><![CDATA[
<div class="quotetitle">wojtas14136 napisał(a):</div><div class="quotecontent"><br />a odnośnie tych adresów to wpisałem i dalej nic tylko prostokąty z LCD zniknęły , dlatego pewnie że to zły adres<br /></div><br /><br />ok to dzięki koledze Adam12 problem rozwiązany o tyle, że możesz sobie dodać do swojego kodu takie dwie funkcje, zastąpić w zasadzie te z Bluebooka<br /><br /><br />zamiast tych:<br /><br />[syntax=c]void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf);[/syntax]<br /><br /><br />daj właśnie takie:<br /><br />[syntax=c]// odczyt danych z pamięci EEPROM<br />void AT24c04A_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br /><br />while (len) {<br />TWI_start();<br />        TWI_write(device);<br />        TWI_write(subAddr &gt;&gt; 5);    // w pierwszym bajcie przesyłamy stronę<br />        TWI_write(subAddr &amp; 0x1F); // w drugim bajcie przesyłamy adres bajtu do zaprogramowania na wybranej stronie<br />TWI_start();<br />TWI_write(device + 1);<br /><br />            do {<br />                    subAddr++;  // zwiększenie adresu<br />                    len--;      // zmniejszenie długości danych do odczytu<br />                    *buf++ = TWI_read((( subAddr &amp; 0x1F ) &amp;&amp; len) ? ACK : NACK ); // wyślij NACK dla ostatniego bajtu<br />            } while (( subAddr &amp; 0x1F ) &amp;&amp; len);  // powtarzaj dopóki subAddr &lt;32 i len&gt;0<br /><br />TWI_stop();<br />}<br />}<br /><br /><br /><br />// zapis danych do pamięci EEPROM<br />void AT24c04A_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br /><br />while (len) {<br />TWI_start();<br />TWI_write(device);<br />        TWI_write(subAddr &gt;&gt; 5);    // w pierwszym bajcie przesyłamy stronę<br />        TWI_write(subAddr &amp; 0x1F); // w drugim bajcie przesyłamy adres bajtu do zaprogramowania na wybranej stronie<br /><br />        do {<br />                subAddr++;  //zwiększenie adresu<br />                len--;      //zmniejszenie długości danych do odczytu<br />                TWI_write(*buf++);<br />        } while (( subAddr &amp; 0x1F ) &amp;&amp; len);  //powtarzaj dopóki subAddr &lt;32 i len&gt;0<br /><br />TWI_stop();<br />_delay_ms(5); // oczekiwanie na zapis<br />}<br />}[/syntax]<br /><br />I pamięć AT24c04A będzie śmigała w zestawie ATB, nie jest wadliwa. Jeszcze raz podziękowania dla kolegi Adam12, że wpadł na trop i akurat tutaj zajrzał. Zatem kliknij Adamowi przycisk &quot;POMÓGŁ&quot; - bo naprawdę pomógł ! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 kwi 2020, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2020-04-25T22:35:43+01:00</updated>
<published>2020-04-25T22:35:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226643#p226643</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226643#p226643"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226643#p226643"><![CDATA[
W <a href="http://ww1.microchip.com/downloads/en/devicedoc/doc0976.pdf"  class="postlink">PDFie</a> w Memory Organization jest napisane:<br />&quot;AT24C02A, 2K SERIAL EEPROM: The 2K is internally organized with 32 pages of 8bytes each. Random word addressing requires an 8-bit data word address.<br />AT24C04A, 4K SERIAL EEPROM: The 4K is internally organized with 32 pages of 16bytes each. Random word addressing requires a 9-bit data word address.&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 25 kwi 2020, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-04-25T20:50:25+01:00</updated>
<published>2020-04-25T20:50:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226637#p226637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226637#p226637"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226637#p226637"><![CDATA[
Dobre - muszę przetestować w poniedziałek ... ale jednak to odstępstwo od normy na ATB no i wkurzające właśnie, że noty dla AT24C04A nie mówią o tych szczegółach. Fajnie że udało ci się do tego dojść.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 kwi 2020, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2020-04-25T20:46:15+01:00</updated>
<published>2020-04-25T20:46:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226636#p226636</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226636#p226636"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226636#p226636"><![CDATA[
Mam też 24C04A i miałem ten sam problem. Układ nie jest wadliwy, ale rzeczywiście ma inny rodzaj transmisji, podobny jak dla układów o większej pojemności. Co ciekawe nie udało mi się tego znaleźć w żadnej nocie, nawet innego producenta. Ale znalazłem ten temat: <a href="https://forum.elportal.pl/viewtopic.php?f=83&amp;t=2709"  class="postlink">https://forum.elportal.pl/viewtopic.php?f=83&amp;t=2709</a>, który wszystko wyjaśnił. Na podstawie tego opisu napisałem swoje funkcje i wszystko działa jak należy. Przy okazji wyszło mi, że pamięć ma organizację 32 strony x 32 bity z czego z kolei wynika, że ma pojemność 1024 bajty czyli dwa razy więcej niż powinna mieć (8kb zamiast 4kb). Robiłem testy zapisując całą pamięć różnymi wartościami i rzeczywiście udało mi się taką pojemność zapisać i odczytać. Sam już nic z tego nie rozumiem. Może uda Wam się to też potwierdzić.<br /><br />Moje funkcje:<br />[syntax=c]#define _24C04_ADDR 0xA8<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 />uint8_t AT24Cxx_read_byte(u08 device, u16 subAddr);<br />void AT24Cxx_write_byte(u08 device, u16 subAddr, u08 byte);<br />void AT24Cxx_fill_all(u08 device, u08 byte);<br />void AT24Cxx_erase_all(u08 device);<br />void AT24Cxx_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br />void AT24Cxx_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br />void AT24Cxx_read(u08 device, u16 subAddr, u16 len, u08 *buf);<br />void AT24Cxx_write(u08 device, u16 subAddr, u16 len, u08 *buf);<br /><br />// odczyt bajtu z pamięci EEPROM<br />uint8_t AT24Cxx_read_byte(u08 device, u16 subAddr) {<br />TWI_start();<br />TWI_write(device);<br />TWI_write(subAddr &gt;&gt; 5);//page0-31<br />TWI_write(subAddr &amp; 0x1F); //byte0-31<br />TWI_start();<br />TWI_write(device + 1);<br />u08 byte = TWI_read( NACK );<br />TWI_stop();<br />return byte;<br />}<br /><br />// zapis bajtu do pamięci EEPROM<br />void AT24Cxx_write_byte(u08 device, u16 subAddr, u08 byte) {<br />TWI_start();<br />TWI_write(device);<br />TWI_write(subAddr &gt;&gt; 5);//page0-31<br />TWI_write(subAddr &amp; 0x1F); //byte0-31<br />TWI_write(byte);<br />TWI_stop();<br />_delay_ms(3);<br />}<br /><br />//wypełnienie całej zawartości pamięci EEPROM wartością bajt<br />void AT24Cxx_fill_all(u08 device, u08 byte) {<br />for (uint16_t i = 0; i &lt; 32; i++) {<br />TWI_start();<br />TWI_write(device);<br />TWI_write(i);//page<br />TWI_write(0);//byte<br />for (uint16_t j = 0; j &lt; 32; j++) TWI_write(byte);<br />TWI_stop();<br />_delay_ms(3);<br />}<br />}<br /><br />//kasowanie całej zawartości pamięci EEPROM czyli zapis 0xFF do każdej komórki<br />void AT24Cxx_erase_all(u08 device) {<br />AT24Cxx_fill_all(device, 0xFF);<br />}<br /><br />// odczyt danych z pamięci EEPROM po jednym bajcie<br />void AT24Cxx_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br />while (len--) {<br />*buf++ = AT24Cxx_read_byte(device, subAddr);<br />subAddr++;<br />}<br />}<br /><br />// zapis danych do pamięci EEPROM po jednym bajcie<br />void AT24Cxx_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br />while (len--) {<br />AT24Cxx_write_byte(device, subAddr, *buf++);<br />subAddr++;<br />}<br />}<br /><br />// odczyt danych z pamięci EEPROM całymi stronami<br />void AT24Cxx_read(u08 device, u16 subAddr, u16 len, u08 *buf) {<br />while (len) {<br />    TWI_start();<br />    TWI_write(device);<br />    TWI_write(subAddr &gt;&gt; 5);//page0-31<br />    TWI_write(subAddr &amp; 0x1F); //byte0-31<br />    TWI_start();<br />    TWI_write(device + 1);<br />    do {<br />    subAddr++;//zwiększenie adresu<br />    len--;//zmniejszenie długości danych do odczytu<br />    *buf++ = TWI_read((( subAddr &amp; 0x1F ) &amp;&amp; len) ? ACK : NACK ); //wyślij NACK dla ostatniego bajtu<br />    } while (( subAddr &amp; 0x1F ) &amp;&amp; len);  //powtarzaj dopóki subAddr &lt;32 i len&gt;0<br />    TWI_stop();<br />}<br />}<br /><br />// zapis danych do pamięci EEPROM całymi stronami<br />void AT24Cxx_write(u08 device, u16 subAddr, u16 len, u08 *buf) {<br />while (len) {<br />    TWI_start();<br />    TWI_write(device);<br />    TWI_write(subAddr &gt;&gt; 5);//page0-31<br />    TWI_write(subAddr &amp; 0x1F); //byte0-31<br />    do {<br />    subAddr++;//zwiększenie adresu<br />    len--;//zmniejszenie długości danych do odczytu<br />    TWI_write(*buf++);<br />    } while (( subAddr &amp; 0x1F ) &amp;&amp; len);  //powtarzaj dopóki subAddr &lt;32 i len&gt;0<br />    TWI_stop();<br />    _delay_ms(3);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 25 kwi 2020, o 20:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-04-25T19:57:59+01:00</updated>
<published>2020-04-25T19:57:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226635#p226635</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226635#p226635"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226635#p226635"><![CDATA[
<div class="quotetitle">chi.cygni napisał(a):</div><div class="quotecontent"><br />W jednym zestawie ATB mam 24C04, a w drugim 24C04BN.<br /></div><br />No właśnie czyli nie masz tej wersji 24c04A i dlatego działa i będzie działać w każdej konfiguracji - nie wiem dlaczego producent do niektórych scalaków włożył nam te 24c04A ... tyle że one też powinny działać ale coś mi śmierdzi, że chyba są wadliwe ... jeszcze w poniedziałek sprawdzę na zewnętrznym programatorze pamięci EEPROM żeby się upewnić<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 kwi 2020, o 19:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[chi.cygni]]></name></author>
<updated>2020-04-25T19:21:52+01:00</updated>
<published>2020-04-25T19:21:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226632#p226632</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226632#p226632"/>
<title type="html"><![CDATA[Re: Problem z połączeniem magistrala I2C RTC i EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23059&amp;p=226632#p226632"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A czytałeś wyżej o modelu scalaka ? Sprawdziłeś jaki masz ? czy 24c04A ? jak nie to sprawdź<br /></div><br />W jednym zestawie ATB mam 24C04, a w drugim  24C04BN.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3240">chi.cygni</a> — 25 kwi 2020, o 19:21</p><hr />
]]></content>
</entry>
</feed>