<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; Частотомер ардуино]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=314</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=314&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Частотомер ардуино».]]></description>
		<lastBuildDate>Mon, 10 May 2021 03:52:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Частотомер ардуино]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=3526#p3526</link>
			<description><![CDATA[<p>Доработаем частотомер, для измерения 1 секунды будем использовать таймер 2</p><p>Измерение частоты 10 кГц<br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/05/fa4ab3886fe6f6a99461786bb828c070.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/05/fa4ab3886fe6f6a99461786bb828c070.png" /></span> </p><p>Измерение частоты 2 МГц<br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/05/33bd3a5955ed14b69f5fa5d8bc1f4290.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/05/33bd3a5955ed14b69f5fa5d8bc1f4290.png" /></span> </p><div class="codebox"><pre><code>volatile byte x;
unsigned long f,times;
int timer2;
float k = 0.989147567; // устраним погрешность кварца

 
void setup(){

    DDRD  = 0b00000000; // весь порт D как вход
    PORTD = 0b00100000; // подтягивающий резистор на PD5 (вход T1)
    Serial.begin(9600);
 
    cli();  
    TCCR1A = 0;
    TCCR1B = 0;
    TCCR1B &amp;= ~(1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10); //Внешний тактовый источник на выводе T1. Тактирование по фронту
    TIMSK1 |= (1 &lt;&lt; TOIE1); // бит TOIE1 в регистре TIMSK1 взывает прерывание когда таймер переполняется

  TCCR2A = 0;   
  TCCR2B = 0;   
  OCR2A = 250; // 0.001 s 
  TCCR2A |= (1 &lt;&lt; WGM21); 
  TCCR2B |= (1 &lt;&lt; CS22);// | (1 &lt;&lt; CS20);  // 64  
  TIMSK2 |= (1 &lt;&lt; OCIE2A); 
    sei(); 
}
 
void loop(){}
 
ISR (TIMER1_OVF_vect){x++;}// при переполнении увеличить переменную х на 1

ISR(TIMER2_COMPA_vect){
  
     timer2++;
     if(timer2==1){
    // times=millis(); 
     x = 0;TCNT1 = 0; 
     TCCR1B |= (1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10);}
     if(timer2==1001){
   //  times=millis()-times; 
     TCCR1B &amp;= ~(1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10);
     f = ((x*65535) + TCNT1);
     Serial.println((f*k),0);timer2=0;}
}  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Mon, 10 May 2021 03:52:36 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=3526#p3526</guid>
		</item>
		<item>
			<title><![CDATA[Частотомер ардуино]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=3525#p3525</link>
			<description><![CDATA[<p>На вход D5 подается частота 2 МГц с другой платы ардуино</p><p>2 Мгц</p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2021/05/f7a6354e2353a0ac768b3ff28ee4f322.png" alt="http://forum.rcl-radio.ru/uploads/images/2021/05/f7a6354e2353a0ac768b3ff28ee4f322.png" /></span> </p><br /><div class="codebox"><pre><code>volatile byte x;
unsigned long f;
 
void setup(){
    DDRD  = 0b00000000; // весь порт D как вход
    PORTD = 0b00100000; // подтягивающий резистор на PD5 (вход T1)
    Serial.begin(9600);
 
    cli();  
    TCCR1A = 0;
    TCCR1B = 0;
    TCCR1B &amp;= ~(1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10); //Внешний тактовый источник на выводе T1. Тактирование по фронту
    TIMSK1 |= (1 &lt;&lt; TOIE1); // бит TOIE1 в регистре TIMSK1 взывает прерывание когда таймер переполняется
    sei(); 
}
 
void loop(){
  x=0; // обнулить переменную х
  TCNT1 = 0; // обнулить счетный регистр
  TCCR1B |= (1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10); // разрешить прерывания
  delay(993);delayMicroseconds(105); // ждем 1 секунду пока таймер считает импульсы  
  TCCR1B &amp;= ~(1 &lt;&lt; CS12)|(1 &lt;&lt; CS11)|(1 &lt;&lt; CS10); // запретить прерывания
  f = x * 65535 + TCNT1; // подсчет частоты
  Serial.println(f);
  }
 
ISR (TIMER1_OVF_vect){x++;}// при переполнении увеличить переменную х на 1</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 09 May 2021 19:01:44 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=3525#p3525</guid>
		</item>
	</channel>
</rss>
