Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/71: Рейтинг темы: голосов - 71, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
1

Существуют ли библиотеки задержек на таймерах?

05.09.2011, 13:34. Показов 13678. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток.
Выводил тут на ЖК инфу с АВРки и понял, что так жить не хорошо. Дело в том, что в библиотеке для LCD, да и в <util/delay.h> задержки реализованы как ввод МК в цикл с почти нулевым КПД. За то время, пока идет задержка таким циклом, МК может выполнить туеву хучу полезной работы. Вот я и задумался, а не существует ли библиотек, которые позволяют установить нужное время задержки и дать МК поработать, а по истечении времени задержки (пусть с каким то допуском) вернуться к нужной задаче.
Написано наверное не очень понятно, но постараюсь объяснить свою мыслю.

Предположим существует функция
Код
void some_func (void)
{

что то делаем 1
задержка // здесь мотаем тупой цикл
что то делаем 2
}
Предположим, что мы ее переписываем
так
Код
void some_func_smartdelay (void)
{
if (задержка не установлена)
{
что то делаем 1
устанавливаем задержку
выходим

}
if (время задержки НЕ прошло)
выходим

что то делаем 2
задержка не установлена

}
Далее, ну например от асинхронного таймера типа часового кварца, устанавливаем осмысленную минимальную задержку, при которой есть смысл отдать управление МК а не тупо гонять цикл. Понятно, что при задержке на 3 такта, нет смысла отдавать управление МК.
Ну а дальше куча вариантов. На пример в обработчике прерывания от МК регистрировать функции, которые отдают на время задержки управление МК. Либо сразу вызывать их по очереди, пусть сами определяют, прошло время задержки или нет (большие накладные расходы), либо определять, какую ф-цию дернуть.
Либо совсем другой вариант, просто выставлять флаги того, что надо дернуть нужную ф-цию, а главная прога уже дернет, когда посчитает нужным, видя, что флаг разрешает это самое дергание.
Ну как то так.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2011, 13:34
Ответы с готовыми решениями:

Существуют ли библиотеки UPnP
есть-ли библиотеки для открытия портов(UPnP) на c++?

Существуют ли библиотеки, работающие с интегралами
Нужно считать неопределенный интеграл. Есть библиотеки в C#?

Какие существуют библиотеки для ИИ на lisp?
Всем хорошего времени суток! Заинтересовала тема разработки искусственного интеллекта на lisp...

Какие существуют библиотеки логгинга и мониторинга?
Привет, всем! Какие существуют библиотеки логгинга и мониторинга на данный момент? (java)...

33
SWK
05.09.2011, 20:29 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от PRS
SWK, а как будете обходить проблему относительного малого количества перезаписи флешки? Или будете использовать интерпретатор?
У моих Мег 128 - вроде 1000 циклов. И ставить буду на переходник, на крайняк держать одну прошитую (как минимум с лодырем) в запасе. Но с софтом пока полностью не определился, прикидываю варианты. Очень хотелось бы иметь возможность подгружать исполняемые модули сложных задач, но пока не решил, как лучше. На всякий случай поэтому ставлю и внешнее ОЗУ 64к, и EEPROM 64Кб (24С512), и SD-Card 2 Гига с FAT 16.
Есть еще и DIP-8 флэшки 512КБ - W25X40 -( 4 MBIT SERIAL FLASH MEMORY WITH 4Kb SECTORS AND DUAL OUTPUT SPI. DIP-8, CLOCK to 75MHz), питание 3,3v, как и у SD, и нтерфейс тоже SPI. Можно еще и их поставить. У них ресурс вроде 100 000 перезаписей. В общем, памяти я накрутил, теперь думаю, для чего ее использовать. Может, действительно какой интерпретатор использовать, или макросами задания давать, что в общем - то почти то же самое.

