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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-09-13T20:39:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16199&amp;mode</id>
<entry>
<author><name><![CDATA[kertoiP]]></name></author>
<updated>2016-09-13T20:39:54+01:00</updated>
<published>2016-09-13T20:39:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168682#p168682</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168682#p168682"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168682#p168682"><![CDATA[
Wielkie dzięki! Już działa, taki błąd a jednak umknął. Tak to jest jak się za długo gapi na swój kod.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5533">kertoiP</a> — 13 wrz 2016, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-09-13T20:15:28+01:00</updated>
<published>2016-09-13T20:15:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168680#p168680</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168680#p168680"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168680#p168680"><![CDATA[
Witam ponownie.<br /><br /><div class="quotetitle">kertoiP napisał(a):</div><div class="quotecontent"><br />Pozostałość po wcześniejszych testach, już poprawione. Chodzi o to, że gdy włączony jest timer0 tzn gdy TIMSK |= (1&lt;&lt;OCIE0A) to funkcja ms() odmierzająca czas nie działa, program wiesza się na jej pierwszym spotkaniu, a przecież to powinny być dwie niezwiązane ze sobą rzeczy, skoro to timer1 odpowiada za tą funkcję.<br /></div><br /><br />No... w końcu załapałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />.<br /><br />Przecież w ostatnim kodzie, który zaprezentowałeś nie masz procedury obsługi przerwania od compare match dla timera 0, a przecież te przerwania występują, bo...<strong> je włączyłe</strong>ś.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 13 wrz 2016, o 20:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kertoiP]]></name></author>
<updated>2016-09-13T19:32:41+01:00</updated>
<published>2016-09-13T19:32:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168676#p168676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168676#p168676"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168676#p168676"><![CDATA[
Pozostałość po wcześniejszych testach, już poprawione. Chodzi o to, że gdy włączony jest timer0 tzn gdy TIMSK |= (1&lt;&lt;OCIE0A) to funkcja ms() odmierzająca czas nie działa, program wiesza się na jej pierwszym spotkaniu, a przecież to powinny być dwie niezwiązane ze sobą rzeczy, skoro to timer1 odpowiada za tą funkcję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5533">kertoiP</a> — 13 wrz 2016, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-09-13T19:23:31+01:00</updated>
<published>2016-09-13T19:23:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168674#p168674</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168674#p168674"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168674#p168674"><![CDATA[
Witam,<br /><br />masz w kodzie:[syntax=c]ADCSRB |= (1&lt;&lt;ADTS1);<br />ADCSRB |= (1&lt;&lt;ADTS2);              //Przerwanie pochodza od timera0[/syntax]<br /><br />a powinno być:<br />[syntax=c]ADCSRB |= (1&lt;&lt;ADTS1);<br />ADCSRB |= (1&lt;&lt;ADTS0);              //Przerwanie pochodza od timera0[/syntax]<br /><br />Reszty w sumie dokładnie nie sprawdzałem.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 13 wrz 2016, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kertoiP]]></name></author>
<updated>2016-09-13T18:33:56+01:00</updated>
<published>2016-09-13T18:33:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168672#p168672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168672#p168672"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168672#p168672"><![CDATA[
Dodałem odczyt z ADC który ma się wykonywać co ok. 10ms wyzwalany porównaniem z rejestrem OC0A timera0. Do tego funkcja która powinna pozwolić odczekać określoną liczbę ms. Niestety dioda nie chcę migać, jest ciągle wyłączona. Nie mam już najmniejszego pojęcia co to może być. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED (1&lt;&lt;PB1)<br />#define LED_ON PORTB |= LED<br />#define LED_OFF PORTB &amp;= ~LED<br /><br />volatile uint16_t timer1;<br /><br />/* Inicjalizacje */<br />void PIN_Init(void)<br />{<br />DDRB|=LED;<br />PORTB&amp;=~LED;<br /><br />DDRB&amp;=~(1&lt;&lt;PB3);<br />PORTB|=(1&lt;&lt;PB3);<br />}<br />void Timer_Init()<br />{<br />//Timer 0<br />TCCR0A |= (1&lt;&lt;WGM01);        //Tryb CTC<br />TCCR0B |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00);//Preskaler 1024<br />TIMSK |= (1&lt;&lt;OCIE0A);               //Zezwolenie na przerwania<br />OCR0A = 79;       //Przerwanie co 10ms<br /><br />//Timer 1<br />TCCR1 |= (1&lt;&lt;CTC1);        //Zeruje licznik po zrownaniu z OCR1C<br />TCCR1 |= (1&lt;&lt;CS12)|(1&lt;&lt;CS11)|(1&lt;&lt;CS10);//Preskaler 64<br />TIMSK |= (1&lt;&lt;OCIE1A);     //Zezwolenie na przerwanie<br />OCR1C = 126;                                          //Przerwanie co 1ms<br />}<br />void ADC_Init()<br />{<br />             //Vcc jako napiecie odniesienia<br />ADMUX |= (1&lt;&lt;MUX1) | (1&lt;&lt;MUX0);    //PB3<br /><br />ADCSRA |= (1&lt;&lt;ADEN);               //Wlaczenie ADC<br /><br />ADCSRA |= (1&lt;&lt;ADSC);               //Wykonanie pomiaru<br /><br />ADCSRA |= (1&lt;&lt;ADPS2);<br />ADCSRA |= (1&lt;&lt;ADPS1);<br />ADCSRA |= (1&lt;&lt;ADPS0);       //Preskaler 128 - f = 62.5kHz<br /><br />ADCSRA |= (1&lt;&lt;ADATE);              //Wlaczenie ADC przez przerwanie<br /><br />ADCSRB |= (1&lt;&lt;ADTS1);<br />ADCSRB |= (1&lt;&lt;ADTS2);              //Przerwanie pochodza od timera0<br />}<br /><br />void us(uint16_t time)<br />{<br /><br />  for (uint16_t i = 0; i &lt; time; i++)<br />  {<br />      __asm__ __volatile__ (&quot;nop&quot;);<br />  }<br />}<br /><br />void ms(uint16_t time)<br />{<br />timer1 = 0;<br />while(timer1 &lt; time);<br />}<br /><br /><br />/* Przerwania */<br />ISR(TIMER1_COMPA_vect)<br />{<br />timer1++;<br />}<br /><br /><br />int main(void)<br />{<br />// Inicjalizacja wejść<br />PIN_Init();<br /><br />// Inicjalizacja timera<br />Timer_Init();<br /><br />// Inicjalizacja ADC<br />ADC_Init();<br /><br />// Zezwolenie na przerwania<br />sei();<br /><br />LED_OFF;<br /><br />// Petla glowna programu<br />while(1)<br />{<br />ms(1000);<br />LED_ON;<br />ms(1000);<br />LED_OFF;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5533">kertoiP</a> — 13 wrz 2016, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2016-09-13T18:31:17+01:00</updated>
<published>2016-09-13T18:31:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168671#p168671</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168671#p168671"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168671#p168671"><![CDATA[
A to jakiś problem zmieniać rejestr?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 13 wrz 2016, o 18:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kertoiP]]></name></author>
<updated>2016-09-13T15:43:31+01:00</updated>
<published>2016-09-13T15:43:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168667#p168667</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168667#p168667"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168667#p168667"><![CDATA[
Rzeczywiście, po zmienieniu preskalera timera0 na 1024 wygląda to o wiele lepiej. Użyłbym PWM, gdyby nie to, że potrzebuję różnych częstotliwości.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5533">kertoiP</a> — 13 wrz 2016, o 15:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2016-09-13T15:07:26+01:00</updated>
<published>2016-09-13T15:07:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168664#p168664</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168664#p168664"/>
<title type="html"><![CDATA[Re: Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168664#p168664"><![CDATA[
Bo do opóźnień które ty wprowadzasz dodają się opóźnienia związane z obsługa przerwania (oprócz samego kodu przerwania jest jeszcze prolog i epilog) które jest wywoływane 200x w ciągu jednego obiegu pętli. Pomyśl nad wykorzystaniem sprzętowego PWM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 13 wrz 2016, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kertoiP]]></name></author>
<updated>2016-09-13T14:58:23+01:00</updated>
<published>2016-09-13T14:58:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168663#p168663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168663#p168663"/>
<title type="html"><![CDATA[Attiny25 problem z timerem0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16199&amp;p=168663#p168663"><![CDATA[
Mikrokontroler to Attiny25 pracujący na wewnętrznym oscylatorze 8MHz.<br /><br />Potrzebuję funkcji opóźnień rzędu mikrosekund. Do tego celu napisałem następujący kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED (1&lt;&lt;PB1)<br />#define LED_ON PORTB |= LED<br />#define LED_OFF PORTB &amp;= ~LED<br /><br />volatile uint16_t timer0;<br />volatile uint16_t timer1;<br /><br />/* Inicjalizacje */<br />void PIN_Init(void)<br />{<br />DDRB|=LED;<br />PORTB&amp;=~LED;<br />}<br />void Timer_Init()<br />{<br />//Timer 1<br />TCCR1 |= (1&lt;&lt;CTC1);   //Zeruje licznik po zrownaniu z OCR1C<br />TCCR1 |= (1&lt;&lt;CS13)|(1&lt;&lt;CS11);     //Preskaler 512<br />TIMSK |= (1&lt;&lt;OCIE1A);          //Zezwolenie na przerwanie<br />OCR1C = 155;                               //Przerwanie co ok 10ms<br /><br />//Timer 0<br />TCCR0A |= (1&lt;&lt;WGM01);           //Tryb CTC<br />TCCR0B |= (1&lt;&lt;CS01);            //Preskaler 8<br />TIMSK |= (1&lt;&lt;OCIE0A);                  //Zezwolenie na przerwania<br />OCR0A = 2;                  //Przerwanie co 1us<br /><br />}<br /><br /><br />void us(uint16_t time)<br />{<br /><br />  for (uint16_t i = 0; i &lt; time; i++)<br />  {<br />      __asm__ __volatile__ (&quot;nop&quot;);<br />  }<br />}<br /><br /><br />/* Przerwania */<br />ISR(TIMER1_COMPA_vect)<br />{<br />timer1++;<br />}<br />ISR(TIMER0_COMPA_vect)<br />{<br />timer0++;<br />}<br /><br /><br />int main(void)<br />{<br />// Inicjalizacja wejść<br />PIN_Init();<br /><br />// Inicjalizacja timera<br />Timer_Init();<br /><br />// Zezwolenie na przerwania<br />sei();<br /><br />LED_OFF;<br /><br />// Petla glowna programu<br />while(1)<br />{<br />LED_ON;<br />us(12);<br />LED_OFF;<br />us(188);<br />}<br />}[/syntax]<br /><br />Przy okazji znajdują się tam przerwania od timera1 do następnej części programu. Na wyjściu pinu LED powinien być PWM o wypełnieniu 6% i f = 5kHz. I owszem jest ale tylko gdy wyłączę preskaler w timerze0. Timer1 w żaden sposób nie wpływa na parametry przebiegu wyjściowego. Nie mogę się doszukać problemu w datasheecie, tzn jaki wpływ ma preskaler timera0 na pracę reszty układu. Możliwe też, że popełniłem gdzieś błąd którego nie widzę. Czy spotkał się ktoś z takim problemem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5533">kertoiP</a> — 13 wrz 2016, o 14:58</p><hr />
]]></content>
</entry>
</feed>