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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-31T17:21:56+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=13414&amp;mode</id>
<entry>
<author><name><![CDATA[Krystek]]></name></author>
<updated>2015-10-31T17:21:56+01:00</updated>
<published>2015-10-31T17:21:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143928#p143928</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143928#p143928"/>
<title type="html"><![CDATA[Re: Zmienna się nie zwiększa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143928#p143928"><![CDATA[
Tak myślałem, że to coś prostego, zabrakło troszeczkę wiedzy. Dziękuję bardzo <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=1207">Krystek</a> — 31 paź 2015, o 17:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nondzu]]></name></author>
<updated>2015-10-31T17:13:49+01:00</updated>
<published>2015-10-31T17:13:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143927#p143927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143927#p143927"/>
<title type="html"><![CDATA[Re: Zmienna się nie zwiększa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143927#p143927"><![CDATA[
zmienną minuty daj jako statyczną, z każdym wywołaniem funkcji jest ona tworzona na nowo z wartością 0. Pozdrawiam <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=1672">Nondzu</a> — 31 paź 2015, o 17:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krystek]]></name></author>
<updated>2015-10-31T17:03:58+01:00</updated>
<published>2015-10-31T17:03:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143926#p143926</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143926#p143926"/>
<title type="html"><![CDATA[Zmienna się nie zwiększa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13414&amp;p=143926#p143926"><![CDATA[
Napisałem sobie programik który ma na wyświetlaczu 7-segmentowym wyświetlać sekundy i minuty. Jest to wyświetlacz poczwórny i koncepcja jest taka, że dwie pierwsze cyfry mają wyświetlać sekundy a dwie ostatnie minuty. Napisałem sobie funkcje które są odpowiedzialne za wyświetlanie zmiennych na odpowiednich wyświetlaczach. Napisałem tez funkcję która zlicza sekundy i za każdym wyjściem z pętli for ma się inkrementować zmienna &quot;minuty&quot; lecz dzieje się to tylko raz, program wchodzi dalej do pętli for zliczając sekundy, ale minuty pozostają bez zmian. Nie mam już pomysłu jak do tego podejść. Próbowałem różnych sposobów, ale każdy zawodzi. Myślę że to jest coś banalnego i oczywistego ale nie potrafię znaleźć przyczyny. <br /><br />main.c<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 /><br /><br />#include &quot;d_led.h&quot;<br /><br /><br />void zliczanie_2 (void)<br />{<br />uint8_t sekundy,minuty=0 ;<br /><br />for (sekundy=0;sekundy&lt;60;sekundy++)<br />{<br /><br />wyswietl_sekundy(sekundy);<br />_delay_ms(100);<br /><br />}<br /><br />minuty++;<br /><br />wyswietl_minuty(minuty);<br /><br />}<br /><br />int main (void)<br />{<br />//************************INICJALIZACJA*********************<br /><br />d_led_init(); // inicjalizacja wywietlacza multipleksowanego (FUNKCJA)<br />// Testowa inicjalizacja zmiennych oraz liczb<br />// mających wywietlać się na wywietlaczy 7-segmentowym<br /><br />sei(); // włączenie globalnego zezwolenia na przerwania<br /><br />//DDRB &amp;= ~( KEY1_PIN | KEY2_PIN ); //kierunek pinu PB2- wejsciowy<br />//PORTB |= (KEY1_PIN | KEY2_PIN); //podciągnięcie pinu do VCC (wewnętrzny rezystor)<br /><br /><br />while (1)<br />{<br /><br />zliczanie_2();<br /><br />}<br /><br />return 0;<br />}[/syntax]<br /><br />d_led.c<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 /><br />#include &quot;d_led.h&quot;<br />#include &quot;cyferki.h&quot;//definicje wywietlacza i preprocesora<br /><br />/* Definicje zmiennych globalnych przechowywujących cyfry do wywietlenia<br /> * volatile - ponieważ będą wykorzystywane do odczytu i zapisu zarówno<br /> * w przerwaniu i programie głównym. Trzeba więc wyłączyć optymalizację<br /> * dostępu do nich . (Zmienne ulotne)<br /> */<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br />volatile uint8_t cy4;<br /><br /><br />//************Definicja funkcji inicjalizującej pracę z wywietlaczem multipleksowanym*******************<br /><br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF ; // Wszystkie piny portu D jako WYJŚCIA<br />LED_DATA = 0x00 ;     // Wygaszenie wszystkich segmentów - STAN NISKI<br /><br />// 4 PINY PORTU C JAKO WYJŚCIA<br /><br />KATODY_DIR |= CA1 | CA2 | CA3 | CA4 ;<br /><br />// Wygaszenie wszystkich wywietlaczy - KATODY<br /><br />KATODY_PORT |= CA1 | CA2 | CA3 | CA4 ;<br /><br /><br /><br />// USTAWIENIA TIMERA 2<br /><br />TCCR2 |= (1&lt;&lt;WGM21);  // Tryb CTC<br />TCCR2 |= (1&lt;&lt;CS20) | (1&lt;&lt;CS21) | (1&lt;&lt;CS22) ; // Preskaler = 1024<br />OCR2 =3 ;<br />TIMSK |= (1&lt;&lt;OCIE2); //zezwolenie na przerwanie COMPARE MATCH<br />}<br /><br /><br />//// FUNKCJA WYŚWIETLAJĄCA DOWOLNĄ LICBĘ ZE ZMIENNEJ<br /><br />int wyswietl (int liczba)<br />{<br />int jednosci;<br />int dziesiatki;<br />int setki;<br />int tysiace;<br /><br />jednosci =    liczba%10;<br />dziesiatki = (liczba/10)%10;<br />setki =      (liczba/100)%10;<br />tysiace =     liczba/1000;<br /><br /><br />cy1 = cyfry&#91;jednosci&#93;;<br />cy2 = cyfry &#91;dziesiatki&#93;;<br />cy3 = cyfry&#91;setki&#93;;<br />cy4 = cyfry&#91;tysiace&#93;;<br /><br /> return 0;<br /><br />}<br /><br />void wyswietl_sekundy (uint8_t liczba_s)<br />{<br />uint8_t jednosci,dziesiatki;<br /><br />jednosci = liczba_s%10;<br />dziesiatki =(liczba_s/10)%10;<br /><br />cy1 = cyfry&#91;jednosci&#93;;<br />cy2 = cyfry&#91;dziesiatki&#93;;<br /><br />}<br /><br />void wyswietl_minuty (uint8_t liczba_m)<br />{<br />uint8_t j,d;<br /><br />j = liczba_m%10;<br />d =(liczba_m/10)%10;<br /><br />cy3 = cyfry&#91;j&#93;;<br />cy4 = cyfry&#91;d&#93;;<br /><br />}<br /><br /><br /><br /><br />// =================== PROCEDURA OBSŁUGI PRZERWANIA  - COMPARE MATCH ========================================<br /><br /><br />ISR (TIMER2_COMP_vect)<br />{<br />//zmienna do przełaczania kolejno katod wywietlacza<br /><br />static uint8_t licznik=1;<br /><br />//cykliczne przełączanie w każdym przerwaniu katod każdego wywietlacza<br /><br />KATODY_PORT = licznik ;<br /><br />// gdy zapalony wysw.1 podaj stan zmiennej cy1<br />if (licznik==1) LED_DATA = cy1;<br />// gdy zapalony wysw.2 podaj stan zmiennej cy2<br />else if (licznik==2) LED_DATA = cy2;<br />// gdy zapalony wysw.3 podaj stan zmiennej cy3<br />else if (licznik==4) LED_DATA = cy3;<br />// gdy zapalony wysw.4 podaj stan zmiennej cy4<br />else if (licznik==8) LED_DATA = cy4;<br /><br />//operacje cyklicznego przesuwania bitu zapalającego katody w zmiennej licznik<br /><br />licznik &lt;&lt;= 1; // przesunięcie zawartosci bitów licznika o 1 w lewo<br />if (licznik&gt;8) licznik = 1; // jesli licznik wiekszy niz 8 to ustaw na 1<br />}[/syntax]<br /><br />d_led.h<br /><br />[syntax=c]#ifndef D_LED_H_<br />#define D_LED_H_<br /><br />// Definicje portów i pinów wyswietlacza uzywanych dla<br />// ułatwienia w programie jako stałe preprocesora<br /><br />#define LED_DATA      PORTD<br />#define LED_DATA_DIR  DDRD<br />#define KATODY_PORT   PORTC<br />#define KATODY_DIR    DDRC<br /><br />#define KEY1_PIN       (1&lt;&lt;PB2)<br />#define KEY1_ON        !(PINB &amp; KEY1_PIN)<br />#define KEY2_PIN       (1&lt;&lt;PB3)<br />#define KEY2_ON        !(PINB &amp; KEY2_PIN)<br />#define LED_PIN        (1&lt;&lt;PB5)<br />#define LED_DIR        DDRB  |= LED_PIN<br />#define LED_ON         PORTB |= LED_PIN<br />#define LED_OFF        PORTB &amp;= ~LED_PIN<br /><br /><br />#define CA1           (1&lt;&lt;PC3)<br />#define CA2           (1&lt;&lt;PC2)<br />#define CA3           (1&lt;&lt;PC1)<br />#define CA4           (1&lt;&lt;PC0)<br /><br />/* Same DEKLARACJE zmiennych globalnych na potrzeby wykorzystania<br /> * ich w innych plikach projektu<br /> * przydomek extern powoduje , ze te zmienne będą dostępne we<br /> * wszystkich modułach, które dołączą plik d_led.h za pomocą dyrektywy #include<br /> */<br /><br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br />extern volatile uint8_t cy4;<br /><br /><br />// DEFINICJE WYŚWIETLANYCH CYFR<br /><br /><br /><br /><br />// obszar deklaracji funkcji udostępnionych dla innych modułó<br /><br />void d_led_init(void);<br />void odliczanie(void);<br />int wyswietl (int);<br />void wyswietl_sekundy (uint8_t);<br />void wyswietl_minuty (uint8_t);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1207">Krystek</a> — 31 paź 2015, o 17:03</p><hr />
]]></content>
</entry>
</feed>