Встроенные задания будут вообще одной командой запускаться. А вот если что-то нестандартное... Идеальный вариант был бы - загружаемый кусок кода, по нескольким заложенным в системе векторам вызова. Как в BIOS системы CP/M-80: 16 векторов в начале секции, а обработчики для них можно написать какие угодно. В общем - то, такие модули перезагружаться будут не очень часто, можно и в программный флэш контроллера, это было бы проще всего... 1000 циклов должно надолго хватить. По 3 раза в день - и то почти на год...
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
05.09.2011, 20:45 22
SWK, а почему бы не перейти на ту же стм8, они могут выполнятся из рама.
0
SWK
05.09.2011, 21:00 23
Цитата Сообщение от PRS
SWK, а почему бы не перейти на ту же стм8, они могут выполнятся из рама.
На то у меня 3 причины (для меня - важные).
1. У меня их нет, в продаже тоже, когда появятся - неизвестно, с заказами заморачиваться не стоит, особенно с нашими Алматинскими почтовиками (был печальный опыт)...
2. Из того, что уже имею, вроде Мега 128 более - менее устраивает. Да и надо же их куда-то использовать, лет 5 уже валяются, и в общих чертах я с ними знаком...
3. За время, потраченное на изучение особенностей STM-8, я наверняка успею уже что-нибудь написать для Меги 128...

Кроме того, мне очень нравится писать в МикроПаскале для PIC и AVR, а для STM-8 кроме не очень любимого мной С других фирм, ничего пока нет...

