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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-20T22:05:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5529&amp;mode</id>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2014-01-20T22:05:35+01:00</updated>
<published>2014-01-20T22:05:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65895#p65895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65895#p65895"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65895#p65895"><![CDATA[
To jeszcze inaczej podpowiem. Jesli licznik bedzie zmienna globalna, to bedziesz mogl sie odwolac do niej w funckji narastanie. <br />Podpowiem jedna linijke kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />if (licznik==0) zapal kolumne 1<br />I musisz zrobic 5 ifow (zaleznie od ilosci wierszy) . <br />Z takim kodem wiersze beda sie zmienialy szybko, a nawet bardzo szybko <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />To jest taki troche ulomny sposob i warto pomyslec nad czyms lepszym np. napisac zamiast tego KOLPORT |= kolumny[z];  to KOLPORT |= kolumny[licznik]; I obeszlo sie bez ifow, ale teraz musisz pomyslec nad tym, aby wszystko odbywalo sie wolniej.<br />Ja to tak widze, a z checia zobaczylbym jakis inny sposob <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Edit:<br />Zliczaj 200ms ale uzywając przerwania :&gt;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 20 sty 2014, o 22:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-20T20:55:19+01:00</updated>
<published>2014-01-20T20:55:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65886#p65886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65886#p65886"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65886#p65886"><![CDATA[
nic nie moge wymyslic, cały czas mam w głowie jedno rozwiazanie te ktore mam obecnie w kodzie czyli reczne zapalanie wiersza, bo jak inaczej? wydaje mi sie ze inaczej to strasznie zagmatwa kod jak juz,<br /><br />no poprostu nei wiem, moze jakis przykład?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 20 sty 2014, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LogTeam]]></name></author>
<updated>2014-01-20T13:41:24+01:00</updated>
<published>2014-01-20T13:41:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65805#p65805</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65805#p65805"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65805#p65805"><![CDATA[
Atmega, rozmwialiśmy o tym na czacie. Masz problem z funkcją narastający(); <br />W funkcji masz linijkę którą przesuwasz wiersze:         WPORT &amp;= ~(wiersze[z]);<br />No ale przesuwaniami wierszy ma zająć się multipleksowanie. Dlatego u Ciebie program nie działa odpowiednio.<br />Założeniem jest to że gdy stan wysoki jest na wierszu 1 to zapalają się diody w kolumnie 1. <br />Musisz więc zrobić to tak, że następuje multipleks i gdy jest ten wiersz 1 to zapalają się diody w 1 kolumnie. <br />Można całą operację wwalić do przerwania, ale ja bym to zrobił w pętli, a dokładniej w funkcji. Sprawdzasz if'em czy jest stan wysoki na wierszu 1 i zapalasz 1 kolumnę. Gotowca nie dam, ale podpowiem że może się przydać zmienna licznik jako zmienna globalna <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Jeśli coś żem źle przedstawił to proszę o naprostowanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdr<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=738">LogTeam</a> — 20 sty 2014, o 13:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-20T00:11:21+01:00</updated>
<published>2014-01-20T00:11:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65757#p65757</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65757#p65757"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65757#p65757"><![CDATA[
Szedłeś w dobrym kierunku, ale zgubiłeś tablicę uint8_t matryca[5][7], która oczywiście jest za duża. Zdefiniuj sobie taką tablicę:<br />[syntax=c]uint8_t matryca &#91;5&#93; = <br />{ <br />0b00000000, //bit 6 w 0 wierszu to lewy górny róg wyświetlacza i punkt 1,1, (bit 7 nie jest używany)<br />0b00000000,<br />0b00000000,<br />0b00000000,<br />0b00000000,<br />};[/syntax]<br />funkcja set_pixel powinna operować na tej tablicy wprost bez żądnych udziwnień:<br />[syntax=c]void setpixel(uint8_t x, uint8_t y)//ustawienie 0 spowoduje w efekcie zapalenie pixela<br />{<br />   matryca&#91;x - 1&#93; |= (1&lt;&lt;(7-y)); //x-1 ze względu na indeksowanie tablic od 0<br />   // 7-y ze względu na numerowanie pixela odwrotne niż bitów<br />}[/syntax]<br />przykładowo wywołanie takiej funkcji 2 razy jak tam wyżej pisałeś:<br />[syntax=c]setpixel(2,5);          //funkcja zapalająca piksel w schemacie (x,y) - gdzie początkowym punktem jest 1,1 - lewy górny róg<br />setpixel(3,7);[/syntax]<br />Spowoduje zmianę w tej tablicy matryca i będzie o na wyglądać tak (chyba  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br />[syntax=c]matryca &#91;5&#93; = <br />{ <br />0b00000000,<br />0b00000100,<br />0b00000001,<br />0b00000000,<br />0b00000000,<br />};[/syntax]<br /><br />I w pętli głównej sobie dowolnie zmieniasz tą tablicę np. przewijasz tam teksty czy wyświetlasz grafikę<br />W przerwaniu rzutujesz tą tablicę na wyświetlacz. Tu może być skomplikowanie, bo to później cię nie interesuje.<br />[syntax=c]ISR(TIMER2_COMP_vect){<br />   static uint8_t licznik=0;<br />   clear(); //zgaszenie ekranu przed zmianą stanu<br />   //na wygaszonym ekranie ustawia się odpowiednie piksele w danym wierszu<br />   KOLPORT &amp;= 0b11000011; //wyzerowanie k1-PB2, k2-PB3, k3-PB4 i k4-PB5, pozostałe bez zmian<br />   KOLPORT |= 0b00111100 &amp; (matryca&#91;licznik&#93;&gt;&gt;1); //ustawienie bitów PB2-PB5, pozostałe bez zmian<br />   //wiersz tablicy należy przesunąć aby wpasować dane bity 6-3 tablicy &gt;&gt; 1 na 5-2 portu <br /><br />   KOLPORT1 &amp;= 0b01111111; //tu już pojedynczo każdy pin, k5-PD7<br />   KOLPORT1 |= 0b10000000 &amp; (matryca&#91;licznik&#93;&lt;&lt;5); //2 bit z tablicy &lt;&lt; 5 na 7 pozycję w porcie<br /><br />   KOLPORT1 &amp;= 0b10111111; //k6-PD6<br />   KOLPORT1 |= 0b01000000 &amp; (matryca&#91;licznik&#93;&lt;&lt;5);//1 bit z tablicy &lt;&lt; 5 na 6 pozycję w porcie<br /><br />   KOLPORT1 &amp;= 0b11101111; //k7-PD4<br />   KOLPORT1 |= 0b00010000 &amp; (matryca&#91;licznik&#93;&lt;&lt;4);//0 bit z tablicy &lt;&lt; 4 na 4 pozycję w porcie<br />   //włączenie jednego wiersza po ustawieniu punktu<br />   if (licznik==0) WPORT &amp;= ~(1&lt;&lt;w1);<br />   if (licznik==1) WPORT &amp;= ~(1&lt;&lt;w2);<br />   if (licznik==2) WPORT &amp;= ~(1&lt;&lt;w3);<br />   if (licznik==3) WPORT &amp;= ~(1&lt;&lt;w4);<br />   if (licznik==4) WPORT &amp;= ~(1&lt;&lt;w5);<br />   licznik++;<br />   if(licznik&gt;4) licznik=0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sty 2014, o 00:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-01-19T21:58:00+01:00</updated>
<published>2014-01-19T21:58:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65736#p65736</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65736#p65736"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65736#p65736"><![CDATA[
A czy próbowałeś wpisywać inne wartości kolumny i wiersza?<br />Poza tym to wywołujesz setpixel() z częstotliwością obiegu pętli głównej<br />i nijak się to ma do tego co robisz w przerwaniu <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=189">MirkoT</a> — 19 sty 2014, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-19T17:11:29+01:00</updated>
<published>2014-01-19T17:11:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65663#p65663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65663#p65663"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=65663#p65663"><![CDATA[
Hmm, chciałbym wrócić do multipleksowania,  i może dokładniej zilustruje mój problem (kolejny). Docelowo wprowadzam multipleksowanie by wyświetlać na matrycy kilka punktów,bez dodatkowych &quot;errorów czyli zapalen innych punktów niz te które mają się wyświetlać.<br /><br />Mój obecny kod w pętli głównej wygląda tak:<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 /><br />#include &quot;matryca.h&quot;<br /><br />int main(void){<br />uint8_t wiersze&#91;6&#93; = {0,w1,w2,w3,w4,w5};<br />uint8_t kolumny&#91;8&#93; = {0,k1,k2,k3,k4,k5,k6,k7};<br /><br />array_init();//załaczanie wywietlacza (bez multipleksowania)<br />array_init_m();//dodatkowo załaczenie procedury obsł. przerwania i cykliczne zmiany wierszy - multipleksowanie<br />sei();<br /><br />while(1){<br /><br />setpixel(2,5);//funkcja zapalająca piksel w schemacie (x,y) - gdzie poczatkowym punktem jest 1,1 - lewy górny róg<br />                setpixel(3,7);<br /><br /><br />}<br /><br />}[/syntax]<br /><br />plik matryca.c z opisem poszczególnych funkcji i multipleksowaniem:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;matryca.h&quot;<br /><br />uint8_t wiersze&#91;6&#93; = {0,w1,w2,w3,w4,w5};//tablica z kolejno wstawionymi (1&lt;&lt;PXX) załączająca odpowiednie wiersze<br />uint8_t kolumny&#91;8&#93; = {0,k1,k2,k3,k4,k5,k6,k7};// jak wyżej odpowiednio - kolumny<br />uint8_t z=1,a=1;//zmienne na potrzeby &quot;Efektów'<br /><br />void array_init(void){<br /><br />WPIN = 0xFF;//Rejestr C - katody jako wyjscia (jedynki)<br />KOLPIN =  0xFF;//Rejestr B - anody jako wyjscia (jedynki) od 1 - 4<br />KOLPIN1 = 0xFF;//Rejestr D - anody jako wyjscia (jedynki) od 5 - 7<br /><br />WPORT = 0xFF;       //Zgaszenie wszystkich katod<br /><br />}<br /><br />void array_init_m(void){<br /><br />/* Ustawianie timera dla mulipleksowania tablicy */<br /><br />TCCR2 |= (1&lt;&lt;WGM21);//Tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20);//Preskaler 1024<br />OCR2 = 31;// Wartosc 31 by uzyskac 250 Hz czyli 50 na kazdy wiersz<br />TIMSK |= (1&lt;&lt;OCIE2);//Zezwolenie na Compare Match od Timera2<br /><br />}<br /><br />void setpixel(uint8_t x, uint8_t y){<br /><br />WPORT &amp;= ~(wiersze&#91;x&#93;);// stan &quot;0&quot; czyli załaczenie katody - wiersza<br />if(y&gt;4){<br />KOLPORT1 |= (kolumny&#91;y&#93;);//zapalenie odpowiedniej anody-kolumny bedącej w rejestrze  D<br />}else KOLPORT = KOLPORT  | (kolumny&#91;y&#93;); //zapalenie odpowiedniej anody-kolumny<br />}<br /><br />void clear(void){  // funkcja gasząca cały ekran<br /><br />WPIN = 0xFF;// kierunek katod wyjsciowy<br />WPORT = 0xFF;// stan wysioki na wszystkie katody -wiersze - zgaszenie<br />KOLPORT = 0;// stan niski na kazdy port anod zgaszenie kolumn<br />KOLPORT1 = 0;// stan niski na kazdy port anod (PORT D) zgaszenie kolumn<br /><br />}<br />void array_test(void){ // test wywietlania wszytskich punktów<br /><br />WPIN = 0xFF;//Rejestr C - katody jako wyjscia (jedynki)<br />WPORT = 0x00;       //Załączenie wszystkich katod<br />KOLPIN =  0xFF;//Rejestr B - anody jako wyjscia (jedynki) od 1 - 4<br />KOLPIN1 = 0xFF;//Rejestr D - anody jako wyjscia (jedynki) od 5 - 7<br /><br />KOLPORT = k1|k2|k3|k4;   //zalaczenie wszystkich anod<br />KOLPORT1 = k5|k6|k7;//zalaczenie wszystkich anod z rejestru D<br /><br />}<br /><br />void narastajacy(void){    //zapalanie 1 kolumny i 1 wiersza, zapalanie 2 kolumny i 2 wiersza itd...<br /><br />WPORT &amp;= ~(wiersze&#91;z&#93;);<br />KOLPORT |= kolumny&#91;z&#93;;<br />if(z&gt;4) KOLPORT1 |= kolumny&#91;z&#93;;<br />z++;<br />if(z&gt;8){<br />clear();<br />z=0;<br />}<br />_delay_ms(200);<br />}<br />void kolejno(void){  // zapalanie kolejno kazdego punktu<br /><br />clear();<br />WPORT &amp;= ~(wiersze&#91;a&#93;);<br />if(z&gt;4){<br />KOLPORT1 |= kolumny&#91;z&#93;;<br />}else KOLPORT |= (kolumny&#91;z&#93;); // w else zeby nie powielały sie wiecace kolumny np. &quot;cofanie&quot;<br /><br />if(z&gt;6){// bo 7 kolumn<br />a++;<br />z=0;<br />}<br />if(a&gt;5) a=1;<br />z++;<br /><br />_delay_ms(100);<br />}<br /><br />ISR(TIMER2_COMP_vect){<br /><br />static uint8_t licznik=0;<br /><br /> if (licznik==0){<br /> WPORT &amp;= ~(1&lt;&lt;w1);<br /> }else<br /> if (licznik==1){<br />WPORT &amp;= ~(1&lt;&lt;w2);<br />}else<br /> if (licznik==2){<br /> WPORT &amp;= ~(1&lt;&lt;w3);<br /> }else<br /> if (licznik==3){<br /> WPORT &amp;= ~(1&lt;&lt;w4);<br /> }else<br /> if (licznik==4){<br /> WPORT &amp;= ~(1&lt;&lt;w5);<br /> }<br /><br />licznik++;<br />if(licznik&gt;4) licznik=0;<br />        clear(); //zgaszenie ekranu<br /><br />}[/syntax]<br /><br />Plik nagłówkowy matryca.h:<br /><br />[syntax=c]#ifndef MATRYCA_H_<br />#define MATRYCA_H_<br /><br />/*Definicje anod - kolumn*/<br /><br />#define KOLPIN DDRB<br />#define KOLPIN1 DDRD<br />#define KOLPORT PORTB<br />#define KOLPORT1PORTD<br /><br />#define k11&lt;&lt;PB2<br />#define k21&lt;&lt;PB3<br />#define k31&lt;&lt;PB4<br />#define k41&lt;&lt;PB5<br />#define k51&lt;&lt;PD7<br />#define k6 1&lt;&lt;PD6<br />#definek71&lt;&lt;PD4<br /><br />/*Definicje katod - wierszy*/<br /><br />#define WPINDDRC<br />#define WPORTPORTC<br /><br />#define w11&lt;&lt;PC5<br />#define w21&lt;&lt;PC4<br />#define w31&lt;&lt;PC3<br />#define w41&lt;&lt;PC2<br />#define w51&lt;&lt;PC1<br /><br />void array_init(void);<br />void array_init_m(void);<br />void setpixel(uint8_t x, uint8_t y);<br />void clear(void);<br />void array_test(void);<br /><br />//*********Efekty********<br /><br />void narastajacy(void);<br />void kolejno(void);<br /><br />#endif /* MATRYCA_H_ */[/syntax]<br /><br /><br /><br />Problem jest taki ze dalej zapalają sie dodatkowe punkty, czy moglibyscie sprawdzic procedure multiplkeksowanie i ogolnie kod, co jest zle.. bo ja juz wymiekam..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 19 sty 2014, o 17:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-13T22:38:18+01:00</updated>
<published>2014-01-13T22:38:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64947#p64947</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64947#p64947"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64947#p64947"><![CDATA[
<div class="quotetitle">Atmegowiec napisał(a):</div><div class="quotecontent"><br />Czego może dotyczyć warring:<br /><br />Kod:<br />matryca.c:31:1: warning: return type defaults to 'int'<br />../matryca.c: In function 'ISR':<br />../matryca.c:31:1: warning: type of '__vector_3' defaults to 'int'<br />../matryca.c:45:1: warning: control reaches end of non-void function<br /></div><br />brakuje:<br />[syntax=c]#include &lt;avr/interrupt.h&gt;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 13 sty 2014, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-13T22:35:41+01:00</updated>
<published>2014-01-13T22:35:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64945#p64945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64945#p64945"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64945#p64945"><![CDATA[
mam rozpisane inne funkcje realizowane w programie<br /><br />[syntax=c](...)<br />void array_test(void){<br /><br />WPIN = 0xFF;//Rejestr C - katody jako wyjscia (jedynki)<br />WPORT = 0x00;       //Załączenie wszystkich katod<br />KOLPIN =  0xFF;//Rejestr B - anody jako wyjscia (jedynki) od 1 - 4<br />KOLPIN1 = 0xFF;//Rejestr D - anody jako wyjscia (jedynki) od 5 - 7<br /><br />KOLPORT = k1|k2|k3|k4;<br />KOLPORT1 = k5|k6|k7;<br /><br />}<br />ISR(TIMER2_COMP_vect){<br /><br />(...)<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 13 sty 2014, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-01-13T22:07:52+01:00</updated>
<published>2014-01-13T22:07:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64939#p64939</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64939#p64939"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64939#p64939"><![CDATA[
Co masz w linii wcześniejszej przed makrem ISR<br />może zrób Clean projektu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 13 sty 2014, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-13T21:53:27+01:00</updated>
<published>2014-01-13T21:53:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64935#p64935</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64935#p64935"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64935#p64935"><![CDATA[
<div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />Jeśli chodzi o błąd to wygląda na to ,że nie masz tych zmiennych zadeklarowanych<br />lub nie dołączyłeś pliku z deklaracjami<br /></div><br /><br />zadeklarowałem zmienna w pliku nagłówkowym który dołączyłem poprzez include &quot;matryca.h&quot;<br />Czego może dotyczyć warring:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">matryca.c:31:1: warning: return type defaults to 'int'<br />../matryca.c: In function 'ISR':<br />../matryca.c:31:1: warning: type of '__vector_3' defaults to 'int'<br />../matryca.c:45:1: warning: control reaches end of non-void function</div><br /><br />i stawia warring przy nawiasach klamrowych w przerwaniu<br /><br />[syntax=c]ISR(TIMER2_COMP_vect){ //&lt;-- tu warring<br /><br />static uint8_t licznik = 1;<br /><br />if(licznik==1) WPORT = wiersz1;<br />else if (licznik==2) WPORT = wiersz2;<br />else if (licznik==4) WPORT = wiersz3;<br />else if (licznik==8) WPORT = wiersz4;<br />else if (licznik==16) WPORT = wiersz5;<br /><br />licznik &lt;&lt;=1;<br /><br />if(licznik&gt;16) licznik=1;<br /><br />}//&lt;-- tu warring[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 13 sty 2014, o 21:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-01-13T21:50:01+01:00</updated>
<published>2014-01-13T21:50:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64934#p64934</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64934#p64934"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64934#p64934"><![CDATA[
Jeśli chodzi o błąd to wygląda na to ,że nie masz tych zmiennych zadeklarowanych<br />lub nie dołączyłeś pliku z deklaracjami<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 13 sty 2014, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-13T21:52:10+01:00</updated>
<published>2014-01-13T21:38:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64931#p64931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64931#p64931"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64931#p64931"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Źle podchodzisz do tematu. Marnujesz pamięć RAM na przechowywanie stałych. Należy zdefiniować sobie tablicę która będzie zawierać to co ma być wyświetlane. Obsługa wyświetlacza wykorzystująca timer powinna stale przepisywać zawartość tablicy na wyświetlacz używając multipleksowania, czyli w danej milisekundzie świeci się 1 kolumna, a w kolejnej następna tak samo jak są sterowane wyświetlacze 7-segmentowe na zestawie ATB.<br /></div><br /><br />Wczoraj z jednym z uzytkowników doszedłem do tego samego wniosku by uzyc multipleksowania, dlatego opierając sie na BB skonfigurowałem timer, i proceduje przerwania. Kod wstawiam ponizej. nie wiem dokonca czemu eclipse przy kompilacji wyrzuca taki warring:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">Building file: ../matryca.c<br />Invoking: AVR Compiler<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF&quot;matryca.d&quot; -MT&quot;matryca.d&quot; -c -o &quot;matryca.o&quot; &quot;../matryca.c&quot;<br />../matryca.c:31:1: warning: return type defaults to 'int'<br />../matryca.c: In function 'ISR':<br />../matryca.c:31:1: warning: type of '__vector_3' defaults to 'int'<br />../matryca.c:45:1: warning: control reaches end of non-void function<br />Finished building: ../matryca.c<br /> <br />Building target: tablice.elf<br />Invoking: AVR C Linker<br />avr-gcc -Wl,-Map,tablice.map -mmcu=atmega8 -o &quot;tablice.elf&quot;  ./LCD/lcd44780.o  ./main.o ./matryca.o   <br />./matryca.o: In function `ISR':<br />matryca.c:(.text+0x2c): undefined reference to `wiersz1'<br />matryca.c:(.text+0x36): undefined reference to `wiersz2'<br />matryca.c:(.text+0x40): undefined reference to `wiersz3'<br />matryca.c:(.text+0x4a): undefined reference to `wiersz4'<br />matryca.c:(.text+0x54): undefined reference to `wiersz5'<br />collect2: ld returned 1 exit status<br />make: *** &#91;tablice.elf&#93; Error 1<br /></div><br /><br />[syntax=c]void array_init(void){<br /><br />WPIN = 0xFF;//Rejestr C - katody jako wyjscia (jedynki)<br />KOLPIN =  0xFF;//Rejestr B - anody jako wyjscia (jedynki) od 1 - 4<br />KOLPIN1 = 0xFF;//Rejestr D - anody jako wyjscia (jedynki) od 5 - 7<br /><br />WPORT = 0xFF;       //Zgaszenie wszystkich katod<br /><br />/* Ustawianie timera dla mulipleksowania tablicy */<br /><br />TCCR2 |= (1&lt;&lt;WGM21);//Tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20);//Preskaler 1024<br />OCR2 = 31;// Wartosc 31 by uzyskac 250 Hz czyli 50 na kazdy wiersz (5 wierszy)<br />TIMSK |= (1&lt;&lt;OCIE2);//Zezwolenie na Compare Match od Timera2<br /><br />}<br /><br />ISR(TIMER2_COMP_vect){<br /><br />static uint8_t licznik = 1;<br /><br />if(licznik==1) WPORT = wiersz1;<br />else if (licznik==2) WPORT = wiersz2;<br />else if (licznik==4) WPORT = wiersz3;<br />else if (licznik==8) WPORT = wiersz4;<br />else if (licznik==16) WPORT = wiersz5;<br /><br />licznik &lt;&lt;=1;<br /><br />if(licznik&gt;16) licznik=1;<br />(...)<br />}[/syntax]<br /><br />&quot;wiersz1&quot; itd to tylko tak na chwile, zeby zobaczyc ogół, w pozniejszym czasie bedą tam odwałania do tablicy, nad która teraz myslę jak zorganizować. Mam matryce 5x7 czyli 5 wierszy i 7 kolumn. Chce sterować wierszami, gdyz jest ich mniej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Jak mozna zorganizować tablicę, by łatwo mozna było zmieniaj jej zawartosc? np w danym miejscu w tablicy umiescic &quot;1&quot; by zapalił sie dany punkt ?, a potem &quot;ifami&quot;: sprawdzac czy danelement jest &quot;1&quot; i wtedy odnosi sie do innej tablicy zawierającej w danym miejscu fragment typu PORTX |= (1&lt;&lt;X1) ?<br /><br />[syntax=c]uint8_t matryca&#91;5&#93;&#91;7&#93;=  {<br /><br />{0,0,0,0,0,0,0},<br />{0,0,1,1,1,0,0},<br />{0,0,1,1,1,0,0},<br />{0,0,1,1,1,0,0},<br />{0,0,0,0,0,0,0}<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 13 sty 2014, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-13T18:31:40+01:00</updated>
<published>2014-01-13T18:31:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64911#p64911</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64911#p64911"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64911#p64911"><![CDATA[
Źle podchodzisz do tematu. Marnujesz pamięć RAM na przechowywanie stałych. Należy zdefiniować sobie tablicę która będzie zawierać to co ma być wyświetlane. Obsługa wyświetlacza wykorzystująca timer powinna stale przepisywać zawartość tablicy na wyświetlacz używając multipleksowania, czyli w danej milisekundzie świeci się 1 kolumna, a w kolejnej następna tak samo jak są sterowane wyświetlacze 7-segmentowe na zestawie ATB.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 13 sty 2014, o 18:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-01-13T07:33:06+01:00</updated>
<published>2014-01-13T07:33:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64865#p64865</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64865#p64865"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64865#p64865"><![CDATA[
<div class="quotetitle">Atmegowiec napisał(a):</div><div class="quotecontent"><br />mam takie pytanie jeszcze, jak sprawić by wyswietlał sie tylko dany punkt ? bo jesli uzyje programu tak jak powyzej to zapalone kolumny w wczesniejszym poleceniu subpixel, dodają sie do kolejnych wierszy co powoduje ze są dodatkowe punkty w danej kolumnie<br /><br />Jak zamaskowac, by tylko te punkty sie pokazywały? W Mirka ksiązce owszem jest napisane o maskowaniu lecz Mirek tam ma z góry okreslone bity które maskuje &quot;0xF0&quot;  a ja przecież nie wiem jakie punkty wyswietlą się<br /></div><br />skoro w funkcji setpixel() masz or &quot;|=&quot; no to znaczy, że do poprzednio zapalonych pikseli dodajesz<br />następne.<br />Jeżeli chcesz mieć tylko nowe to poprzednie musisz &quot;zgasić&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 13 sty 2014, o 07:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-12T23:09:40+01:00</updated>
<published>2014-01-12T23:09:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64858#p64858</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64858#p64858"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64858#p64858"><![CDATA[
mam takie pytanie jeszcze, jak sprawić by wyswietlał sie tylko dany punkt ? bo jesli uzyje programu tak jak powyzej to zapalone kolumny w wczesniejszym poleceniu subpixel, dodają sie do kolejnych wierszy co powoduje ze są dodatkowe punkty w danej kolumnie<br /><br />Jak zamaskowac, by tylko te punkty sie pokazywały? W Mirka ksiązce owszem jest napisane o maskowaniu lecz Mirek tam ma z góry okreslone bity które maskuje &quot;0xF0&quot;  a ja przecież nie wiem jakie punkty wyswietlą się<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 12 sty 2014, o 23:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-12T20:39:29+01:00</updated>
<published>2014-01-12T20:39:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64827#p64827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64827#p64827"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64827#p64827"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Czy wszystko kompiluje Ci się bez problemów? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Funkcje array... i setpixel zwracają wartość a nigdzie jej nie przypisujesz.<br />Zadeklaruj i zdefiniuj je jako void i wyrzuć return 0;<br /></div><br /><br />Nie ma warringów ani innych problemów<br /><br /><div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Skoro masz tak podłączone to:<br />w funkcji setpixel sprawdzasz którą diodę chcesz zapalić zwykły IF<br />i w zależności od tego wybierasz albo KOLPORT albo KOLPORT1<br /></div><br />Dobry pomysł!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 12 sty 2014, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-01-12T20:29:05+01:00</updated>
<published>2014-01-12T20:29:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64826#p64826</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64826#p64826"/>
<title type="html"><![CDATA[Re: Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64826#p64826"><![CDATA[
Czy wszystko kompiluje Ci się bez problemów? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Funkcje array... i setpixel zwracają wartość a nigdzie jej nie przypisujesz.<br />Zadeklaruj i zdefiniuj je jako void i wyrzuć return 0;<br />Makra np PB1, PB2 itd... w swoim rozwinięciu zwracają liczby czyli tu 1, 2<br />A KOLPORT to port B dlatego niezależnie jakie wartości wpiszesz będą zapalać się tylko<br />diody podłączone do portu B<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />A o jakich dziwnych kombinacjach piszesz?<br />Skoro masz tak podłączone to:<br />w funkcji setpixel sprawdzasz którą diodę chcesz zapalić zwykły IF<br />i w zależności od tego wybierasz albo KOLPORT albo KOLPORT1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 12 sty 2014, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-01-12T23:57:56+01:00</updated>
<published>2014-01-12T20:06:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64824#p64824</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64824#p64824"/>
<title type="html"><![CDATA[Uzywanie pinów z innych rejestrów w łatwy sposób - jak ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5529&amp;p=64824#p64824"><![CDATA[
Mam problem, część diod którymi steruję znalazły sie w innym rejestrze, co widac na załączonej poniżej bibliotece. chciałbym w jakiś prosty sposób używać wszystkich diod, tylko problem pojawia sie gdy musze zmienić rejestr, wtedy jakies dziwne kombinacje robić, czy tak jak poniżej definiować rejestr D pod inna nazwą. czy da sie to jakoś zautomatyzować  i używając odpowiedniej diody zmieniał się odpowiedni port ?<br /><br />Matryca jest wykonana według schematu tylko odpowiednio 5 wierszy i 7 kolumn<br /><br /><img src="http://elportal.pl/forum/files/matryca_109.jpg" alt="Obrazek" /><br /><br />Plik *.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;matryca.h&quot;<br /><br />uint8_t wiersze&#91;6&#93; = {0,w1,w2,w3,w4,w5};<br />uint8_t kolumny&#91;8&#93; = {0,k1,k2,k3,k4,k5,k6,k7};<br /><br />void array_init(void){<br /><br />WPIN = 0xFF;//Rejestr C - katodyjako wyjscia (jedynki)<br />KOLPIN =  0xFF;//Rejestr B - anody jako wyjscia (jedynki) od 1 - 4<br />KOLPIN1 = 0xFF;//Rejestr D - anody jako wyjscia (jedynki) od 5 - 7<br /><br />WPORT = 0xFF;       //Zgaszenie wszystkich katod<br />}<br /><br />void setpixel(uint8_t x, uint8_t y){<br />WPORT &amp;= ~(wiersze&#91;x&#93;);<br />if(y&gt;4){<br />KOLPORT1 |= (kolumny&#91;y&#93;);<br />}else KOLPORT = KOLPORT  | (kolumny&#91;y&#93;);<br />}[/syntax]<br /><br />plik *.h<br /><br />[syntax=c]#ifndef MATRYCA_H_<br />#define MATRYCA_H_<br /><br />/*Definicje anod - kolumn*/<br /><br />#define KOLPIN DDRB<br />#define KOLPIN1 DDRD<br />#define KOLPORT PORTB<br />#define KOLPORT1PORTD<br /><br />#define k11&lt;&lt;PB2<br />#define k21&lt;&lt;PB3<br />#define k31&lt;&lt;PB4<br />#define k41&lt;&lt;PB5<br />#define k51&lt;&lt;PD7<br />#define k6 1&lt;&lt;PD6<br />#definek71&lt;&lt;PD4<br /><br />/*Definicje katod - wierszy*/<br /><br />#define WPINDDRC<br />#define WPORTPORTC<br /><br />#define w11&lt;&lt;PC5<br />#define w21&lt;&lt;PC4<br />#define w31&lt;&lt;PC3<br />#define w41&lt;&lt;PC2<br />#define w51&lt;&lt;PC1<br /><br /><br />void array_init(void);<br />void setpixel(uint8_t x, uint8_t y);<br /><br /><br />#endif /* MATRYCA_H_ */[/syntax]<br /><br />main.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;matryca.h&quot;<br /><br />uint8_t x=0,y=0;<br /><br />int main(void){<br /><br />array_init();<br /><br />while(1){<br /><br />setpixel(5,2);<br />setpixel(3,7);<br /><br />}<br />}[/syntax]<br /><br />W powyzszym przykładzie jest problem, gdyz zapalają mi sie dodatkowo  piksele 3x2 i 3x3 ... tez w sumie nie wiem czemu. Pojedyncze użycie fukcji setpixel ustawia odpowiedni piksel, oczywoscie w zakresie gdy nie uzywam diod z  rejestru D<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 12 sty 2014, o 20:06</p><hr />
]]></content>
</entry>
</feed>