Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2012, 14:57   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Частотомер

Среди измерительных приборов частотомеры занимают определенное положение. Частотомеры применяются для измерения частоты переменного или импульсного тока. А так же частотомер может быть полезен для отслеживания частоты переменного тока в составе умного дома. Принцип любого частотомера одинаков и состоит в подсчете количества колебания за одну секунду времени.
Предлагаю частотомер на Arduino, предел измерений мин. 250Гц макс. 500000Гц

PHP код:
#include <util/delay.h>

volatile unsigned int tachBuf;
unsigned long tachValue;

ISR(TIMER1_CAPT_vect)

    
TCNT1 0
    
tachBuf ICR1+120;
}
//********************************************************************
void setup()    
{  
   
pinMode(8INPUT);  //Вход частотомера для импульсов TTL
   
pinMode(6OUTPUT);//выход ШИМ для тестирования частотомера
   
TCCR0B TCCR0B 0b11111000 1;//частота ШИМ 62500Гц
   
analogWrite(6128);  //Запустить ШИМ
   
digitalWrite(8HIGH); // включить подтяжку входа
   
Serial.begin(115200);
   
TIM_Init();
  
_delay_ms(300);
}  
//********************************************************************
void loop()    
{
  
cli();  
  
tachValue =16000000/tachBuf;
  
Serial.print("freq=");
  
Serial.println(tachValue,DEC);
  
sei();
  
_delay_ms(300);
}   
//********************************************************************
void TIM_Init(void)
{
   
TIMSK1=(1<<ICIE1); 
   
TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);  
   
TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10); 
   
TCNT1 0;

Admin вне форума   Ответить с цитированием
Старый 09.04.2012, 19:16   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Скетч который может измерять частоту от 4Гц
PHP код:
#include <util/delay.h>  

volatile unsigned int tachBuf;  
unsigned long tachValue;  

ISR(TIMER1_CAPT_vect)  
{   
    
TCNT1 0;    
    
tachBuf ICR1+2;  
}  
//********************************************************************  
void setup()      
{    
   
pinMode(8INPUT);  //Вход для импульсов спидометра  
   
pinMode(6OUTPUT);//выход ШИМ  
   
TCCR0B TCCR0B 0b11111000 5;//частота ШИМ   
   
analogWrite(6128);  //Запустить ШИМ  
   
digitalWrite(8HIGH); // включить подтяжку входа  
   
Serial.begin(115200);  
   
TIM_Init();//инициализация таймера  
  
_delay_ms(300);  
}    
//********************************************************************  
void loop()      
{  
  
cli();    
  
tachValue =250000/tachBuf;  
  
Serial.print("freq=");  
  
Serial.println(tachValue,DEC);  
  
tachBuf=1;  
  
sei();  
  
_delay_ms(300);  
}     
//********************************************************************  
void TIM_Init(void)  
{  
   
TIMSK1=(1<<ICIE1);   
   
TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);    
   
TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);  
   
TCNT1 0;                                             

Admin вне форума   Ответить с цитированием
Старый 24.12.2013, 12:41   #3
StrangerM
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 6
Вес репутации: 0
StrangerM is an unknown quantity at this point
По умолчанию Re: Частотомер

Интересная штучка, спасибо. Запускается на UNO. Я немного переделал для MEGA - измеряет 4 таймер 49 нога. Заодно прилепил ЖК экран с кнопками. Измеряемую частоту тоже взял с MEGA (другой) с 4 ноги.
StrangerM вне форума   Ответить с цитированием
Старый 24.12.2013, 21:39   #4
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Частотомер

Поделитесь кодом, с сообществом
Admin вне форума   Ответить с цитированием
Старый 25.12.2013, 12:18   #5
StrangerM
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 6
Вес репутации: 0
StrangerM is an unknown quantity at this point
По умолчанию Re: Частотомер

Конечно. Я думал там все просто - 1 на 4 поменять в именах регистров. И немного стыдно, я ведь у вас списал. :-)
StrangerM вне форума   Ответить с цитированием
Старый 25.12.2013, 12:24   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Частотомер

То есть эти таймеры получается идентичны, по флагам и регистрам?
Admin вне форума   Ответить с цитированием
Старый 25.12.2013, 12:31   #7
StrangerM
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 6
Вес репутации: 0
StrangerM is an unknown quantity at this point
По умолчанию Re: Частотомер

С ЖК или просто? Или то и то? Хорошо, сначала просто. А код вставлять [PHP] ... [PHP]. А где точки чего?
StrangerM вне форума   Ответить с цитированием
Старый 25.12.2013, 12:32   #8
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Частотомер

Лучше без ЖК
Код в теге [PHP] более читаемый
Admin вне форума   Ответить с цитированием
Старый 25.12.2013, 12:39   #9
StrangerM
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 6
Вес репутации: 0
StrangerM is an unknown quantity at this point
По умолчанию Re: Частотомер

Без ЖК
PHP код:
#include <util/delay.h> 

volatile unsigned int tachBuf
unsigned long tachValue

ISR(TIMER4_CAPT_vect
{  
    
TCNT4 0;  
    
tachBuf ICR4+120

//******************************************************************** 
void setup()     
{   
   
pinMode(49INPUT);  //Вход частотомера для импульсов TTL 
   
pinMode(4OUTPUT);//выход ШИМ для тестирования частотомера 
   
TCCR0B TCCR0B 0b11111000 1;//частота ШИМ 62500Гц 
   
analogWrite(4128);  //Запустить ШИМ 
   
digitalWrite(49,HIGH); // включить подтяжку входа 
   
Serial.begin(115200); 
   
TIM_Init(); 
  
_delay_ms(300); 
}   
//******************************************************************** 
void loop()     

  
cli();   
  
tachValue =16000000/tachBuf
    
Serial.print("freq="); 
  
Serial.println(tachValue,DEC); 
    
sei(); 
  
_delay_ms(300); 
}    
//******************************************************************** 
void TIM_Init(void

   
TIMSK4=(1<<ICIE4);  
   
TCCR4A=(0<<COM4A1)|(0<<COM4A0)|(0<<WGM41)|(0<<WGM40);   
   
TCCR4B=(1<<ICNC4)|(1<<ICES4)|(0<<WGM43)|(0<<WGM42)|(0<<CS42)|(0<<CS41)|(1<<CS40);  
   
TCNT4 0

StrangerM вне форума   Ответить с цитированием
Старый 25.12.2013, 13:10   #10
StrangerM
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 6
Вес репутации: 0
StrangerM is an unknown quantity at this point
По умолчанию Re: Частотомер

Цитата:
Сообщение от Admin Посмотреть сообщение
То есть эти таймеры получается идентичны, по флагам и регистрам?
Ага и вход ICP выведен на разъем.
StrangerM вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:48. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика