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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-21T17:48:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6084&amp;mode</id>
<entry>
<author><name><![CDATA[atomik1234]]></name></author>
<updated>2014-02-21T17:48:16+01:00</updated>
<published>2014-02-21T17:48:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71388#p71388</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71388#p71388"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem od timera0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71388#p71388"><![CDATA[
Ok. Teraz wszystko jasne. Dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=528">atomik1234</a> — 21 lut 2014, o 17:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-02-21T09:11:42+01:00</updated>
<published>2014-02-21T09:11:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71305#p71305</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71305#p71305"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem od timera0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71305#p71305"><![CDATA[
Pewnie z tego samego powodu co zawsze: <br /><br />[syntax=c]*przel=1;<br />        while(*przel)[/syntax]<br /><br />zostało zoptymalizowane do: <br /><br />[syntax=c]while(1)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 21 lut 2014, o 09:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atomik1234]]></name></author>
<updated>2014-02-20T23:24:33+01:00</updated>
<published>2014-02-20T23:24:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71286#p71286</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71286#p71286"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem od timera0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71286#p71286"><![CDATA[
Zmieniłem ale to jeszcze nie to. Kurczę to pewnie jakiś głupi błąd. Ale jeśli daję volatile to teraz wskaźniki są nie potrzebne. Po to używałem wskaźnika żeby procek sprawdzał za każdym razem wartość zmiennej.<br /><br />Dobra zmieniłem na volatile i wyrzuciłem wskaźniki. Teraz działa. Ale dlaczego nie działało ze wskaźnikami?? <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 18-02-2014<br /> *      Author: tomek<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />#include &quot;LED_Cube.h&quot;<br /><br />#define WYP 2<br />#define timer_start 0<br /><br />int kosc(uint8_t *przel);<br /><br />volatile uint8_t flag=0;<br />volatile uint8_t cnt;<br /><br /><br /><br />int main()<br />{<br />//**************************************KONFIGURACJA PORTOW*************************************<br />DDRD|=(1&lt;&lt;P1)|(1&lt;&lt;P2)|(1&lt;&lt;P3)|(1&lt;&lt;P4);//Port D wyjsciem<br />DDRC|=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);//Port C wyjsciem<br />DDRB|=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);//port B wyjsciem<br /><br />//######## konfiguracja timera ##############<br />TIMSK |= (1&lt;&lt;TOIE0);           //Przerwanie overflow (przepełnienie timera)<br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00); // źródłem CLK, preskaler 1024<br />TCNT0 = timer_start;//          //Początkowa wartość licznika<br />//###########################################<br /><br />sei();//Globalne uruchomienie przerwań<br /><br />PORTB=0;<br />PORTC=0;<br />PORTD=0;<br /><br /><br />while(1)<br />{<br />kosc(&amp;flag);<br />}<br />}<br /><br />//############ Procedura obsługi przerwania od przepełnienia timera ############<br />//przerwanie co 1/30 s<br />ISR(TIMER0_OVF_vect)<br />{<br />  TCNT0 = timer_start;          //Początkowa wartość licznika<br /><br />  cnt++;     //zwiększa zmienną licznik<br />  if(cnt==30)<br />  {<br />  cnt=0;<br />  flag=0;<br />  }<br /><br />}<br />//##############################################################################<br /><br />int kosc(uint8_t *przel)//przel-flaga przelaczana w timerze co okreslony czas<br />{<br />flag=1;<br />while(flag)//pierwsza klatka<br />{<br />PPOZ=(1&lt;&lt;P4);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P3);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P2);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P1);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />}<br />flag=1;<br />while(flag)//druga klatka<br />{<br />PPOZ=(1&lt;&lt;P3);<br />PLED=(1&lt;&lt;LED2)|(1&lt;&lt;LED3);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P2);<br />PLED=(1&lt;&lt;LED2)|(1&lt;&lt;LED3);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=528">atomik1234</a> — 20 lut 2014, o 23:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-20T23:18:25+01:00</updated>
<published>2014-02-20T23:18:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71285#p71285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71285#p71285"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem od timera0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71285#p71285"><![CDATA[
Zmienne cnt i flag powinny być volatile bo używasz ich w przerwaniu i poza nim<br />[syntax=c]volatile uint8_t flag=0;<br />volatile uint8_t cnt;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 20 lut 2014, o 23:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atomik1234]]></name></author>
<updated>2014-02-20T23:08:32+01:00</updated>
<published>2014-02-20T23:08:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71284#p71284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71284#p71284"/>
<title type="html"><![CDATA[Problem z przerwaniem od timera0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6084&amp;p=71284#p71284"><![CDATA[
Witajcie. Piszę sterownik do Led Cube i mam problem z przełączaniem klatek animacji. Wymyśliłem sobie że prędkość przełączania będę sobie regulował za pomocą timera0. Problemem jest to że pali po wgraniu na LEd Cube pali się cały czas pierwsza klatka. <br />Na symulatorze w atmel studio pętle ładnie się przełączają a na procku nie. Proszę o wskazówkę. <br />Problem jest w przełączaniu pętli. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />#include &quot;LED_Cube.h&quot;<br /><br />#define WYP 2<br />#define timer_start 0<br /><br />int kosc(uint8_t *przel);<br /><br />uint8_t flag=0;<br />uint8_t cnt;<br /><br /><br /><br />int main()<br />{<br />//**************************************KONFIGURACJA PORTOW*************************************<br />DDRD|=(1&lt;&lt;P1)|(1&lt;&lt;P2)|(1&lt;&lt;P3)|(1&lt;&lt;P4);//Port D wyjsciem<br />DDRC|=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);//Port C wyjsciem<br />DDRB|=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);//port B wyjsciem<br /><br />//######## konfiguracja timera ##############<br />TIMSK |= (1&lt;&lt;TOIE0);           //Przerwanie overflow (przepełnienie timera)<br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00); // źródłem CLK, preskaler 1024<br />TCNT0 = timer_start;//          //Początkowa wartość licznika<br />//###########################################<br /><br />sei();//Globalne uruchomienie przerwań<br /><br />PORTB=0;<br />PORTC=0;<br />PORTD=0;<br /><br /><br />while(1)<br />{<br />kosc(&amp;flag);<br />}<br />}<br /><br />//############ Procedura obsługi przerwania od przepełnienia timera ############<br />//przerwanie co 1/30 s<br />ISR(TIMER0_OVF_vect)<br />{<br />  TCNT0 = timer_start;          //Początkowa wartość licznika<br /><br />  cnt++;     //zwiększa zmienną licznik<br />  if(cnt==30)<br />  {<br />  cnt=0;<br />  flag=0;<br />  }<br /><br />}<br />//##############################################################################<br /><br />int kosc(uint8_t *przel)//przel-flaga przelaczana w timerze co okreslony czas<br />{<br />*przel=1;<br />while(*przel)//pierwsza klatka<br />{<br />PPOZ=(1&lt;&lt;P4);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P3);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P2);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P1);<br />PLED=(1&lt;&lt;LED1)|(1&lt;&lt;LED2)|(1&lt;&lt;LED3)|(1&lt;&lt;LED4);<br />PRZ=(1&lt;&lt;RZ1)|(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3)|(1&lt;&lt;RZ4);<br />_delay_ms(WYP);<br />}<br />*przel=1;<br />while(*przel)//druga klatka<br />{<br />PPOZ=(1&lt;&lt;P3);<br />PLED=(1&lt;&lt;LED2)|(1&lt;&lt;LED3);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />PPOZ=(1&lt;&lt;P2);<br />PLED=(1&lt;&lt;LED2)|(1&lt;&lt;LED3);<br />PRZ=(1&lt;&lt;RZ2)|(1&lt;&lt;RZ3);<br />_delay_ms(WYP);<br />}<br />}[/syntax]<br /><br />LED_Cube.h<br />[syntax=c]#ifndef LED_CUBE_H_<br />#define LED_CUBE_H_<br /><br /><br /><br />#define PLED PORTB<br />#define DLED DDRB<br />#define LED1 PB1<br />#define LED2 PB2<br />#define LED3 PB3<br />#define LED4 PB4<br /><br />#define PRZ PORTC<br />#define DRZ DDRC<br />#define RZ1 PC0<br />#define RZ2 PC1<br />#define RZ3 PC2<br />#define RZ4 PC3<br /><br />#define PPOZ PORTD<br />#define DPOZ DDRD<br />#define P1 PD0<br />#define P2 PD1<br />#define P3 PD2<br />#define P4 PD3<br /><br />#endif /* LED_CUBE_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=528">atomik1234</a> — 20 lut 2014, o 23:08</p><hr />
]]></content>
</entry>
</feed>