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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-09-21T18:22:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16258&amp;mode</id>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-09-21T18:22:07+01:00</updated>
<published>2016-09-21T18:22:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169283#p169283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169283#p169283"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169283#p169283"><![CDATA[
<div class="quotetitle">HomoChemicus napisał(a):</div><div class="quotecontent"><br />Zainteresuj się funkcją memset().<br /></div><br /><br />No właśnie przecież to takie oczywiste <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 21 wrz 2016, o 18:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2016-09-21T15:58:56+01:00</updated>
<published>2016-09-21T15:58:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169257#p169257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169257#p169257"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169257#p169257"><![CDATA[
Zainteresuj się funkcją memset().<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 21 wrz 2016, o 15:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin_c]]></name></author>
<updated>2016-09-21T15:55:57+01:00</updated>
<published>2016-09-21T15:55:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169255#p169255</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169255#p169255"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169255#p169255"><![CDATA[
witam,<br />przejedź w pętli przez wszystkie komórki bufora i ustaw stan 0x00 lub 0xFF w zależności od tego jakim stanem wygaszasz diody na wyświetlaczu.<br /><br />marcin_c<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3619">marcin_c</a> — 21 wrz 2016, o 15:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-09-21T15:37:32+01:00</updated>
<published>2016-09-21T15:37:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169249#p169249</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169249#p169249"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169249#p169249"><![CDATA[
Dzięki Koledzy <br />powiedzcie mi jeszcze jak wyczyścić ten nieszczęsny bufor bo ja mam chyba jakieś zaćmienie. <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 21 wrz 2016, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-09-21T13:14:09+01:00</updated>
<published>2016-09-21T13:14:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169213#p169213</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169213#p169213"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169213#p169213"><![CDATA[
Witam,<br /><br />Kolego <strong>andrews</strong>, pewnie że lepiej, ale już kiedyś ( dawno temu ) natknąłem się na problem opisany tu: <a href="http://forum.atnel.pl/topic15543.html"  class="postlink">http://forum.atnel.pl/topic15543.html</a> i jakoś tak się złożyło, że wtedy nie miałem czasu się tym zajmować, więc odpuściłem sobie kwalifikator __flash na jakiś czas. Teraz w końcu do tego wróciłem i dzięki Tobie będę wreszcie miał bardziej &quot;po ludzku&quot; wyglądające kody na AVR.<br /><br />Jeszcze raz, Serdeczne Dzięki !<br /><br />Pozdrawiam, QuadMan.<br /><br />P.S. Kurde, projekt miałem dalej robić..., a nie siedzieć na Forum ;-(.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 21 wrz 2016, o 13:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-09-21T06:29:14+01:00</updated>
<published>2016-09-21T06:29:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169156#p169156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169156#p169156"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169156#p169156"><![CDATA[
<div class="quotetitle">QuadMan napisał(a):</div><div class="quotecontent"><br />2. Do elementów umieszczonych we flash-u możesz &quot;się dobrać&quot; za pomocą funkcji pgm_read_word(...) itd., ale one zwracają wartość elementu spod danego adresu, więc nie możesz tak po prostu pozyskać adresu Twojej tablicy Napis2. Musisz więc stworzyć dodatkową tablicę wskaźników do tablic ze stringami do wyświetlania. Czyli mamy tak:[syntax=c]const char PROGMEM Napis2&#91;&#93;={&quot;DRUGI NAPIS&quot;};<br />const char PROGMEM Napis3&#91;&#93;={&quot;TRZECI NAPIS&quot;};<br />const char PROGMEM Napis4&#91;&#93;={&quot;CZWARTY NAPIS&quot;};<br /><br />const char* const PROGMEM tab_ptr_napis&#91;&#93; = {<br />    Napis2,<br />    Napis3,<br />    Napis4 };[/syntax]<br />i teraz już jest &quot;z górki&quot; wystarczy, za pomocą pgm_read_word pozyskać element: Napis2, ew Napis3 itd:<br />[syntax=c]Napis= pgm_read_word(&amp;tab_ptr_napis&#91;0&#93;);[/syntax]I teraz, kompilator, w swej niezmierzonej mądrości napisze nam przy kompilacji: warning: assignment makes pointer from integer without a cast [enabled by default] <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":-(" title="Smutny" />((((.<br /><br />Ale przecież, my jesteśmy mądrzejsi od kompilatora <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />, wiemy, że to co pozyskaliśmy, to na pewno wskaźnik do tablicy Napis2, więc wystarczy rzutowanie:[syntax=c]Napis= (char*)pgm_read_word(&amp;tab_ptr_napis&#91;0&#93;);[/syntax]<br /><br />i wreszcie mamy spokój. Ufff... dlatego, między innymi wolę ARM<br /></div><br /><br />A nie prościej byłoby tak?<br />[syntax=c]// macro tworzy ciąg znaków we flash<br />// i zwraca wskaźnik do tego ciągu<br />#define PGM_STR(X) ((const __flash char&#91;&#93;) { X })<br /><br />// deklaracja tablicy ciągów znaków<br />const __flash char * const __flash tab_ptr_napis&#91;&#93; = {<br />    PGM_STR(&quot;NAPIS 1&quot;),<br />    PGM_STR(&quot;NAPIS 2&quot;),<br />    PGM_STR(&quot;NAPIS 3&quot;),<br />    PGM_STR(&quot;NAPIS 4&quot;)<br />};<br /><br /><br />// deklaracja wskaźnika na ciąg znaków we flash<br />const __flash char* Napis;<br /><br />// i później<br />    Napis = tab_ptr_napis&#91;0&#93;;[/syntax]<br />Bez <em>pgm_read_xxx()</em>, pobierania adresu i rzutowania...<br />Po co się tak męczyć? <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=14165">andrews</a> — 21 wrz 2016, o 06:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-09-20T21:00:16+01:00</updated>
<published>2016-09-20T21:00:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169123#p169123</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169123#p169123"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169123#p169123"><![CDATA[
Witam,<br /><br />1.Po pierwsze zdefiniuj Napis jako wskaźnik na element typu char:[syntax=c]char* Napis;[/syntax]<br /><br />2. Do elementów umieszczonych we flash-u możesz &quot;się dobrać&quot; za pomocą funkcji pgm_read_word(...) itd., ale one zwracają <strong>wartość</strong> elementu spod danego adresu, więc nie możesz tak po prostu pozyskać adresu Twojej tablicy Napis2. Musisz więc stworzyć dodatkową <strong>tablicę wskaźników do tablic ze stringami do wyświetlania</strong>. Czyli mamy tak:<br />[syntax=c]const char PROGMEM Napis2&#91;&#93;={&quot;DRUGI NAPIS&quot;};<br />    const char PROGMEM Napis3&#91;&#93;={&quot;TRZECI NAPIS&quot;};<br />    const char PROGMEM Napis4&#91;&#93;={&quot;CZWARTY NAPIS&quot;};[/syntax]<br /><br />i teraz tworzymy wspomnianą tablicę wskaźników na te tablice:[syntax=c]const char* const PROGMEM tab_ptr_napis&#91;&#93; = {<br />          Napis2,<br />          Napis3,<br />      Napis4 };[/syntax]<br /><br />i teraz już jest &quot;z górki&quot; wystarczy, za pomocą pgm_read_word pozyskać element: Napis2, ew Napis3 itd:<br />[syntax=c]Napis= pgm_read_word(&amp;tab_ptr_napis&#91;0&#93;);[/syntax]<br /><br />I teraz, kompilator, w swej niezmierzonej mądrości napisze nam przy kompilacji: warning: assignment makes pointer from integer without a cast [enabled by default] <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":-(" title="Smutny" />((((.<br /><br />Ale przecież, my jesteśmy mądrzejsi od kompilatora <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />, wiemy, że to co pozyskaliśmy, to na pewno wskaźnik do tablicy Napis2, więc wystarczy rzutowanie:<br />[syntax=c]Napis= (char*)pgm_read_word(&amp;tab_ptr_napis&#91;0&#93;);[/syntax]<br />i wreszcie mamy spokój. Ufff... dlatego, między innymi wolę ARM <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />.<br /><br />Pozdrawiam serdecznie, QuadMan.<br /><br />P.S. Sorry za formatowanie, coś się rozjechało.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 20 wrz 2016, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nemo]]></name></author>
<updated>2016-09-20T20:54:49+01:00</updated>
<published>2016-09-20T20:54:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169121#p169121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169121#p169121"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169121#p169121"><![CDATA[
Nie zgadzają się typy w linii 27:<br />[syntax=c]Napis=Napis2;[/syntax], bo<br />[syntax=c]const char PROGMEM Napis&#91;&#93;={&quot;DRUGI NAPIS&quot;};<br />uint16_t Napis;[/syntax]<br />napis jest wskaźnikem, a napis2 liczbą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13966">nemo</a> — 20 wrz 2016, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2016-09-20T19:21:19+01:00</updated>
<published>2016-09-20T19:21:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169100#p169100</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169100#p169100"/>
<title type="html"><![CDATA[Re: Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169100#p169100"><![CDATA[
Przed wyswietleniem nowego napisu wygac matryce i wyczysc bufor. Dopiero po tych czynnosciach wyswietl nowy napis.<br /><br />Wysłane z mojego LIVE przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 20 wrz 2016, o 19:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-09-20T17:51:26+01:00</updated>
<published>2016-09-20T17:51:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169089#p169089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169089#p169089"/>
<title type="html"><![CDATA[Podmiana napisów na matrycy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16258&amp;p=169089#p169089"><![CDATA[
cześć Koledzy<br /><br />Jakiś czas temu zrobiłem sobie wyświetlacz z 12 matryc led 8x8.<br />Matryca działa , wyświetla płynący napis - problem pojawił się w momencie gdy chciałem podmienić wyświetlany tekst<br /><br /><a href="https://obrazkiforum.atnel.pl/4651/e3cacecf62ce642e5966feb1f5acb44d.JPG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4651/e3cacecf62ce642e5966feb1f5acb44d.JPG" alt="Obrazek" /></a><br /><br /><a href="https://obrazkiforum.atnel.pl/4651/51c236d11c876654d9c4501b8e2cd371.JPG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/4651/51c236d11c876654d9c4501b8e2cd371.JPG" alt="Obrazek" /></a><br /><br />na załączonych zdjęciach widać przed literą &quot;D&quot; dodatkowe piksele i nie mam pojęcia skąd się biorą.<br /><br />W pierwszym przypadku wyświetlam tekst tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;MATRYCA_1.h&quot;<br />#include &quot;fonty.h&quot;<br /><br /><br /><br /><br />//const char PROGMEM Napis&#91;&#93;={&quot;PIERWSZY NAPIS&quot;};<br />const char PROGMEM Napis&#91;&#93;={&quot;DRUGI NAPIS&quot;};<br /><br />uint8_t textBufor&#91;48*6&#93;;<br /><br /><br /><br /><br />int main (void)<br />{<br /><br />Port_Init();<br />Timer0_Init();<br />SPI_Init();<br /><br /><br /> putStringP(0, Napis, textBufor);<br /><br /> sei();<br /><br />while(1)<br /><br />{<br />for (int16_t i=-96; i&lt;256; ++i)<br />{<br />_delay_ms(40);                    //prędkosć przewijania<br /><br />for (int8_t k=0; k&lt;96; ++k)<br />display&#91;k&#93; = textBufor&#91;k+i&#93;;<br />}<br /><br />}<br />}[/syntax]<br /><br />i jest to wyświetlanie prawidłowe<br />Natomiast w drugim powołuję sobie zmienną &quot;Napis&quot; i przed funkcją &quot;put String&quot; przypisuję Napis=Napis2<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;MATRYCA_1.h&quot;<br />#include &quot;fonty.h&quot;<br /><br /><br /><br /><br />//const char PROGMEM Napis&#91;&#93;={&quot;PIERWSZY NAPIS&quot;};<br />const char PROGMEM Napis2&#91;&#93;={&quot;DRUGI NAPIS&quot;};<br /><br />uint8_t textBufor&#91;48*6&#93;;<br />uint16_t Napis;<br /><br /><br /><br />int main (void)<br />{<br /><br />Port_Init();<br />Timer0_Init();<br />SPI_Init();<br /><br /> Napis=Napis2;<br /> putStringP(0, Napis, textBufor);<br /><br /> sei();<br /><br />while(1)<br /><br />{<br />for (int16_t i=-96; i&lt;256; ++i)<br />{<br />_delay_ms(40);                    //prędkosć przewijania<br /><br />for (int8_t k=0; k&lt;96; ++k)<br />display&#91;k&#93; = textBufor&#91;k+i&#93;;<br />}<br /><br />}<br />}[/syntax]<br /><br /><br />funkcje wyświetlające<br /><br />[syntax=c]void putChar(uint8_t x, char c, uint8_t  *buf)<br />{<br />for(uint8_t col=0; col&lt;5; ++col)<br />{<br />*(buf + x + col)= pgm_read_byte (font5x8 + (c - ' ') * 5 + col);<br />}<br />}<br /><br /><br />//////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />void putStringP(uint8_t x, const char * s, uint8_t * buf)<br />{<br /> char c;<br /><br />while (( c = pgm_read_byte (s++)))<br />{<br />putChar(x, c, buf);<br />x += 7; //odstęp liter<br />}<br />}[/syntax]<br /><br />W zakładce console nie mam błędów natomiast w liniach 27 i 28 są żółte wykrzykniki z komunikatami<br />27 - assignment makes integer from pointer without a cast<br />28 - passing argument 2 of 'putStringP' makes pointer from integer without a cast<br />czyli coś mu nie pasuje z adresami wskaźnika, ale nie mogę tego zrozumieć.<br /><br />Napisy chciałbym podmieniać po np.naciśnięciu przycisku i zastanawiam się czy użycie słynnego &quot; if (! (PIND...&quot; w pętli głównej załatwi sprawę i jak wtedy te napisy podmienić bo wyrażenie &quot;Napis=Napis2&quot; w pętli głównej nie zadziała.<br /><br />pozdrawiam Marek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 20 wrz 2016, o 17:51</p><hr />
]]></content>
</entry>
</feed>