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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-11-12T22:27:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19484&amp;mode</id>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-11-12T22:27:58+01:00</updated>
<published>2017-11-12T22:27:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198821#p198821</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198821#p198821"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198821#p198821"><![CDATA[
Mam problem w jaki sposób zapalić diodę tylko na jednym wyświetlaczu w tej funkcji .<br />[syntax=c]void SetPixel(int row, int  col, uint8_t state)<br />{<br />if(state)<br />{<br />    uint8_t val=0x00;<br />    val |=(1&lt;&lt;col);<br />    SendSpiWord(row+1, val);    // Select column x, Set column to 0<br />}<br /><br />}[/syntax]<br /><br />[syntax=c]int main(void) {<br /><br />InitSpi();<br />InitMatrix();<br />ClearMatrix();<br /><br /><br /><br />while(1) {<br /><br />//SetLed(3,0,0,1);//adres,wiersz,kolumna,status<br />SetPixel(0,0,1); //wiersz,kolumna,status<br /><br /><br /><br /><br />}<br /><br />}[/syntax]<br /><br />Wyświetla mi się dioda o współrzędnych 0,0 (prawy górny róg) na wszystkich czterech wyświetlaczach,w jaki sposób zmienić to żeby wyświetlała tylko na pierwszym?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 12 lis 2017, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-11-01T23:01:13+01:00</updated>
<published>2017-11-01T23:01:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198169#p198169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198169#p198169"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198169#p198169"><![CDATA[
Muszę nad tymi funkcjami głębiej pomyśleć.<br />Na razie u mnie jest wszystko odwrócone o 90 stopni według tego co pisałeś powyżej no i niewiem jak wyświetlić led tylko na danym wyświetlaczu.<br />[syntax=c]/*<br /> * max7219.c<br /> *<br /> *  Created on: 2017-10-30<br /> *      Author: Mirek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;max7219.h&quot;<br />#include &quot;../SPI/spi.h&quot;<br /><br /><br />// Initializes all cascaded devices<br />void InitMatrix()<br />{<br />uint8_t i;// Var used in for loops<br /><br />// Set display brighness<br />for(i = 0; i &lt; LICZBA_MATRYC; i++)   // Loop through number of cascaded devices<br />{<br />SendSpiWord(INTENSITY, 2); // Select Intensity register,Set brightness<br />}<br /><br />// Set display refresh<br /><br />for(i = 0; i &lt; LICZBA_MATRYC; i++)<br />{<br />SendSpiWord(SCANLIMIT, 7); // Select Scan-Limit register,Select columns 0-7<br />}<br /><br />// Turn on the display<br /><br />for(i = 0; i &lt; LICZBA_MATRYC; i++)<br />{<br />SendSpiWord(SHUTDOWN, 1); // Select Shutdown register, Select Normal Operation mode<br />}<br /><br />// Disable Display-Test<br /><br />for(i = 0; i &lt; LICZBA_MATRYC; i++)<br />{<br />SendSpiWord(DISPLAYTEST, 0); // Select Display-Test register,Disable Display-Test<br />}<br /><br />}<br /><br /><br />// Clears all columns on all devices<br />void ClearMatrix(void)<br />{<br />for(uint8_t x = 1; x &lt; 9; x++) // for all columns<br />{<br /><br />        for(uint8_t i = 0; i &lt; LICZBA_MATRYC; i++)<br />{<br />        SendSpiWord(x, 0);    // Select column x, Set column to 0<br />}<br />}<br />}<br /><br /><br />void SetLed(uint8_t adres, uint8_t wiersz, uint8_t  kolumna, uint8_t stan)<br />{<br />    uint8_t val=0x00;<br /><br />    if(adres&lt;0 || adres&gt;=LICZBA_MATRYC)<br />        return;<br />    if(wiersz&lt;0 || wiersz&gt;7 || kolumna&lt;0 || kolumna&gt;7)<br />        return;<br /><br />    val=0b10000000 &gt;&gt; kolumna;<br />    if(stan)<br />        status&#91;wiersz&#93;=status&#91;wiersz&#93;|val;<br />    else {<br />        val=~val;<br />        status&#91;wiersz&#93;=status&#91;wiersz&#93;&amp;val;<br />    }<br />    SendSpiWord(wiersz+1,status&#91;wiersz&#93;);<br />}[/syntax]<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2017-10-30<br /> *      Author: Mirek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;SPI/spi.h&quot;<br />#include &quot;MAX_7219/max7219.h&quot;<br /><br /><br /><br /><br />int main(void) {<br /><br />InitSpi();<br />InitMatrix();<br />ClearMatrix();<br /><br /><br /><br />while(1) {<br /><br />SetLed(0,0,2,1);//adres,wiersz,kolumna,status<br /><br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 1 lis 2017, o 23:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2017-10-31T19:17:10+01:00</updated>
<published>2017-10-31T19:17:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198123#p198123</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198123#p198123"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198123#p198123"><![CDATA[
No to na początek jeszcze raz musisz pomyśleć nad funkcją, która zapala/gasi pojedynczy piksel. Ale nie w ten sposób , że na wszystkich wyświetlaczach się on powtarza. Masz cztery matryce 8x8 pikseli. Cały wyświetlacz ma zatem 32x8 pikseli. W układzie współrzędnych x, y, lewy dolny piksel ma współrzędne<br />(0, 0), lewy górny (0, 7), prawy dolny całego wyświetlacza (31,0), prawy górny (31, 7). Jakiś piksel w środku np. (15, 4). Jak zapalić poszczególne piksele, jak zgasić?<br />Powinieneś zadeklarować taką tablicę, która będzie odpowiadała wielkością Twojemu wyświetlaczowi, a więc coś w rodzaju<br />uint8_t LED_display[liczba_matryc * 8]<br />I to w tym buforze funkcja odpowiedzialna za włączenie/wyłączenie piksela powinna w odpowiednim miejscu wstawiać jedynkę lub zero.<br />Następnie druga podstawowa funkcja powinna cały ten bufor przesyłać do układów MAX7219.<br />Układy MAX7219 masz połączone kaskadowo, jeden za drugim. Zatem przesyłane do nich dane przekazywane są kolejno od pierwszego do ostatniego wyświetlacza. Czyli jednym ze sposobów jest zapisywanie kolejno całych wierszy wyświetlacza od najniższego do najwyższego.<br />Pomyśl jak zorganizować dane w buforze i jak je potem wysłać. To jest podstawa.<br />Acha i w tej funkcji ustawiającej jakiś piksel wstaw zabezpieczenie, gdyby ktoś chciał zapalić/zgasić piksel gdzieś poza rozmiarami bufora wyświetlacza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 31 paź 2017, o 19:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-10-31T18:29:57+01:00</updated>
<published>2017-10-31T18:29:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198121#p198121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198121#p198121"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198121#p198121"><![CDATA[
Scrollowanie nie jest takie trudne,ale musisz koniecznie zrozumieć jak jest zorganizowany bufor pamięci obrazu. Jaki bajt i bit odpowiada jakiemu pixelowi obrazu. Bez tego sie nie obejdzie. Zresztą pisałem o tym wcześniej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 31 paź 2017, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-31T17:08:24+01:00</updated>
<published>2017-10-31T17:08:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198116#p198116</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198116#p198116"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198116#p198116"><![CDATA[
Muszę Ci  przyznać rację, zauważyłem że muszę rozpocząć pisanie swojego kodu w C-AVR od podstaw a nie męczyć się i zgadywać  co autor miał na  myśli w kodzie adoptowanym z arduino.<br />Już rozpocząłem nowy projekt w Eclipse od podstaw zaczynając od dateshita Max 7219.<br />Jak poczytam więcej i obejrzę poradniki to może poradzę sobie sam z tym kodem.<br />Szkoda że niema nigdzie w sieci porządnego poradnika dotyczącego tego układu i scrollowania wyświetlaczy LED 8X8 tak od podstaw,łopatologicznie dla mniej zaawansowanych czyli takich ja a:-)<br />Pomimo tego zachęcam Wszystkich forumowiczów do kolejnych wpisów na moim wątku,każda nawet drobna porada będzie mile widziana.<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=922">mirek1968</a> — 31 paź 2017, o 17:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2017-10-31T16:06:02+01:00</updated>
<published>2017-10-31T16:06:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198105#p198105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198105#p198105"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198105#p198105"><![CDATA[
Widzę, że adaptujesz wciąż funkcje z arduino. Ale niestety przy Twoim układzie matryc one nie zadziałają poprawnie. Są na rynku dwa rodzaje modułów z matrycami LED 8x8 sterowane przez układ MAX7219. Różnią się one ustawieniem samej matrycy (przestawione są one o 90 stopni). W związku z tym jeśli łączysz kilka modułów i chcesz stworzyć z nich jeden większy wyświetlacz musisz zastosować odpowiednie oprogramowanie niestety różne dla każdego rodzaju modułu wyświetlacza. W pierwszym poście prosisz, żeby Cię nie odsyłać do książek ale nie oczekujesz też gotowca. I to są chyba prośby nie do pogodzenia. Bez zapoznania się ze sposobami tworzenia obrazów w buforze, tworzenia wzorów fontów w pamięci mikrokontrolera i na koniec przesyłaniem całego bufora obrazu na wyświetlacz, ciężko będzie do czegoś dojść. Właściwie to we wszystkich Mirkowych książkach jest to w jakimś zakresie opisywane, choć nie ma konkretnie mowy o układach MAX7219. Ale to tylko kwestia jednej funkcji, która wyśle bufor wyświetlacza do układów matryc, reszta pozostaje aktualna dla praktycznie wszystkich rodzajów wyświetlaczy matrycowych. Tak więc książki , to jednak podstawa dalszych działań.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 31 paź 2017, o 16:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-30T19:10:45+01:00</updated>
<published>2017-10-30T19:10:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198060#p198060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198060#p198060"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198060#p198060"><![CDATA[
Myślę że stworzyłem taką funkcje dla wyświetlania pojedynczego piksela na współrzędnych ale od 0 do 7.<br />[syntax=c]void setLed(int addr, int row, int column, uint8_t state) {<br />    int offset;<br />    uint8_t val=0x00;<br /><br />    if(addr&lt;0 || addr&gt;=NUM_DEVICES)<br />return;<br />    if(row&lt;0 || row&gt;7 || column&lt;0 || column&gt;7)<br />return;<br />    offset=addr*8;<br />    val=0b10000000 &gt;&gt; column;<br />    if(state)<br />status&#91;offset+row&#93;=status&#91;offset+row&#93;|val;<br />    else {<br />val=~val;<br />status&#91;offset+row&#93;=status&#91;offset+row&#93;&amp;val;<br />    }<br />    SLAVE_SELECT;<br />    writeWord(row+1,status&#91;offset+row&#93;);<br />    SLAVE_DESELECT;<br />}[/syntax]<br /><br />i wpisująć np: do tej funkcji w pętli while<br />[syntax=c]while(1) {<br /><br />//displayMessage(messagePointer, messageSize);// Display the message;<br />setLed(0,0,6,1);//adres,wiersz,kolumna,status<br /><br />}[/syntax]<br /><br />zapala mi się dioda na każdym wyświetlaczu taka sama czyli w wierszu zerowym (czyli pierwszym) w kolumnie 7 (czyli w szóstej) tak jak na fotce.<br /><a href="https://obrazkiforum.atnel.pl/922/1a9dd86006dddc36f2d412ba78659197.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/922/1a9dd86006dddc36f2d412ba78659197.jpg" alt="Obrazek" /></a><br /><br />Proszę o pomoc co dalej robimy:-)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 30 paź 2017, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2017-10-30T08:37:02+01:00</updated>
<published>2017-10-30T08:37:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198022#p198022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198022#p198022"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=198022#p198022"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Proszę jeszcze o sprecyzowanie co znaczy drugi rejestr układu MAX7219?<br /></div><br />Chyba powinieneś zaglądnąć do noty pdf układu MAX7219, żeby zobaczyć jak on działa.<br />Podpowiem tylko, że w tym trybie jaki jest zastosowany w Twoim projekcie, aby cokolwiek wyświetlić, trzeba przesłać najpierw nr rejestru do którego będziemy zapisywali dane, a następnie tą daną do wyświetlenia. Masz tam nawet napisaną funkcję do tego:<br />[syntax=c]void writeWord(uint8_t address, uint8_t data);[/syntax]<br />Rejestry są numerowane od 1 do 8 i właśnie chodziło o to, jak one mają się do podłączenia samego wyświetlacza.<br />Jak widać z obrazka, który zamieściłeś, u Ciebie przesyłanie danych ułożone jest rzędami od dołu do góry. Na samym dole jest rząd, który odpowiada danej z rejestru 1 układu MAX7219. Widać też , że orientacja bajtu jest taka: najstarszy bit po lewej stronie , najmłodszy po prawej. I to jest odpowiedź na pytanie o mapę pamięci obrazu.<br />Teraz trzeba by stworzyć funkcję, która wyświetli pojedynczy piksel na określonych współrzędnych ekranu. Jeśli uda Ci się to zrobić, to będzie otwarta droga do wyświetlania znaków alfanumerycznych i innych np. jakichś figur geometrycznych.<br />Scrolowanie zostawimy na koniec.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 30 paź 2017, o 08:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-29T18:18:18+01:00</updated>
<published>2017-10-29T18:18:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197991#p197991</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197991#p197991"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197991#p197991"><![CDATA[
Proszę jeszcze o sprecyzowanie co znaczy drugi rejestr układu MAX7219??,abym mógł tam przesłać poprzez SPI tej przykładowy bajt 0b01100001 i dowiedzieć się co się zapali na wyświetlaczu LED.<br />Tu mam opisane wszystkie rejestry które wykorzystuję,czy chodzi o rejestr #define OP_DIGIT0 1 o wartości 1?<br /><br />[syntax=c]#define OP_NOOP   0<br />#define OP_DIGIT0 1<br />#define OP_DIGIT1 2<br />#define OP_DIGIT2 3<br />#define OP_DIGIT3 4<br />#define OP_DIGIT4 5<br />#define OP_DIGIT5 6<br />#define OP_DIGIT6 7<br />#define OP_DIGIT7 8<br />#define OP_DECODEMODE  9<br />#define OP_INTENSITY   10<br />#define OP_SCANLIMIT   11<br />#define OP_SHUTDOWN    12<br />#define OP_DISPLAYTEST 15[/syntax]<br /><br />A jeśli nie o to chodzi to proszę o sprostowanie.<br /><br />Myślę że jak podam więcej szczegółów i kod programu będzie wszystkim łatwiej się porozumieć.<br />main.c<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2017-09-20<br /> *      Author: Mirek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;MAX_7219/max7219_8x8.h&quot;<br /><br />// Message to be displayed, stored in flash<br />const char message&#91;&#93; PROGMEM = &quot;a&quot;;<br /><br />int main( void ) {<br /><br />initSPI();<br />initMatrix();<br />clearMatrix();<br />initBuffer();<br /><br />// Pointer to beginning of message<br />const char *messagePointer = &amp;message&#91;0&#93;;<br /><br />// Size of message matrix<br />uint16_t messageSize = sizeof(message);<br /><br /><br />while(1) {<br /><br />displayMessage(messagePointer, messageSize);// Display the message;<br /><br />}<br />}[/syntax]<br /><br />max7219_8x8.c<br /><br />[syntax=c]/*<br /> * max7219_8x8.c<br /> *<br /> *  Created on: 2017-09-20<br /> *      Author: Mirek<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;max7219_8x8.h&quot;<br /><br /><br />#define NUM_DEVICES     4 // Number of cascaded max7219's, or just 1<br />#define DEL 1400000000000000    // Delay for scrolling speed in microseconds 14000<br /><br /><br />// Array holding arrays of 5 Bytes for each representation of an ASCII character, stored in flash<br />char characters&#91;96&#93;&#91;5&#93; PROGMEM = {<br /> {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}, // space<br /> {0b00000000,0b00000000,0b01001111,0b00000000,0b00000000}, // !<br /> {0b00000000,0b00000111,0b00000000,0b00000111,0b00000000}, // &quot;<br /> {0b00010100,0b01111111,0b00010100,0b01111111,0b00010100}, // #<br /> {0b00100100,0b00101010,0b01111111,0b00101010,0b00010010}, // $<br /> {0b00100011,0b00010011,0b00001000,0b01100100,0b01100010}, // %<br /> {0b00110110,0b01001001,0b01010101,0b00100010,0b01010000}, // &amp;<br /> {0b00000000,0b00000101,0b00000011,0b00000000,0b00000000}, // '<br /> {0b00000000,0b00011100,0b00100010,0b01000001,0b00000000}, // (<br /> {0b00000000,0b01000001,0b00100010,0b00011100,0b00000000}, // )<br /> {0b00010100,0b00001000,0b00111110,0b00001000,0b00010100}, // *<br /> {0b00001000,0b00001000,0b00111110,0b00001000,0b00001000}, // +<br /> {0b00000000,0b01010000,0b00110000,0b00000000,0b00000000}, // ,<br /> {0b00001000,0b00001000,0b00001000,0b00001000,0b00001000}, // -<br /> {0b00000000,0b01100000,0b01100000,0b00000000,0b00000000}, // .<br /> {0b00100000,0b00010000,0b00001000,0b00000100,0b00000010}, // /<br /> {0b00111110,0b01010001,0b01001001,0b01000101,0b00111110}, // 0<br /> {0b00000000,0b01000010,0b01111111,0b01000000,0b00000000}, // 1<br /> {0b01000010,0b01100001,0b01010001,0b01001001,0b01000110}, // 2<br /> {0b00100001,0b01000001,0b01000101,0b01001011,0b00110001}, // 3<br /> {0b00011000,0b00010100,0b00010010,0b01111111,0b00010000}, // 4<br /> {0b00100111,0b01000101,0b01000101,0b01000101,0b00111001}, // 5<br /> {0b00111100,0b01001010,0b01001001,0b01001001,0b00110000}, // 6<br /> {0b00000011,0b01110001,0b00001001,0b00000101,0b00000011}, // 7<br /> {0b00110110,0b01001001,0b01001001,0b01001001,0b00110110}, // 8<br /> {0b00000110,0b01001001,0b01001001,0b00101001,0b00011110}, // 9<br /> {0b00000000,0b01101100,0b01101100,0b00000000,0b00000000}, // :<br /> {0b00000000,0b01010110,0b00110110,0b00000000,0b00000000}, // ;<br /> {0b00001000,0b00010100,0b00100010,0b01000001,0b00000000}, // &lt;<br /> {0b00010100,0b00010100,0b00010100,0b00010100,0b00010100}, // =<br /> {0b00000000,0b01000001,0b00100010,0b00010100,0b00001000}, // &gt;<br /> {0b00000010,0b00000001,0b01010001,0b00001001,0b00000110}, // ?<br /> {0b00110010,0b01001001,0b01111001,0b01000001,0b00111110}, // @<br /> {0b01111110,0b00010001,0b00010001,0b00010001,0b01111110}, // A<br /> {0b01111111,0b01001001,0b01001001,0b01001001,0b00111110}, // B<br /> {0b00111110,0b01000001,0b01000001,0b01000001,0b00100010}, // C<br /> {0b01111111,0b01000001,0b01000001,0b01000001,0b00111110}, // D<br /> {0b01111111,0b01001001,0b01001001,0b01001001,0b01001001}, // E<br /> {0b01111111,0b00001001,0b00001001,0b00001001,0b00000001}, // F<br /> {0b00111110,0b01000001,0b01001001,0b01001001,0b00111010}, // G<br /> {0b01111111,0b00001000,0b00001000,0b00001000,0b01111111}, // H<br /> {0b01000001,0b01000001,0b01111111,0b01000001,0b01000001}, // I<br /> {0b00110000,0b01000001,0b01000001,0b00111111,0b00000001}, // J<br /> {0b01111111,0b00001000,0b00010100,0b00100010,0b01000001}, // K<br /> {0b01111111,0b01000000,0b01000000,0b01000000,0b01000000}, // L<br /> {0b01111111,0b00000010,0b00001100,0b00000010,0b01111111}, // M<br /> {0b01111111,0b00000100,0b00001000,0b00010000,0b01111111}, // N<br /> {0b00111110,0b01000001,0b01000001,0b01000001,0b00111110}, // O<br /> {0b01111111,0b00001001,0b00001001,0b00001001,0b00000110}, // P<br /> {0b00111110,0b01000001,0b01010001,0b00100001,0b01011110}, // Q<br /> {0b01111111,0b00001001,0b00001001,0b00011001,0b01100110}, // R<br /> {0b01000110,0b01001001,0b01001001,0b01001001,0b00110001}, // S<br /> {0b00000001,0b00000001,0b01111111,0b00000001,0b00000001}, // T<br /> {0b00111111,0b01000000,0b01000000,0b01000000,0b00111111}, // U<br /> {0b00001111,0b00110000,0b01000000,0b00110000,0b00001111}, // V<br /> {0b00111111,0b01000000,0b00111000,0b01000000,0b00111111}, // W<br /> {0b01100011,0b00010100,0b00001000,0b00010100,0b01100011}, // X<br /> {0b00000011,0b00000100,0b01111000,0b00000100,0b00000011}, // Y<br /> {0b01100001,0b01010001,0b01001001,0b01000101,0b01000011}, // Z<br /> {0b01111111,0b01000001,0b01000001,0b00000000,0b00000000}, // &#91;<br /> {0b00000010,0b00000100,0b00001000,0b00010000,0b00100000}, // '\'<br /> {0b00000000,0b00000000,0b01000001,0b01000001,0b01111111}, // &#93;<br /> {0b00000100,0b00000010,0b00000001,0b00000010,0b00000100}, // ^<br /> {0b01000000,0b01000000,0b01000000,0b01000000,0b01000000}, // _<br /> {0b00000000,0b00000001,0b00000010,0b00000100,0b00000000}, // `<br /> {0b00000000,0b01100001,0b00000000,0b00000000,0b00000000}, // a<br /> {0b01111111,0b01001000,0b01000100,0b01000100,0b00111000}, // 0b<br /> {0b00111000,0b01000100,0b01000100,0b01000100,0b00100000}, // c<br /> {0b00111000,0b01000100,0b01000100,0b01001000,0b01111111}, // d<br /> {0b00111000,0b01010100,0b01010100,0b01010100,0b00011000}, // e<br /> {0b00001000,0b01111110,0b00001001,0b00000001,0b00000010}, // f<br /> {0b00001100,0b01010010,0b01010010,0b01010010,0b00111110}, // g<br /> {0b01111111,0b00001000,0b00000100,0b00000100,0b01111000}, // h<br /> {0b00000000,0b01000100,0b01111101,0b01000000,0b00000000}, // i<br /> {0b00100000,0b01000000,0b01000100,0b00111101,0b00000000}, // j<br /> {0b01111111,0b00010000,0b00101000,0b01000100,0b00000000}, // k<br /> {0b00000000,0b01000001,0b01111111,0b01000000,0b00000000}, // l<br /> {0b01111000,0b00000100,0b00001000,0b00000100,0b01111000}, // m<br /> {0b01111100,0b00001000,0b00000100,0b00000100,0b01111000}, // n<br /> {0b00111000,0b01000100,0b01000100,0b01000100,0b00111000}, // o<br /> {0b01111100,0b00010100,0b00010100,0b00010100,0b00001000}, // p<br /> {0b00001000,0b00010100,0b00010100,0b01111100,0b00000000}, // q<br /> {0b01111100,0b00001000,0b00000100,0b00000100,0b00001000}, // r<br /> {0b01001000,0b01010100,0b01010100,0b01010100,0b00100000}, // s<br /> {0b00000100,0b00111111,0b01000100,0b01000000,0b00100000}, // t<br /> {0b00111100,0b01000000,0b01000000,0b00100000,0b01111100}, // u<br /> {0b00011100,0b00100000,0b01000000,0b00100000,0b00011100}, // v<br /> {0b00111100,0b01000000,0b00110000,0b01000000,0b00111100}, // w<br /> {0b01000100,0b00101000,0b00010000,0b00101000,0b01000100}, // x<br /> {0b00001100,0b01010000,0b01010000,0b01010000,0b00111100}, // y<br /> {0b01000100,0b01100100,0b01010100,0b01001100,0b01000100}, // z<br /> {0b00000000,0b00001000,0b00110110,0b01000001,0b00000000}, // {<br /> {0b00000000,0b00000000,0b01111111,0b00000000,0b00000000}, // |<br /> {0b00000000,0b01000001,0b00110110,0b00001000,0b00000000}, // }<br /> {0b00001000,0b00000100,0b00000100,0b00001000,0b00000100} // ~<br />}; // characters&#91;95&#93;<br /><br /><br />// Buffer array of bytes to store current display data for each column in each cascaded device<br />uint8_t buffer &#91;NUM_DEVICES*8&#93;;<br /><br /><br />// Initializes SPI<br />void initSPI(void)<br />{<br /><br />  /* ustawienie kierunku wyjściowego dla linii MOSI, SCK i CS */<br />  DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);<br />  /* aktywacja  SPI, tryb pracy Master, prędkość zegara Fosc/64 */<br />  SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;SPR1);<br /><br />}<br /><br /><br />// Send byte through SPI<br />void writeByte(uint8_t byte)<br />{<br />  SPDR = byte;                      // SPI starts sending immediately<br />  while(!(SPSR &amp; (1 &lt;&lt; SPIF)));     // Loop until complete bit set<br />}<br /><br /><br />// Sends word through SPI<br />void writeWord(uint8_t address, uint8_t data)<br />{<br />  writeByte(address);// Write first byte<br />  writeByte(data);      // Write Second byte<br />}<br /><br /><br />// Initializes all cascaded devices<br />void initMatrix()<br />{<br />uint8_t i;// Var used in for loops<br /><br />// Set display brighness<br />SLAVE_SELECT;<br />for(i = 0; i &lt; NUM_DEVICES; i++)   // Loop through number of cascaded devices<br />{<br />writeByte(0x0A); // Select Intensity register<br />writeByte(0x07); // Set brightness<br />}<br />SLAVE_DESELECT;<br /><br /><br />// Set display refresh<br />SLAVE_SELECT;<br />for(i = 0; i &lt; NUM_DEVICES; i++)<br />{<br />writeByte(0x0B); // Select Scan-Limit register<br />writeByte(0x07); // Select columns 0-7<br />}<br />SLAVE_DESELECT;<br /><br /><br />// Turn on the display<br />SLAVE_SELECT;<br />for(i = 0; i &lt; NUM_DEVICES; i++)<br />{<br />writeByte(0x0C); // Select Shutdown register<br />writeByte(0x01); // Select Normal Operation mode<br />}<br />SLAVE_DESELECT;<br /><br /><br />// Disable Display-Test<br />SLAVE_SELECT;<br />for(i = 0; i &lt; NUM_DEVICES; i++)<br />{<br />writeByte(0x0F); // Select Display-Test register<br />writeByte(0x00); // Disable Display-Test<br />}<br />SLAVE_DESELECT;<br />}<br /><br /><br />// Clears all columns on all devices<br />void clearMatrix(void)<br />{<br />for(uint8_t x = 1; x &lt; 9; x++) // for all columns<br />{<br />        SLAVE_SELECT;<br />        for(uint8_t i = 0; i &lt; NUM_DEVICES; i++)<br />{<br />writeByte(x);    // Select column x<br />writeByte(0x00); // Set column to 0<br />}<br />SLAVE_DESELECT;<br />}<br />}<br /><br /><br />// Initializes buffer empty<br />void initBuffer(void)<br />{<br />for(uint8_t i = 0; i &lt; NUM_DEVICES*8; i++)<br />buffer&#91;i&#93; = 0x00;<br />}<br /><br /><br />// Moves each byte forward in the buffer and adds next byte in at the end<br />void pushBuffer(uint8_t x)<br />{<br />for(uint8_t i = 0; i &lt; NUM_DEVICES*8 - 1; i++)<br />buffer&#91;i&#93; = buffer&#91;i+1&#93;;<br /><br />buffer&#91;NUM_DEVICES*8 - 1&#93; = x;<br />}<br /><br />// Pushes in 5 characters columns into the buffer.<br />void pushCharacter(uint8_t c)<br />{<br />for(uint8_t i = 0; i &lt; 5; i++)// For 5 bytes representing each character<br />{<br />pushBuffer(pgm_read_byte(&amp;characters&#91;c&#93;&#91;i&#93;));   // Push the byte from the characters array to the display buffer<br />displayBuffer();// Display the current buffer on the devices<br />_delay_us(DEL);// and delay<br />}<br />}<br /><br />// Takes a pointer to the beginning of a char array holding message, and array size, scrolls message.<br />void displayMessage(const char *arrayPointer, uint16_t arraySize)<br />{<br />for(uint16_t i = 0; i &lt; arraySize; i++)<br />{<br />pushCharacter(pgm_read_byte_near(arrayPointer + i) - 32);// Send converted ASCII value of character in message to index in characters array (-32 sends corrent index to characters array)<br />pushBuffer(0x00);// Add empty column after character for letter spacing<br />displayBuffer();// Display &amp;<br />_delay_us(DEL); // Delay<br />}<br /><br />}<br /><br /><br />// Displays current buffer on the cascaded devices<br />void displayBuffer()<br />{<br />   for(uint8_t i = 0; i &lt; NUM_DEVICES; i++) // For each cascaded device<br />   {<br />   for(uint8_t j = 1; j &lt; 9; j++) // For each column<br />   {<br />   SLAVE_SELECT;<br /><br />   for(uint8_t k = 0; k &lt; i; k++) // Write Pre No-Op code<br />   writeWord(0x00, 0x00);<br /><br />   writeWord(j, buffer&#91;j + i*8 - 1&#93;); // Write column data from buffer<br /><br />   for(uint8_t k = NUM_DEVICES-1; k &gt; i; k--) // Write Post No-Op code<br />   writeWord(0x00, 0x00);<br /><br />   SLAVE_DESELECT;<br />   }<br />   }<br />}[/syntax]<br /><br />max7219_8x8.h<br /><br />[syntax=c]/*<br /> * max7219_8x8.h<br /> *<br /> *  Created on: 2017-09-20<br /> *      Author: Mirek<br /> */<br /><br />#ifndef MAX7219_8X8_H_<br />#define MAX7219_8X8_H_<br /><br />/* hardware SPI */<br />#define MOSI PB3//   &lt;---- DIN<br />#define SCK PB5//   &lt;---- SCK<br />#define CS PB2// &lt;---- CS<br /><br />#define SLAVE_SELECT    PORTB &amp;= ~(1 &lt;&lt; CS)<br />#define SLAVE_DESELECT  PORTB |= (1 &lt;&lt; CS)<br /><br /><br />char characters&#91;96&#93;&#91;5&#93;;<br />// Function Prototypes<br /><br />void initSPI(void);<br /><br />void writeByte(uint8_t byte);<br /><br />void writeWord(uint8_t address, uint8_t data);<br /><br />void initMatrix(void);<br /><br />void clearMatrix(void);<br /><br />void initBuffer(void);<br /><br />void pushBuffer(uint8_t x);<br /><br />void pushCharacter(uint8_t c);<br /><br />void displayMessage(const char *arrayPointer, uint16_t arraySize);<br /><br />void displayBuffer(void);<br /><br />#endif /* MAX7219_8X8_H_ */[/syntax]<br /><br />Powiedzmy ze jak wyślę bajt 0b01100001 do rejestru funkcją displayMessage to na wyświetlaczu LED zaświecą się diody.<br /><a href="https://obrazkiforum.atnel.pl/922/ae493476d24c1b83d34f8404be150cb5.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/922/ae493476d24c1b83d34f8404be150cb5.jpg" alt="Obrazek" /></a><br />i będą się przesuwać z dołu do góry a następnie znowu od dołu do góry na następnym wyświetlaczu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 29 paź 2017, o 18:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2017-10-29T15:06:27+01:00</updated>
<published>2017-10-29T15:06:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197981#p197981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197981#p197981"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197981#p197981"><![CDATA[
Koledze micky nie chodziło o schemat matrycy LED tylko o sposób podłączenia do sterownika MAX7219 i dokładniej o ułożenie bajtów i bitów przesyłanych do wyświetlacza. Powiedzmy, że wysyłasz bajt 0b01100001 do drugiego rejestru układu MAX7219. To które piksele zapalają się w Twojej matrycy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 29 paź 2017, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-29T14:05:39+01:00</updated>
<published>2017-10-29T14:05:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197980#p197980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197980#p197980"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197980#p197980"><![CDATA[
Pozostałe rzędy to dokładnie tak jak na tym zdjęciu pojedyńczego led 8X8.<br />Jak znajdę troszkę czasu to obejrzę filmik.MK.<br /><br /><a href="https://obrazkiforum.atnel.pl/922/866dcb7aae904377e0031c600d006bef.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/922/866dcb7aae904377e0031c600d006bef.jpg" alt="Obrazek" /></a><br /><br />Wyświetlacz składa się z takich czterech LED każdy ma w sobie układ MAX7219.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 29 paź 2017, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-10-29T13:09:10+01:00</updated>
<published>2017-10-29T13:09:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197978#p197978</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197978#p197978"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197978#p197978"><![CDATA[
Rozpisz pozostałe rzędy. Dopóki nie będzie wiadomo jak ułożone bajty w stosunku do wyświetlacza oraz bity (również to gdzie najmłodszy a gdzie najstarszy) w tych bajtach to nic dalej nie zrobimy.<br />Obejrzyj filmik Mirka nt. Magic Matrixa - tam też były tego typu informacje - dotyczące organizacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 29 paź 2017, o 13:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-29T12:54:41+01:00</updated>
<published>2017-10-29T12:54:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197977#p197977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197977#p197977"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197977#p197977"><![CDATA[
Zastosowałem się do Twojej uwagi. Wstawiam screena z mapą bitowa mojego LED.<br /><br /><a href="https://obrazkiforum.atnel.pl/922/b76a89bb355936ba29582bb8b874a67c.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/922/b76a89bb355936ba29582bb8b874a67c.jpg" alt="Obrazek" /></a><br /><br />Proszę o dalszą pomoc co robimy dalej:-)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 29 paź 2017, o 12:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-10-29T12:23:32+01:00</updated>
<published>2017-10-29T12:23:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197970#p197970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197970#p197970"/>
<title type="html"><![CDATA[Re: Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197970#p197970"><![CDATA[
Zacznij od narysowania sobie mapy pamięci ekranu czyli w jakim bajcie bufora znajduje się każdy piksel. Bez tego nie ma co iść dalej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 29 paź 2017, o 12:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirek1968]]></name></author>
<updated>2017-10-29T10:34:03+01:00</updated>
<published>2017-10-29T10:34:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197959#p197959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197959#p197959"/>
<title type="html"><![CDATA[Zmiana kierunku scrollowania tekstu LED 32X8 z MAX7219]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19484&amp;p=197959#p197959"><![CDATA[
Napisałem nowy wątek ponieważ chciałbym zrozumieć zasadę działania funkcji zmiany kierunku scrollowania fontów na moim panelu czterech wyświetlaczy LED 8X8 z układami MAX7219.<br />Od razu zacznę od tego że nie chodzi mi o podanie gotowców ani o odsyłenie do przeczytania książek i do google ale o pomoc w zrozumieniu działania pewnych funkcji nie mojego autorstwa które przerobiłem sobie z Arduino-dostosowałem w c avr.<br />Tyle na wstępie teraz zacznę od konkretów.<br />Obecnie mój połączony kaskadowo wyświetlacz pokazuje tekst scrollowany od dołu w górę a ja chciałbym to zmienić tak abym mógł przesuwać np. w lewo lub prawo.<br />Podam kilka funkcji z mojego programu i proszę o pomoc w zrozumieniu co odpowiada za kierunek przesuwania tekstu.<br />Na razie nie będę to przedstawiał całego kodu ale tylko funkcję które jak mi się wydaje mogą mieć związek z moim problemem.<br />[syntax=c]// Inicjalizacja pustego bufora<br />void initBuffer(void)<br />{<br />for(uint8_t i = 0; i &lt; NUM_DEVICES*8; i++)<br />buffer&#91;i&#93; = 0x00;<br />}<br /><br /><br />// Przenosi każdy bajt do przodu w buforze i dodaje na końcu następny bajt<br />void pushBuffer(uint8_t x)<br />{<br />for(uint8_t i = 0; i &lt; NUM_DEVICES*8 - 1; i++)<br />buffer&#91;i&#93; = buffer&#91;i+1&#93;;<br /><br />buffer&#91;NUM_DEVICES*8 - 1&#93; = x;<br />}<br /><br />// Wstawia bufor w postaci 5 znaków.<br />void pushCharacter(uint8_t c)<br />{<br />for(uint8_t i = 0; i &lt; 5; i++)// Dla 5 bajtów reprezentujących każdy znak<br />{<br />pushBuffer(pgm_read_byte(&amp;characters&#91;c&#93;&#91;i&#93;));   // Push the byte from the characters array to the display buffer<br />displayBuffer();// Display the current buffer on the devices<br />_delay_us(DEL);// and delay<br />}<br />}<br /><br />// Takes a pointer to the beginning of a char array holding message, and array size, scrolls message.<br />void displayMessage(const char *arrayPointer, uint16_t arraySize)<br />{<br />for(uint16_t i = 0; i &lt; arraySize; i++)<br />{<br />pushCharacter(pgm_read_byte_near(arrayPointer + i) - 32);// Send converted ASCII value of character in message to index in characters array (-32 sends corrent index to characters array)<br />pushBuffer(0x00);// Add empty column after character for letter spacing<br />displayBuffer();// Display &amp;<br />_delay_us(DEL); // Delay<br />}<br /><br />}<br /><br /><br />// Displays current buffer on the cascaded devices<br />void displayBuffer()<br />{<br />   for(uint8_t i = 0; i &lt; NUM_DEVICES; i++) // For each cascaded device<br />   {<br />   for(uint8_t j = 1; j &lt; 9; j++) // For each column<br />   {<br />   SLAVE_SELECT;<br /><br />   for(uint8_t k = 0; k &lt; i; k++) // Write Pre No-Op code<br />   writeWord(0x00, 0x00);<br /><br />   writeWord(j, buffer&#91;j + i*8 - 1&#93;); // Write column data from buffer<br /><br />   for(uint8_t k = NUM_DEVICES-1; k &gt; i; k--) // Write Post No-Op code<br />   writeWord(0x00, 0x00);<br /><br />   SLAVE_DESELECT;<br />   }<br />   }<br />}[/syntax]<br /><br />Proszę o jak potrzeba o dodatkowe pytania oraz oczywiście o pomoc w zrozumieniu co i w której funkcji odpowiedzialne jest za kierunek scrollowania bo tylko o sposób zmiany kierunku mi chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=922">mirek1968</a> — 29 paź 2017, o 10:34</p><hr />
]]></content>
</entry>
</feed>