Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino функция tone (некорректная работа)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс авг 10, 2025 03:21:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 19:28:33 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
Бьюсь безуспешно второй день с функцией tone в ардуинке.
Задача алгоритма, вычислить частоту входного сигнала.
Затем умножить ее или разделить, и выдать на другой пин ардуино конвертированную частоту. Генерация реализована через tone
И вроде все OK, когда на вход подается реальная частота.
Но если от входа отключить сигнал, то на выходе появляется меандр 30Гц(вижу его осциллографом). Хотя в исходнике прописано условие, если частота меньше 40ГЦ, то noTone.

Код:
int Htime;       // целочисленная переменная для хранения времени высокого логического уровня
int Ltime;       // целочисленная переменная для хранения времени низкого логического уровня
float Ttime;     // переменная для хранения общей длительности периода
float frequency_in_raw; // переменная для хранения частоты входной
float frequency_in_avg; // переменная для хранения частоты входной
float frequency_in_avg_rez; // переменная для хранения частоты входной
float frequency_out; // переменная для хранения частоты
int i=0;



void setup()
{
  // устанавливаем скорость передачи данных последовательного соединения.
  Serial.begin(9600);
  pinMode(2,INPUT);
}

void loop()
{
  for(i=0;i<3;i++)
    {
  Htime=pulseIn(2,HIGH);    // прочитать время высокого логического уровня
  Ltime=pulseIn(2,LOW);     // прочитать время низкого логического уровня
  Ttime = Htime+Ltime;
  frequency_in_raw=1000000/Ttime;  // получение частоты из Ttime в микросекундах
  frequency_in_avg+=frequency_in_raw;
  Serial.println(frequency_in_raw);
    }
  if (i=4)
  {
    frequency_in_avg_rez= frequency_in_avg/3;
    frequency_in_avg=0;
 
    Serial.println(frequency_in_avg_rez);
   Serial.println(' ');
    i=0;
   }


frequency_out=frequency_in_avg_rez*5; //коэффициент корреляции

Serial.println(frequency_out);
  Serial.println('.');
// delay(5);

    if (frequency_in_avg_rez<40 && frequency_in_avg_rez>4000)
    {
    noTone(8);
    }
 
    if (40<frequency_in_avg_rez)
    {
   tone(8, frequency_out);
    }

}


Последний раз редактировалось ferio Ср июн 10, 2020 20:23:59, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 19:37:45 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
Нормальная среда разработки предупредила бы нерадивого кодера, что, например, возможна ситуация, когда frequency_in_avg_rez ничего не присвоится. А поскольку оно (да и не только оно) ни разу не проинициализированно (кто ваще придумал эту инициализацию?), то его значение в этом случает известно лишь богу (или богам, если их более одного).

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:13:06 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
BlackKilkennyCat, а как будет правильно? кодер из меня такой себе, даже и не спорю. :roll:
просто условие if (frequency_in_avg_rez<40 & frequency_in_avg_rez>4000) по моему мнению подразумевает, что функция tone срабатывает при заданном диапазоне этого самого frequency_in_avg_rez


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:17:39 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
frequency_in_avg_rez принимает значение единственный раз, если выполняется какое-то условие if (i=4)
если оно не выполнится (а оно не выполнится, так как в цикле i<3), чему будет равно значение?

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:22:22 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
& здесь неуместно, нужно &&

и я рекомендую записывать все выражения при помощи скобок

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:23:19 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
но ведь условие if (i=4) не может быть не выполненным, так передним for(i=0;i<3;i++).

здесь идет подсчет среднего значения на основании трех измерений.



Цитата:
кроме того, не срабатывает ли постоянно ватчдог?

как это определить? среда ардуино вообще не дает фьзами оперировать, поэтому неизвестно включен он, или выключен как таковой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:23:51 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 2
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Хотя я соврал, здесь вообще необходимо не &&, а ||

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:26:20 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
ARV, исправил, уже так. масло масленное, но результат тот же. на выходе при пустом входе 30гц

Код:
if (frequency_in_avg_rez<40 || 4000<frequency_in_avg_rez)
    {
    noTone(8);
    }
   
    if (40<frequency_in_avg_rez || frequency_in_avg_rez<4000)
    {
   tone(8, frequency_out);
    }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:27:39 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
но ведь условие if (i=4) не может быть не выполненным, так передним for(i=0;i<3;i++).

если i = 3 что будет с циклом?

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:30:36 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
BlackKilkennyCat, кажется понял. нужно if (i=3)
исправил, но все равно на выходе 30ГЦ, когда пустой вход


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 20:31:48 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
нет. смотрите внимательно, какие значения может принять i, если оно должно быть меньше 3

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Ср июн 10, 2020 23:37:45 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
0-1-2 :?

ps. самое интересное, что работает) но пока реальный сигнал на входе.

Добавлено after 3 hours 41 second:
Разобрался .
Но появился другой вопрос. С помощью tone нельзя генерировать меандр ниже 31ГЦ.
Как правильнее реализовать генерацию 10гц. Нужен диапазон от 10 до 200гц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino функция tone (некорректная работа)
СообщениеДобавлено: Чт июн 11, 2020 09:48:57 
Прорезались зубы

Зарегистрирован: Вт мар 31, 2009 09:14:47
Сообщений: 204
Рейтинг сообщения: 0
Всем спасибо. Вопрос снят.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y