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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-09-04T20:16:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=50&amp;t=21212&amp;mode</id>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-09-04T20:16:34+01:00</updated>
<published>2018-09-04T20:16:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211356#p211356</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211356#p211356"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211356#p211356"><![CDATA[
A ustawiłeś jeden z pinów portu D w stan wysoki we funkcji inicjującej <strong><em>timer_16bit_init()</em></strong>, tak jak Ci podałem w przykładowym kodzie?<br />Gdybyś tak zrobił to na pewno by działało.<br /><br />Jeśli jeden z pinów wstępnie ustawisz w stan wysoki (np. wewnątrz funkcji <strong><em>timer_16bit_init()</em></strong>)<br /><strong><em>PORTD |= (1&lt;&lt;PD2);</em></strong><br />pozostawiając drugi w stanie niskim, to później instrukcja w procedurze obsługi przerwania<br /><strong><em>PORTD ^= ( (1&lt;&lt;PD2) | (1&lt;&lt;PD3) );</em></strong><br />spowoduje miganie na przemian.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 4 wrz 2018, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bmenot]]></name></author>
<updated>2018-09-04T19:47:30+01:00</updated>
<published>2018-09-04T19:47:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211355#p211355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211355#p211355"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211355#p211355"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />[syntax=c]ISR(TIMER1_COMPA_vect)<br />{<br />    PORTD ^= ( (1&lt;&lt;PD2) | (1&lt;&lt;PD3) );<br />}[/syntax]<br /></div><br /><br />U mnie to nie działa mrugają dwa ledy razem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9341">bmenot</a> — 4 wrz 2018, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-09-02T16:37:56+01:00</updated>
<published>2018-09-02T16:37:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211248#p211248</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211248#p211248"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211248#p211248"><![CDATA[
Podałem Ci sposób (gotowy kod), jak rozwiązać Twój problem. Próbowałem wytłumaczyć, dlaczego rozwiązanie z dwoma przerwaniami jest w tym przypadku gorsze. Jeśli pomimo tego chcesz to zrobić na dwóch przerwaniach (choć ja kompletnie nie rozumiem, z jakiego powodu), to przecież Twój wybór. Zrobisz jak zechcesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 2 wrz 2018, o 16:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bmenot]]></name></author>
<updated>2018-09-02T15:42:40+01:00</updated>
<published>2018-09-02T15:42:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211246#p211246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211246#p211246"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211246#p211246"><![CDATA[
Myślałem nad tym  rozwiązaniem ale jednak wolałbym przez dwa przerwania: TIMER1_COMPA_vect i TIMER1_COMPB_vect.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9341">bmenot</a> — 2 wrz 2018, o 15:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-09-02T14:49:53+01:00</updated>
<published>2018-09-02T14:49:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211244#p211244</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211244#p211244"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211244#p211244"><![CDATA[
Wystarczy Ci jedno przerwanie:<br />[syntax=c]void timer_16bit_init(void)<br />{<br />    DDRB |= (1&lt;&lt;PB1);<br />    DDRB |= (1&lt;&lt;PB2);<br />    <br />    DDRD |= (1&lt;&lt;PD2);<br />    DDRD |= (1&lt;&lt;PD3);<br />    <br />    PORTD |= (1&lt;&lt;PD2);<br />    <br />    TCCR1A |=(1 &lt;&lt; COM1B0);<br />    TCCR1A |=(1 &lt;&lt; COM1A0);<br />    <br />    TCCR1C |= (1&lt;&lt;FOC1A);<br />    <br />    TCCR1B |= (1 &lt;&lt; WGM12) ;<br />    TCCR1B |= (1 &lt;&lt; WGM13) ;<br />    <br />    ICR1 = 3905;<br />    <br />    TCCR1B |= (1 &lt;&lt; CS12);<br />    <br />    TIMSK1 |= (1&lt;&lt;OCIE1A);<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />    PORTD ^= ( (1&lt;&lt;PD2) | (1&lt;&lt;PD3) );<br />}[/syntax]<br /><br />Pamiętaj jednak o tych przesunięciach czasowych o których pisałem wcześniej. Nie wiem, do czego ten kod potrzebujesz, ale jeśli na przykład do sterowania mostkiem H, to nie jest to zbyt dobre rozwiązanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 2 wrz 2018, o 14:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bmenot]]></name></author>
<updated>2018-09-02T13:28:12+01:00</updated>
<published>2018-09-02T13:28:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211242#p211242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211242#p211242"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211242#p211242"><![CDATA[
chcę aby pin PD2 był kopią pinu PB1, a pin PD3 był kopią pinu PB2...<br /><br />Piny sprzętowe pracują na przemian tak jak oczekiwałem...<br />Piny programowe (PD2 i PD3) pracują w razem z pinem PB1,<br />Pin PB2 nie udaje się połączyć z jednym z pinów programowych<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9341">bmenot</a> — 2 wrz 2018, o 13:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-09-02T11:06:26+01:00</updated>
<published>2018-09-02T11:06:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211236#p211236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211236#p211236"/>
<title type="html"><![CDATA[Re: [atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211236#p211236"><![CDATA[
Wybacz, ale z Twojego tłumaczenia niewiele zrozumiałem:<br /><div class="quotetitle">bmenot napisał(a):</div><div class="quotecontent"><br />...aby pracowały na przemian <strong>razem z pinami</strong> sprzętowymi <strong>PB1 i PB2</strong>...<br /></div><br /><div class="quotetitle">bmenot napisał(a):</div><div class="quotecontent"><br />Nie udaje się mi to osiągnąć, cały czas przerwania pracują <strong>razem z pinami PB1 lub PB2</strong><br /></div><br /><br />Jeśli oczekujesz pomocy, spróbuj może to jakoś usystematyzować, bo obawiam się, że nie tylko ja mam problem ze zrozumieniem.<br />Spróbuj może w ten sposób:<br /><ol style="list-style-type: decimal"><li>początkowy stan pinów: PB1=x, PB2=x, PD2=x, PD3=x (gdzie x to oczywiście oczekiwany stan pinu 0 lub 1)</li><li>po określonym czasie równym n [mikro/mili]sekund piny powinny zmienić swój stan na: PB1=x, PB2=x, PD2=x, PD3=x</li><li>po określonym czasie równym n [mikro/mili]sekund piny powinny zmienić swój stan na: PB1=x, PB2=x, PD2=x, PD3=x</li><li>powrót do punktu 1</li></ol><br />Na co mógłbym zwrócić uwagę w tej chwili?<br /><br />Piny PB1 i PB2 są ustawiane sprzętowo, a piny PD2 i PD3 programowo (w procedurze obsługi przerwania) więc będziesz miał pewne przesunięcie czasowe między nimi.<br /><br />Nie ustawiasz w ogóle rejestrów OCR1A i OCR1B, więc obydwa przerwania występują w tym samym momencie (kiedy TCNT1 osiąga 0). Procedury obsługi przerwania zostaną wykonane prawie jednocześnie, jedno po drugim (w krótkim odstępie czasu około 30 taktów), więc to co zostanie zmienione przez jedną procedurę obsługi przerwania, za chwilę zostanie cofnięte przez drugą...<br /><br />Może kiedy opiszesz Twój problem dokładniej, można będzie coś bardziej konkretnego doradzić...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 2 wrz 2018, o 11:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bmenot]]></name></author>
<updated>2018-09-01T21:48:51+01:00</updated>
<published>2018-09-01T21:48:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211233#p211233</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211233#p211233"/>
<title type="html"><![CDATA[[atmega328p] przerwanie timera w trybie ctc]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21212&amp;p=211233#p211233"><![CDATA[
Witam, chciałem podłączyć drugą parę pinów pod przerwanie  w timerze 16bit. w trybie CTC w taki sposób aby pracowały na przemian razem z pinami sprzętowymi PB1 i PB2 wykorzystując przerwania TIMER1_COMPA_vect i TIMER1_COMPB_vect. Nie udaje się mi to osiągnąć, cały czas przerwania pracują razem z pinami PB1 lub PB2 zależnie od ustawienia bitu: FOC1A lub FOC1B.<br /><br />[syntax=c]void timer_16bit_init(void)<br />{<br />DDRB |= (1&lt;&lt;PB1);<br />DDRB |= (1&lt;&lt;PB2);<br /><br />TCCR1A |=(1 &lt;&lt; COM1B0);<br />TCCR1A |=(1 &lt;&lt; COM1A0);<br /><br />TCCR1C |= (1&lt;&lt;FOC1A);<br /><br />TCCR1B |= (1 &lt;&lt; WGM12) ;<br />TCCR1B |= (1 &lt;&lt; WGM13) ;<br /><br />TCCR1B |= (1 &lt;&lt; CS12);<br /><br />ICR1 = 3905;  <br /><br />TIMSK1 |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B);<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />PORTD |= (1&lt;&lt;PD2);<br />PORTD &amp;= ~(1&lt;&lt;PD3);<br />}<br /><br />ISR(TIMER1_COMPB_vect)<br />{<br />PORTD |= (1&lt;&lt;PD3);<br />PORTD &amp;= ~(1&lt;&lt;PD2);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9341">bmenot</a> — 1 wrz 2018, o 21:48</p><hr />
]]></content>
</entry>
</feed>