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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-05-10T15:58:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22245&amp;mode</id>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2019-05-10T15:58:38+01:00</updated>
<published>2019-05-10T15:58:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218918#p218918</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218918#p218918"/>
<title type="html"><![CDATA[Re: kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218918#p218918"><![CDATA[
dzięki <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=14082">wojciechgorzolka</a> — 10 maja 2019, o 15:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-05-10T13:06:27+01:00</updated>
<published>2019-05-10T13:06:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218916#p218916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218916#p218916"/>
<title type="html"><![CDATA[Re: kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218916#p218916"><![CDATA[
<div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />tak, tykanie jest w innym pliku, dlatego jest extern.<br /></div><br />To oznacza, że ten plik, gdzie masz definicję zmiennej, nie jest kompilowany.<br /><br />bo dalej masz:<br />[syntax=c]#include &quot;MULTIPLEKS/multipl.h&quot;[/syntax]<br /><br />a zapis:<br />#ifndef MULTIPLEKS_MULTIPLEKS_H_<br />sugeruje, że plik ma końcówkę &quot;multipleks.h&quot; a ty inkludujesz &quot;multipl.h&quot; zatem masz duże pomieszanie z poplątaniem.<br />Powyższy, mylący zapis z #ifndef może powodować, że preprocesor pomija niektóre wpisy, pomimo, że nie widać &quot;wyszarzeń&quot; w IDE.<br />Chyba, że piszesz w innym edytorze dobrze byłoby go wskazać, a tak na slepo trochę.<br /><br />Na próbę zdefiniuj w pliku main.c &quot;volatile uint8_t tykanie&quot;, powinieneś dostać inne błędy, ale może kompilacja przejdzie.<br />Jeśli przejdzie to i tak to nie rozwiąże problemu, ale znaczy się, że bałagan w projekcie jest znacznie większy niż przypuszczam <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=16487">Zealota</a> — 10 maja 2019, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2019-05-10T11:46:29+01:00</updated>
<published>2019-05-10T11:46:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218915#p218915</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218915#p218915"/>
<title type="html"><![CDATA[Re: kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218915#p218915"><![CDATA[
Czy oprócz<br />[syntax=c]extern volatile uint8_t tykanie[/syntax]<br />Masz gdzies też<br />[syntax=c]volatile uint8_t tykanie[/syntax]<br />Bo nigdzie nie widac <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=11828">jez2000</a> — 10 maja 2019, o 11:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2019-05-10T11:37:27+01:00</updated>
<published>2019-05-10T11:37:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218914#p218914</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218914#p218914"/>
<title type="html"><![CDATA[Re: kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218914#p218914"><![CDATA[
tak, tykanie jest w innym pliku, dlatego jest extern. Wczoraj myślałem intensywnie i będę przerabiał kod. Mam już koncepcję, zobaczę co mi z tego wyjdzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Ale dziękuję za podpowiedzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 10 maja 2019, o 11:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2019-05-10T05:24:28+01:00</updated>
<published>2019-05-10T05:24:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218910#p218910</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218910#p218910"/>
<title type="html"><![CDATA[Re: kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218910#p218910"><![CDATA[
A czemu ty dajsz to extern?? Masz w innym pliku zdefiniowaną zmienną tykanie??<br /><br /><br />Poza tym ten warunek <br /><br />[syntax=c]if( tykanie ){ ... }[/syntax]  Będzie się wykonywał <strong>prawie </strong>cały czas bo zmienna tykanie == 0 jest tylko 1/20 tyknięć timera<br /><br />Już lepiej było by może <br />[syntax=c]if(!tykanie ){ ... }[/syntax]<br />Wtedy warunek wykona się jak <span style="color: #0000BF">tykanie==0</span> ale pozostaje jeszcze jeden problem, że pętla znów wykona się wiele razy gdy <span style="color: #0000BF">tykanie == 0</span> bo zmieni się dopiero przy kolejnym tyknięciu timera ( od tyknięcia do tyknięcie pętla główna wykona się wiele razy)<br /><br />A najprosciej chyba bylo by gdyby w przerwaniu zwiejszac te zmienne licznik1 licznik2... a petla glowna niech sobie śmiga bez żadnego delay<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 10 maja 2019, o 05:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2019-05-09T20:23:53+01:00</updated>
<published>2019-05-09T20:23:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218907#p218907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218907#p218907"/>
<title type="html"><![CDATA[kłopot  z flagą w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22245&amp;p=218907#p218907"><![CDATA[
hej. dawno mnie tu nie było. Ale to dlatego,że zająłem się własną edukacją i niestety nie miałem czasu na programowanie uC.<br />Postanowiłem znów zasiąść do zestawy ATB i jest klops. <br />Przerabiam dla ćwiczeń multipleksowanie z poradnika Pawła Kardasia na YT. I mam kłopot z kodem w pętli głównej. Samo multipleksowanie działa mi super. Napisałem dodatkowo kod, który zlicza godziny i minuty. Jeśli w pętli głównej motorkiem napędzającym, a raczej zwalniającym będzie poczciwy delaj, to cyferki pięknie zliczają czas na wyświetlaczu siedmio segmentowym. Kłopot mam jeśli zamiast delaja chcę wrzucić zliczanie z przerwania. Coś źle robię i nie mogę dojść do tego, gdzie robię błąd. Wrzucam kod z delajem w pętli głównej, oraz z flagą z przerwania. Proszę o podpowiedź. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><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 &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;MULTIPLEKS/multipl.h&quot;<br /><br />uint8_t z1;<br />uint8_t z2;<br /><br />int main (void){<br /><br />multipleks_init();<br />//SEGMENTY_PORT &amp;= ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_DP);<br />//ANODY_PORT &amp;= ~(ANODA_1|ANODA_2|ANODA_3|ANODA_4);<br /><br />sei();//zezwolenie na przerwanie<br /><br />//cyfra&#91;0&#93; = 5;<br />//cyfra&#91;1&#93; = 4;<br />//cyfra&#91;2&#93; = 3;<br />//cyfra&#91;3&#93; = 2;<br /><br /><br /><br />//uint8_t z3;<br />//uint8_t z4;<br />uint8_t licznik = 0;<br />uint8_t licznik1 = 0;<br />uint8_t licznik2 = 0;<br />//<br /><br /><br />while(1){<br /><br /><br />licznik++;<br /><br />if( licznik ){<br /> cyfra&#91;3&#93; = licznik;<br /> if (licznik&gt;9){<br /> licznik=0;<br /> cyfra&#91;3&#93; =0;<br />     }<br />//----------------------------------------<br /> if(licznik ==0){<br /> licznik1++;<br /> cyfra&#91;2&#93; = licznik1;<br /> if(licznik1&gt;5){<br /> licznik1=0;<br /> cyfra&#91;2&#93; =0;<br />  }<br />  }<br />//-----------------------------------------<br /> if((licznik1==0)&amp;&amp;(licznik==0)){<br /> licznik2++;<br /> cyfra&#91;1&#93; = licznik2;<br /> if(licznik2&gt;9){<br /> licznik2=0;<br /> cyfra&#91;1&#93; = 0;<br /> }<br /> }<br /><br /><br />}<br />_delay_ms(1000);<br />}<br /><br /><br />}[/syntax]<br /><br />A tytaj koz bez delaja:<br /><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 &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;MULTIPLEKS/multipl.h&quot;<br /><br />uint8_t z1;<br />uint8_t z2;<br /><br />int main (void){<br /><br />multipleks_init();<br />//SEGMENTY_PORT &amp;= ~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_DP);<br />//ANODY_PORT &amp;= ~(ANODA_1|ANODA_2|ANODA_3|ANODA_4);<br /><br />sei();//zezwolenie na przerwanie<br /><br />//cyfra&#91;0&#93; = 5;<br />//cyfra&#91;1&#93; = 4;<br />//cyfra&#91;2&#93; = 3;<br />//cyfra&#91;3&#93; = 2;<br /><br /><br /><br />//uint8_t z3;<br />//uint8_t z4;<br />uint8_t licznik = 0;<br />uint8_t licznik1 = 0;<br />uint8_t licznik2 = 0;<br />//<br /><br /><br />while(1){<br /><br /><br />//licznik++;<br /><br />if( tykanie ){<br /> cyfra&#91;3&#93; = licznik;<br /> if (licznik&gt;9){<br /> licznik=0;<br /> cyfra&#91;3&#93; =0;<br />     }<br />//----------------------------------------<br /> if(licznik ==0){<br /> licznik1++;<br /> cyfra&#91;2&#93; = licznik1;<br /> if(licznik1&gt;5){<br /> licznik1=0;<br /> cyfra&#91;2&#93; =0;<br />  }<br />  }<br />//-----------------------------------------<br /> if((licznik1==0)&amp;&amp;(licznik==0)){<br /> licznik2++;<br /> cyfra&#91;1&#93; = licznik2;<br /> if(licznik2&gt;9){<br /> licznik2=0;<br /> cyfra&#91;1&#93; = 0;<br /> }<br /> }<br /><br /><br />}<br />//_delay_ms(1000);<br />}<br /><br /><br />}[/syntax]<br /><br /><br />oraz obsługa przerwania:<br />[syntax=c]//PROCEDURA OBSŁUGI PRZERWANIA<br />ISR(TIMER0_COMP_vect)<br />{<br />   //zmienna do przełączania kolejno katod wyświetlacza<br />   static uint8_t licznik;<br /><br /><br /><br /><br /><br />   ANODY_PORT = ( ANODY_PORT | MASKA_ANODY );//OPERACJA OROWANIA, WYG. WSZYST. WYŚWIET.<br /><br />   SEGMENTY_PORT = pgm_read_byte( &amp;cyfry&#91;cyfra&#91;licznik&#93;&#93; );//22:35 min poradnika- wyjaśnienie<br /><br />   ANODY_PORT = ( ANODY_PORT &amp; ~MASKA_ANODY ) | ( ~(1&lt;&lt;licznik) &amp; MASKA_ANODY);<br /><br />   licznik++;<br />   if (licznik &gt; 3) {<br />   licznik = 0;}<br /><br />   tykanie++;<br />   if (tykanie&gt;20) {<br />   tykanie=0;}<br /><br /><br />}[/syntax]<br /><br />i kod z deklaracją zmiennej tykanie:<br /><br />[syntax=c]//DEFINICJE PORTU I REJESTRÓW KIERUNKOWYCH DLA SEGMENTÓW WYŚWIETLACZA<br />#ifndef MULTIPLEKS_MULTIPLEKS_H_<br />#define MULTIPLEKS_MULTIPLEKS_H_<br />//DEFINICJE PORTU I REJESTRÓW KIERUNKOWYCH DLA ANOD<br />#define SEGMENTY_PORTPORTA<br />#define SEGMENTY_KIERUNEKDDRA<br /><br />#define ANODY_PORTPORTB<br />#define ANODY_KIERUNEKDDRB<br />//DEFINICJE BITÓW DLA POSZCZEGÓWLNYCH ANOD<br />#define ANODA_1 (1&lt;&lt;PB0)<br />#define ANODA_2 (1&lt;&lt;PB1)<br />#define ANODA_3 (1&lt;&lt;PB2)<br />#define ANODA_4 (1&lt;&lt;PB3)<br /><br />#define MASKA_ANODY (ANODA_1 | ANODA_2 | ANODA_3 | ANODA_4)<br /><br />//definicje bitów dla poszczególnych segmentów LED<br />#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />#define SEG_E (1&lt;&lt;4)<br />#define SEG_F (1&lt;&lt;5)<br />#define SEG_G (1&lt;&lt;6)<br />#define SEG_DP (1&lt;&lt;7)<br /><br />extern uint8_t cyfra&#91;4&#93;;<br />extern volatile uint8_t tykanie;   //&lt;----------deklaracja zmiennej tykanie<br /><br />void multipleks_init( void );<br /><br />#endif //MULTIPLEKS_MULTIPLEKS_H_[/syntax]<br /><br />A tutaj błąd z konsoli z błędami:<br />[syntax=c]./MULTIPLEKS/multipl.o: In function `__vector_10':<br />multipl.c:(.text.__vector_10+0x64): undefined reference to `tykanie'<br />multipl.c:(.text.__vector_10+0x6a): undefined reference to `tykanie'<br />multipl.c:(.text.__vector_10+0x6e): undefined reference to `tykanie'<br />multipl.c:(.text.__vector_10+0x76): undefined reference to `tykanie'<br />./main.o: In function `main':<br />main.c:(.text.startup.main+0xc): undefined reference to `tykanie'<br />collect2.exe: error: ld returned 1 exit status<br />make: *** &#91;zegarek_nareczny.elf&#93; Błąd 1[/syntax]<br /><br />Ewidentnie jest coś nie tak ze zmienną tykanie. Niestety nie wiem w czym rzecz.<br /><br /><br /><br />edytuję post. <br />Już mi się coś rozjaśniło po rozmowie z Darkiem. CHyba to ogarnę <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=14082">wojciechgorzolka</a> — 9 maja 2019, o 20:23</p><hr />
]]></content>
</entry>
</feed>