реклама на сайте
подробности

 
 
> Управление atmega16 кодом СК 2/11, Требуется помощь.
altec
сообщение Feb 19 2017, 07:00
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Добрый день, уважаемые форумчане!
Напишу сразу - это мой первый опыт работы с МК вообще и с МК atmel в частности. Передо мной стоит следующая задача: имеются два микроконтроллера - atmega16 и pic16c622a (но этот для другой ветки форума rolleyes.gif ). Необходимо сделать так, чтобы, в зависимости от того, какая двухчастотная посылка поступила на вход МК, на соответствующем выходе появлялось 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. Так же не полный нуль в электронике.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 25)
Den64
сообщение Feb 19 2017, 09:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Элементарная задача для контроллера. Выбирайте контроллер с нужным количеством выходов и делайте.
Go to the top of the page
 
+Quote Post
altec
сообщение Feb 19 2017, 10:16
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Если бы я знал, как это сделать, то не открывал бы данную тему.
Go to the top of the page
 
+Quote Post
Den64
сообщение Feb 19 2017, 10:25
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Сколько выходов нужно?
Go to the top of the page
 
+Quote Post
altec
сообщение Feb 19 2017, 10:41
Сообщение #5





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Den64, как раз с количеством выходов проблем нет. В каждом конкретном случае я выберу МК с необходимым количеством выходов. Мне, пока, не очень ясно с чего начать написание самой программы. Повторюсь еще раз - это мой первый опыт программирования микроконтроллера.
Точнее я понимаю, что сначала необходимо определить частоту, точнее частоты, входной посылки. А это, скорее всего, определяется подсчетом импульсов за определенный промежуток времени. Зная, какие частоты на входе, уже можно дать команду на вывод Uпит. на тот или иной порт. Я правильно рассуждаю?

Сообщение отредактировал altec - Feb 19 2017, 10:43
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 19 2017, 10:55
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(altec @ Feb 19 2017, 13:41) *
А это, скорее всего, определяется подсчетом импульсов за определенный промежуток времени.

Скорее всего- нет.
А начинать надо с выяснения алгоритма. Думаю, полезно почитать про DTMF.

Хотя если :
Цитата
аналоговый сигнал, состоящий из следующих друг-за другом двух частот

это так, то можно пробовать.
Go to the top of the page
 
+Quote Post
Den64
сообщение Feb 19 2017, 12:01
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Цитата(altec @ Feb 19 2017, 13:41) *
... Мне, пока, не очень ясно с чего начать написание самой программы. Повторюсь еще раз - это мой первый опыт программирования микроконтроллера....

С/С++ владеете? Если хоть не много то для начала нужно написать несколько функций. Одна из них подсчёт импульсов грубо говоря
int GetFrq(void)
{
ClrMyTimer();
Delay(100);
return GetMyTimer();
}
Начните примерно с такого.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Feb 19 2017, 19:17
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



На сайте Atmel'а из раздела "Application notes" можно скачать готовые тексты с подходящими алгоритмами.
Например, AVR135: Using Timer Capture to Measure PWM Duty Cycle, AVR205: Frequency Measurement Made Easy with Atmel tinyAVR and Atmel megaAVR.
Остается подобрать подходящий вариант и подчистить ошибки.


Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 19 2017, 19:42
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(altec @ Feb 19 2017, 13:16) *
Если бы я знал, как это сделать, то не открывал бы данную тему.


Нужно сделать простейший частотомер с временем подсчета 0.1 сек, получите точность 10-12Гц, что в вашем случае приемлемо. Потом сравните пару соседних выборок частот и если совпадают - частота определена правильно, затем ждите изменения частоты - это будет след посылка и т.д. Очень похоже на определение номера в старых АОНах, можете погуглить на эту тему..
Go to the top of the page
 
+Quote Post
muravei
сообщение Feb 20 2017, 05:41
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(mantech @ Feb 19 2017, 22:42) *
похоже на определение номера в старых АОНах, можете погуглить на эту тему..

