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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-14T23:02:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13793&amp;mode</id>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-14T23:02:43+01:00</updated>
<published>2015-12-14T23:02:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=148040#p148040</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=148040#p148040"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=148040#p148040"><![CDATA[
Mam kolejne pytanko. Jak mógłbym teraz sprawdzać pozycje paletki względem piłeczki? kierunek piłeczki wiadomo że znam. <br /><br />Zakładam że w  COLUMN_PORT[0] ustawienie paletki dajmy na to jest 0b11100000, piłeczki w COLUMN_PORT[1] jest nieznane, bo może to być dowlony z 8 bitów, wiadomo, zależy od rozgrywki, czyli 0bxxxxxxxx. Teraz  moge przewidzieć gdzie będzie piłeczka bo znam kierunek, a odbicie nastąpi w kolejnym ruchu. <br /><br />Czyli, jak mam porównać zawartość COLUMN_PORT[1], gdzie jest piłeczka, tak by stykała lub nakładała się w następnym ruchu z paletką? Jak porównać te poszczególne bity?<br /><br /><br />EDIT::<br /><br />wystarczy sprawdzic (BUFFOR_COL[0] &amp; BUFOR_COL[1] == BUFFOR_COL[1]) &amp;&amp; BUFFOR_COL[1] !=0 <br /><br />dla drugiej paletki tak samo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 14 gru 2015, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-08T20:17:53+01:00</updated>
<published>2015-12-08T20:17:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147421#p147421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147421#p147421"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147421#p147421"><![CDATA[
Liczba 0b00000001 zostaje przesunięta w lewo (od prawej strony jest uzupełniana 0)<br />Dla licznik = 0: COLUMN_PORT = 1&lt;&lt;0 = 0b0000000<strong>1</strong><br />Dla licznik = 1: COLUMN_PORT = 1&lt;&lt;1 = 0b000000<strong>1</strong>0<br />Dla licznik = 2: COLUMN_PORT = 1&lt;&lt;2 = 0b00000<strong>1</strong>00<br />...<br />Dla licznik = 7: COLUMN_PORT = 1&lt;&lt;7 = 0b<strong>1</strong>0000000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 8 gru 2015, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T23:28:48+01:00</updated>
<published>2015-12-07T23:28:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147376#p147376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147376#p147376"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147376#p147376"><![CDATA[
Dzięki wielkie za pomoc, działa cud malina <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mam jeszcze pytanie, bo nie zabardzo rozumiem jak działa  COLUMN_PORT = 1 &lt;&lt; licznik, a działa bardzo dobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 23:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-07T22:26:50+01:00</updated>
<published>2015-12-07T22:26:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147368#p147368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147368#p147368"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147368#p147368"><![CDATA[
<div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />Teraz mógłbyś mi jeszcze podpowiedzieć, kiedy obsługiwać te przyciski? W założonym odstępie czasowym, czyli w pętli głównej to słaby pomysł ze względu na te przerwania?<br /></div><br />W pętli głównej. A link podałem wcześniej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 gru 2015, o 22:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T22:14:07+01:00</updated>
<published>2015-12-07T22:14:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147363#p147363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147363#p147363"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147363#p147363"><![CDATA[
hm, dzięki wielkie!<br /><br />przed Twoim zapostowaniem, sam doszedłem do tego, że coś jest nie tak z tym ustawianiem COLUMN_PORT<br /><br />i wyszło mi że za każdym razem musze je ustawiać w ifie wraz z tym buforem. <br /><br />ale Twój drugi kod jest jednak nie dość że krótszy, to jeszcze działa równie dobrze.<br /><br />Teraz mógłbyś mi jeszcze podpowiedzieć, kiedy obsługiwać te przyciski? W założonym odstępie czasowym, czyli w pętli głównej to słaby pomysł ze względu na te przerwania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-07T22:04:24+01:00</updated>
<published>2015-12-07T22:04:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147358#p147358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147358#p147358"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147358#p147358"><![CDATA[
Spróbuj:<br />[syntax=c]ISR(TIMER0_COMP_vect) // obsługa przerwania<br />{<br />static uint16_t licznik=1;<br />COLUMN_PORT = 0; //wygaszenie wszystkich kolumn<br />//modyfikacja<br />if (licznik==1)<br />PORTA=BUFFOR_COL&#91;0&#93;;<br />else<br />PORTA=0x00;<br /><br />COLUMN_PORT = licznik; //zapalenie kolumny<br /><br />licznik &lt;&lt;=1;<br /><br />if (licznik&gt;255)<br />licznik = 1;<br />}[/syntax]<br />Rzuć też okiem na to:<br />[syntax=c]ISR(TIMER0_COMP_vect) // obsługa przerwania<br />{<br />static uint8_t licznik;<br />COLUMN_PORT = 0; //wygaszenie wszystkich kolumn<br />//modyfikacja<br />PORTA = BUFFOR_COL&#91;licznik&#93;;<br /><br />COLUMN_PORT = 1 &lt;&lt; licznik; //zapalenie kolumny<br /><br />licznik++;<br /><br />if (licznik &gt; 7)<br />licznik = 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 gru 2015, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T22:05:52+01:00</updated>
<published>2015-12-07T21:40:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147353#p147353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147353#p147353"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147353#p147353"><![CDATA[
Zrobiłem takie coś, usunąłem totalnie obsługe przycisków z pętli głównej. <br /><br />Poświata jest nadal w drugiej kolumnie, lecz bardzo słaba, ale jednak widoczna. Da się jakoś całkowicie ją wyeliminować?<br /><br />[syntax=c]int main(void)<br />{<br /><br />        MCUCSR |=(1&lt;&lt;JTD);<br />        MCUCSR |=(1&lt;&lt;JTD);<br />        PORTB |= KEY1_RIGHT | KEY1_LEFT;  // podciągamy linie klawiszy do VCC<br />    DDRC = 0xff;<br />    DDRA = 0xff;<br />    _delay_ms(10);<br />    i=3;<br />    init_clocks();<br />    sei();<br /><br />    while(1)<br />    {<br /><br />    }<br />}<br /><br /><br />ISR(TIMER0_COMP_vect) // obsługa przerwania<br />{<br />        static uint16_t licznik=1;<br />        COLUMN_PORT = licznik;<br />        if (licznik==1)<br />               PORTA=BUFFOR_COL&#91;0&#93;;<br />               else<br />               PORTA=0x00;<br />        licznik &lt;&lt;=1;<br /><br />        if (licznik&gt;255)<br />                licznik = 1;<br /><br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-07T21:24:07+01:00</updated>
<published>2015-12-07T21:24:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147350#p147350</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147350#p147350"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147350#p147350"><![CDATA[
<div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />PORTA |= BUFFOR[0]<br /></div><br />W zasadzie to wprost PORTA = BUFFOR[0]<br />Jak chcesz coś mieć na początku to inicjujesz tablicę danymi:<br />[syntax=c]uint8_t BUFFOR&#91;&#93; = {0b00111000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000};[/syntax]<br /><br />Zacznij od tego, że wpiszesz jakieś dane do tablicy BUFFOR i wyświetlisz ten obraz na wyświetlaczu. Do wyświetlenia ma służyć funkcja obsługi przerwania timera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 gru 2015, o 21:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T21:06:21+01:00</updated>
<published>2015-12-07T21:06:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147347#p147347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147347#p147347"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147347#p147347"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Masz tablicę która reprezentuje widok kolumn na wyświetlaczu i np. przesuwanie lewej paletki to BUFFOR[0] &lt;&lt;= 1; i warunek ograniczający.<br /><br /><br />Tak gdy licznik jest równy 1 i PORTA |= BUFFOR[1] gdy licznik jest równy 2 itd.<br /></div><br />Czyli jesli dobrze zrozumiałem to przesuwamy sobie jedynke na pierwzej kolumnie, potem gdy licznik = 1 (gdy świeci się pierwsza kolumna) to przypisujemy te przesunięte bity do wierszy poprzez  PORTA |= BUFFOR[0] ? A jeśli paletka to 3 diody? i co jeśli chciałbym ową'paletke' przy starcie ustawić na środku pierwszej kolumny( czyli 3,4,5 wiersz)<br /><br /><br /><div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />A jakie to ma znaczenie dla działania przycisków? Dlaczego tak? Przyciski należy sprawdzać w założonych odstępach czasowych.<br /></div><br /> No własnie nie ma żadnego, tylko źle przemyślałem to wszystko. Poprostu myslałem że moge przesuwać paletką tylko wtedy, gdy aktywna jest pierwsza kolumna. Nie wiedziałem jak to obejść. Jeśli dobrze rozumuje to co wyżej to spróbuje inaczej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-07T20:01:43+01:00</updated>
<published>2015-12-07T20:01:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147334#p147334</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147334#p147334"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147334#p147334"><![CDATA[
<div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />Czyli tworze sobie buffor, 8 elementowej tablicy char, ale jak na takim suchym czymś moge operować?<br /></div><br />Masz tablicę która reprezentuje widok kolumn na wyświetlaczu i np. przesuwanie lewej paletki to BUFFOR[0] &lt;&lt;= 1; i warunek ograniczający.<div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />PORTA |= BUFFOR[0]?<br /></div><br />Tak gdy licznik jest równy 1 i PORTA |= BUFFOR[1] gdy licznik jest równy 2 itd.<br /><div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />Tutaj chciałem sprawdzić która kolumna się świeci. Przez flagę by to inaczej jakoś działało?<br /></div><br />A jakie to ma znaczenie dla działania przycisków? Dlaczego tak? Przyciski należy sprawdzać w założonych odstępach czasowych.<br /><div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />hmm prędkości czyli zegara? czy złego doboru prędkości multipleksowania?<br /></div><br />Wszytko jest ze sobą powiązane. Wykorzystując przerwanie timera i dodatkowe zmienne-liczniki możesz wykonywać fragmenty kodu w dowolnych odstępach (oczywiście dobranych do zadania)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 gru 2015, o 20:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T19:23:17+01:00</updated>
<published>2015-12-07T19:23:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147327#p147327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147327#p147327"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147327#p147327"><![CDATA[
Dzięki za odpowiedz! mam jednak mnóstwo pytąń <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Tworzysz tablicę 8 kolumn i na niej wykonujesz wszelkie operacje. W funkcji obsługi przerwania ISR(TIMER0_COMP_vect) tylko kopiujesz jej zawartość na PORTA w odpowiednim czasie i kolejności. To znacznie ułatwi ci pracę.<br /></div><br /><br />Czyli tworze sobie buffor, 8 elementowej tablicy char, ale jak na takim suchym czymś moge operować? <br />W obsłudze przerwania przypisuje ten bufor dajmy na to PORTA |= BUFFOR[0]?  a w bufforze co miałbym? Troche tego nie rozumiem. <br /><br />Druga sprawa, co ze sterowaniem wierszami? To miałby robić ten buffor? Czy on miałby być od kolumn? Przecież to w zależności od przycisniętego klawisza, pozycja 'paletki' na WIERSZACH się może zmieniac, kolumny w moim zamyśle miały tylko się 'uaktywniać' w odpowiednim momencie(multipleksować ) <br /><br /><div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Użycie COLUMN_PORT==0b00000001 to też takie mieszanie sobie sprzętu z algorytem. W funkcji obsługi przerwania ustawiaj po prostu dodatkową flagę i sprawdź co ile ją ustawiasz.<br /></div><br /><br />Tutaj chciałem sprawdzić która kolumna się świeci. Przez flagę by to inaczej jakoś działało? <br />Czyli dodam sobie flage która sprawdza kiedy licznik == 1(czyli przy przekroczeniu 255)? To nie było by to samo? <br /><br /><br /><br />[/quote]<br /><br /><div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Błędne działanie przycisków może wynikać ze źle dobranej prędkości. Zobacz:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html" >http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html</a><!-- m --><br /></div><br /><br />hmm prędkości czyli zegara? czy złego doboru prędkości multipleksowania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-12-07T18:01:56+01:00</updated>
<published>2015-12-07T18:01:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147315#p147315</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147315#p147315"/>
<title type="html"><![CDATA[Re: Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147315#p147315"><![CDATA[
<div class="quotetitle">United napisał(a):</div><div class="quotecontent"><br />Skleiłem taki kod, który działa, ale jednak w drugiej kolumnie mam jakby poświate, a nie pełne zgaszenie...<br /></div><br />Poświata wynika ze złej kolejności operacji przy zmianie kolumny, ale tego tutaj wcale nie widać. Zmieniasz PORTA wierszy w pętli głównej co jest kiepskim pomysłem. Polecam operowanie na buforze dla całego wyświetlacza. Tworzysz tablicę 8 kolumn i na niej wykonujesz wszelkie operacje. W funkcji obsługi przerwania ISR(TIMER0_COMP_vect) tylko kopiujesz jej zawartość na PORTA w odpowiednim czasie i kolejności. To znacznie ułatwi ci pracę.<br /><br />Użycie COLUMN_PORT==0b00000001 to też takie mieszanie sobie sprzętu z algorytem. W funkcji obsługi przerwania ustawiaj po prostu dodatkową flagę i sprawdź co ile ją ustawiasz. Błędne działanie przycisków może wynikać ze źle dobranej prędkości. Zobacz:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html" >http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 gru 2015, o 18:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[United]]></name></author>
<updated>2015-12-07T12:29:28+01:00</updated>
<published>2015-12-07T12:29:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147282#p147282</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147282#p147282"/>
<title type="html"><![CDATA[Multipleksowanie matrycy LED i obsługa przycisków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13793&amp;p=147282#p147282"><![CDATA[
Witam! złożyłem już układzik z tematu: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic13648.html" >topic13648.html</a><!-- l --><br /><br />schemat: (jedynie przyciski podłączone do portu B a nie D), IC2 to 8 tranzystorów ULN2803<br /><br /><a href="https://obrazkiforum.atnel.pl/11861/d82cf8e81aa651c52d9d7b55c623aa4b.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/11861/d82cf8e81aa651c52d9d7b55c623aa4b.png" alt="Obrazek" /></a><br /><br />Otóż założyłem, że w przerwaniu będzie zgodnie z niebieską książka przesuwana jedynka na Porcie C, który steruje kolumnami. Dzięki czemu będzie możliwość normalnego wyświetlania.<br /><br />Wierszami steruje już normalnie, a tutaj problem. Chce sterować sobie 2 przyciskami 'paletką' która składa się z 3 diód i jest tylko w pierwszej kolumnie. Sprawdzam, czy pierwsza kolumna jest 'aktywna'(czy jest jedynka) i jeżeli tak, to wchodzi w obsługe przycisku. <br /><br />Skleiłem taki kod, który działa, ale jednak w drugiej kolumnie mam jakby poświate, a nie pełne zgaszenie...<br /><br />dodatkowo nie zawsze wchodzi mi w pierwszego ifa, tzn nie przy kazdym nacisnieciu 'paletka' zmienia pozycje(to jest mniejszy problem). Pytanie, gdzie zrobiłem błąd w rozumowaniu lub kodzie... <br /><br />Zegar 1MHz<br /><br />Kod:<br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define ROW_1 (1&lt;&lt;PA0)<br />#define ROW_2 (1&lt;&lt;PA1)<br />#define ROW_3 (1&lt;&lt;PA2)<br />#define ROW_4 (1&lt;&lt;PA3)<br />#define ROW_5 (1&lt;&lt;PA4)<br />#define ROW_6 (1&lt;&lt;PA5)<br />#define ROW_7 (1&lt;&lt;PA6)<br />#define ROW_8 (1&lt;&lt;PA7)<br />#define KEY1_RIGHT (1&lt;&lt;PB0)<br />#define KEY1_LEFT (1&lt;&lt;PB1)<br />#define COLUMN_PORT PORTC<br />#define COLUMN_1 (1&lt;&lt;PC0)<br />#define COLUMN_2 (1&lt;&lt;PC1)<br />#define COLUMN_3 (1&lt;&lt;PC2)<br />#define COLUMN_4 (1&lt;&lt;PC3)<br />#define COLUMN_5 (1&lt;&lt;PC4)<br />#define COLUMN_6 (1&lt;&lt;PC5)<br />#define COLUMN_7 (1&lt;&lt;PC6)<br />#define COLUMN_8 (1&lt;&lt;PC7)<br />char ROW_ARRAY&#91;&#93;={ROW_1,ROW_2,ROW_3,ROW_4,ROW_5,ROW_6,ROW_7,ROW_8};<br />char COL_ARRAY&#91;&#93;={COLUMN_1,COLUMN_2,COLUMN_3,COLUMN_4,COLUMN_5,COLUMN_6,COLUMN_7,COLUMN_8};<br />uint8_t isPressed_1,isPressed_2;<br />uint8_t i;<br /><br />void init_clocks()<br />{<br />        TCCR0 |= (1&lt;&lt;WGM01); // tryb ctc<br />        TCCR0 |= (1&lt;&lt;CS01); // preskaler 8<br />        OCR0 = 124;<br />        TIMSK |= (1 &lt;&lt; OCIE0); // zezwolenie dla na przerwania compare match<br />}<br /><br /><br />void obsluga_przycisk1(void)<br />{<br />        if((COLUMN_PORT==0b00000001)) // sprawdz czy kolumna pierwsza jest włączona<br />                {<br />         if(!isPressed_1 &amp;&amp; !(PINB &amp; KEY1_RIGHT )) // reakcja na PRESS (wcinięcie przycisku)<br />             {<br />                         isPressed_1=1;<br />                           if(i&lt;6)<br />                                {<br />                                   PORTA &amp;= ~(ROW_ARRAY&#91;i-1&#93;); // zgaś jedna diode w zależności od ruchu<br />                                   i++;<br /><br />                                }<br /><br />             } else<br />                  if( isPressed_1 &amp;&amp; (PINB &amp; KEY1_RIGHT ) )<br />                          isPressed_1++;<br />         PORTA |= ROW_ARRAY&#91;i+1&#93;| ROW_ARRAY&#91;i&#93;| ROW_ARRAY&#91;i-1&#93;; // wyswietl paletke <br />                }<br />        else// zgaś wszystkie wiersze jesli pierwsza kolumna nie jest włączona<br /><br />                         {<br />                        PORTA &amp;=~ROW_ARRAY&#91;0&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;1&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;2&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;3&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;4&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;5&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;6&#93;;<br />                        PORTA &amp;=~ROW_ARRAY&#91;7&#93;;<br /><br />                         }<br />}<br />void obsluga_przycisk2(void)<br />{<br />        if((COLUMN_PORT==0b00000001)) // sprawdz czy kolumna pierwsza jest włączona<br />        {<br />         if(!isPressed_2 &amp;&amp; !(PINB &amp; KEY1_LEFT )) // reakcja na PRESS (wcinięcie przycisku)<br />              {<br />                                 isPressed_2=1;<br />                                 if(i&gt;1)<br />                                        {<br />                                           PORTA &amp;= ~(ROW_ARRAY&#91;i+1&#93;);// zgaś jedna diode w zależności od ruchu<br />                                           i--;<br /><br /><br />                                        }<br />              } else<br />                  if( isPressed_2 &amp;&amp; (PINB &amp; KEY1_LEFT ) )<br />                          isPressed_2++;<br />         PORTA |= ROW_ARRAY&#91;i+1&#93;| ROW_ARRAY&#91;i&#93;| ROW_ARRAY&#91;i-1&#93;; // wyswietl paletke <br />        }<br /><br />         else // zgaś wszystkie wiersze jesli pierwsza kolumna nie jest włączona<br /><br />         {<br />                 PORTA &amp;=~ROW_ARRAY&#91;0&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;1&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;2&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;3&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;4&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;5&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;6&#93;;<br />                                        PORTA &amp;=~ROW_ARRAY&#91;7&#93;;<br /><br />         }<br />}<br />int main(void)<br />{<br /><br />        MCUCSR |=(1&lt;&lt;JTD);<br />        MCUCSR |=(1&lt;&lt;JTD);<br />        PORTB |= KEY1_RIGHT | KEY1_LEFT;  // podciągamy linie klawiszy do VCC<br />    DDRC = 0xff;<br />    DDRA = 0xff;<br />    _delay_ms(10);<br />    i=3;<br />    init_clocks();<br />    sei();<br /><br />    while(1)<br />    {<br />        obsluga_przycisk1();<br />        obsluga_przycisk2();<br />    }<br />}<br /><br /><br />ISR(TIMER0_COMP_vect) // obsługa przerwania<br />{<br />        static uint16_t licznik=1;<br />        COLUMN_PORT = licznik;<br />        licznik &lt;&lt;=1;<br /><br />        if (licznik&gt;255)<br />                licznik = 1;<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11861">United</a> — 7 gru 2015, o 12:29</p><hr />
]]></content>
</entry>
</feed>