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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-05T20:52:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=13132&amp;mode</id>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-10-05T20:52:26+01:00</updated>
<published>2015-10-05T20:52:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141580#p141580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141580#p141580"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141580#p141580"><![CDATA[
No normalnie w pętli wyświetlać i jeszcze oflagować, żeby odciążyć procesor (chociaż w tym konkretnym przypadku to raczej bez różnicy). I jeszcze zauważyłem, że ten argument funkcji to wogle nie tak (albo mi się tak wydaje). Może wogle zrób funkcję bez argumentu skoro tablica jest globalna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 5 paź 2015, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-10-05T20:50:27+01:00</updated>
<published>2015-10-05T20:50:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141577#p141577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141577#p141577"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141577#p141577"><![CDATA[
Do funkcji nie da się przekazać całej tablicy. Zawsze przekazywany jest adres/wskaźnik tablicy. Rozmiaru nie da się przekazać. Ja robię to w ten sposób:<br />[syntax=c]void wys_obraz( char * tab, uint8_t rows, uint8_t cols){<br />        for(uint8_t i = 0; i &lt; rows; ++i)<br />        {<br />           for(uint8_t j = 0; j &lt; cols; ++j)<br />           {<br />              wys_znak(i, j, *(tab + i * cols + j) ); //tab&#91;i&#93;&#91;j&#93;<br />           }<br />        }<br />}[/syntax]<br />Wywołanie funkcji w ten sposób jak to robisz jest błędne, bo należy do funkcji przekazać wskaźnik do tablicy lub adres elementu [0][0], a ty przekazujesz wartość elementu z poza tablicy bo ostatni element to [1][15].<br />Należy to zrobić tak:<br />[syntax=c]wys_obraz(tab_wys, 2, 16);[/syntax]<br />lub<br />[syntax=c]wys_obraz(&amp;tab_wys&#91;0&#93;&#91;0&#93;, 2, 16);[/syntax]<br /><br />lcd_cls nie używaj, bo będziesz miał migotanie wyświetlacza, a skoro tablicę zmieniasz w programie i całą wyświetlasz to nowa zawartość zastąpi starą.<br /><br />Jak chcesz używać kodów ascii to możesz pisać wprost używając 'literka':<br />[syntax=c]char tab_wys&#91;2&#93;&#91;16&#93; ={<br />{'A','A'},<br />{'A','A'}<br />};[/syntax]<br />Teraz masz i 0x41 i 41 a to dwie rożne wartości.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 paź 2015, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pito86]]></name></author>
<updated>2015-10-05T20:23:56+01:00</updated>
<published>2015-10-05T20:23:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141574#p141574</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141574#p141574"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141574#p141574"><![CDATA[
Tak to moje dzieło, biblioteka klawiaturki też. W mojej dotychczasowej nauce musiałem przegapić flagi i jak je stosować. Właśnie próbuję uzupełnić wiedzę.<br />Jak byś mógł jeszcze napisać czemu umieszczenie czyszczenia i wyświetlania to kiepski pomysł. Na tej samej zasadzie napisałem chodzącego ludzika omijającego przeszkody i jak do tond to najlepszy system wyświetlania jaki wymyśliłem(mimo to zdaje sobie sprawę z tego jak bardo jestem początkujący).<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br /><div class="quotetitle">Rafał555 napisał(a):</div><div class="quotecontent"><br />Operacje na wyświetlaczu są strasznie długie i umieszczenie ich w przerwaniu spowoduje jakieś jajca na pewno.<br />Nie opanowałem jeszcze definicji tablic dwuwymiarowych, ale deklarujesz 16 elementów, a definiujesz 15. Jako argument funkcji używasz 16-go elementu i może to też jest efektem tego, że program działa inaczej niż oczekujesz.<br /></div> <br />Wielkie dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> poprawiłem już i niestety to nie jest przyczyną.<br />To jak najlepiej wyświetlać jeśli nie w przerwaniach?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10182">Pito86</a> — 5 paź 2015, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-10-05T20:17:16+01:00</updated>
<published>2015-10-05T20:17:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141573#p141573</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141573#p141573"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141573#p141573"><![CDATA[
Operacje na wyświetlaczu są strasznie długie i umieszczenie ich w przerwaniu spowoduje jakieś jajca na pewno.<br />Nie opanowałem jeszcze definicji tablic dwuwymiarowych, ale deklarujesz 16 elementów, a definiujesz 15. Jako argument funkcji używasz 16-go elementu i może to też jest efektem tego, że program działa inaczej niż oczekujesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 5 paź 2015, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2015-10-05T20:11:16+01:00</updated>
<published>2015-10-05T20:11:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141572#p141572</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141572#p141572"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141572#p141572"><![CDATA[
@Pito86 : wiesz zeby Cie nie znechecac - czy ten kod to Twoje dzielo ? Bo jesli nie kojarzysz hasel jak przerwania i timery to moze byc problem zeby Cie naprowadzic na rozwiazanie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 5 paź 2015, o 20:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pito86]]></name></author>
<updated>2015-10-05T19:49:48+01:00</updated>
<published>2015-10-05T19:49:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141569#p141569</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141569#p141569"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141569#p141569"><![CDATA[
Na wyświetlaczu wyświetlają się różne przypadkowe znaki.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Mógł byś podać jakiś przykład w kodzie z opisem, bo nie za bardzo rozumiem jak miał bym to zrobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10182">Pito86</a> — 5 paź 2015, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek_P]]></name></author>
<updated>2015-10-05T19:46:05+01:00</updated>
<published>2015-10-05T19:46:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141568#p141568</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141568#p141568"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141568#p141568"><![CDATA[
Umieszczenie funkcji czyszczenia i wyświetlania danych na LCD w procedurze obsługi przerwania to raczej słaby pomysł <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /> . Zdefiniuj sobie jakąś flagę dla przerwania od Twojego Timera i sprawdzaj ją w pętli głównej. Jeżeli flaga ustawiona to wykonaj funkcje związane z LCD, a następnie wyzeruj flagę;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=290">Piotrek_P</a> — 5 paź 2015, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2015-10-05T19:31:39+01:00</updated>
<published>2015-10-05T19:31:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141565#p141565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141565#p141565"/>
<title type="html"><![CDATA[Re: Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141565#p141565"><![CDATA[
zle spojrzalem na Twoj kod <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ale zeby dobrze zaczac - to czy udalo Ci sie wyswietlic chociaz pojedynczy znak na wyswietlaczu ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 5 paź 2015, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pito86]]></name></author>
<updated>2015-10-05T19:25:50+01:00</updated>
<published>2015-10-05T19:25:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141564#p141564</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141564#p141564"/>
<title type="html"><![CDATA[Wysyłanie tablicy do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13132&amp;p=141564#p141564"><![CDATA[
Witam.<br />Program ma wyświetlać zawartość tablicy tab_wys(tablica wyświetlania) na wyświetlaczu hd44780 2x16(dla testów mają to być same literki A). Niestety wyświetlają się jakieś bzdury:(. Problem leży prawdopodobnie przy przesyle tablicy do funkcji ale nie wiem jaki.<br />Jeśli by ktoś był na tyle miły i zwrócił mi uwagę jak bardzo banalny błąd robię był bym wdzięczny:)<br />Mile widziana również krytyczne opinie z sugestiami co do reszty kodu.<br /><br />Program pisany na atmege8pu.<br /><br /><br />No to kodzik.<br /><br />main.c<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 8 wrz 2015<br /> *      Author: PITO<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;lcd44780.h&quot;   //biblioteka wyświetlacza<br />#include &quot;klaw.h&quot;//biblioteka obsługi klawiatórki<br /><br />#define kl2 18<br />#define kl5 34<br />#define kl4 33<br />#define kl6 36<br /><br />volatile uint8_t klaw;//zmienna w której zapisany jest stan klawiatóry<br />uint8_t x = 5, y = 1,j = 0;<br />uint8_t obx = 14, oby = 0;<br />//char znak =  0xff;<br />char tab_wys&#91;2&#93;&#91;16&#93; ={<br />{0x41,0x41,0x41,0x41,0x41,41,41,41,41,41,41,41,41,41,41},//tablica ze znakami ascii (same literki A)<br />{41,41,41,41,0x41,41,41,41,41,41,41,41,41,41,41},<br />};<br /><br /><br />void wys_znak(uint8_t y, uint8_t x, char znak);<br />void wys_obraz( char tab_wys&#91;2&#93;&#91;16&#93;);<br /><br />int main(void)<br />{<br /><br />lcd_init();//inicjalizacja wyświetlacza<br />init_klaw();//inicjalizacja klawiatóry<br /><br />sei();                                  // włączenie globalnego zezwolania na przerwania<br />TCNT0  = 0xff;<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);           // ustawiam preskaler na 1024<br />TIMSK |= (1&lt;&lt;TOIE0);                    // włączenie przerwania od przepełnienia licznika<br /><br /><br />while(1){//kod programu<br /><br /><br />}<br />}<br /><br />//*************************************************************<br />// Obsługa przerwań<br />ISR(TIMER0_OVF_vect)<br />{<br />   klaw = sprawdz_kl(); //sprawdzanie czy klawisz wciśnięty<br />   lcd_cls();    //czyszczenie ekranu<br /><br />   wys_obraz(tab_wys&#91;2&#93;&#91;16&#93;); //Ma wyświetlic zawartosc tablicy.<br /><br />}<br />//____________Funkcja wyświetlająca obraz____________________<br />void wys_obraz( char tab_wys&#91;2&#93;&#91;16&#93;){<br />uint8_t a = 0, b = 1;//zmienne do zapisu do funkcji<br />char znak;//zmienna do zapisu znaku w ascii<br />for(uint8_t i = 1;i&lt;32;i++){//pętla do wyświetlenia każdego znaku z tablicy tab_wys<br /><br />if(i&gt;16)a = 1;//jesli i&gt;15 zapisuje w drógiej lini<br />b++;<br />if(b&gt;16)b = 1;//<br />znak = tab_wys&#91;a&#93;&#91;b&#93;;//przypisanie do zmiennej znak odpowiedniego adresu zmiennej<br />wys_znak(a,b,znak);//wyswietlanie obrazu<br />}<br />}<br />//__________________Funkcja wyswietlajaca wybrany znak na wybranym miejscu______________<br />void wys_znak(uint8_t y, uint8_t x, char znak){<br />lcd_locate(y,x);//pozycja kursora<br />lcd_char(znak);//wyswietlenie znaku z tablicy ascii<br />}[/syntax]<br /><br />klaw.h<br /><br />[syntax=c]/*<br /> * klaw.h<br /> *<br /> *  Created on: 22 wrz 2015<br /> *      Author: PITO<br /> */<br /><br />#ifndef KLAW_H_<br />#define KLAW_H_<br /><br />void init_klaw(void);<br />uint8_t sprawdz_kl(void);<br /><br />//___________Wyjścia_______________<br />#define WY1 (1&lt;&lt;PC4)<br />#define WY2 (1&lt;&lt;PC5)<br />#define WY3 (1&lt;&lt;PB6)<br />#define WY4 (1&lt;&lt;PB7)<br /><br />#define line1_on PORTC &amp;=~(WY1)<br />#define line2_on PORTC &amp;=~(WY2)<br />#define line3_on PORTB &amp;=~(WY3)<br />#define line4_on PORTB &amp;=~(WY4)<br /><br />#define line1_off PORTC |=(WY1)<br />#define line2_off PORTC |=(WY2)<br />#define line3_off PORTB |=(WY3)<br />#define line4_off PORTB |=(WY4)<br /><br />//____________Wejścia_______________<br />#define WE1 (1&lt;&lt;PC0)<br />#define WE2 (1&lt;&lt;PC1)<br />#define WE3 (1&lt;&lt;PC2)<br />#define WE4 (1&lt;&lt;PC3)<br /><br /><br />#endif /* KLAW_H_ */[/syntax]<br /><br />klaw.c<br /><br />[syntax=c]/*<br /> *<br /><br /> *  Created on: 22 wrz 2015<br /> *      Author: PITO<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &quot;klaw.h&quot;<br /><br />void init_klaw(void){<br />DDRC |= (WY1) | (WY2); //Ustawienie portów jako wyjścia(do klawiatóry).<br />DDRB |= (WY3) | (WY4);<br />PORTC |= (WY1) | (WY2); //Podciągnięcie do rezystora.<br />PORTB |= (WY3) | (WY4);<br />PORTC |= (WE1) | (WE2) | (WE3) | (WE4); // Wejścia przycisków.<br /><br />}<br /><br />uint8_t sprawdz_kl(void){<br /><br />uint8_t kl = 0;//Zmienna pomocnicza do zczytywania klawiszy.<br /><br />// Sprawdzenie czy wciśnięty któryś z klawiszy pierwszej lini.<br />line1_on;//Ustawia stan niski na pierwszym pinie.<br />asm(&quot;nop&quot;);//Przeczekanie jednego taktowania zegara.<br />//JAK BY PROGRAM NIE REAGOWAŁ NA KLAWISZE POWIEL JĄ.<br />kl += (~(PINC) &amp; (WE1 | WE2 | WE3 | WE4));//Do zmiennej kl zapisuje bity o wadze 1, 2, 4, 8.<br />if ((~(PINC) &amp; (WE1 | WE2 | WE3 | WE4))) kl = kl + 16;//Do zmiennej kl dodaje bit o wadze 16.<br />line1_off;//Wraca do stanu wysokiego.<br /><br />// Sprawdzenie czy wciśnięty któryś z klawiszy drógiej lini<br />line2_on;<br />asm(&quot;nop&quot;);<br />kl += (~(PINC) &amp; (WE1 | WE2 | WE3 | WE4));<br />if ((~(PINC) &amp; (WE1 | WE2 | WE3 | WE4))) kl = kl + 32;<br />line2_off;<br /><br />// Sprawdzenie czy wciśnięty któryś z klawiszy trzeciej lini<br />line3_on;<br />asm(&quot;nop&quot;);<br />kl += (~(PINC) &amp; (WE1 | WE2 | WE3 | WE4));<br />if ((~(PINC) &amp; (WE1 | WE2 | WE3 | WE4))) kl = kl + 64;<br />line3_off;<br /><br /><br />// Sprawdzenie czy wciśnięty któryś z klawiszy czwartej lini<br />line4_on;<br />asm(&quot;nop&quot;);<br />kl += (~(PINC) &amp; (WE1 | WE2 | WE3 | WE4));<br />if ((~(PINC) &amp; (WE1 | WE2 | WE3 | WE4))) kl = kl + 128;<br />line4_off;<br /><br />return kl;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10182">Pito86</a> — 5 paź 2015, o 19:25</p><hr />
]]></content>
</entry>
</feed>