Пятница, 19.04.2024, 18:24
| RSS
Главная | DTMF управление нагрузкой на Atmega - Форум
Защита, контроль, управление
Форма входа
Логин:
Пароль:
[ Новые сообщения · Участники · Правила форума · Поиск · RSS · Чат

Наш канал в YouTube
]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум » ФОРУМ » Общие вопросы » DTMF управление нагрузкой на Atmega
DTMF управление нагрузкой на Atmega


AlexHWДата: Воскресенье, 19.05.2013, 23:55 | Сообщение # 1
Группа: Пользователи
Сообщений: 12
Статус: Offline
Походил по постам в этой теме, сложилось впечатление приверженности авторов решений к определенной платформе на PIC, снимаю шляпу.
По ходу хотелось бы обсудить подобные решения на базе Atmega16 с применением декодера MT8870 или HT9170.

Задача:

1. Схема аналогична здесь обсуждаемому GSM контроллеру, с разницей что в качестве сигнала служит не труба, а DTMF сигнал, подаваемый с линейного аудиовыхода на наш любимый MT8870.
2. Декодированный  сигнал идет на Atmega16 вход ADC на 4 канала (Порт A), на выходе имеем  4 канала (Порт D), подключенный драйвер LD293D c 2я DC моторами.

Управление:
3. Нажатие  кнопки (1) DTMF тастатуры (Бипера или какого либо НЧ) - одновременный запуск 2-х моторов DC 6 ..12 V в одну строну, повторное нажатие кнопки (1) останов, (2) запуск моторов в обратную сторону, повторное нажатие кнопки (2) останов, (3) запуск двигателя 1,  повторное нажатие кнопки (3) останов и соответственно кнопка (4) запуск двигателя 2,  повторное нажатие (4) останов.

4. Порт В - резервируем 8 каналов выхода DC 5V, под кнопки 5,6,7,8,9,0,#,* по аналогии п.3

Для отладки будущего AVR  исходника собрана схема в Proteus, вместо декодера MT8870 на каждый канал ставим цифровой генератор двоичного кода из набора инструментов.

Хотелось бы видеть дальнейшее совместное развитие, любые советы и предложения, личный, пинание и опыт приветствуются. Ежели в.у. алгоритм можно упростить, всегда за.
В случае интереса выставляю файл DCN.


Сообщение отредактировал AlexHW - Понедельник, 20.05.2013, 00:00
 
AdminДата: Понедельник, 20.05.2013, 09:20 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата (AlexHW)
Походил по постам в этой теме, сложилось впечатление приверженности авторов решений к определенной платформе на PIC, снимаю шляпу.

Да тут разницы большой нет, на каком контроллере реализовать устройство, пики и авры сейчас примерно одного уровня. И судя по многим радиолюбительским форумам, этот вопрос лежит скорее в "религиозно-политической" плоскости. Допустим для меня, намного проще написать программу для пик, чем начинать специально изучать для этого АВР. В тоже время, если есть необходимость собрать уже готовую схему на АВР, я не переделываю её под пик, а просто собираю.
Поэтому, немного непонятно, почему ТС ставится обязательное условие, что схема должна быть собрана именно "на базе Atmega16"? Разве что курсовой проект? smile

Цитата (AlexHW)
Декодированный  сигнал идет на Atmega16 вход ADC на 4 канала (Порт A), на выходе имеем  4 канала (Порт D), подключенный драйвер LD293D c 2я DC моторами

Не на 4 входа, а на 5 - не забываем про стробирующий импульс. И почему вход обозначен ADC? Зачем здесь АЦП? Это будет обычный цифровой вход.

Цитата (AlexHW)
Нажатие  кнопки (1) DTMF тастатуры (Бипера или какого либо НЧ) - одновременный запуск 2-х моторов DC 6 ..12 V в одну строну, повторное нажатие кнопки (1) останов, (2) запуск моторов в обратную сторону, повторное нажатие кнопки (2) останов, (3) запуск двигателя 1,  повторное нажатие кнопки (3) останов и соответственно кнопка (4) запуск двигателя 2,  повторное нажатие (4) останов.

Насколько актуально управление повторным нажатием? Может проще командами 1, 2, 3, 4 сделать запуск соотвествующих двигателей, а командой 5 останов любого из них? Впрочем, это не столь актуально, реализовать можно любой алгоритм управления.
 


