<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; Частотомер ардуино]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=314&amp;type=atom" />
	<updated>2021-05-10T03:52:36Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=314</id>
		<entry>
			<title type="html"><![CDATA[Re: Частотомер ардуино]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=3526#p3526" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-05-10T03:52:36Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=3526#p3526</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Частотомер ардуино]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=3525#p3525" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-05-09T19:01:44Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=3525#p3525</id>
		</entry>
</feed>
