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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-08-26T16:34:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23867&amp;mode</id>
<entry>
<author><name><![CDATA[LukMeks]]></name></author>
<updated>2021-08-26T16:34:25+01:00</updated>
<published>2021-08-26T16:34:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233352#p233352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233352#p233352"/>
<title type="html"><![CDATA[Re: TETRIS na matrycy 8x50.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233352#p233352"><![CDATA[
Hej.<br />Po długim czasie udało się zrobić Tetrisa plus psycho-test i ruletkę. Dojdzie jeszcze jakaś strzelanka.<br />Proszę o sprawdzenie przerwania, które odpowiada za multipleksowanie. <br />Wyświetlacz/cała matryca składa się z 10 pojedynczych matryc 8x5 led. <br />Katody matryc ( 8 ) są sterowane po dwie z przerzutników typu D czyli, że jest ich 5 co daje 8 pinów danych i 5 pinów zatrzasków. <br />Wejścia odwracającego nie wykorzystuję.<br />Anody matryc (też po dwie czyli 10) zasilane są z tranzystorów BD co daje kolejne 10 pinów.<br />Całość jest sterowana z Atmegi 164. <br /><br />Funkcję przerwania rozwiązałem tak, że zastosowałem bufor 50 - elementowy ( bo wyświetlacz jest ustawiony jako kolumna o wysokości 50 linii i szerokości 8), wyłączam katody, ładuję po kolei na przerzutniki co 10-tą wartość bufora licząc od 0 zatrzaskując ją na każdym( wykorzystuje je jako pamięć ), a następnie załączam odpowiednią anodę (co 10-tą), następuje inkrementacja licznika ładowanej komórki tablicy bufora i wszystko leci od nowa w kolejnym przerwaniu. Gdy licznik osiągnie wartość większą niż 9 (czyli załaduję 9, 19, 29, 39 i 48 bajt to sie zeruje.<br /><br />Na moje oko działa ok.<br />Proszę o sprawdzenie czy tak to powinno wyglądać. <br /><br />[syntax=c]///////////////////   Multipleksowanie   ////////////////////////<br />ISR(TIMER0_COMPA_vect) {<br /><br />static uint8_t nr_kol = 0; //0-9<br /><br />PORTC = 255; //wygaszenie 0 - 7 led wiersze Anody<br />PORTB = (PORTB &amp; 0b11111100)  | 0b00000011; //wygaszenie 8 i 9 led wiersze  Anody<br /><br />PORTD = tab_4&#91;nr_kol&#93; | tab_end&#91;nr_kol&#93;;//zatrzaśnięcie danych na przerzutniki<br />PORTB |= (1 &lt;&lt; 3);<br />PORTB &amp;= ~(1 &lt;&lt; 3);<br />PORTD = tab_4&#91;nr_kol + 10&#93; | tab_end&#91;nr_kol + 10&#93;;// suma dwóch tablic z klockami, które opadły i z tym, który spada<br />PORTB |= (1 &lt;&lt; 4);<br />PORTB &amp;= ~(1 &lt;&lt; 4);<br />PORTD = tab_4&#91;nr_kol + 20&#93; | tab_end&#91;nr_kol + 20&#93;;<br />PORTB |= (1 &lt;&lt; 5);<br />PORTB &amp;= ~(1 &lt;&lt; 5);<br />PORTD = tab_4&#91;nr_kol + 30&#93; | tab_end&#91;nr_kol + 30&#93;;<br />PORTB |= (1 &lt;&lt; 6);<br />PORTB &amp;= ~(1 &lt;&lt; 6);<br />PORTD = tab_4&#91;nr_kol + 40&#93; | tab_end&#91;nr_kol + 40&#93;;<br />PORTB |= (1 &lt;&lt; 7);<br />PORTB &amp;= ~(1 &lt;&lt; 7);<br /><br />if (nr_kol &lt; 8) {<br />PORTC &amp;= ~(1 &lt;&lt; nr_kol);//załączanie wierszy 0 - 9 Anody<br />} else if (nr_kol &gt; 7) {<br />PORTB &amp;= ~(1 &lt;&lt; (nr_kol - 8));<br />}<br /><br />nr_kol++;//inkrementacja numeru tablicy do wyswietlania co przerwanie<br />if (nr_kol &gt; 9)<br />nr_kol = 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21755">LukMeks</a> — 26 sie 2021, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[embedownik]]></name></author>
<updated>2021-08-01T16:47:09+01:00</updated>
<published>2021-08-01T16:47:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233132#p233132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233132#p233132"/>
<title type="html"><![CDATA[Re: TETRIS na matrycy 8x50.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233132#p233132"><![CDATA[
Odpowiadając na pytania - Zgrupuj dostępne klocki w tablicę takich struktur i w funkcji losującej generuj index klocka z tej tablicy - z tego co widzę pola nie będą modyfikowane (choć z kodu ciężko mi wywnioskować co one oznaczają), tak? Przekazywanie do kolejnych funkcji przez wskaźnik - lub możesz też używać tego indeksu (i tak - ten indeks może być enumen) i tylko go przekazywać.<br /><br />Generalnie na tym etapie przed tobą jest masa decyzji &quot;projektowo/implementacyjnych&quot; do podjęcia - bez szerszego kontekstu jak widzisz algorytm działania porady odnośnie szczegółów implementacyjnych mogą być nietrafione/utrudnić tylko.<br /><br />Dam Ci też małą podpowiedź - jakbyś podzielił swoje oprogramowanie na warstwy to miałbyś coś takiego:<br /> 1. logika gry<br /> 2. konwerter bufora z planszy na dane do LCD/matryc<br /> 3. biblioteka LCD/matryc<br /><br />i punkty 1 i 2 możesz napisać całkowicie w C na PC i wtedy w miejsce 3 wstawić wyświetlanie na konsoli.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21689">embedownik</a> — 1 sie 2021, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LukMeks]]></name></author>
<updated>2021-08-01T07:42:58+01:00</updated>
<published>2021-08-01T07:42:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233121#p233121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233121#p233121"/>
<title type="html"><![CDATA[TETRIS na matrycy 8x50.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23867&amp;p=233121#p233121"><![CDATA[
Cześć. <br />Próbuję zorganizować grę Tetris na gotowej matrycy z 10 modułami 5x8 LED sterowanymi po dwa przez 74hc573. <br />Obsługa będzie się odbywać pilotem. <br />Atmega 164. <br />Zawartość matrycy będzie odczytywana z tablicy.<br />Przerwanie będzie gasić wyświetlacz, ładować wartość kolejnego elementu tablicy, zatrzaskiwać itd.<br />Klocki mam opisane w 19 strukturach:<br />[syntax=c]typedef struct {<br />uint8_t pierwsza_linia;<br />uint8_t druga_linia; //linie czyli kolumny od zera<br />uint8_t trzecia_linia;<br />uint8_t czwarta_linia;<br />uint8_t min;<br />uint8_t max;<br />} klocek;<br /><br />klocek elka_l_up = {16, 16, 24, 0, 3, 3}; // |___  , przesunięcie min i max<br />klocek elka_l_levt = {8, 56, 0, 0, 3, 2};<br />klocek elka_l_down = {24, 8, 8, 0, 3, 3};<br />klocek elka_l_right = {56, 32, 0, 0, 3, 2};<br /><br />klocek elka_r_up = {24, 16, 16, 0, 3, 3};<br />klocek elka_r_levt = {56, 8, 0, 0, 3, 2};<br />klocek elka_r_down = {8, 8, 24, 0, 3, 3};<br />klocek elka_r_right = {32, 56, 0, 0, 3, 2};<br /><br />klocek kwadrat = {24, 24, 0, 0, 3, 3};<br /><br />klocek linia_horizontal = {8, 8, 8, 8, 3, 4};<br />klocek linia_vertical = {60, 0, 0, 0, 2, 2};<br />itd[/syntax]<br /><br />Chciałbym wyrobić się w jednej funkcji do obsługi klocków.<br />Klocek będzie przesuwał się po tablicy sprawdzając zawartość następnej komórki( czy jest pusto ).<br />Dojdzie jeszcze liczenie punktów (całych linii) , najlepszy wynik, zmiana prędkości, przesuwanie lewo i prawo itp.<br /><br />Takie są plany. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />W związku z tym proszę o radę jak można by wrzucić strukturę klocek do funkcji. Struktura ma 6 elementów i będzie wybierana losowo. Może użyć ENUM, może przekazywać jako wartości ale to zagęści kod. Nie jestem za biegły we wskaźnikach a co dopiero w strukturach jako argument funkcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21755">LukMeks</a> — 1 sie 2021, o 07:42</p><hr />
]]></content>
</entry>
</feed>