AlexHWДата: Понедельник, 20.05.2013, 13:03 | Сообщение # 3
Группа: Пользователи
Сообщений: 12
Статус: Offline
Для меня принципиальной разницы нет Atmega или PIC, просто на первую в Протеусе немерено библиотек и можно всегда подобрать нужную конфигурацию.
Что касается входов ADC, это условно,  просто открываем их под наши задачи, по ходу резервируем прт B.
Согласен, остановы можно делать одной кнопкой, к примеру #
 
AdminДата: Понедельник, 20.05.2013, 14:05 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата (AlexHW)
просто на первую в Протеусе немерено библиотек и можно всегда подобрать нужную конфигурацию

Для PIC в Протеусе тоже достаточно моделей. Для такой схемы будет вполне достаточно что-нибудь типа 16F628А.

А дальше все просто - пишем несложную программу для считывания 4-х разрядного кода по стробирующему импульсу с выхода MT8870. В зависмости от принятого кода (цифры) выставляем на управляющих выходах микроконтроллера уровни, соотвествующие логике работы драйвера двигателей LD293D. Тут даже прерывания не придется использовать в программе, т.к. схема "заточена" только на прием сигналов DTMF.
 
AlexHWДата: Вторник, 21.05.2013, 00:09 | Сообщение # 5
Группа: Пользователи
Сообщений: 12
Статус: Offline

Нашел относительно свежую версию с более полным списком библиотек, действительно есть на чем разгуляться, чуть позже выставлю схему и начальный вариант AVR

Такой вот сырец, относительно MT8870 сердобольных прошу не напрягаться, его в Proteus(е) никогда не было, это всего лишь его камуфляж, на выходы его пинов 11 - 14 тупо вставлены генераторы, каждый из которых  предстоит отстраивать под 2 - й код, согласно нашим DTMF командам.

Симуляция на совершенно отвлеченном hex, запускается, следующая задача - отработка команд на входах процика 1-4 какой нибудь Led-дрыгалкой.  dry
Прикрепления: 7739358.jpg (524.2 Kb)


Сообщение отредактировал AlexHW - Вторник, 21.05.2013, 15:43
 


AdminДата: Вторник, 21.05.2013, 08:49 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Ещё раз поинтересуюсь - где выход STD с МТ8870? Как без него будет отслеживаться момент изменения кода на выходе декодера? Задействовать прерывания по входам Р1.0-Р1.3 микроконтроллера? А они есть у Atmega при изменении уровня по этим входам? Да и зачем прерывания в такой простой программе?

И симуляцию кода, как я уже отмечал, можно сделать гораздо проще - пять обычных кнопок, подключенных к VDD. Ведь нам не нужно генерировать сплошные DTMF серии - установили код Q1-Q4, подали кратковременно импульс с STD - вот и полная симуляция одиночной DTMF посылки. Именно так сделано вот в этой модели.

Далее, хорошо бы привести комбинации уровней на входах IN1-IN4, при которых двигатели вращаются в ту или иную сторону и остановлены. Даташита на драйвер двигателя сейчас под рукой нет.

Ну и последнее. Схемку и программу я могу "нарисовать", но только на основе PIC. Почему именно на PIC - см. сообщение #2. Будет желание разбираться с программой на Ассемблере - переносите потом на Atmel.
 
AlexHWДата: Вторник, 21.05.2013, 11:56 | Сообщение # 7
Группа: Пользователи
Сообщений: 12
Статус: Offline
Выход STD с МТ8870 , pin 17 через фильтр по схеме. Правда вот такая оказия VDD, разве что взять Atmega16 и задействовать AVCC ?

Цитата (Admin)
Задействовать прерывания по входам Р1.0-Р1.3 микроконтроллера? А они есть у Atmega при изменении уровня по этим входам? Да и зачем прерывания в такой простой программе?

Есть мнение, что прерывания по входам можно затаймить?
Если Вами предложенный вариант отрабатывает мой алгоритм в топике #1, с поправкой что все остановы подаются (#) это решает все проблемы.
Мне действительно нужно DTMF командами, получить управление двигателями  по внешнему произвольному сценарию, который ничего общего не имеет к протоколом GSM и телефонии, т.е. свободное внешнее управление .
Насколько это понятно?

Цитата (Admin)
Схемку и программу я могу "нарисовать", но только на основе PIC. Почему именно на PIC - см. сообщение #2. Будет желание разбираться с программой на Ассемблере - переносите потом на Atmel.
PIC c удовольствием воспользуюсь, было бы здорово,  мне придется погрестись в его транкрипции, т.к. я больше работаю на стороне (AVR) Си.  smile единственный момент и потом, как мне кажется, избранный атмеговский жук имеет дальнейшую перспективу развития по резервным портам?

