Перейти к содержанию

Управление atmega16 кодом СК 2/11


Рекомендуемые сообщения

Добрый день, уважаемые форумчане!
Напишу сразу - это мой первый опыт работы с МК вообще и с МК atmel в частности. Передо мной стоит следующая задача: имеются два микроконтроллера - atmega16 и pic16c622a (но этот для другой ветки форума  ). Необходимо сделать так, чтобы, в зависимости от того, какая двухчастотная посылка поступила на вход МК, на соответствующем выходе появлялось U. Вход используется один. Выходы - в зависимости от полученной двухчастотной посылки. Двухчастотная посылка представляет из себя аналоговый сигнал, состоящий из следующих друг-за другом двух частот: сигнал первой частоты длительностью 0,8 сек, второй - 1,6 сек. Таким образом вся посылка длиться 2,4 сек.
Всего частот 11:
F1 316 Гц
F2 430 Гц
F3 585 Гц
F4 795 Гц
F5 1080 Гц
F6 1470 Гц
F7 2000 Гц
F8 890 Гц
F9 1215 Гц
F10 1360 Гц
F11 1620 Гц
Т.о. всего комбинаций - 110.

Возможно ли это реализовать на данных МК? Может на каком-то МК будет сделать это проще? Буду рад любой помощи по данному вопросу.
Имею небольшое представление о языке C. Так же не полный нуль в электронике.

СК 2-11.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Конечно можно. Да и задача вобщем-то "не бей лежачего", даже никакой математики не надо. И даже АЦП задействовать не нужно, ведь форму сигнала анализировать не нужно, лишь частоту при помощи компаратора и таймера.

Частоты даны, это хорошо... дальше в Т.З. надо задаться точностью частот, точностью определения этих частот, точностью временных интервалов, условие отличия сигнала от помехи в том числе...

Собственно, ИМХО базовой функцией алгоритма будет определение частоты по периоду входного сигнала. Среди всех значений выбрать максимальное по статистической выборке(каких значений было больше всего) и брать это значение за частотную посылку. За 2.4сек если измерить то в статистике у тебя будет два пика - это те самые нужные частоты, причём второй частоты будет в 2 раза больше, таким образом легко отделить первую частоту от второй.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Alexeyslav, спасибо. Немного начинает проясняться. Если я правильно понял, то по большому счету нужно собрать частотомер. А как это оформить в виде кода? Можете "ткнуть" меня в какой-нибудь учебник или справочник.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ручками, однако.

Но для начала, начните с математической модели программы. Что она должна делать и как, а перед этим вам нужно формализовать задачу и найти надёжные критерии по которым вы будете оценивать её работоспособность(так сказать набор тестовых сигналов, чтобы удостоверится что ваша программа работает во всех заявленных условиях - допустимые отклонения частот, временных интервалов, наличие помех). Это не менее важно чем придумать алгоритм.

Частотомер это очень грубое приближение, потому что пока вы будете измерять частоту с необходимой точностью уйдёт время, сигнал сменится и т.д. Измерять надо длительность интервала между импульсами. с ограничением по минимуму и максимуму - слишком короткие игнорировать, а слишком длинные будут являться признаком окончания тоновой посылки. Скорей всего это проще будет сделать на таймере.
Результаты каждого измерения периода входного сигнала сохранять в таблице, индексом которой будет являться измеренная величина, а содержимым - количество раз которое была измерена эта длительность.

По окончанию, ты получишь в таблице статистическое распределение, по которому уже следующий алгоритм определит какие были частоты(больше математики чем программирования) и какая из них была первая а какая вторая. Результаты этого этапа можно через UART передавать на компьютер и анализировать в экселе, например, или другом математическом софте. Забыл как называется программа, в которой можно построить целую виртуальную лабораторию взаимодействующую с реальными приборами(которым будет контроллер). А, да... МатЛаб

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

В голове уже сложился определенный алгоритм, но вот реализовать его в коде пока не получается. Например, как задать, чтобы счетчик считал импульсы не все время, а только 0,8 сек, затем сделал паузу на 0,4 сек, затем снова стал считать в течении 0,8 сек, пауза - 0,4 сек, счет - 0,8 сек? Использовать delay?

