Notice: Memcache::get(): Server localhost (tcp 11211) failed with: Connection refused (111) in /home/a146/www/we.easyelectronics.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php on line 134
Блог / Публикации Mihail / Сообщество EasyElectronics.ru

Самый простой программный таймер

Если у вас стоит задача посчитать время от а до б, а потом выполнить определенные действия в связи с этим, то данный вариант вам вполне пригодится.
Самый весомый плюс у данной системы — нет необходимости в прерываниях.
Так же у данного таймера отсутствует весомый обработчик событий. Все необходимые вычисления происходят распределённо.


Читать дальше

Стек для W5200 без циклов задержек + STM32F103

Чипы корейской фирмы WIZnet весьма широко известны и популярны. Так же полно где можно скачать драйверы для этих микросхем. Последняя реализация выполнена на W5500 здесь
Однако все драйверы построены по принципу вызова функций, которые весьма надолго стопорят основной цикл программы, мучительно и многократно ожидая события от внешней системы. Особенно «умиляет» ожидание в функции отправки по TCP и выход из нее по Timeout. А ведь это может растянуться не на одну секунду, и даже не 10! (При стандартных настройках — 28 сек). В некоторых случаях, если программа заточена полностью на Ethernet — это не критично, но не в моем случае. Да и вообще, инструкции вида
while(!Внешнее событие);
меня вымораживает напрочь, так как устройство полностью оказывается неработоспособным длительное время.
Мною были написаны несколько модулей, в которых я реализовал стек для W5200 без задержек.

Читать дальше
  • +5
  • 26 декабря 2015, 22:52
  • Mihail
  • 1

Подбор номиналов резисторов и конденсаторов

Часто бывает так, что нужно какой-нить резюк номиналом 28.7 к и прочее… Ну нигде в рознице не сыскать. Зато есть полный набор E24 у себя под рукой. Первое, что приходит на ум, параллельно спаять два резюка, есть даже формула расчета:

соответственно обратная формула такая:

И вот, защелкал калькулятор, задымились пальцы в поиске тех самых заветных R1 и R2. Есть предложение попроще: автоматизация. Искал калькуляторы разные, но единственное что нашел, это расчет делителя с подбором номиналов. А вот параллельное соединение резюков (читай — последовательное для конденсаторов) не нашел. Что ж, напишем свой велосипед:

Ну и исходники в приложении.

Update:
Добавил исходники Vga и sasha_tvo, за что им отдельное спасибо
  • +11
  • 23 октября 2015, 15:58
  • Mihail
  • 3

Конвертация времени

Итак, столкнулся с довольно тривиальной задачей — посчитать промежуток времени в секундах, минутах, часах, и днях между двумя датами и временем. Задача, в общем-то, не новая и легко решается на ПК.
Суть этого поста — адаптировать подобные преобразования для МК.
Сразу оговорюсь, что мы не будем учитывать зональность времени, а будем вычислять по гринвичу.


Читать дальше

Configuration Wizard в KEIL. Продолжение на примере настройки USART, ADC для STM32F4xx

Итак, продолжаем настраивать периферию с помощью Configuration Wizard. Возможно в будущем появятся еще экземпляры по разным устройствам, и в итоге объединим все в один мегапроект. Ну это так, помечталось мне.
Начнем:

Читать дальше

Configuration Wizard в KEIL. Пример настройки GPIO портов для STM32F4xx

Всем любителям KEIL посвящается:
Благодаря Configuration Wizard, встроенном в KEIL весьма удобно производить настройки в файлах заголовков.
Один из таких файлов мной был написан.


Читать дальше

Многозадачный программный таймер, ver 2.0

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


Читать дальше

STM32 Удобные внешние прерывания

STM32 Удобные внешние прерывания

При изучении STM32 меня приятно удивило большое количество внешних прерываний (всего 16), да и еще возможность настроить их на любой пин микроконтроллера. Такой расклад после того, как долгое время сидел на AVR — кажется фантастичным. Однако при детальном изучении радость моя несколько поуменьшилась. Оказывается, есть и ограничения:
1) Настроить прерывания можно только на один из входов, где совпадает нумерация порта.
Например, настроить два прерывания на GPIOA.0 и GPIOB.0 — не получится. Только одно из них. Это необходимо учитывать при разводке схемы.
2) Отсутствует способ вызова прерываний по нижнему уровню (иногда требуется именно этот способ, например при сочленении с WIZnet). Хотя этот недочет, в принципе, — программно решаемый.
3) Всего 7 векторов в прерываниях. А событий — 16. А это значит, что обработка нескольких событий производится в одном и том же месте.

Но даже такое положение вещей все равно гораздо более привлекательное, чем в старом-добром AVR-e.

Цель написания этой статьи — разбавить 3-е по списку ограничение — недостаток векторов, упрощение инициализации внешних прерываний. И напоследок, разберемся, что такое «слабосвязанные функции» и с чем их едят (С) Умка :). Итак, начнем:


Читать дальше

Многозадачный программный таймер.

В мире микроконтроллеров, как и в мире вообще — существуют разного рода задачи. Какие-то требуют немедленного исполнения, какие-то могут подождать. Но есть и такие, которые возникают крайне редко, но их количество может быть внушительным. Вот о реализации таких задач (последних) мы и поговорим. Чтобы «убить» 7 мух(, а может быть и великанов) одним ударом — будем использовать программный таймер на базе одного аппаратного. Так как все задачи — «медленноприходящие» (интересно, есть такое слово в русском языке?) — настроим аппаратный таймер таким образом, чтобы тикал он несколько раз в секунду (например, 50 или даже 500). И создадим массив структур, в каждой из которых будет лежать вся информация по каждому программному таймеру отдельно. Итак, рассмотрим чего добился:

Читать дальше

Удобная настройка GPIO портов

Настройка GPIOX портов в STM32, как уж повелось, не самое интересное занятие.
Большое разнообразие настроек в определенный момент начинает взрывать мозг, особенно если пользоваться стандартными решениями.
Например, чтобы нам настроить GPIOA.11 на 10МГцовый — выход по типу OPEN_DRAIN c выключенным драйвером — нужно выполнить следующие операции:


Читать дальше