К сожалению предложенную симуляцию не смог запустить, т.к. PIC не содержит прикрепленную прошивку cool


Сообщение отредактировал AlexHW - Вторник, 21.05.2013, 12:47
 
AdminДата: Вторник, 21.05.2013, 13:38 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Цитата Admin ()
Выход STD с МТ8870 , pin 17 через фильтр по схеме

А при чем тут пин 17??? Стробирующий импульс снимается с 15 вывода МТ8870
Поясняю: при приеме DTMF команды на выходах 11-14 устанавливается четырехразрядный код принятого символа, а на выходе 15 появляется высокий уровень на время приема DTMF посылки.

Цитата AlexHW ()
Есть мнение, что прерывания по входам можно затаймить?

Почти все МК имеют прерывания по изменению сигналов на определенных входах. Но здесь это задействовать абсолютно не имеет смысла при условии наличия выхода строб-импульса у декодера DTMF.

Цитата AlexHW ()
Если Вами предложенный вариант отрабатывает мой алгоритм в топике #1, с поправкой что все остановы подаются (#) это решает все проблемы. Мне действительно нужно DTMF командами, получить управление двигателями  по внешнему произвольному сценарию, который ничего общего не имеет к протоколом GSM и телефонии, т.е. свободное внешнее управление . Насколько это понятно?

Полностью отрабатывает. А в конечном итоге Вам нужно устройство, которое просто выставляет определенные уровни на входах IN1-IN4 драйвера двигателей при приеме определенной команды (цифры) в коде DTMF. Этого более чем достаточно для реализации поставленной задачи.

Цитата AlexHW ()
К сожалению предложенную симуляцию не смог запустить, т.к. PIC не содержит прикрепленную прошивку

Ну уж чего-чего, а прошивок под эту схему тут более, чем достаточно. Хотя бы вот здесь.
 
AlexHWДата: Вторник, 21.05.2013, 18:01 | Сообщение # 9
Группа: Пользователи
Сообщений: 12
Статус: Offline
Дико извиняюсь, после непродолжительного танца с бубном над Вашей версией Proteus и исходником v 1.2, я не смог отследить нужные мне
команды тастатуры (1, 2, 3, 4, 5, *, #) и другие свитчи, выставляю свое
понимание , своими нажатиями все мозги порвал симулятору после пуска.
Прошивка бежит без претензий к железу. Если не трудно, хотелось бы
увидеть соответствие надписей кнопкам , их правильное состояние к
моменту запуска симуляции, а так же Ваши комментарии относительно тех
блоков схем, которые можно без проблем (опросы состояний пинов и т.п.)
исключить из моей задачи.
Принципиалка так же не до конца информативна.
Управление драйвером  L293D приходит по 4 (5V) каналам на ?  пока что как то так.

Прикрепления: 3793531.jpg (683.8 Kb)
 
AdminДата: Вторник, 21.05.2013, 18:33 | Сообщение # 10
Admin
Группа: Администраторы
Сообщений: 4260
Статус: Offline
Все идет по порядку: 11 вывод МТ8870 - кнопка №1, 12 - 2 , 13 - 3, 14 - 4, 15 (строб) - 5.

А нахрена переделывать этот проект и что-то из него убирать и добавлять? Не занимайтесь ерундой, вернусь с командировки, напишу я Вам эту программу, тут работы на час. Только мне нужен ответ вот на этот вопрос, который почему-то игнорируется:

Цитата (Admin)
Далее, хорошо бы привести комбинации уровней на входах IN1-IN4, при которых двигатели вращаются в ту или иную сторону и остановлены. Даташита на драйвер двигателя сейчас под рукой нет.


Потому что это:

Цитата (AlexHW)
Управление драйвером  L293D приходит по 4 (5V) каналам на ?  пока что как то так.

не ответ. Мне нужно знать конкретные значения! Допустим - при IN1=1, IN2=0 двигатель №1 вращается в одну сторону, при IN1=0, IN2=1 - в обратную, при IN1=0, IN2=0 - остановлен и т.д. Блин, ну не разбираться же мне ещё и с даташитом для драйвера двигателей.
 
Форум » ФОРУМ » Общие вопросы » DTMF управление нагрузкой на Atmega
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:



T2M © 2024
Сайт управляется системой uCoz