Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

-Или только можно перейти к метке в начало программы, как бы сброс.
В этом случае никакого сброса не будет; будет простой переход на заданный адрес PC
-вся периферия останется инициализированной
-Или ногой, подключенной к RESET из программы дернуть на массу?
так, наверно, можно; но, мне лично, эта идея не нравится. В одном из приборов нужен был переход на совершенно другой участок программы; воспользовался тем, что имелась кнопка "ON/OFF" подключенная к INT0 и, при удержании ее во время выключения более 7 секунд, прибор переходил на новый участок программы. при этом не нужно инициализировать снова всю периферию, а ведь сейчас эта процедура занимает довольно много времени.
Реклама
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Обработка кнопки (тактовой).
Как известно, при нажатии на тактовую кнопку, соприкасаются 2 пластины, при этом, может возникнуть так называемый дребезг, это когда пластины отпружинились, отскочили, и опять соприкоснулись.
МК работает настолько быстро, что может уловить эти "дребезги" и принять эти "ненужные" включения как условия.
От дребезга можно избавиться как аппаратно, например, с помощью одновибратора или RS-триггера, так и программно.
Но программно как это реализовать на ассемблере?
Вообще, сколько хватает, чтобы пластины кнопки успокоились и приняли однозначное положение?
Допустим, 50мс.
Тогда это будет выглядеть следующим образом, верно?

; ///уже нажали на кнопку
rcall delay_50mc ; идем в обработчик задержки
SBRS... проверяем регистр.
и т.д...
Или как? приведите пример с комментариями к каждой строчке, пожалуйста...
Не умеешь - не берись, но не взявшись не научишься...
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Конечно можно сделать и так, но тогда на время обработки паузы МК ничем другим заниматься не сможет.
На мой взгляд опрос лучше всетаки делать в прерывании.
Допустим таймер работает с отсечкой в 5..10 мс (очень часто используется для динамической индикации) тогда в прерывании пока нажата кнопка делаем накопление в каком-нибудь регистре, и как будет превышен порог - принимаем решение, что кнопка нажата/отпущена, а процик в это время занимается полезной работой.

зы: Жень еще рекомендую книжку Ю.Ревич "Практическое программирование микропроцессоров ATMEL AVR на языке ассемблера",
это если хочешь на асме писать, оч.полезная книжечка.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

Не читатели мы?
А вы?
Я же написал вроде

Но программно как это реализовать на ассемблере?
зы: Жень еще рекомендую книжку Ю.Ревич "Практическое программирование микропроцессоров ATMEL AVR на языке ассемблера",
это если хочешь на асме писать, оч.полезная книжечка.
Да, эту тоже заказать хочу, только пока что не сейчас. Когда сестра в Москву поедет (а это через месяц где-то).
Действительно, программы писать буду исключительно на ассемблере, т.к. из языков высокого уровня мало что выкачаешь...
Не умеешь - не берись, но не взявшись не научишься...
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):Кто в курсе, на МЕГЕ8 и др. АВРках в программе можно сброс сделать (reset) -какой командой.

-Или только можно перейти к метке в начало программы, как бы сброс.
-Или ногой, подключенной к RESET из программы дернуть на массу?

хочу сделать, что бы если держать кнопку более 3х секунд, происходил полный сброс контроллера...
Можно после того как контроллер поймет, что кнопка нажата более 3 секунд включить собаку (watchdog) и войти в вечный цикл, в котором не должно быть команды сброса собаки. Тогда по истечении некоторого времени (периода собаки) произойдет честный аппаратный сброс.
Если пытаться ногой дергать пин сброса, то возможны неприятные эффекты - есть вариант что контроллер "недобросится". Если подобный подход и применять, то ногой нужно запускать какой-либо буферный элемент, который после запуска продержит низкий уровень на ноге сброса в течение времени, необходимого для гарантированного сброса контроллера.
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Ну, замечу я вам, "часовая собака" не совсем на ресет перейдет, но вот только зачем такие заморочки я не пойму :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

