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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-30T09:52:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3700&amp;mode</id>
<entry>
<author><name><![CDATA[Burgers]]></name></author>
<updated>2013-07-30T09:52:06+01:00</updated>
<published>2013-07-30T09:52:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43874#p43874</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43874#p43874"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43874#p43874"><![CDATA[
Działa jak dałem volatile w tych dwóch zmiennych zmienianych w przerwaniu jednostki_sekund, dziesiatki_sekund. Dzieki wielkie;) Mam jeszcze pytanie. Antystatyczny napisał, że mój kod jest taki dogóry nogami <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Czy naprawde powinno się w przerwaniu odświeżać i wyświetlać cyfry? W sumie zaczynając zabawe z przerwaniami, czytając co nie co stwierdziłem, że w przerwaniu powinno być możliwie jak najmniej kodu i np. dlatego zrobiłem wyświetlanie w pętli nieskończonej w main. Czy takie rozwiązanie to błąd początkującego? W sumie lepiej żebym teraz się podowiadywał i teraz zaczął poprawiać swoje błędy i pisał kod poprawnie zgodnie z jakimiś umownymi ,,estetycznymi,, normami niż później mając jakieś swoje wypracowane standardy pisanie kodu męczyć się ze zmianami;p I jeszcze Wojetk001 napisałeś, że: ,,Zwróć uwagę że za pierwszym razem działa ci to dobrze bo masz przecież w PORTC na poczatku 0xff więc ~(oxff) to to samo co 0 ale przecież w PORTC może być cokolwiek,,. Tam mam makrodefinicje WYGAS_SEGMENTY która ustawia stan wysoki na PORTC także jest ok:) Dzięki jeszcze raz wszystkim za pomoc i nie omieszkam zaglądać tu częściej <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=1559">Burgers</a> — 30 lip 2013, o 09:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojtek001]]></name></author>
<updated>2013-07-29T21:48:17+01:00</updated>
<published>2013-07-29T21:48:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43864#p43864</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43864#p43864"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43864#p43864"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Wojtek001 napisał(a):</div><div class="quotecontent">Te zmienne globalne (static)<br /></div><br /><br />zmienne te (w przerwaniu) opatrzone specyfikatorem static nie są zmiennymi globalnymi tylko lokalnymi (chociaż tworzone są w obszarze zmiennych globalnych i dzięki temu inicjalizowane są zerem) a to jest różnica spora. Bo widoczne są TYLKO w ramach procedury obsługi przerwania.<br /><br />A to powoduje, że tak jak wspominał wyżej Anty - w ogóle nie ma tu zastosowania specyfikator volatile</div><br />Rzeczywiście, &quot;sprzężenie zwrotne&quot; podziałało  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Po prostu nie pomyślałem ze autor zastosował jakąś dziwną metodę z przepisywaniem do innej zmiennej (i odruchowo napisałem o tamtych zmiennych), i właśnie chodziło o te inne zmienne jak napisano w poście wyżej.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Oprócz tego co napisał Krauser pętla while w której robisz multipleks jest trochę dziwnie napisana (to nie jest twój aktualny problem ale kolejny jeśli się nie mylę):<br /><br />[syntax=c]while(1)<br />        {<br />                PORTA = (~ PORTA) | CYFRA_PIERWSZA;<br />                WYGAS_SEGMENTY;<br />                PORTC = (~ PORTC) | jednostki_sekund;<br />                _delay_ms(1);           //bez tego opoźnienia za szybko przełączają sie cyfry i moje oko nie ogarnia<br />                WYGAS_SEGMENTY;<br />                PORTA = (~ PORTA) | CYFRA_DRUGA;<br />                WYGAS_SEGMENTY;<br />                PORTC = (~ PORTC) | dziesiatki_sekund;<br />                _delay_ms(1);<br />                WYGAS_SEGMENTY;<br />        }[/syntax]<br />IMHO to nie będzie działać przy innych cyfrach .<br />Co to jest za zapis?<br />PORTC = (~ PORTC) | jednostki_sekund;<br />powinno być:<br />PORTC = 0 | jednostki_sekund;<br /><br />Zwróć uwagę że za pierwszym razem działa ci to dobrze bo masz przecież w PORTC na poczatku 0xff więc ~(oxff) to to samo co 0 ale przecież w PORTC może być cokolwiek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=500">Wojtek001</a> — 29 lip 2013, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-29T21:42:02+01:00</updated>
<published>2013-07-29T21:42:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43863#p43863</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43863#p43863"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43863#p43863"><![CDATA[
Podsumowując specyfikator volatile powinny mieć zmienne globalne zmieniane w przerwaniu:<br />jednostki_sekund<br />dziesiatki_sekund<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 29 lip 2013, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-29T21:32:35+01:00</updated>
<published>2013-07-29T21:32:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43860#p43860</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43860#p43860"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43860#p43860"><![CDATA[
<div class="quotetitle">Wojtek001 napisał(a):</div><div class="quotecontent"><br />Te zmienne globalne (static)<br /></div><br /><br />zmienne te (w przerwaniu) opatrzone specyfikatorem static nie są zmiennymi globalnymi tylko lokalnymi (chociaż tworzone są w obszarze zmiennych globalnych i dzięki temu inicjalizowane są zerem) a to jest różnica spora. Bo widoczne są TYLKO w ramach procedury obsługi przerwania.<br /><br />A to powoduje, że tak jak wspominał wyżej Anty - w ogóle nie ma tu zastosowania specyfikator volatile<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lip 2013, o 21:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojtek001]]></name></author>
<updated>2013-07-29T21:31:18+01:00</updated>
<published>2013-07-29T21:31:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43859#p43859</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43859#p43859"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43859#p43859"><![CDATA[
nie zauważyłem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=500">Wojtek001</a> — 29 lip 2013, o 21:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojtek001]]></name></author>
<updated>2013-07-29T21:21:23+01:00</updated>
<published>2013-07-29T21:21:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43857#p43857</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43857#p43857"/>
<title type="html"><![CDATA[Re: Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43857#p43857"><![CDATA[
Te zmienne globalne (static) zadeklarowane na początku przerwania powinny być volatile.<br /><br />Czyli tak:<br />       <strong>volatile </strong>static int pomocnicza_glowna;           //raz na poczatku zainicjalizowana zerem<br />       <strong> volatile </strong>static int pomocnicza_jednostki;        //raz na poczatku zainicjalizowana zerem<br />       <strong>volatile</strong> static int pomocnicza_dziesiatki;       //raz na poczatku zainicjalizowana zerem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=500">Wojtek001</a> — 29 lip 2013, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Burgers]]></name></author>
<updated>2013-07-29T20:47:44+01:00</updated>
<published>2013-07-29T20:47:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43853#p43853</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43853#p43853"/>
<title type="html"><![CDATA[Problem z Przerwaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3700&amp;p=43853#p43853"><![CDATA[
Mam pewien problem z obsługą przerwania;/ Chce wyświetlać na 2 wyświetlaczach LED powiedzmy ,,stoper,,. zaczynamy od zera i co sekunde zmieniamy i dochodzimy ze na jednym (tym bardziej z lewej) jest cyfra 5, a na drugim (prawym) cyfra 9, czyli liczba 59 i nastepuje wyzerowanie i od nowa naliczamy. Napisałem kod, będąc dumny z niego (gdyż rozpoczynam dopiero programowanie mikrokontrolerów) nieco musiałem sie rozczarować gdyż cały czas na dwóch wyświetlaczach widnieją cyfry 0. Tak jakby nie wykonywane było przerwanie. Wie ktoś gdzie popełniłem błąd? Bo przyznam szczerze że nie mam juz siły walczyc z tym kodem;p<br />Oto kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;//do obsługi przerwań<br />#include &lt;util/delay.h&gt;<br /><br />#define LICZBA_ZERO (1&lt;&lt;PC6) | (1&lt;&lt;PC7)<br />#define LICZBA_JEDEN (1&lt;&lt;PC0) | (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) | (1&lt;&lt;PC6)| (1&lt;&lt;PC7)<br />#define LICZBA_DWA (1&lt;&lt;PC2) | (1&lt;&lt;PC5) | (1&lt;&lt;PC7)<br />#define LICZBA_TRZY (1&lt;&lt;PC4) | (1&lt;&lt;PC5) | (1&lt;&lt;PC7)<br />#define LICZBA_CZTERY (1&lt;&lt;PC0) | (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC7)<br />#define LICZBA_PIEC (1&lt;&lt;PC1) | (1&lt;&lt;PC4) | (1&lt;&lt;PC7)<br />#define LICZBA_SZESC (1&lt;&lt;PC1) | (1&lt;&lt;PC7)<br />#define LICZBA_SIEDEM (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) | (1&lt;&lt;PC6) | (1&lt;&lt;PC7)<br />#define LICZBA_OSIEM (1&lt;&lt;PC7)<br />#define LICZBA_DZIEWIEC (1&lt;&lt;PC4) | (1&lt;&lt;PC7)<br /><br />#define PINY_SEGMENTOW (1&lt;&lt;PC0) | (1&lt;&lt;PC1) | (1&lt;&lt;PC2) | (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) | (1&lt;&lt;PC6)| (1&lt;&lt;PC7)//definicja pinow do ktorych podlaczone sa segmenty<br />#define WYGAS_SEGMENTY PORTC = PORTC | PINY_SEGMENTOW//stan wysoki na wszystkich pinach<br /><br />#define CYFRA_PIERWSZA (1&lt;&lt;PA1) | (1&lt;&lt;PA2) | (1&lt;&lt;PA3)//stan niski na pierszym pinie<br />#define CYFRA_DRUGA(1&lt;&lt;PA0) | (1&lt;&lt;PA2) | (1&lt;&lt;PA3)//stan niski na drugim pinie<br /><br />void ustawienie_TIMER0(void)<br />{<br />TCCR0 |= (1&lt;&lt;WGM01);//tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00);//preskaler = 1024<br />OCR0 = 78;// podział przez 78<br />TIMSK |= (1&lt;&lt;OCIE0);//zezwolenie na przerwanie Compare Match<br />}<br /><br />uint8_t jednostki_sekund = 0b11000000;//przy rozpoczeciu cyfra 0<br />uint8_t dziesiatki_sekund = 0b11000000;  //przy rozpoczeciu cyfra 0<br />uint8_t liczby&#91;10&#93;={LICZBA_ZERO, LICZBA_JEDEN, LICZBA_DWA, LICZBA_TRZY, LICZBA_CZTERY, LICZBA_PIEC, LICZBA_SZESC, LICZBA_SIEDEM, LICZBA_OSIEM, LICZBA_DZIEWIEC};<br /><br />ISR(TIMER0_COMP_vect)//przerwanie<br />{//wchodzimy 100 razy na sekunde<br />static int pomocnicza_glowna;//raz na poczatku zainicjalizowana zerem<br />static int pomocnicza_jednostki;//raz na poczatku zainicjalizowana zerem<br />static int pomocnicza_dziesiatki;//raz na poczatku zainicjalizowana zerem<br /><br />if(pomocnicza_glowna &lt; 100)pomocnicza_glowna++;//mamy przerwanie co 10ms wiec zeby było co sekunde ta pętla jest<br />else<br />{<br />if(pomocnicza_jednostki &lt; 10)<br />{<br />jednostki_sekund = liczby&#91;pomocnicza_jednostki&#93;;<br />dziesiatki_sekund = liczby&#91;pomocnicza_dziesiatki&#93;;<br />pomocnicza_jednostki++;<br />}<br />else<br />{<br />pomocnicza_jednostki = 0;<br />pomocnicza_dziesiatki++;<br />jednostki_sekund = liczby&#91;pomocnicza_jednostki&#93;;<br />dziesiatki_sekund =  liczby&#91;pomocnicza_dziesiatki&#93;;<br />pomocnicza_jednostki++;<br />}<br />if(pomocnicza_dziesiatki == 5 &amp;&amp; pomocnicza_jednostki == 9)<br />{<br />pomocnicza_dziesiatki = 0;<br />pomocnicza_jednostki = 0;<br />}<br />pomocnicza_glowna = 0;<br />}<br />}<br /><br />int main(void)<br />{<br />DDRC = 0xFF; //wszystkie piny portu C jako wyjscia<br />PORTC = 0xFF; //wygaszam segmenty (1 - nie swieci sie, 0 - swieci sie)<br />DDRA |= (1&lt;&lt;PA0) | (1&lt;&lt;PA1) | (1&lt;&lt;PA2) | (1&lt;&lt;PA3);//4 piny portu A jako wyjscia dla wyswietlaczy<br />PORTA |= (1&lt;&lt;PA0) | (1&lt;&lt;PA1) | (1&lt;&lt;PA2) | (1&lt;&lt;PA3);//wygaszenie 4 wyświetlaczy<br /><br />ustawienie_TIMER0();<br />sei();//włączenie globalnego zezwolenia na przerwania<br /><br />while(1)<br />{<br />PORTA = (~ PORTA) | CYFRA_PIERWSZA;<br />WYGAS_SEGMENTY;<br />PORTC = (~ PORTC) | jednostki_sekund;<br />_delay_ms(1);//bez tego opoźnienia za szybko przełączają sie cyfry i moje oko nie ogarnia<br />WYGAS_SEGMENTY;<br />PORTA = (~ PORTA) | CYFRA_DRUGA;<br />WYGAS_SEGMENTY;<br />PORTC = (~ PORTC) | dziesiatki_sekund;<br />_delay_ms(1);<br />WYGAS_SEGMENTY;<br />}<br />}[/syntax]<br /><br /><span style="color: #BF0000">Kody umieszczamy w znacznikach syntax=c  Anty.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1559">Burgers</a> — 29 lip 2013, o 20:47</p><hr />
]]></content>
</entry>
</feed>