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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-02-12T19:02:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2305&amp;mode</id>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-02-12T19:02:36+01:00</updated>
<published>2013-02-12T19:02:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27741#p27741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27741#p27741"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27741#p27741"><![CDATA[
Działa<br />Wielkie dzięki za pomoc<br />Teraz w końcu mogę połączyć to z RTC i obsługą klawiatury od komputera <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=288">Janadamis</a> — 12 lut 2013, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-02-12T16:48:26+01:00</updated>
<published>2013-02-12T16:48:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27713#p27713</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27713#p27713"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27713#p27713"><![CDATA[
skoro masz void * buf to może zadziałać nawet<br /><br />[syntax=c]uint8_t * wsk = buf;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 lut 2013, o 16:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-02-12T16:42:53+01:00</updated>
<published>2013-02-12T16:42:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27710#p27710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27710#p27710"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27710#p27710"><![CDATA[
Jakoś nie mogę tego zrozumieć. Czy chodziło o to:<br />[syntax=c]<br />// odczyt danych z pamięci EEPROM<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, void *buf) {<br /><br /> uint8_t * wsk = (uint8_t*) buf;<br /><br />while (len--) {<br />TWI_start();<br />TWI_write(device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />TWI_write(subAddr);<br />TWI_start();<br />TWI_write(device + 1);<br /><br />*wsk++ = TWI_read( NACK );<br />TWI_stop();<br />subAddr++;<br />}<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 12 lut 2013, o 16:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nixie]]></name></author>
<updated>2013-02-11T21:12:36+01:00</updated>
<published>2013-02-11T21:12:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27542#p27542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27542#p27542"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27542#p27542"><![CDATA[
<div class="quotetitle">Janadamis napisał(a):</div><div class="quotecontent"><br />Ponieważ to jest w drugą stronę od wskaźnika wsk do buf.<br />Po wykonaniu ostatniego obiegu pętli musi przekazać wskaźnik wsk dane do buf. Hmm czyli to na końcu powinno być<br /></div><br /><br />wsk jest wskaźnikiem wskazującym kolejne adresy struktury buf i pozwala na zapis lub odczyt z kolejnych komórek tej struktury. Niczego nie musisz odwracać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=358">nixie</a> — 11 lut 2013, o 21:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-02-11T19:09:42+01:00</updated>
<published>2013-02-11T19:09:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27524#p27524</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27524#p27524"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27524#p27524"><![CDATA[
Ponieważ to jest w drugą stronę od wskaźnika wsk do buf.<br />Po wykonaniu ostatniego obiegu pętli musi przekazać wskaźnik wsk dane do buf. Hmm czyli to na końcu powinno być <br />Co o tym myślicie?<br />   [syntax=c] // odczyt danych z pamięci EEPROM<br />    void EI2C_read_buf(u08 device, u16 subAddr, u16 len, void *buf) {<br />     <br />            uint8_t *wsk;<br />          <br />     <br />            while (len--) {<br />                    TWI_start();<br />                    TWI_write(device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />                    TWI_write(subAddr);<br />                    TWI_start();<br />                    TWI_write(device + 1);<br />     <br />                    *wsk++ = TWI_read( NACK );<br />                    TWI_stop();<br />                    subAddr++;<br />            }<br />         *buf = (void*) wsk;<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 11 lut 2013, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-11T14:21:26+01:00</updated>
<published>2013-02-11T14:21:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27495#p27495</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27495#p27495"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27495#p27495"><![CDATA[
A czemu z tego zrezygnowałeś ?<br />[syntax=c]uint8_t * wsk = (uint8_t*) buf;[/syntax]<br />To co teraz masz to niezainicjowany wskaźnik.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 11 lut 2013, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-02-11T09:55:22+01:00</updated>
<published>2013-02-11T09:55:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27471#p27471</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27471#p27471"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27471#p27471"><![CDATA[
Wielkie dzięki <br />Jako że prościej wygląda funkcja Pana Mirka to ja wybiorę.<br />Teraz bardziej zrozumiałem posługiwanie się rzutowaniami,wskaźnikami itp. Ale chyba nie dość bo:<br />Jednak teraz jest gorszy kłopot ponieważ trzeba też przerobić odczyt aby odczytał dane typu uint8_t i zrobić rzutowanie na typ nieokreślony <br />Idąc drogą Mirka spróbowałem to zrobić ale wywala błąd <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />[syntax=c]<br />// odczyt danych z pamięci EEPROM<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, void *buf) {<br /><br />uint8_t *wsk;<br />*buf = (void*) wsk;<br /><br />while (len--) {<br />TWI_start();<br />TWI_write(device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />TWI_write(subAddr);<br />TWI_start();<br />TWI_write(device + 1);<br /><br />*wsk++ = TWI_read( NACK );<br />TWI_stop();<br />subAddr++;<br />}<br />}<br />[/syntax]<br />Proszę o pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 11 lut 2013, o 09:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-02-11T00:58:18+01:00</updated>
<published>2013-02-11T00:58:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27466#p27466</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27466#p27466"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27466#p27466"><![CDATA[
Krauser jak zwykle dobrze prawi ale można też tak:<br /><br />[syntax=c]// zapis danych do pamięci EEPROM<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, TCFG * buf) {<br /><br />        uint8_t * wsk = (uint8_t*) buf;<br /><br />        while (len--) {<br />                TWI_start();<br />               <br />                TWI_write( device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />                TWI_write(subAddr);<br /> <br />                TWI_write( *wsk++);<br /> <br />                TWI_stop();<br />                _delay_ms(5); // oczekiwanie na zapis<br />                subAddr++;<br />        }<br />}[/syntax]<br /><br />co pokazuje, że wszystko co żyje w pamięci może być zutylizowane za pomocą wskaźników <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to też jest w pełni poprawna wersja ale nie jedyna można nawet pójść jeszcze dalej w stronę uniwersalności tej funkcji:<br /><br />[syntax=c]// zapis danych do pamięci EEPROM<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, void * buf) {<br /><br />        uint8_t * wsk = (uint8_t*) buf;<br /><br />        while (len--) {<br />                TWI_start();<br />               <br />                TWI_write( device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />                TWI_write(subAddr);<br /> <br />                TWI_write( *wsk++);<br /> <br />                TWI_stop();<br />                _delay_ms(5); // oczekiwanie na zapis<br />                subAddr++;<br />        }<br />}[/syntax]<br /><br />widzisz ? teraz pojawił się specyfikator void przed buf - dzięki temu teraz możesz przesyłać w zasadzie dowolne rzeczy <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> — 11 lut 2013, o 00:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-10T22:07:03+01:00</updated>
<published>2013-02-10T22:07:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27458#p27458</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27458#p27458"/>
<title type="html"><![CDATA[Re: Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27458#p27458"><![CDATA[
buf - to wskaźnik struktury i zwiększając go przesuniesz się o 3 bajty - rozmiar struktury<br />*buf - to wyłuskanie nazwy struktury  i to próbujesz rzutować na wskaźnik do uint8_t (uint8_t *)<br />Tymczasem wartość 1 elementu to po prostu buf-&gt;blink i taki elemnt powinieneś zapisać oraz 2 pozostałe podobnie.<br /><br />Jeśli natomiast chcesz używać ++ to zrób następująco:<br /><br />[syntax=c]typedef union {<br />   struct {<br />        uint8_t blink;<br />        uint8_t led;<br />        uint8_t lcd;<br />   };<br />   uint8_t tabela[3];<br />} TCFG;[/syntax]<br />Wtedy możesz odwoływać się albo poprzez nazwę elementu struktury, albo element tablicy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 10 lut 2013, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2013-02-10T18:12:53+01:00</updated>
<published>2013-02-10T18:12:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27410#p27410</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27410#p27410"/>
<title type="html"><![CDATA[Zapis struktury do EEPROM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2305&amp;p=27410#p27410"><![CDATA[
Witam<br />Jako że akurat mam ferie postanowiłem zrobić większy projekt.<br />Jako że w moim projekcie chcę wykorzystać zapis do zewnętrznego eproma 24C16. To postanowiłem że zamiast zapisywania tablic czy pojedynczych zmiennych do eproma że zapisze strukturę. Nasunęła mi się ta myśl po obejrzeniu filmiku Mirka dotyczącego zapisu danych do wewnętrznego eproma w procesorze.<br />Do tego celu oczywiście trzeba przerobić zapisywanie do eproma.<br />Na początku stworzyłem strukturę którą chcę zapisać dla testów<br />[syntax=c]<br />typedef struct {<br />uint8_t blink;<br />uint8_t led;<br />uint8_t lcd;<br />} TCFG;<br />TCFG ram_cfg;// dane w pamięci RAM<br />[/syntax]<br />Następnie przystąpiłem do przerobienia funkcji zapisującej do eproma. Jednak napotkałem kłopot. Chodzi oto że jak zapisać tę strukturę bajt po bajcie do eproma? Naskrobałem taki program przy którym wywala błąd.<br />[syntax=c]<br />// zapis danych do pamięci EEPROM<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, TCFG * buf) {<br /><br />while (len--) {<br />TWI_start();<br /><br />TWI_write( device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />TWI_write(subAddr);<br /><br />TWI_write((uint8_t *) *buf++);<br /><br />TWI_stop();<br />_delay_ms(5); // oczekiwanie na zapis<br />subAddr++;<br />}<br />}<br />[/syntax] <br />Wyświetla błąd w linijce TWI_write((uint8_t *) *buf++);<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">../main.c: In function 'EI2C_write_buf':<br />../main.c:144: error: cannot convert to a pointer type<br />../main.c:144: warning: passing argument 1 of 'TWI_write' makes integer from pointer without a cast</div><br />Bardzo proszę o pomoc jak rozwikłać ten kłopot będę bardzo wdzięczny ponieważ nie wiem w czym tkwi problem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 10 lut 2013, o 18:12</p><hr />
]]></content>
</entry>
</feed>