Совсем не похоже, там две частоты шли одновременно.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 20 2017, 10:41
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(muravei @ Feb 19 2017, 13:55) *
Скорее всего- нет.
А начинать надо с выяснения алгоритма. Думаю, полезно почитать про DTMF.

Хотя если :

это так, то можно пробовать.


В том то и дело, что DTMF тут не к месту. Нужен компаратор и подсчет импульсов для определения частоты и длительности.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 21 2017, 19:33
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(muravei @ Feb 20 2017, 08:41) *
Совсем не похоже, там две частоты шли одновременно.

Одновременно частоты идут как раз в DTMF, а в АОНах(не путать с callerID) они шли по очереди, но не повторяясь.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 21 2017, 20:40
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(mantech @ Feb 21 2017, 21:33) *
Одновременно частоты идут как раз в DTMF, а в АОНах(не путать с callerID) они шли по очереди, но не повторяясь.

Не порите чушь sad.gif. И тот и другой двухчастотные, 2 из 8 и 2 из 6, только второй еще и безинтервальный.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 22 2017, 14:45
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(zltigo @ Feb 21 2017, 23:40) *
Не порите чушь sad.gif. И тот и другой двухчастотные, 2 из 8 и 2 из 6, только второй еще и безинтервальный.

Да, ошибся малость, давно дело было... В любом случае, ТСу об этом можно мозг не напрягать, у него одна частота, поэтому нужен просто частотомер.
Go to the top of the page
 
+Quote Post
altec
сообщение Feb 23 2017, 10:13
Сообщение #15





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Уже неделю спать толком не могу - верчу в голове различные варианты для решения задачи biggrin.gif Установил Proteus, накачал кучу литературы по C и программированию AVR. В принципе, в голове уже сложился определенный алгоритм, но вот реализовать его в коде пока не получается.

Сообщение отредактировал altec - Feb 23 2017, 10:14
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 23 2017, 17:56
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(altec @ Feb 23 2017, 14:13) *
В принципе, в голове уже сложился определенный алгоритм

Вот и озвучили бы свой алгоритм.
Думаю что нужно написать подпрограмму измерения периода входного сигнала и затем выяснить как запускать эту пп в нужный момент времени.
Go to the top of the page
 
+Quote Post
altec
сообщение Mar 11 2017, 04:27
Сообщение #17





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Добрый день!

С определением МК входящей двухчастотной посылки, вроде, разобрался biggrin.gif . Сейчас интересует вопрос контроля того, что МК "принял" код. Т.е. есть необходимость в том, чтобы он как-то "сообщил" о том, что код принят, и какой-то из портов активирован. Я хочу, чтобы в качестве сообщения, после принятия кода, МК отправлял на определенный выход НЧ сигнал. Сигнал - это обычный одночастотный сигнал из диапазона 300-3400 Гц. Имеется ли возможность средствами самого МК реализовать подобное? Или какой-нибудь внешний ГНЧ лепить придется?
Go to the top of the page
 
+Quote Post
Harvester
сообщение Mar 11 2017, 07:36
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Пьезокерамический излучатель (баззер, пищалка). Есть активные (со встроенным генератором) - управляются просто уровнем. Есть пассивные - на них надо подавать переменный сигнал, который легко формируется самим МК с помощью модуля Сapture/Compare (ШИМ).