с собачкой и циклом хорошо придумано :write: запишемс...
зачем? -нужен мне бывает сброс мк, в отладке, и когда доступа к мк нет, зато есть кнопка.

GP1- а на что же перейдет собачка, почему "не совсем на ресет"? вроде в даташите как раз указаны несколько вариантов сброса, один из них- собачка.
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

:shock:
доступа нет, а кнопка есть.
а к чему тогда она прикошечена, кнопака-то?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

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

в общем вопрос то не в том что за кнопка, да где... а в том, как организовать сброс мк )
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

дело в том, что мк не виснет, он продолжает обрабатывать, но сигнал смещается и сбивается индикация. Это меня просили сделать декорации в фильме "Хищник", а именно -часы на его руке :))

В общем спасибо за ответы. Думаю мне переход в бесконечный цикл с собачкой подойдет.
Родился
Сообщения: 8
Зарегистрирован: Чт ноя 05, 2009 08:23:56

Сообщение Veidimadr »

Здравствуйте, нужна помощь бывалых котов советом. Использую мк Atiny2313 программирую на C в CodeVisionAVR

1. Есть 25 датчиков с которых необходимо снимать сигнал. Слышал что для этих целей используется шифратор. Где можно найти информацию для начинающих о применении шифратора для этих целей?

2. Как сделать "глобальную паузу" по кнопке. Поясню выполняется программа, если я нажимаю кнопку она становится на паузу и возобновляется с места остановки при повторном нажатии.
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

1. что за датчики? (цифровые, общаются по шине, может и не нужен шифратор?)
2. реализация паузы видится во входе в прерывание по нажатию кнопки и зацикливании там ожидая повторное нажатие кнопки.
Родился
Сообщения: 8
Зарегистрирован: Чт ноя 05, 2009 08:23:56

Сообщение Veidimadr »

Alexeus писал(а):1. что за датчики? (цифровые, общаются по шине, может и не нужен шифратор?)
2. реализация паузы видится во входе в прерывание по нажатию кнопки и зацикливании там ожидая повторное нажатие кнопки.
Индукционные датчики положения
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Для Alexeus, не надо висеть в прерываниях как лемуры на ветках.
Veidimadr
Тыщи раз описано как делать паузы и обработки.
Если необходимо обрабатывать событие только 1 раз в неопределенное время (по кнопке) то:
1) выделяем переменную под флаг-признак срабатывания
2) в основном цикле вызываем подпрограмму (ПП) если срабатывание было. В ПП перед выходом сбрасываем признак.
3) в обработке прерывания ставим признак срабатывания.
Процесс зациклен и будет работать.
Дайте ссылку на датчики или марку их приведите.

_noise, поправил дабы было видно кому чего куда
Последний раз редактировалось Meteor Пн апр 26, 2010 11:17:22, всего редактировалось 1 раз.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

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

про сброс мк: безусловно нужно укреплять алгоритм, но так ща лениво... поюзаю пока кнопочку сброса, к тому же мк не часто лагает...

noise- хищник это ж классика! со шварцем неггером :)
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

ну умницы, умницы... всегда приятно поиздеваться над кем нибудь... :music:
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Подскажите, если мк управляет базой транзистора типа BC850, BC847... -нужно базу к мк через резистор подключать?

Я так прикинул, если Hfe=140, то 1/140= 0.007мА ток базы. Напряжение 5в, значит 5/0.007= 714 Ом. получается что резистор на 500-700 Ом нужен (10-7мА).

-верно, или что то напутал?
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Резистор нужен по-любому - иначе кердык
R=(Voh-Vbesat)*h21e/2Ik
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

дружище, поясни пожалуйста формулу, а то не все понятно.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

То что резистор нужен это однозначно, иначе получается вывод контроллера практически на земле (мы ведь схему с ОЭ рассматриваем?). Но вот номинал наверно не 500-700, а десятки килоом.

Ib=U/Rb=5/700=7мА, Ik=Ib*h21e=7мА*150=1А

Такой Ik нужен, тогда да, 700ом?
Ответить

Вернуться в «Разные вопросы по МК»