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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-05-18T14:01:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=12&amp;t=11714&amp;mode</id>
<entry>
<author><name><![CDATA[Encelad]]></name></author>
<updated>2015-05-18T14:01:06+01:00</updated>
<published>2015-05-18T14:01:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129482#p129482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129482#p129482"/>
<title type="html"><![CDATA[Re: Atmega32 Zmiana wartości OCR1A - błędy na pinie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129482#p129482"><![CDATA[
Posiedziałem pokombinowałem i w końcu wpadłem na to dlaczego tak &quot;dziwnie&quot; się to zachowywało. <br />Otóż cała sprawa dotyczy momentu kiedy wpisuje się zmienna do rejestru OCR.<br />Nie można tego robić w głównej pętli programu a to dlatego, że jeśli przykładowo licznik liczy od 60000 i dajmy na to doliczy do 60050 (OCR = 60050, tutaj zmiana stanu na końcówce) i zaczniemy zwiększać zmienną w rejestrze OCR to dzieje się to na tyle szybko, że dochodzi jakby do wyprzedzenia wartości licznika (OCR=62000 a licznik doliczył dopiero do 61000) to siłą rzeczy nastąpi ponowna zmiana stanu.<br /><br />Nie wiem czy dobrze to rozumiem ale robiąc to w ten sposób, że zmienną A zmieniam w pętli a w przerwaniu timera wpisuję ją do rejestru cały problem zniknął. Zmiana fazy działa płynnie w obie strony dla OCR1A lub OCR1B i nie występuje wcześniej opisana zmiana sygnału o 180 stopni.<br /><br />Mam nadzieję, że dobrze zrozumiałem błąd jeśli nie to proszę o poprawienie mojego toku myślenia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Teraz zastanawiam się czy dałoby się zrobić coś podobnego z wykorzystaniem PWM. Mógłbym w ten sposób nie tylko zmieniać fazę sygnału ale też jego wypełnienie. Inaczej mówiąc dokładnie określać w jakim punkcie okresu pobieram próbkę. <br />Jak by ktoś mógł potwierdzić czy da się w ten sposób sterować PWM...?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9907">Encelad</a> — 18 maja 2015, o 14:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Encelad]]></name></author>
<updated>2015-05-16T19:59:19+01:00</updated>
<published>2015-05-16T19:59:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129314#p129314</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129314#p129314"/>
<title type="html"><![CDATA[Re: Atmega32 Zmiana wartości OCR1A - błędy na pinie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129314#p129314"><![CDATA[
Skoro kolega taki skłonny do pomocy (za co bardzo dziękuję) to takie małe sprostowanie co do projektu.<br /><br />Kod który kol. napisał już mi dużo pomoże jednak dążę do troszkę innej wersji niż opisana w pierwszym poście. Celowo nie opisywałem całości aby jak najprościej opisać problem. <br />Zależy mi na tym aby na jednym pinie otrzymać stały sygnał o częstotliwości około 7-10KHz a na dwóch pozostałych przesunięcie względem pierwszego (sygnału wiodącego).<br />Pierwszy z sygnałów przesuniętych w fazie w okolicach 90 stopni, drugi natomiast w granicach 180-240 stopni. <br /><br />Sygnał podstawowy robiłem na przerwaniu timera1 a dwa przesunięte w fazie po wpisywaniu wartości do OCR1A i dla drugiego sygnału OCR1B. Wszystko działało do czasu kiedy nagle jeden z sygnałów przesuniętych w fazie został odwrócony po zmianie wartości OCR.<br /><br />Przepraszam za zamieszanie ale lepiej teraz jak później zakładać nowy temat czy też mieszać w obecnym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9907">Encelad</a> — 16 maja 2015, o 19:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Encelad]]></name></author>
<updated>2015-05-16T19:31:13+01:00</updated>
<published>2015-05-16T19:31:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129310#p129310</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129310#p129310"/>
<title type="html"><![CDATA[Re: Atmega32 Zmiana wartości OCR1A - błędy na pinie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129310#p129310"><![CDATA[
Przyznam, że o zerowaniu timera nie pomyślałem, a faktycznie lepiej to teraz pracuje.<br />Niestety nie jest tak różowo jak by się mogło na początku wydawać. <br />Przy zmniejszaniu wartości Compare1b z 68 na 67 następuje odwrócenie sygnału <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Podobnie jak w moim kodzie z tym, że w Twoim dzieje się to w konkretnym miejscu a nie jak u mnie w kilku.<br />Mam nadzieję, że w dalszej części projektu nie będzie miało to znaczenia gdyż prawdopodobnie do tak niskich wartości nie będzie potrzeby schodzić. Inaczej nie wiem co z tymi sygnałami wykombinować.<br /><br />Mimo tego bardzo dziękuję za pomoc i wyjaśnienie kilku spraw. <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=9907">Encelad</a> — 16 maja 2015, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Encelad]]></name></author>
<updated>2015-05-16T14:20:43+01:00</updated>
<published>2015-05-16T14:20:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129295#p129295</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129295#p129295"/>
<title type="html"><![CDATA[Atmega32 Zmiana wartości OCR1A - błędy na pinie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11714&amp;p=129295#p129295"><![CDATA[
Witam.<br /><br />Potrzebuję zrobić dwa generatory o jednakowej częstotliwości z tym, że drugi generator ma być przesuwany w fazie w stosunku do pierwszego.<br /><br />Próbowałem wykorzystać do tego przerwanie timera dla pierwszego generatora a drugim sterować poprzez wpisanie odpowiednich wartości do rejestru OCR1A i niby wszystko działa ale podczas zmian wartości OCR1A nagle sygnał odwracany jest o 180 stopni.<br />Dzieje się to przy różnych wartościach OCR1A.<br /><br />[syntax=basic4gl]$regfile = &quot;m32def.dat&quot;<br />$crystal = 16000000<br /><br />Config Pind.6 = Output<br />Config Pind.5 = Output<br />Config Pinc.2 = Input<br />Config Pinc.3 = Input<br /><br />Set Portc.2<br />Set Portc.3<br /><br />Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle<br />Enable Interrupts<br />Enable Timer1<br /><br />Tcnt1 = 64534<br />Ocr1a = 64800<br /><br />On Timer1 Przerwanie<br /><br />Cursor Off<br />Cls<br /><br />Do<br />If Pinc.2 = 0 And Ocr1a &lt; 65330 Then<br />Incr Ocr1a<br />Waitms 2<br />End If<br /><br />If Pinc.3 = 0 And Ocr1a &gt; 64540 Then<br />Decr Ocr1a<br />Waitms 2<br />End If<br />Locate 1 , 1<br />Lcd Ocr1a<br />Loop<br /><br />Przerwanie:<br />Timer1 = 64534<br />Toggle Portd.6<br />Return[/syntax]<br /><br />Da się coś na to zaradzić? A może ktoś ma pomysł jak to inaczej zrealizować?<br /><br />P.S. W załączniku wysłałem obrazek ilustrujący o jakie przesunięcie w fazie mi chodzi. Przepraszam, że w ten sposób go wrzucam ale opcja &quot;Dodaj obrazek&quot; otwiera główną stronę forum.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9907">Encelad</a> — 16 maja 2015, o 14:20</p><hr />
]]></content>
</entry>
</feed>