Сообщение отредактировал IgorKossak - Mar 11 2017, 17:33
Причина редактирования: бездумное цитирование


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
Obam
сообщение Mar 11 2017, 09:42
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Забавная "хотелка": одну тоновую комбинацию заменять другим тоном; может пусть пользователь просто услышит исходную (шутка). Т.е. отображение идентификатора комбинации не достаточно? (:

Сообщение отредактировал IgorKossak - Mar 11 2017, 17:33
Причина редактирования: бездумное цитирование


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
altec
сообщение Mar 11 2017, 11:27
Сообщение #20





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Цитата(Harvester @ Mar 11 2017, 12:36) *
Пьезокерамический излучатель (баззер, пищалка). Есть активные (со встроенным генератором) - управляются просто уровнем. Есть пассивные - на них надо подавать переменный сигнал, который легко формируется самим МК с помощью модуля Сapture/Compare (ШИМ).



Цитата(Obam @ Mar 11 2017, 14:42) *
...Т.е. отображение идентификатора комбинации не достаточно? (:


Смысл в том, что пользователь и МК находятся в разных местах. Соответственно, пользователь не может визуально убедиться в том, что МК принял кодовую посылку и активировал какой-либо порт. Поэтому необходимо как-то известить пользователя об этом. Самое простое послать в ответ, по линии связи, звуковой сигнал, который пользователь сможет прослушать.
Go to the top of the page
 
+Quote Post
altec
сообщение Mar 31 2017, 14:56
Сообщение #21





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Не стал открывать новую тему, т.к. очередной вопрос, по сути, продолжение данной темы. Собственно вопрос следующий - как можно униполярный сигнал преобразовать в биполярный? Поясню. С помощью МК формируется меандр частотой 400 Гц. Далее с помощью ПФ из данного сигнала выделяется первая гармоника. Т.е. получаем синусоиду частотой 400 Гц. Но она униполярна - от 0 В до +1 В. Сигнал планируется передавать по линии связи, поэтому необходимо как-то преобразовать его в биполярный. Как-нибудь это можно осуществить?
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 31 2017, 17:38
Сообщение #22





Guests






Цитата(altec @ Mar 31 2017, 17:56) *
поэтому необходимо как-то преобразовать его в биполярный. Как-нибудь это можно осуществить?

На двух транзисторах, можно и на одном, можно и без транзисторов.
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 31 2017, 17:58
Сообщение #23


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(altec @ Mar 31 2017, 17:56) *
Как-нибудь это можно осуществить?

Можно. Поставьте последовательно конденсатор (ВЧ фильтр). Он уберет постоянную составляющую.
Go to the top of the page
 
+Quote Post
altec
сообщение Apr 1 2017, 03:24
Сообщение #24





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Цитата(TSerg @ Mar 31 2017, 22:38) *
На двух транзисторах, можно и на одном, можно и без транзисторов.


Можно по-подробней? Или пример схемы?

Цитата(Baser @ Mar 31 2017, 22:58) *
Можно. Поставьте последовательно конденсатор (ВЧ фильтр). Он уберет постоянную составляющую.


Я первым делом подумал про конденсатор, но эмуляция в Протеусе показывает не совсем то, что я ожидал. Я думаю это из-за того, что в схеме используется однополярный источник питания 0 - +5В.
Go to the top of the page
 
+Quote Post
Den64
сообщение Apr 1 2017, 11:25
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Цитата(altec @ Apr 1 2017, 06:24) *
Я первым делом подумал про конденсатор, но эмуляция в Протеусе показывает не совсем то, что я ожидал. Я думаю это из-за того, что в схеме используется однополярный источник питания 0 - +5В.

Конденсатор в протеусе не убирает постоянную составляющую? Удивительный ... протеус.
Go to the top of the page
 
+Quote Post
altec
сообщение Apr 2 2017, 10:49
Сообщение #26





Группа: Участник
Сообщений: 9
Регистрация: 19-02-17
Из: Пермский край
Пользователь №: 95 507



Цитата(Den64 @ Apr 1 2017, 16:25) *
Удивительный ... протеус.


Разобрался. С Протеусом все нормально. Это я сглупил - не внес в схему эквивалент нагрузки. Как только добавил в схему сопротивление нагрузки - все встало на свои места.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 16:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.05625 секунд с 7
ELECTRONIX ©2004-2016