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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-09-11T11:52:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=23334&amp;mode</id>
<entry>
<author><name><![CDATA[oskar_zaremba]]></name></author>
<updated>2020-09-11T11:52:14+01:00</updated>
<published>2020-09-11T11:52:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228956#p228956</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228956#p228956"/>
<title type="html"><![CDATA[Re: ATTiny2313A Licznik ma częstotliwość różną od CPU]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228956#p228956"><![CDATA[
Uprzejmie dziękuje:)<br /><br />O taką odpowiedź mi właśnie chodziło:))))<br /><br />Poniżej kod który zrobił robotę:)<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />int main(void) {<br />DDRB = _BV(DDB2);  // ustawienie pinu PB0 w stan wyjścia<br />TCCR0A = _BV(COM0A0) | _BV(WGM01); // ustawienie generatora w tryb CTC i Przełączanie bitu OC0A<br />TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1<br />OCR0A = 1; // ustawienie górnej wartości licznika<br />}[/syntax]<br /><br />Jeszcze raz wielkie dzięki:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21575">oskar_zaremba</a> — 11 wrz 2020, o 11:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2020-09-11T11:42:55+01:00</updated>
<published>2020-09-11T11:42:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228955#p228955</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228955#p228955"/>
<title type="html"><![CDATA[Re: ATTiny2313A Licznik ma częstotliwość różną od CPU]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228955#p228955"><![CDATA[
<div class="quotetitle">oskar_zaremba napisał(a):</div><div class="quotecontent"><br />A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --&gt; 207.4KHz.<br /></div><br />Po pierwsze - tego się tak nie robi. Zamiast programowego sprawdzania flagi i zerowania jej należałoby wykorzystać przerwania.<br />Po drugie - flaga przerwania jest ustawiana co 4 takty zegara. Twój kod sprawdzający flagę, zerujący ją i ustawiający stan pinu na pewno nie zdąży się wykonać w tym czasie (nawet jeśli użyjesz przerwań), więc niektóre przerwania zostaną pominięte. Stąd ta niższa częstotliwość.<br /><br />W zasadzie jedynym rozwiązaniem w celu uzyskania częstotliwości tak bardzo zbliżonej do częstotliwości taktowania mikrokontrolera jest generowanie sprzętowe na jednym z pinów: PB2 (OC0A) lub PD5 (OC0B) poprzez właściwe ustawienie odpowiednich bitów COM0A1:COM0A0 lub COM0B1:COM0B0 w rejestrze TCCR0A na tryb (w przypadku trybu CTC timera): <strong><em>Toggle OC0x on Compare Match</em></strong>.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 wrz 2020, o 11:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[oskar_zaremba]]></name></author>
<updated>2020-09-11T10:27:15+01:00</updated>
<published>2020-09-11T10:27:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228954#p228954</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228954#p228954"/>
<title type="html"><![CDATA[ATTiny2313A Licznik ma częstotliwość różną od CPU]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23334&amp;p=228954#p228954"><![CDATA[
Dzień Dobry,<br /> <br />Mam pytanie odnośnie programowania mikro kontrolerów.<br /> <br />Zajmuję się akurat ATTINY2313A.<br />Mam ustawiony wewnętrzny oscylator na częstotliwość 4 MHz bez wewnętrznego podziału zegara przez 8.<br /><br />Poniżej mój krótki kod w C:<br /> <br />[syntax=c]#include &lt;avr/io.h&gt;<br /> <br />int main(void) {<br />                 DDRB = _BV(DDB0);  // ustawienie pinu PB0 w stan wyjścia<br />                 TCCR0A = _BV(WGM01); // ustawienie generatora w tryb CTC<br />                 TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1<br />                 OCR0A = 1; // ustawienie górnej wartości licznika<br />                 while (1) {<br />                                 if (TIFR &amp; _BV(OCF0A)) { // sprawdzenie czy w rejestrze TIFR ustawiona została flaga OCF0A po przepełnieniu licznika OCR0A<br />                                                  TIFR |= _BV(OCF0A); // wyzerowanie flagi OCF0A poprzez ustawienie logicznej jedynki<br />                                                  PORTB ^= _BV(DDB0); // przełączenie bitu na pinie PB0<br />                                 }<br />                 }<br />}[/syntax]<br /> <br />W moim przypadku według dokumentacji czyli wzoru poniżej:<br /><br />fOC0A=fclk_I/O/(2·N·(1+OCR0A))<br /><br />fOC0A=4000000/(2·1·(1+1))<br /><br />fOC0A=1000000=1MHz<br /><br /><br />A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --&gt;  207.4KHz. W załączniku przesyłam zdjęcie z oscyloskopu z widocznym przebiegiem na pinie PB0.<br /> <br />Pozdrawiam,<br />Oskar Zaremba<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21575">oskar_zaremba</a> — 11 wrz 2020, o 10:27</p><hr />
]]></content>
</entry>
</feed>