Как обычно, начну сначала с низов - распишу работу с разной памятью, межконтроллерный обмен, замкну главный цикл, пока все это отлажу - появятся идеи и наработки более высокого уровня. Возможно, попробую варианты с OC. Да и меня никто не гонит, сроков конкретных нет, есть желание - занимаюсь, нет желания - ну, еще подождет...
SWK
06.09.2011, 12:56 24
Цитата Сообщение от PRS
SWK, а как будете обходить проблему относительного малого количества перезаписи флешки? Или будете использовать интерпретатор?
Сейчас глянул даташит на Мегу 128 - у нее ресурс 10 000 циклов записи/стирания во флэшь памяти команд, так что даже если переписывать раз в час, хватит больше чем на год (на год - по 27 раз в день). Чтобы не дублироваться, подробнее разовью эту мысль в своей теме:
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
06.09.2011, 22:09 25
У меня созрел дурацкий вопрос, но я его все же задам для подстраховки. Стоит часовой кварц. Тикнул, жахнуло прерывание. В обработчике есть код. А теперь внимание, драцкий вопрос. На частоте какого кварца будет выполнен этот код. Логически понимаю, что на частоте основного кварца. Но все же.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
06.09.2011, 22:11 26
Основного, так и есть. А часовой просто тикает в свое удовольствие и ни на что не влияет (только таймер от него тактируется).
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
06.09.2011, 22:31 27
Отлично, решил перебдеть.
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
06.09.2011, 22:36 28
И еще один маленький (а может и большой). Сколько проходит времени с момента отправки команды на включение порта, до установки максимального напряжения на выводе?
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
06.09.2011, 23:42 29
Цитата Сообщение от Doimom78
И еще один маленький (а может и большой). Сколько проходит времени с момента отправки команды на включение порта, до установки максимального напряжения на выводе?
Если имеется ввиду скорость переключения ножки с 0 в 1 - 1 такт основного генератора
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
07.09.2011, 00:42 30
Цитата Сообщение от Johmmy0007
Цитата Сообщение от Doimom78
И еще один маленький (а может и большой). Сколько проходит времени с момента отправки команды на включение порта, до установки максимального напряжения на выводе?
Если имеется ввиду скорость переключения ножки с 0 в 1 - 1 такт основного генератора
Нет, не переключение. А время с с момента переключения ножки в 1 до установки на ней максимального напряжения. То есть задержка на нарастание напряжение, грубо говоря милливольт в секунду.
0
SWK
07.09.2011, 01:36 31
Цитата Сообщение от Doimom78
Нет, не переключение. А время с с момента переключения ножки в 1 до установки на ней максимального напряжения. То есть задержка на нарастание напряжение, грубо говоря милливольт в секунду.
От емкости зависит. Максимальный ток порта около 30мА, внутренняя емкость его около 5пф обычно (по крайней мере у PIC, у AVR может и другое значение), а вот что снаружи - это уже зависит от нагрузки этого порта, разводки платы... Обычно я раньше принимал монтажные емкости за величину порядка 10-20 пикофарад. Вот и считайте... В даташитах где - то вроде попадались рассчеты и типовые значения, но мне это не было критично, не запомнил.
Если только мощный полевик с тысячами пик затвора вешать... Так их, если скорость важна, через драйверы включают. А если он включается раз в несколько минут, как у меня в контроллере башни на питании камеры и прочего - так там мне и десятки миллисекунд его не нагреют. И токи мизерные...
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
07.09.2011, 13:09 32
Понятно, спасибо. Я эти вопросом парюсь, так как хотелось бы передавать определенное количество энергии через лазер за определенный промежуток времени в импульсном режиме. Соответственно хочу понять, сколько времени надо заложить между включением и отключением порта, чтобы как можно точнее выполнить условие.
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
07.09.2011, 13:25 33
Цитата Сообщение от Doimom78
Понятно, спасибо. Я эти вопросом парюсь, так как хотелось бы передавать определенное количество энергии через лазер за определенный промежуток времени в импульсном режиме. Соответственно хочу понять, сколько времени надо заложить между включением и отключением порта, чтобы как можно точнее выполнить условие.
Тогда тебе еще придется учитывать время включения- выключения ключевого транзистора и задержки в лазере. Они могут быть существенно выше, чем задержки работы ножки контроллера - тогда какой смысл их учитывать?
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
07.09.2011, 13:46 34
Цитата Сообщение от Johmmy0007
Цитата Сообщение от Doimom78
Понятно, спасибо. Я эти вопросом парюсь, так как хотелось бы передавать определенное количество энергии через лазер за определенный промежуток времени в импульсном режиме. Соответственно хочу понять, сколько времени надо заложить между включением и отключением порта, чтобы как можно точнее выполнить условие.
Тогда тебе еще придется учитывать время включения- выключения ключевого транзистора и задержки в лазере. Они могут быть существенно выше, чем задержки работы ножки контроллера - тогда какой смысл их учитывать?
Да тут пока не учитывать надо бы, а просто определить их порядок. Понятно, что если другие задержки не постоянны и гуляют в пределах больших время нарастания напряжения на ножке, то тогда учет бесполезен. А если эти задержки почти константа, с дельтой в пределах долей время нарастания напряжения на ножке, то тогда смысл есть.
0
07.09.2011, 13:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2011, 13:46
Помогаю со студенческими работами здесь

Какие существуют библиотеки для работы с сокетами?
Здравствуйте! Подскажите пожалуйста, какие существуют библиотеки для работы с сокетами.

Какие существуют библиотеки для перехвата нажатых клавиш?
Добрый День! Подскажите новичку, где порыться чтобы написать не большую программу для замена...

Существуют ли какие-нибудь библиотеки C++ для работы с HTML
Подскажите пожалуйста, существуют ли какие-нибудь библиотеки С++ для работы с HTML (вывод формы из...

Существуют ли библиотеки для Win32 API, которые меняют внешний вид?
Всем привет! Существуют ли библиотеки для Win32 API, которые меняют внешний вид(например:...

Существуют ли подключаемые модули или библиотеки для работы с бинарными переменными в VB6
Господа программисты, подскажите, существуют ли подключаемые модули или библиотеки для работы с...

Существуют ли движки или библиотеки Java, при помощи которых можно создать свою версию калькулятора?
Существуют ли подобные движки или библиотеки Java, при помощи которых возможно создать свою версию...

Существуют ли библиотеки программ на нативных web языках для работы с базой данных аналогичные библиотеке VCL?
Стоит задача быстрой разработки прототипа web приложения одно из главных требований заказчика...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru