Например TDA7294

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





Текущее время: Вт июл 08, 2025 14:24:52

Часовой пояс: 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), чему будет равно значение?

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


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

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

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 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++).

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



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

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


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

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

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 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 часа


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

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


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

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


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