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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-03-22T18:54:40+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22953&amp;mode</id>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2020-03-22T18:54:40+01:00</updated>
<published>2020-03-22T18:54:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22953&amp;p=225549#p225549</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22953&amp;p=225549#p225549"/>
<title type="html"><![CDATA[Nieprawidłowe wyświetlanie na matrycy LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22953&amp;p=225549#p225549"><![CDATA[
Witam, pisze własnoręcznie bibliotekę do obsługi matrycy (32x8), w zasadzie mam w miare wszystko, jednakże zauważyłem dziwne zachowanie, mianowicie gdy wpisze dłuższy tekst który wykracza poza granicę matrycy, jest on wyświetlany spowrotem na poczatku i o jeden rząd niżej. Głupio trochę bo sam pisałem ten kod a nie wiem gdzie szukać tego, pomożecie?. Ogólnie chciałbym aby wpisać jakiś tekst i zwyczajnie on się przesuwał cały.<br /><br /><a href="https://obrazkiforum.atnel.pl/1123/0147dec9fc0e3d0c5989d9c3339da01a.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1123/0147dec9fc0e3d0c5989d9c3339da01a.jpg" alt="Obrazek" /></a><br /><br />Co mam zrobione:<br />- ustawianie pojedynczego pixela,<br />- zapisywanie pojedynczego znaku,<br />- wyświetlanie stringa,<br />- funkcje wysyłające bufor (32x8) i rozdzielające go na wszystkie uklady MAX7219.<br /><br />Zdaję sobie sprawę ze zapewne kod nie jest wogóle zoptymalizowany ale ważne ze udaje mi się to pisać samemu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Mam wpisane słowo &quot;Abecd&quot; i jak widać jest kawałek &quot;d&quot; a reszta znowu jest na początku i o jeden rząd niżej.<br /><br />Jak rozwiązać wyświetlanie dłuższych zdań? , stworzyć większą tablicę czy jak? jakieś porady?<br /><br />Główny program:<br /><br />[syntax=c]int main() {<br /><br />matrix_init();<br /><br />while(1){<br /><br />send_string(&quot;Abecd&quot;);<br /><br />}<br />}[/syntax]<br /><br />Funkcje:[syntax=c]void send_char( char znak, uint8_t odstep){<br /><br />uint8_t znak_tmp = znak - '0';<br /><br />uint8_t tablica_int&#91;8&#93;&#91;8&#93;= {<br /><br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0},<br />{0,0,0,0,0,0,0,0}<br /><br />};<br /><br /> // konwersja hex na bin dla pojedynczych znakó i zapisanie do tablicy int<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 0 )) tablica_int&#91;0&#93;&#91;i&#93; = 1; else tablica_int&#91;0&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 1 )) tablica_int&#91;1&#93;&#91;i&#93; = 1; else tablica_int&#91;1&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 2 )) tablica_int&#91;2&#93;&#91;i&#93; = 1; else tablica_int&#91;2&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 3 )) tablica_int&#91;3&#93;&#91;i&#93; = 1; else tablica_int&#91;3&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 4 )) tablica_int&#91;4&#93;&#91;i&#93; = 1; else tablica_int&#91;4&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 5 )) tablica_int&#91;5&#93;&#91;i&#93; = 1; else tablica_int&#91;5&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 6 )) tablica_int&#91;6&#93;&#91;i&#93; = 1; else tablica_int&#91;6&#93;&#91;i&#93; = 0;}<br />for(uint8_t i=0; i&lt;8;i++){if((font&#91;znak_tmp&#93;&#91;i&#93;) &amp; (0x01 &lt;&lt; 7 )) tablica_int&#91;7&#93;&#91;i&#93; = 1; else tablica_int&#91;7&#93;&#91;i&#93; = 0;}<br /><br /><br /><br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,7,tablica_int&#91;7&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,6,tablica_int&#91;6&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,5,tablica_int&#91;5&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,4,tablica_int&#91;4&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,3,tablica_int&#91;3&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,2,tablica_int&#91;2&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,1,tablica_int&#91;1&#93;&#91;i&#93;);<br />}<br />for(uint8_t i = 0; i&lt;8; i++){<br />ustaw_pixel(i+odstep,0,tablica_int&#91;0&#93;&#91;i&#93;);<br />}<br /><br />}<br /><br />void send_string (char *string){<br /><br />register char znak;<br />uint8_t odstep_=0;<br /><br />while((znak =*(string++))){<br /><br />send_char(znak,odstep_);<br />odstep_+=7;<br />}<br />wyslanie_calego_bufora();<br />}<br /><br />void wyslanie_calego_bufora( void ){<br /><br />//ic1 - pobieramy od 0 do 7 z glownego bufora w każdym wierszu i sume zapisujemy<br /><br />uint8_t *temp_buf&#91;4&#93;= {ic1,ic2,ic3,ic4};<br /><br /><br />for(uint8_t i = 0, cntx2 =0; i&lt;4; i++){<br /><br />wyslanie_pojedynczego_bufora( cntx2, temp_buf&#91;i&#93;);<br />cntx2+=8;<br /><br />}<br /><br />//wysyłanie poszczególnych buforów do odpowiednich ukladów MAX7219<br /><br />for(uint8_t i=0; i&lt;8; i++) max_send(0,i+1,ic1&#91;7-i&#93;);<br />for(uint8_t i=0; i&lt;8; i++)max_send(1,i+1,ic2&#91;7-i&#93;);<br />for(uint8_t i=0; i&lt;8; i++)max_send(2,i+1,ic3&#91;7-i&#93;);<br />for(uint8_t i=0; i&lt;8; i++)max_send(3,i+1,ic4&#91;7-i&#93;);<br />}<br /><br /><br />void ustaw_pixel( uint8_t x, uint8_t y, uint8_t zero_one){<br /><br />if(zero_one) matrix_bufor&#91;y+m_y&#93;&#91;x+m_x&#93; = 1; else matrix_bufor&#91;y+m_y&#93;&#91;x+m_x&#93; = 0;<br /><br />}<br /><br /><br />void wyslanie_pojedynczego_bufora( uint8_t cnt_x2, uint8_t *buff ){<br /><br />for( uint8_t dlugosc=0; dlugosc&lt;8; dlugosc++){ //zmienic z 8 na 32<br /><br />for( uint8_t i=0, bit = 1; i&lt;8; i++){<br />if((matrix_bufor&#91;dlugosc&#93;&#91;i+cnt_x2&#93;)==1){<br /><br />suma += bit;<br />bit*=2;<br /><br />}else bit*=2;<br /><br />buff&#91;dlugosc&#93; = suma;<br />}<br />suma = 0;<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 22 mar 2020, o 18:54</p><hr />
]]></content>
</entry>
</feed>