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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-09T23:20:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=7701&amp;mode</id>
<entry>
<author><name><![CDATA[pavel0910]]></name></author>
<updated>2014-07-09T23:20:32+01:00</updated>
<published>2014-07-09T23:20:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87131#p87131</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87131#p87131"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87131#p87131"><![CDATA[
<strong>jacekk232</strong>, dzięki! Właśnie o to chodziło. Taki prosty błąd...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=883">pavel0910</a> — 9 lip 2014, o 23:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-07-09T23:12:57+01:00</updated>
<published>2014-07-09T23:12:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87128#p87128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87128#p87128"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87128#p87128"><![CDATA[
Zmiennych z pamięci Eeprom nie można odczytywać w ten sposób<br />[syntax=c]lcd_int(eeprom_cfg.test);<br />lcd_int(eeprom_cfg.test2);[/syntax]<br />Żeby odczytać te zmienne musisz skorzystać z funkcji, które dostępne są w pliku eeprom.h.<br /><br />W tym przypadku żeby odczytać zmienną jedno bajtową trzeba użyć funkcji eeprom_read_byte czyli <br />[syntax=c]lcd_int( eeprom_read_byte(&amp;eeprom_cfg.test) );<br />lcd_int( eeprom_read_byte(&amp;eeprom_cfg.test2) );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 9 lip 2014, o 23:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pavel0910]]></name></author>
<updated>2014-07-09T19:52:29+01:00</updated>
<published>2014-07-09T19:52:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87101#p87101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87101#p87101"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87101#p87101"><![CDATA[
Co do tego zapisu do pamięci EEPROM. Obejrzałem 2 części poradnik i na jego podstawie stworzyłem takie coś jak w załączniku. W sumie jest to prawie to samo, ale bez obsługi IR, UARTA.<br />Problem polega na tym, że jeśli wyświetlam na lcd dane przechowywane w pamięci RAM, to wyświetlają się one poprawnie. Jeśli wyświetlam dane z pamięci FLASH to również wyświetlają się poprawne.<br />Problem pojawia się wtedy gdy chcę wyświetlić dane z pamięci EEPROM. Wtedy pokazuje się coś innego. Tak jakby dane z pamięci RAM nie były kopiowane do pamięci EEPROM.<br /><br />Jeśli ktoś może rzucić okiem na ten projekt to będę wdzięczny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=883">pavel0910</a> — 9 lip 2014, o 19:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-07-08T19:44:30+01:00</updated>
<published>2014-07-08T19:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87022#p87022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87022#p87022"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87022#p87022"><![CDATA[
Spróbuj na początek zmienić zmienną key_lock z uint8_t na uint16_t.<br /><br />Pętlę główną masz prawie pustą więc jej &quot;obrót&quot; trwa bardzo krótko. A tym samym zmienna key_lock bardzo szybko doliczy do zera. Jeśli po tym czasie styk będzie nadal drgał to obsługa klawisza może szaleć.<br />U mnie na na ATB działa z key_lock jako uint8_t. Ale na stykówce z jakimiś klawiszami z wylutu też mi nie działało. <br /><br />Gdybyś w pętli while miał jakieś działania czasochłonne np. wyświetlanie na LCD to problemu mogło by nie być.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 8 lip 2014, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pavel0910]]></name></author>
<updated>2014-07-08T18:47:43+01:00</updated>
<published>2014-07-08T18:47:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87020#p87020</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87020#p87020"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87020#p87020"><![CDATA[
Ok, z tą pamięcią eeprom będę jeszcze kombinował, ale najpierw chcę obsłużyć te klawisze.<br /><br />Napisałem takie coś:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KEY1 (1&lt;&lt;PD6)<br />#define KEY2 (1&lt;&lt;PD7)<br />#define LED (1&lt;&lt;PB7)<br /><br />uint8_t key_lock;<br /><br />int main(void) {<br /><br /><br />    DDRD &amp;= ~KEY1 | ~KEY2;        //PD7 jako wejsce<br />PORTD |= KEY1 | KEY2;     //PD7 podciagniete do VCC<br />_delay_ms(10);            //odczekanie 10ms na podciagniecie PD7 do VCC<br /><br />DDRB |= LED;              //PB7 jako wyjscie<br />PORTB |= LED;             //PB7 podciagniete do VCC<br /><br /><br /><br />        while(1) {<br />                //--------------------------------------------------------------------------------------------------------<br />if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br />   key_lock = 1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)               //obsługa klawisza opisana na blogu Mirka<br />   PORTB ^= LED;<br /><br /> } else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) key_lock++;<br />                 //--------------------------------------------------------------------------------------------------------<br />                 if(  !(PIND &amp; KEY2 ) ) {<br />_delay_ms(500);<br />if(  !(PIND &amp; KEY2)  ) {                          //kocia obsluga klawisza<br />PORTB ^= LED;<br />}<br /> }<br />                 //--------------------------------------------------------------------------------------------------------<br />}<br />}[/syntax]<br /><br /><br />1. Obsługa klawisza opisana na blogu Mirka:<br />   Dioda miga sobie jak chce, nie da się normalne jej włączyć lub wyłączyć, rzadko się to udaje.<br /><br />2. Kocia obsługa:<br />   Jeśli przytrzymam przycisk przez 0.5s to dioda zmieni stan na przeciwny, wszystko działa ok, jeśli przytrzymam dłużej to dioda miga sobie co 0.5s.<br /><br />Ale ja bym chciał żeby niezależnie od czasu naciśnięcia przycisku instrukcje wykonały się tylko raz. Co może być nie tak, że u mnie sposób opisany na blogu nie chce poprawnie działać? Wiem, że jest to raczej nie możliwe, ale u mnie coś jest nie tak.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=883">pavel0910</a> — 8 lip 2014, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-08T15:27:50+01:00</updated>
<published>2014-07-08T15:27:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87015#p87015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87015#p87015"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87015#p87015"><![CDATA[
<div class="quotetitle">pavel0910 napisał(a):</div><div class="quotecontent"><br />Proszę też o podpowiedź jak poradzić sobie z drganiami styków, ale bez wykorzystania _delay_ms(80);.<br /></div><br /><br />również blog panie kochany <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> masz to tutaj:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 lip 2014, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mscichu]]></name></author>
<updated>2014-07-08T15:12:37+01:00</updated>
<published>2014-07-08T15:12:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87012#p87012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87012#p87012"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=87012#p87012"><![CDATA[
Przed zmienną dopisujesz EEMEM i musisz dorzucić bibliotekę<br />#include &lt;avr/eeprom.h&gt;<br />wtedy zapisujesz i odczytujesz tak jak zapisałeś<br /><br />Co do obsługi klawiszy bez delay to poczytaj o superdebounce, temat był dokładnie opisany na forum<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=853">Mscichu</a> — 8 lip 2014, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-07T15:25:35+01:00</updated>
<published>2014-07-07T15:25:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86895#p86895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86895#p86895"/>
<title type="html"><![CDATA[Re: Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86895#p86895"><![CDATA[
<div class="quotetitle">pavel0910 napisał(a):</div><div class="quotecontent"><br />Ale jak ich poprawnie używać?<br /></div><br /><br />Może warto zaglądać na bloga do poradników ?<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html" >http://mirekk36.blogspot.com/2012/11/av ... iazek.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lip 2014, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pavel0910]]></name></author>
<updated>2014-07-07T15:13:40+01:00</updated>
<published>2014-07-07T15:13:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86894#p86894</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86894#p86894"/>
<title type="html"><![CDATA[Zapis do wewnętrznej pamięci EEPROM.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7701&amp;p=86894#p86894"><![CDATA[
Witam.<br />Napisałem taki kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />uint8_t ustawienia, i;<br />uint8_t powrot_zadany&#91;&#93; = {8,10,12,14,17,23,25,30,34,35,37,40,43,47,50,51,53,55,56,57,58,60};<br /><br />int main(void) {<br />DDRD &amp;= ~(1&lt;&lt;PD5) | ~(1&lt;&lt;PD6) | ~(1&lt;&lt;PD7);<br />PORTD |= (1&lt;&lt;PD5) | (1&lt;&lt;PD6) | (1&lt;&lt;PD7);<br /><br />while(1) {<br />if( !(PIND &amp; (1&lt;&lt;PD5)) ) {<br />if(ustawienia == 0) ustawienia = 1;<br />}<br /><br />if(1==ustawienia) {<br />if( !(PIND &amp; (1&lt;&lt;PD5)) ) i++;<br />lcd_locate(0,0);<br />lcd_int(powrot_zadany&#91;i&#93;);<br /><br />if( !(PIND &amp; (1&lt;&lt;PD6)) ) {<br />if (powrot_zadany&#91;i&#93;&lt;90) powrot_zadany&#91;i&#93;++;<br />}<br /><br />if( !(PIND &amp; (1&lt;&lt;PD7)) ) {<br />if (powrot_zadany&#91;i&#93;&gt;0) powrot_zadany&#91;i&#93;--;<br />}<br /><br />                        if (i&gt;21) ustawienia = 0;<br />}<br />}<br />}[/syntax]<br /><br />Tutaj chyba działanie programu jest jasne. Ewentualnie proszę o podpowiedź jak w inny sposób to rozwiązać. Proszę też o podpowiedź jak poradzić sobie z drganiami styków, ale bez wykorzystania _delay_ms(80);.<br /><br />Teraz co chciałbym zrobić ... Chciałbym, aby tablica &quot;powrot_zadany&quot; była przechowywana w pamięci eeprom. Tzn., chcę, aby użytkownik mógł sobie wypełnić ją swoimi wartościami i żeby to się zapisało w tej pamięci. W dalszej części programu będę musiał odczytywać wartości z tej tablicy i wykorzystywać je w programie.<br /><br />Wiem, że są takie funkcje jak:<br /><br />[syntax=c]eeprom_write_byte (adres, zmienna); <br />x = eeprom_read_byte (adres);[/syntax]<br /><br />Ale jak ich poprawnie używać? Co mam wstawić za adres oraz jak zapisać całą tablicę na raz? Tak aby nie wykonywać zapisu po nadaniu wartości każdemu jej elementowi z osobna?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=883">pavel0910</a> — 7 lip 2014, o 15:13</p><hr />
]]></content>
</entry>
</feed>