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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-01-30T17:03:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2220&amp;mode</id>
<entry>
<author><name><![CDATA[yanan]]></name></author>
<updated>2013-01-30T17:03:33+01:00</updated>
<published>2013-01-30T17:03:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26300#p26300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26300#p26300"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26300#p26300"><![CDATA[
Dziękuje za wszelkie wsparcie, trochę się już męczę z tymi licznikami, a muszę zrobić tak w programie, żeby było maksymalnie wydajnie (tak pokolenie, gdzie każdy oszczędzony bajt jest na miarę złota), a najlepiej miałaby zrobić jedna funkcja... ale z tym sobie poradzę, studia. Tylko musi mi przyjść scalaczek z preskalerem i zabieram się za testy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Jeszcze raz dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=492">yanan</a> — 30 sty 2013, o 17:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gufim]]></name></author>
<updated>2013-01-30T13:46:53+01:00</updated>
<published>2013-01-30T13:46:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26285#p26285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26285#p26285"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26285#p26285"><![CDATA[
Witam jelśli chodzi o zakres mierzonej częstotliwości bez prescalera do teoretycznie połowa wartości częstotliwości kwarcu procka choc w praktyce jest to mniej , ale może ten program ci pomoże<br />[syntax=c]/*<br /> * main.c<br /> *<br /> * ATmega 8<br /> * F_CPU 10000000<br /> * we liczace T1<br /> *<br /> *  Created on: 2012-05-19<br /> *      Author: GUFIM<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;lcd44780.h&quot;<br /><br />volatile uint16_t czas_1s;   // deklaracja zmienej czas_1s<br />volatile uint8_t zm_pomoc;   // zmienna pomocnicza<br />volatile uint32_t licznik;   // deklaracje zmienej licznik<br /><br />//Definicja Pinu dzielnika czestotliwosci<br />#define DZI_PIN (1&lt;&lt;PD7)            //definicja pinu<br />#define DZI_ON PORTD |= DZI_PIN     //makrodefinicja wlaczajaca dzielnik<br />#define DZI_OFF PORTD &amp;= ~DZI_PIN   //makrodefinicja wylaczajaca dzielnik<br /><br />void STOP(void);   // deklaracja funkcji STOP<br />void START(void);    // deklaracja funkcji START<br />void lcd_wynik (void);   // deklaracja funkcji wyswietlajacej<br />void lcd_wynik1(void);   // deklaracja funkcji wyswietlajacej wynik z dzielnikiem<br /><br />int main(void)<br />{<br /><br />// ustawienia TIMER2 jako zegara<br />#define T0_ON TCCR2 |= (1&lt;&lt;CS22);   // wlacza timer0 i prescaler 64<br />#defineT0_OFF TCCR2 &amp;= ~((1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20));   // wylacza timer0 i prescaler 64<br />TCCR2 |= (1&lt;&lt;WGM20)|(1&lt;&lt;WGM21)|(1&lt;&lt;COM21)|(1&lt;&lt;COM20);   // ustawienie trybu CTC<br />TIMSK |= (1&lt;&lt;OCIE2);   // zezwolenie na przerwania Compare Match<br /><br />OCR2 = 250;   // wpisanie do rejestru porownania 250<br /><br />// ustawienia TIMER1 jako licznika<br />//#define T1_ON TCCR1B |= (1&lt;&lt;CS10) | (1&lt;&lt;CS11) | (1&lt;&lt;CS12);   //zezwolenia na przerwania zewnetrzne T1 zboczem narastajacym<br />#define T1_ON TCCR1B |= (1&lt;&lt;CS11) | (1&lt;&lt;CS12);   //zezwolenia na przerwania zewnetrzne T1 zboczem opadajacym<br />#define T1_OFF TCCR1B &amp;= ~(1&lt;&lt;CS10) | (1&lt;&lt;CS11) | (1&lt;&lt;CS12);   // blokuje przerwania zewnetrzne T1<br />TIMSK |= (1&lt;&lt;TOIE1);   // wlaczenie zezwolenia na przerwania Overflow Interrupt Enable<br />TIFR |= (1&lt;&lt;TOV1);   // wlaczenia przerwan Overflow Interrupt Enable<br /><br />//#define LICZ_PIN (1&lt;&lt;PD5)<br />DDRD &amp;= ~(1&lt;&lt;PD5);     // ustawienie pinu PORTD.5 (T1) jako wejscie<br />PORTD &amp;= ~(1&lt;&lt;PD5);   // ustawienie stanu niskiego<br /><br />// ustawienie PIND.7 jako wyjsciowy<br />DDRD |= DZI_PIN;<br />PORTD |= DZI_PIN;<br />DZI_OFF;   // wylaczenie dzielnika czestotliwosci<br /><br />// napis powitalny<br />lcd_init();   // inicjalizacja wyswietlacza<br />lcd_cls();   // wyczyszczenie wyswietlacza<br />lcd_locate(0,4);   // ustawienie kursora w pozycji 0,4 pierwsza linia<br />lcd_str(&quot;MIERNIK&quot;);   // wyswietlenie napisu<br />lcd_locate(1,1);   // ustawienie kursora w pozycji 1,1 druga linia<br />lcd_str(&quot;CZESTOTLIWOSCI&quot;);   // wyswietlenie napisu<br />_delay_ms(1000);   // zaczekaj<br />lcd_cls();   // wyczysc wyswietlacz<br /><br />sei();   // globalne zezwolenie na przerwania<br />START();   // start pomiaru<br /><br />// petla glowna<br />while(1)<br />{<br /><br />if(czas_1s == 625)   // jezeli zmienna czas_1s jest rowna 625 to minela 1 sekunda<br />{<br /><br />             STOP();   // zatrzymanie pomiarow na czas wyswietlenia<br /><br /> licznik = (65536 * zm_pomoc) + TCNT1;   // wyliczenie wyniku<br /><br /> if( DZI_ON &amp; PIND )   // jezeli dzielnik wlaczony<br /> {<br /> lcd_wynik1();   // wyswietl wynik za pomoca funkcji lcd_wynik1<br /> }<br /><br /> if((!(DZI_OFF &amp; PIND)) &amp;&amp; ((licznik &gt;= 0) &amp;&amp; (licznik &lt; 20000)))   // jezeli wynik jest wiekrzy od 0 i mniejszy od to<br /> {<br /> lcd_wynik();   // wyswietl za pomoca funkcji lcd_wynik<br /> }<br /> else   // w przeciwnym wypadku od powyzszych<br /> {<br /> DZI_ON;   // wlacz dzielnik<br /> }<br /><br />        START();   // start pomiru<br /><br />}<br /><br />}<br /><br />}<br /><br />// timer2 do odliczania podstawy czasu 1s<br />ISR(TIMER2_COMP_vect)<br />{<br />    czas_1s++;   // zwiekrzenie zmienej czas_1s o 1<br />}<br /><br />// timer1 jako licznik impulsow<br />ISR(TIMER1_OVF_vect)<br />{<br />zm_pomoc++;   // zwiekrzenie zmiennej zm_pomoc o 1 przy kazdym przepelnieniu<br />}<br /><br />// funkcjia STOP<br />void STOP(void)<br />{<br /> T1_OFF;   // wylacz Timer1<br /> T0_OFF;   // wylacz Timer0<br /> cli();   // wylaczenie globalnego zezwolenia na przerwania<br />}<br /><br />// funkcja START<br />void START(void)<br />{<br />    zm_pomoc = 0;   // wyzerownia zmienej zm_pomoc<br />    licznik = 0;   // wyzerowanie licznika<br />    czas_1s = 0;   // wyzerowanie zmienej czas_1s<br />    TCNT1 = 0;   // wyzerowanie rejestru TCNT1<br />    sei();   // globalne odblokowanie przerwan<br />    T1_ON;   // wlacz Timer1<br />    T0_ON;   // wlacz Timer0<br />}<br /><br />// funkcja wyswietlajaca wynik dla zakresu do 4 MHz<br />void lcd_wynik(void)<br />{<br />lcd_locate(0,0);   // ustawienie kursora<br />lcd_str(&quot;F[ Hz]-&quot;);   // wyswietlenie napisow<br />    lcd_locate(1,0);   // ustawienie kursora 2 linia<br />    lcd_str(&quot;ZAKRES -&quot;);   // wyswietlenie napisu<br />    lcd_locate(1,8);   // ustawienie kursora<br />    lcd_str(&quot;   4 MHz&quot;);   // wyswietlenie napisu<br />lcd_locate(0,7);   // ustawienie kursora<br />lcd_str(&quot;         &quot;);   // wyczyszczenie wyniuku poprzedniego pomiaru<br />    lcd_locate(0,7);   // ustawienie kursora w pozycji 0,8<br />    lcd_ulint(licznik);   // wyswietlenie zmienej licznik<br /><br />if(licznik &lt; 1000)   // jezeli licznik jest mniejszy od 1000<br />{<br />lcd_locate(0,2);   // ustaw kursor w pozycji 2<br />lcd_str(&quot; &quot;);   // zapisz poste pole<br />}<br /><br />if(licznik &gt; 999)   // jezeli licznik jest wiekrzy od 999<br />{<br />lcd_locate(0,2);   // ustaw kursor w pozycji 2<br />lcd_str(&quot;k&quot;);   // napisz literke k<br />}<br /><br />if(licznik &gt; 999999)   // jezeli licznik jest wiekrzy do 999 999<br />{<br />lcd_locate(0,2);   // ustaw kursor w pozycji 2<br />lcd_str(&quot;M&quot;);   // napisz literke M<br />}<br /><br />}<br /><br />// funkcja wyswietlajaca wynik dla zakresu 100 MHz<br />void lcd_wynik1(void)<br />{<br />licznik = licznik * 32;   // wyliczenie wyniuku z prescalerem<br /><br />lcd_locate(0,0);   // ustawienie kursora<br />lcd_str(&quot;F[MHz]-&quot;);   // wyswietlenie napisow<br />    lcd_locate(1,0);   // ustawienie kursora 2 linia<br />    lcd_str(&quot;ZAKRES -&quot;);   // wyswietlenie napisu<br />    lcd_locate(1,8);   // ustawienie kursora<br />    lcd_str(&quot; 100 MHz&quot;);   // wyswietlenie napisu<br />lcd_locate(0,7);   // ustawienie kursora<br />lcd_str(&quot;         &quot;);   // wyczyszczenie wyniuku poprzedniego pomiaru<br />    lcd_locate(0,7);   // ustawienie kursora w pozycji 0,8<br />    lcd_ulint(licznik);   // wyswietlenie zmienej licznik<br /><br />    DZI_OFF;<br /><br />}[/syntax]<br /><br />W projekcie na wejsciu był prescaler zbudowany na układzie 74HC393 i przełącznik na 74HC00<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=126">gufim</a> — 30 sty 2013, o 13:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yanan]]></name></author>
<updated>2013-01-30T12:51:48+01:00</updated>
<published>2013-01-30T12:51:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26283#p26283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26283#p26283"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26283#p26283"><![CDATA[
Chciałbym zmieścić to do ATmegi8, lub 328p.<br /><br />[syntax=c]<br /><br />float TCSMeasure()<br />{<br />        // jezeli funckcja jest wywolana podczas niskiego stanu na wyjsciu czujnika,<br /><br />        // to czeka na to, az wyjscie czujnika przyjmie stan wysoki<br /><br />   if((PINC &amp; TCS_OUT_PIN) == 0)<br /><br />   {<br />      while((PINC &amp; TCS_OUT_PIN) == 0); // czekaj na zbocze narastajace<br />   }<br />   while(PINC &amp; TCS_OUT_PIN);   // czekaj na zbocze opadajace<br />   TCNT1 = 0x0000; // reset licznika<br />   TCCR1B = (1 &lt;&lt; CS10); //Prescaller = F_CPU/1 (start zliczania)<br />   while((PINC &amp; TCS_OUT_PIN) == 0);   // czekaj na zbocze narastajace<br />   TCCR1B = 0x00; // zatrzymanie timera (koniec zliczania)<br /><br />   //return (float)(11059.2/(2*TCNT1));<br />   return (float)(8000/(2*TCNT1)); // Dla rezonatora 8 MHz ??<br />}<br /><br />[/syntax]<br /><br />Hmm operacje na float-ach... <br />Czy do tego będę mógł zwiększyć zakres badanych częstotliwości jeżeli dodam do wejścia procesora preskaler. Czy którakolwiek z metod pomiaru wykreśla możliwość podłączenia preskalera?<br />No i chciałbym podziękować za pomoc w realizacji projektu.<br /><br />PS. Jak obliczyć maksymalną częstotliwość którą mogę zmierzyć bez dołączenia preskalera?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=492">yanan</a> — 30 sty 2013, o 12:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gufim]]></name></author>
<updated>2013-01-29T23:37:12+01:00</updated>
<published>2013-01-29T23:37:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26265#p26265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26265#p26265"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26265#p26265"><![CDATA[
Witam a jakiego kolega chce użyć procka .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=126">gufim</a> — 29 sty 2013, o 23:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ledes]]></name></author>
<updated>2013-01-29T21:42:12+01:00</updated>
<published>2013-01-29T21:42:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26251#p26251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26251#p26251"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26251#p26251"><![CDATA[
Kolego ja stosowałem pierwsze rozwiązanie pomiaru częstotliwości w moim projekcie na studia. Może Ci to pomoże.<br />Kod jest tutaj:<br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2052.html" >topic2052.html</a><!-- l --><br /><br />funkcja TCSMeasure(), zwraca wynik w kHz dla kwarcu 11.0592 MHz, przeskaluj sobie do swoich potrzeb. <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=355">Ledes</a> — 29 sty 2013, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[staneq]]></name></author>
<updated>2013-01-29T21:37:57+01:00</updated>
<published>2013-01-29T21:37:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26250#p26250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26250#p26250"/>
<title type="html"><![CDATA[Re: Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26250#p26250"><![CDATA[
Hmm a może spróbować użyć Timera1 i jego spcejału czyli ICP? Taka luźna podpowiedź. A każdy z tych sposobów ma sowoje wady i zalety.<br /><br />Tak nawiasem mówiąc to ICP jest opisane w BlueBook w rozdziale o RC5<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=770">staneq</a> — 29 sty 2013, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yanan]]></name></author>
<updated>2013-01-29T20:05:06+01:00</updated>
<published>2013-01-29T20:05:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26244#p26244</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26244#p26244"/>
<title type="html"><![CDATA[Pomiar częstotliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2220&amp;p=26244#p26244"><![CDATA[
Witam<br /><br />Mam pytanie odnośnie pomiaru częstotliwości, lecz nie wiem jak zrealizować pomiar z zastosowaniem układu preskalera (SAA1059). Nie wiem w jaki sposób należy podłączyć układ, abym mógł mierzyć częstotliwość do 120MHz. Chciałbym wykorzystać ten układ do radia, które nie posiada skali cyfrowej + ułatwienie do przestrajania radia (o ile zajdzie taka potrzeba)<br /><br />Pomiar częstotliwości można wykonać na 2 sposoby:<br />-wyznaczenie okresu sygnału<br />-wyznaczenie częstotliwości poprzez wyznaczenie liczby &quot;wyłapanych&quot; impulsów w jednostce czasu<br /><br />Wadą drugiego rozwiązania jest wykorzystanie 2 timerów.<br />Sądzę, że łatwiej jest chyba zrealizować to 2 rozwiązanie, ale i tak nie potrafię sobie tego wyobrazić.<br />Na początek mam kod, który odlicza do sekundy. Licznik T1 jako CTC<br /><br />[syntax=c]<br /><br />// Tryb CTC<br />OCR1A = 0x7A12;  <br />TCCR1B |= (1&lt;&lt; WGM12); //tryb CTC <br />TCCR1B |= (1&lt;&lt; CS12);   // preskaler 256 <br />TIMSK  |= (1 &lt;&lt; OCIE1A); // zezwolenie na generowanie przerwania<br /> <br /> <br />ISR(TIMER1_COMPA_vect) // Przerwanie co 1 sek. od T1<br />{ <br />sek+=1;<br />// Tu chyba muszę zebrać pomiary od licznika 8-bitowego<br /><br />}<br />[/syntax]<br /><br />Nie wiem co mam dalej zrobić żeby to zadziałało, a może jednak ten pierwszy sposób jest łatwiejszy...<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=492">yanan</a> — 29 sty 2013, o 20:05</p><hr />
]]></content>
</entry>
</feed>