altec 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба Добрый день, уважаемые форумчане! Напишу сразу - это мой первый опыт работы с МК вообще и с МК atmel в частности. Передо мной стоит следующая задача: имеются два микроконтроллера - atmega16 и pic16c622a (но этот для другой ветки форума :rolleyes: ). Необходимо сделать так, чтобы, в зависимости от того, какая двухчастотная посылка поступила на вход МК, на соответствующем выходе появлялось 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. Так же не полный нуль в электронике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба Элементарная задача для контроллера. Выбирайте контроллер с нужным количеством выходов и делайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
altec 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба Если бы я знал, как это сделать, то не открывал бы данную тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба Сколько выходов нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
altec 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 (изменено) · Жалоба Den64, как раз с количеством выходов проблем нет. В каждом конкретном случае я выберу МК с необходимым количеством выходов. Мне, пока, не очень ясно с чего начать написание самой программы. Повторюсь еще раз - это мой первый опыт программирования микроконтроллера. Точнее я понимаю, что сначала необходимо определить частоту, точнее частоты, входной посылки. А это, скорее всего, определяется подсчетом импульсов за определенный промежуток времени. Зная, какие частоты на входе, уже можно дать команду на вывод Uпит. на тот или иной порт. Я правильно рассуждаю? Изменено 19 февраля, 2017 пользователем altec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба А это, скорее всего, определяется подсчетом импульсов за определенный промежуток времени. Скорее всего- нет. А начинать надо с выяснения алгоритма. Думаю, полезно почитать про DTMF. Хотя если : аналоговый сигнал, состоящий из следующих друг-за другом двух частот это так, то можно пробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба ... Мне, пока, не очень ясно с чего начать написание самой программы. Повторюсь еще раз - это мой первый опыт программирования микроконтроллера.... С/С++ владеете? Если хоть не много то для начала нужно написать несколько функций. Одна из них подсчёт импульсов грубо говоря int GetFrq(void) { ClrMyTimer(); Delay(100); return GetMyTimer(); } Начните примерно с такого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба На сайте Atmel'а из раздела "Application notes" можно скачать готовые тексты с подходящими алгоритмами. Например, AVR135: Using Timer Capture to Measure PWM Duty Cycle, AVR205: Frequency Measurement Made Easy with Atmel tinyAVR and Atmel megaAVR. Остается подобрать подходящий вариант и подчистить ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 19 февраля, 2017 Опубликовано 19 февраля, 2017 · Жалоба Если бы я знал, как это сделать, то не открывал бы данную тему. Нужно сделать простейший частотомер с временем подсчета 0.1 сек, получите точность 10-12Гц, что в вашем случае приемлемо. Потом сравните пару соседних выборок частот и если совпадают - частота определена правильно, затем ждите изменения частоты - это будет след посылка и т.д. Очень похоже на определение номера в старых АОНах, можете погуглить на эту тему.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба похоже на определение номера в старых АОНах, можете погуглить на эту тему.. Совсем не похоже, там две частоты шли одновременно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба Скорее всего- нет. А начинать надо с выяснения алгоритма. Думаю, полезно почитать про DTMF. Хотя если : это так, то можно пробовать. В том то и дело, что DTMF тут не к месту. Нужен компаратор и подсчет импульсов для определения частоты и длительности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба Совсем не похоже, там две частоты шли одновременно. Одновременно частоты идут как раз в DTMF, а в АОНах(не путать с callerID) они шли по очереди, но не повторяясь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба Одновременно частоты идут как раз в DTMF, а в АОНах(не путать с callerID) они шли по очереди, но не повторяясь. Не порите чушь :(. И тот и другой двухчастотные, 2 из 8 и 2 из 6, только второй еще и безинтервальный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Не порите чушь :(. И тот и другой двухчастотные, 2 из 8 и 2 из 6, только второй еще и безинтервальный. Да, ошибся малость, давно дело было... В любом случае, ТСу об этом можно мозг не напрягать, у него одна частота, поэтому нужен просто частотомер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
altec 0 23 февраля, 2017 Опубликовано 23 февраля, 2017 (изменено) · Жалоба Уже неделю спать толком не могу - верчу в голове различные варианты для решения задачи Установил Proteus, накачал кучу литературы по C и программированию AVR. В принципе, в голове уже сложился определенный алгоритм, но вот реализовать его в коде пока не получается. Изменено 23 февраля, 2017 пользователем altec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться