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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-04T11:14:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=17169&amp;mode</id>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2017-01-04T11:14:26+01:00</updated>
<published>2017-01-04T11:14:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178993#p178993</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178993#p178993"/>
<title type="html"><![CDATA[Re: Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178993#p178993"><![CDATA[
Zgadza się. Jak skończę swój z czasami &quot;dziesiętnymi&quot; to mogę pobawić się w inne czasy i przeliczanie ich. Będę wówczas mógł porównać wyniki.<br />Choć przyznaję, że już mi coś nowego po głowie  chodzi i raczej zostanę przy tym co mam  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 4 sty 2017, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[czarekgr]]></name></author>
<updated>2017-01-02T20:26:33+01:00</updated>
<published>2017-01-02T20:26:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178877#p178877</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178877#p178877"/>
<title type="html"><![CDATA[Re: Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178877#p178877"><![CDATA[
Wtrącę 3 grosze, mam fabryczny miernik częstotliwości i tam są czasy otwarcia bramki nie 0.1 1, 10 tylko trochę dziwne. Myślę, że nie trzeba się kurczowo trzymać okrągłych czasów w systemie dziesiętnym, procek może to przeliczyć. Na początku myślałem, że to profanacja, ale się przyzwyczaiłem i mi nie przeszkadza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14311">czarekgr</a> — 2 sty 2017, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-12-30T22:06:08+01:00</updated>
<published>2016-12-30T22:06:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178653#p178653</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178653#p178653"/>
<title type="html"><![CDATA[Re: Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178653#p178653"><![CDATA[
He he he - czytam i oczom nie wierzę... bo właśnie w tej chwili trawię płytę pod mój miernik częstotliwości.... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /> <br />Robię go na atmedze 8 i wybrałem trochę inne podejście - u mnie impulsy zlicza bezpośrednio licznik zerowy do 256, po czym następuje przerwanie od przepełnienia i zwiększany o jeden jest starszy bajt (dwa bajty - UINT) wyniku. wszystko trwa jedną sekundę - PWM na tyle otwiera bramkę na wejściu. Po jej zamknięciu pomiar jest zatrzymany i spokojnie można go odczytać. Ja na wejściu ma dodatkowo 74F161 i z niego zczytuję 4 najmłodsze bity. Teoretycznie mogę mierzyć do 125 MHz (bo tyle podają dla 74F161, a procek z takim licznikiem teoretycznie powinien zmierzyć do 196 608 000 Hz z rozdzielczością do 1 Hz - nie mylić z dokładnością).<br />Żadnych przerwań, które przekłamują wynik pomiaru. Żadnego przechwytywania licznika. Napędza to kwarc 24,576 MHz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Dlaczego taka wartość - domyśl się  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Prototyp sobie radzi.<br />Jedyny minusu - maksymalna zmierzona częstotliwość (teoretycznie) równa jest połowie częstotliwości zegara. Niestety - atmega nie ma wejścia asynchronicznego dla licznika - PIC ma  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  ale PIC'ów nie umiem...<br />Spróbuj uderzyć w tym kierunku.<br /><br />powodzenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 30 gru 2016, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[attiny2313]]></name></author>
<updated>2016-12-29T18:37:27+01:00</updated>
<published>2016-12-29T18:37:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178550#p178550</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178550#p178550"/>
<title type="html"><![CDATA[Re: Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178550#p178550"><![CDATA[
Fakt o dławieniu przerwaniami to nie pomyślałem <br />Jutro spróbuję wymienić kwarc na inny i dopiszę co i jak <br />Dzięki<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 41 minutach ]</span></strong><br /><br />Dzięki kolego za pomoc <br />Przełączyłem atmege tak na szybko do testów na wewnętrzny oscylator 8MHz i wyświetlana częstotliwość wzrosła do około 130KHz. Miałeś rację <br />Dzięki <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15967">attiny2313</a> — 29 gru 2016, o 18:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-12-29T17:35:50+01:00</updated>
<published>2016-12-29T17:35:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178539#p178539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178539#p178539"/>
<title type="html"><![CDATA[Re: Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178539#p178539"><![CDATA[
witam,<br />myślę że wykonując przerwanie INT  ~65000 razy na sek i jeszcze przerwanie ~2000 razy na sek od przepełnienia timera 0,<br />w którym jest sporo procedur, to te 4MHz to mało.<br />Podejrzewam że dławi się przerwaniami.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />Załączenie zewnętrznego rezonatora blisko 20MHz powinno poprawić wyniki,<br />ale czy wystarczająco ? nie wiem.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />może trochę pomoże else w przerwaniu, ale pewnie niewiele. <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> <br />[syntax=c]ISR (TIMER0_OVF_vect)//multipleksowanie wyświetlaczy led<br />{<br />        multi++;<br />        if(multi==1)<br />{<br />        PORTC=0xFE;<br />        PORTD=znaki_dla_portu_D&#91;g&#93;; // 1 cyfra<br />        PORTB=znaki_dla_portu_B&#91;g&#93;;<br />}<br />else        if(multi==2)<br />{<br />                PORTC=0xFD;                             // 2 cyfra<br />        PORTD=znaki_dla_portu_D&#91;b&#93;;<br />        PORTB=znaki_dla_portu_B&#91;b&#93;;<br />}<br />else        if(multi==3)<br />{<br />        PORTC=0xFB;                                     // 3 cyfra<br />        PORTD=znaki_dla_portu_D&#91;c&#93;;<br />        PORTB=znaki_dla_portu_B&#91;c&#93;;<br />}<br />else        if(multi==4)<br />{<br />                PORTC=0xF7;                             // 4 cyfra<br />        PORTD=znaki_dla_portu_D&#91;d&#93;;<br />    PORTB=znaki_dla_portu_B&#91;d&#93;;<br />}<br />else        if(multi==5)<br />        {<br />        PORTC=0xEF;                                     // 5 cyfra<br />        PORTD=znaki_dla_portu_D&#91;e&#93;;<br />        PORTB=znaki_dla_portu_B&#91;e&#93;;<br /> <br />}<br />else        if(multi==6)<br />        {<br />                PORTC=0xDF;                             // 6 cyfra<br />                PORTD=znaki_dla_portu_D&#91;f&#93;;<br />                PORTB=znaki_dla_portu_B&#91;f&#93;;<br />                multi=0;<br />        }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 29 gru 2016, o 17:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[attiny2313]]></name></author>
<updated>2016-12-29T14:34:08+01:00</updated>
<published>2016-12-29T14:34:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178522#p178522</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178522#p178522"/>
<title type="html"><![CDATA[Częstotliwościomierz na atmega8 problem z odczytem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17169&amp;p=178522#p178522"><![CDATA[
Witam <br />To mój pierwszy post na tym forum. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Mam taki problem napisałem taki kod <br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint32_t stan_licznika=0; <br />volatile uint8_t multi =0; <br />volatile char znaki_dla_portu_B&#91;&#93;={0x00,0xEB,0x24, 0x21, 0x0B, 0x11, 0x10, 0x23, 0x00, 0x01}; // tablica znaków dla wyświetlaczy led<br />volatile char znaki_dla_portu_D&#91;&#93;={0x80,0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00}; // tablica znaków dla wyświetlaczy led<br />volatile uint8_t a=0;<br />volatile uint8_t b=0;<br />volatile uint8_t c=0;<br />volatile uint8_t d=0;<br />volatile uint8_t e=0;<br />volatile uint8_t f=0;<br />volatile uint8_t g=0;<br />volatile uint32_t stan_licznika2=0;<br />volatile uint64_t stan_licznika3=0;<br /><br />int main(void)<br />{<br />DDRB=0x3F;<br />PORTB=0x00;<br />DDRD=0x80;<br />PORTD=0x80;<br />DDRC=0xFF;<br /><br />// TIMER 1 NA ODLICZANIE 1 SEKUNDY<br />TCCR1B|=(1&lt;&lt;WGM12)|(1&lt;&lt;CS12); //preskaler 256 ; wlaczony tryb CTC; <br />OCR1A=15625;                 // Załączenie przerwania gdy TCNT2 = OCR2<br />TIMSK |= (1&lt;&lt;OCIE1A);//maskowanie przerwania<br />sei();<br /><br />// TIMER 0 NA multipleksowanie ledów<br /><br />TCCR0 |= (1&lt;&lt;CS01); // preskaler 8<br />TIMSK |= (1&lt;&lt;TOIE0);   //maskowanie przerwania<br />TCNT0 = 255;<br />sei();<br /><br />// ZLICZANIE IMPULSÓW Z WEJŚCIA INT0<br />GICR |= (1&lt;&lt;INT0);    //aktywujemy przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC00); //wyzwalanie dwoma zboczami<br />sei();<br /><br />while(1)<br />{<br />// obliczanie pojedyńczych cyfr dla wyświetlaczy <br /><br />g=(stan_licznika2/100000);<br />b=(stan_licznika2%100000)/10000;<br />c=(stan_licznika2%10000)/1000;<br />d=(stan_licznika2%1000)/100;<br />e=(stan_licznika2%100)/10;<br />f=stan_licznika2%10;<br /><br /><br /><br /><br />}<br />}<br />ISR (TIMER0_OVF_vect)//multipleksowanie wyświetlaczy led <br />{<br />multi++;<br />if(multi==1)<br />{<br />PORTC=0xFE;<br />PORTD=znaki_dla_portu_D&#91;g&#93;; // 1 cyfra<br />PORTB=znaki_dla_portu_B&#91;g&#93;;<br />}<br />if(multi==2)<br />{<br />PORTC=0xFD;// 2 cyfra<br />PORTD=znaki_dla_portu_D&#91;b&#93;;<br />PORTB=znaki_dla_portu_B&#91;b&#93;;<br />}<br />if(multi==3)<br />{<br />PORTC=0xFB;// 3 cyfra<br />PORTD=znaki_dla_portu_D&#91;c&#93;;<br />PORTB=znaki_dla_portu_B&#91;c&#93;;<br />}<br />if(multi==4)<br />{<br />PORTC=0xF7;// 4 cyfra<br />PORTD=znaki_dla_portu_D&#91;d&#93;;<br />    PORTB=znaki_dla_portu_B&#91;d&#93;;<br />}<br />if(multi==5)<br />{<br />PORTC=0xEF;// 5 cyfra<br />PORTD=znaki_dla_portu_D&#91;e&#93;;<br />PORTB=znaki_dla_portu_B&#91;e&#93;;<br /><br />}<br />if(multi==6)<br />{<br />PORTC=0xDF;// 6 cyfra<br />PORTD=znaki_dla_portu_D&#91;f&#93;;<br />PORTB=znaki_dla_portu_B&#91;f&#93;;<br />multi=0;<br />}<br />}<br />ISR(TIMER1_COMPA_vect) // odliczanie 1 sekundy timer1<br />{ <br /><br />stan_licznika2=stan_licznika;<br /><br />stan_licznika=0;<br /><br /><br />}<br /><br />ISR(INT0_vect) // instrukcja dla przerwania zewnętrznego int0<br />{<br />stan_licznika++;<br />}[/syntax]<br /><br />Jest to kod dla miernika częstotliwości. Zasada działanie pokrótce jest taka, zewnętrzne przerwanie z INT0 inkrementuje zmienną &quot;stan_licznika&quot;, timer1 odlicza dokładnie 1 sekundę i po tum czasie przepisuje wartość tej zmiennej do zmiennej &quot;stan_licznika2&quot; a zmienną &quot;stan_licznika&quot; zeruje, zmienna &quot;stan_licznika2&quot; idzie na wyświetlacz.  Mierzony przebieg (prostokąt) podawany jest na wejście INT0 atmegi8 taktowanej zewnętrznym kwarcem 4MHz i wyświetlany na wyświetlaczu led. W założeniach ma to mierzyć częstotliwość do góra 350KHz.<br />I wszystko działa poprawnie do momentu gdy mierzony przebieg nie osiągnie lub przekroczy około 65KHz. W tedy na losowym wyświetlaczu (a jest ich 6) zapala się jakaś losowa liczba i tak zostaje. Próbowałem też pomiaru na INT1 (po poprawieniu kodu) ale dzieje to samo. Czy ten kod jest winny takiemu stanu, rzeczy czy atmega8 ma takie ograniczenia? Da się to jakoś poprawić? <br />Dzięki <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15967">attiny2313</a> — 29 gru 2016, o 14:34</p><hr />
]]></content>
</entry>
</feed>