Ссылка на комментарий
Поделиться на другие сайты

Никогда не используйте delay для создания длительных временных задержек. В течение всего времени задержки МК будет простаивать. Используйте встроенные таймеры и прерывания.

Ссылка на комментарий
Поделиться на другие сайты

Это пример изначально неправильного подхода к решению. Не надо считать импульсы. Надо измерять период. За время действия посылки у тебя будет около 2000 измерений из которых легко и достаточно надёжно определяются частоты с применением лёгкой математики и статистики, даже несмотря на наличие помех - на то она и статистика.
Вторым таймером, надо будет только общую выдержку обеспечить, когда уже пора будет результат анализировать, и то в качестве резервного сигнала. Ведь определить конец посылки можно и по самому сигналу(слишком большая пауза между импульсами, верней отсутствие импульсов некоторое время), нет необходимости в точных временных интервалах.
Сложности я вижу только с фиксацией момент начала посылки, и определение фальстарта из-за помехи. Это несколько усложнит алгоритм, но заложить возможность надо заранее.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Пимерный код фильтра

ISR(INT0_vect)
  {
    unsigned int len;
    //сохраняем значение таймера
    len=TCNT0;
    //если импульс слишком короткий - считаем за помеху и пропускаем
    if(len < MIN_PULSE) return;
   TCNT0=0;

    //проверка на макс длительность
    if(len > MAX_PULSE)
      {
        ..........
      }
    //вызываем функции приема;
  }

 

Изменено пользователем DmitryS
Ссылка на комментарий
Поделиться на другие сайты

Только я бы RETURN не использовал, надо условие построить так чтобы обойтись без него. Одним IF-ом в принципе вполне возможно. А таймер и так и так сбрасывать, раз прерывание.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Добрый день!

С определением МК входящей двухчастотной посылки, вроде, разобрался :D. Сейчас интересует вопрос контроля того, что МК "принял" код. Т.е. есть необходимость в том, чтобы он как-то "сообщил" о том, что код принят, и какой-то из портов активирован. Я хочу, чтобы в качестве сообщения, после принятия кода, МК отправлял на определенный выход НЧ сигнал. Сигнал - это обычный одночастотный сигнал из диапазона 300-3400 Гц. Имеется ли возможность средствами самого МК реализовать подобное? Или какой-нибудь внешний ГНЧ лепить придется?

Изменено пользователем altec
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Не стал открывать новую тему, т.к. очередной вопрос, по сути, продолжение данной темы. Собственно вопрос следующий - как можно униполярный сигнал преобразовать в биполярный? Поясню. С помощью МК формируется меандр частотой 400 Гц. Далее с помощью ПФ из данного сигнала выделяется первая гармоника. Т.е. получаем синусоиду частотой 400 Гц. Но она униполярна - от 0 В до +1 В. Сигнал планируется передавать по линии связи, поэтому необходимо как-то преобразовать его в биполярный. Как-нибудь это можно осуществить?

Изменено пользователем altec
Ссылка на комментарий
Поделиться на другие сайты

простой способ - пропустить сигнал через разделительный конденсатор
если сложнее то гугл знает: https://www.google.ru/search?q=сигнал+из+униполярного+в+биполярный&newwindow=1&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiQzvDegoHTAhVFCpoKHXG3Dn4Q_AUIBigB&biw=1920&bih=981
или имеете ввиду так: http://cxem.net/pitanie/5-155.php

Изменено пользователем dm37
Ссылка на комментарий
Поделиться на другие сайты

В 31.03.2017 в 20:04, dm37 сказал:

простой способ - пропустить сигнал через разделительный конденсатор...

Я первым делом тоже подумал про разделительный конденсатор, но симуляция в Протеусе показывала какую-то ерунду. А проблема оказалась в том, что я не внес в схему эквивалент нагрузки. Как только добавил в схему сопротивление нагрузки - все встало на свои места. 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...