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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-06-14T21:48:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12004&amp;mode</id>
<entry>
<author><name><![CDATA[frog]]></name></author>
<updated>2015-06-14T21:48:32+01:00</updated>
<published>2015-06-14T21:48:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131779#p131779</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131779#p131779"/>
<title type="html"><![CDATA[Re: Atmega8 EEPROM - problem z odczytem (zapisem?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131779#p131779"><![CDATA[
Spróbuj tak zdefiniować strukturę w pamięci EPROM:<br />[syntax=c]PARAMETRY eem __attribute__((section(&quot;.eeprom&quot;)));[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5970">frog</a> — 14 cze 2015, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[qmciaq]]></name></author>
<updated>2015-06-14T10:24:35+01:00</updated>
<published>2015-06-14T10:24:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131710#p131710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131710#p131710"/>
<title type="html"><![CDATA[Re: Atmega8 EEPROM - problem z odczytem (zapisem?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131710#p131710"><![CDATA[
Odznaczone (tak to jest jak się próbuje wszystkiego co jest na internecie), jednakże na nie wiele się to zdało.<br />Podmieniłem funkcje zapisywania flash-&gt;ram w odniesieniu do poradnika Pana Mirka <a href="http://mirekk36.blogspot.com/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html"  class="postlink">http://mirekk36.blogspot.com/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html</a> na <br />[syntax=c]void FLASH_do_RAM (void) {<br />memcpy_P( &amp;ram, &amp;flash, sizeof(ram) );<br />}[/syntax]<br />i adekwatnie wszędzie zmieniłem z sizeof(PARAMETRY) na sizeof(ram), chociaż akurat ta zmiana nie wiele powinna robić.<br />Wygląda to w tym momencie tak że po wywołaniu w programie<br />[syntax=c]status_eeprom=EEPROM_przywroc_podstawowe();<br />EEPROM_do_RAM(); // zczytanie wartosci z EEPROM i wykorzystanie ich[/syntax]<br />otrzymuje taki eeprom (pomijając czy poprawnie zapisany): <br /><a href="http://forum.atnel.pl/_obrazki/o/9058/628cb04a0a05e32e18c4d364dd18757a.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9058/628cb04a0a05e32e18c4d364dd18757a.JPG" alt="Obrazek" /></a><br />A po za komentowaniu funkcji EEPROM_przywroc_podstawowe(), po raz kolejny pojawiają się tam wszędzie zera.<br /><br />Ogółem z tego co testuje, wychodzi na to że użycie funkcji [syntax=c]eeprom_read_block(&amp;ram, &amp;eem, sizeof(ram));[/syntax] automatycznie zeruje te komórki w EEPROM, co z tego co rozumiem nie powinno się dziać (inaczej jak sprawdzić czy pusta?)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9058">qmciaq</a> — 14 cze 2015, o 10:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-06-14T10:17:42+01:00</updated>
<published>2015-06-14T10:17:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131709#p131709</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131709#p131709"/>
<title type="html"><![CDATA[Re: Atmega8 EEPROM - problem z odczytem (zapisem?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131709#p131709"><![CDATA[
Odznacz fusebit EESAVE, gdyż kiedy jest zaznaczony to włączona jest opcja niepozwalająca na zapis do pamięci EEPROM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 14 cze 2015, o 10:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[qmciaq]]></name></author>
<updated>2015-06-14T09:54:12+01:00</updated>
<published>2015-06-14T09:54:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131707#p131707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131707#p131707"/>
<title type="html"><![CDATA[Atmega8 EEPROM - problem z odczytem (zapisem?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12004&amp;p=131707#p131707"><![CDATA[
Witam,<br />przejdę od razu do meritum. Próbuję zmusić wewnętrzny EEPROM w atmedze8 do działania, jednakże bez skutku. Obudowałem zmienne w strukturę, zrobiłem funkcje dla zapisów flash-&gt;ram, ram-&gt;eeprom i odczytu eeprom-&gt; ram. Wywołuje w programie funkcje zapisu do eepromu (pokolei z flash, przez ram do eeprom), po czym próbuję odczytać wartość za pomocą funkcji eeprom -&gt; ram, odczytując pole z ram. Wszystko wydaje się okej, uzyskuje poprawną liczbę. Jednakże po wyłączeniu funkcji zapisu (czyli po jednokrotnym zapisaniu eepromu) i próbie odczytu eeprom-&gt; ram, czytając to samo pole otrzymuje wartość 0 za każdym razem. Stworzyłem także dla próby, dodatkową zmienną dla struktury ram, żeby sprawdzić czy przypadkiem w ram nie siedzą wartości po zapisie flash-&gt; ram i funkcja odczytu eeprom nic nie zmienia, jednakże przy wcześniejszym użyciu funkcji zapisu do eeprom przed odczytem, wszystko jest okej, używam innej zmiennej od flash do zapisu, innej do odczytu i wartość otrzymuje. Po za komentowaniu zapisu po raz kolejny wartość 0.<br />Zapewne to jakiś głupi problem, ale co może być nie tak?<br />Załączam kod : <br /><br />[syntax=c]typedef struct {<br />  uint8_t pominiecie; // pominiecie pierwszej komorki, potrafia byc problemy<br />  uint8_t podswietlenie_czas;<br />  uint8_t temperatura_czas;<br />  uint8_t program1&#91;5&#93;; // zapis godz rozpoczecia - min rozpoczecia / godz zakonczenia - min zakonczenia / w jakie dni<br />  uint8_t program2&#91;5&#93;;<br />  uint8_t program3&#91;5&#93;;<br />  uint8_t program4&#91;5&#93;;<br />  uint8_t program5&#91;5&#93;;<br />  uint8_t program6&#91;5&#93;;<br />  uint8_t program7&#91;5&#93;;<br />} PARAMETRY;<br /><br />// tu definiujemy domyślne wartości we FLASH<br />PARAMETRY flash PROGMEM  = {0,10,10,{10,20,10,40,PON},{10,50,11,30,WTO},{12,10,12,20,SRO},{13,0,14,0,CZW},{15,0,16,0,PIA},{17,0,18,0,0x44},{0,0,0,0,0}};<br />PARAMETRY ram;  // tu definiujemy ładnie strukturę z parametrami w RAM<br />PARAMETRY eem EEMEM;  // tu definiujemy strukturę z parametrami w EEPROM<br /><br />// Zczytanie struktury z FLASH do RAM<br />void FLASH_do_RAM (void) {<br />uint8_t i;<br />uint8_t* programy_ram&#91;&#93; = {ram.program1,ram.program2,ram.program3,ram.program4,ram.program5,ram.program6,ram.program7};<br />uint8_t* programy_flash&#91;&#93; = {flash.program1,flash.program2,flash.program3,flash.program4,flash.program5,flash.program6,flash.program7};<br />ram.pominiecie = pgm_read_byte(&amp;(flash.pominiecie));<br />ram.podswietlenie_czas = pgm_read_byte(&amp;(flash.podswietlenie_czas));<br />ram.temperatura_czas = pgm_read_byte(&amp;(flash.temperatura_czas));<br />for (uint8_t j =0; j&lt;7;j++) {<br />for (i=0; i&lt;5; i++) { programy_ram&#91;j&#93;&#91;i&#93; = pgm_read_byte(&amp;(programy_flash&#91;j&#93;&#91;i&#93;)); }<br />}<br />}<br />// Zczytanie struktury z RAM do EEPROM<br />void RAM_do_EEPROM (void) {<br />uint8_t cSREG;<br />cSREG = SREG; /* store SREG value */<br />cli(); // zatrzymanie przerwan<br />// dla zapisu ( source, destination, n)<br />eeprom_write_block( &amp;ram, &amp;eem, sizeof(PARAMETRY));<br />SREG = cSREG; /* restore SREG value (I-bit) */<br />//sei(); // uruchomienie przerwan<br />}<br />// Zczytanie struktury z EEPROM do RAM<br />void EEPROM_do_RAM (void) {<br />// dla odczytu ( destination, source, n)<br />eeprom_read_block( &amp;ram, &amp;eem, sizeof(PARAMETRY));<br />}<br />// Sprawdza czy EEPROM jest pusty<br />uint8_t EEPROM_czy_pusty(void) {<br />PARAMETRY temp;<br />eeprom_read_block(&amp;temp, &amp;eem, sizeof(PARAMETRY));<br />if (temp.podswietlenie_czas!=0xFF) return 0;<br />if (temp.temperatura_czas!=0xFF)  return 0;<br />return 1; // EEPROM pusty<br />}<br /><br />// Przywraca podstawowe wartosci do EEPROM, nie zaleznie od tego czy pusty<br />uint8_t EEPROM_przywroc_podstawowe(void) {<br /> FLASH_do_RAM();<br /> RAM_do_EEPROM();<br /> if(EEPROM_czy_pusty()) return 0; // niepoprawny zapis<br /> return 1; // wszystko poprawnie wgrane<br />}[/syntax]<br /><br />Oczywiście próbowałem z usuniętymi polami uint8_t programX[] i samymi dwoma ( w sumie trzema ) polami, jednakże także problem ten sam.<br /><br />int main : <br />[syntax=c]&#91;...&#93;<br /> //status_eeprom=EEPROM_przywroc_podstawowe();<br />EEPROM_do_RAM(); // zczytanie wartosci z EEPROM i wykorzystanie ich<br />while (1) { LCD_HD44780::clear(); LCD_HD44780::showNumber(ram.temperatura_czas,2,0); _delay_ms(100); }[/syntax]<br />funkcja showNumber oczekuje liczby, ilości cyfr i czy poprzedzać zerem (dla zapisu czasu)<br /><br />Ustawienia fusebitów :<br /><a href="http://forum.atnel.pl/_obrazki/o/9058/2f9273bea3f8e5578fea8fb76a4c73f3.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9058/2f9273bea3f8e5578fea8fb76a4c73f3.JPG" alt="Obrazek" /></a><br /><br />Dodatkowo odczyt EEPROM z eXtreme Burner - AVR :<br /><a href="http://forum.atnel.pl/_obrazki/o/9058/1847f4f92d9dda3b4fb007703ca7a29c.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9058/1847f4f92d9dda3b4fb007703ca7a29c.JPG" alt="Obrazek" /></a><br /><br />Czyli w sumie wygląda na to że problem z zapisem. Ale dlaczego zera?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9058">qmciaq</a> — 14 cze 2015, o 09:54</p><hr />
]]></content>
</entry>
</feed>