Рейтинг
12.57
голосов: 10

О блоге

Алгоритмические хитрости, типовые решения и заумные трюки. Все то, что можно воплотить программно на любом микроконтроллере или на компе (но применимо к электронике)

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (153)

dcoder Krieger Tabke XANDER marvin_yorke kest Vga Alatar mzw kalvenolt Reverb mist grand1987 Gornist Rom kvm labor neiver Leopoldius rumkin

Все читатели блога

Быстрый парсер NMEA

GPS навигацией не занимается только ленивый. Вот и мне пришлось…
Задача — парсерить ответы от модуля. В результате получился вот такой алгоритм
Я имел доступ к большому числу разных модулей (EB500 EB800, вся линейка Ublox,Quectel L76, ML8088)
Парсер работает со всеми этими модулями без изменений
Сам парсер вызывается из прерывания по приему каждого байта,
в результате работы — необходимые данные разложены по полочка
понимает та же глонас модули.


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

VinxFS - Самая маленькая файловая система FAT32 для AVR

Скачать одним файлом тут: github.com/vinxru/VinxFs/archive/master.zip
Смотреть на GITHUB: github.com/vinxru/VinxFs

Неоднократно читал на форумах, что люди ищут небольшую программу, которая бы позволяла работать с файловой системой FAT16/32. И многие выбирают Petit FatFS, потому что она работает даже на ATTiny. Но понимают через некоторе время, что она не умеет увеличивать размер существующих файлов. Приходится заранее создавать большие пустые файлы. А об удалении, создании, перемещении файлов или папок можно даже не думать.

Я предлагаю (безвозмездно) переработанную версию этой библиотеки. Это самая маленькая файловая система FAT16/FAT32 написанная на Си, умеющая создавать, изменять размер и удалять файлы. А так же переименовывать и переносить файлы и папки.


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

Configuration Wizard в KEIL. Ассемблер А51, подбор битовых масок для вывода на семисегментный индикатор

  Что такое Configuration Wizard (мастер конфигураций) в KEIL? Это псевдокод написанный в комментариях и оформленный спецтегами. При наличии такого кода в проекте появляется дополнительная вкладка «Configuration Wizard».
  На странице помощи по Configuration Wizard упор сделан на С программировании. Но мастер конфигураций легко встраивается и в чисто ассемблерные проекты. При этом следует придерживаться ассемблерной орфографии. Ниже приведен пример подобного мастера.


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

Генератор на perl конечного автомата на C.

Идея написать статью возникла, когда наткнулся на easyelectronics.ru/avr-uchebnyj-kurs-konechnyj-avtomat.html

В данной статье рассматривается принцип работы сгенерированного кода, сам генератор написан на perl и в нём особо интересного ничего нет, берите, пользуйтесь, модифицируйте под свои нужды :)

По сути, предыстория написания программы-генератора: некоторое время назад я делал несколько мелких программ для нового проекта, все они различались реакциями на события. День тупого полумеханического труда по написанию почти одного и того же и к вечеру у меня сдали нервы. Попробовал поискать какой-нибудь готовый генератор кода для конечного автомата (КА) или хотя бы таблиц из некого формализованного описания, ведь по виду кажется просто — есть граф, генерируй-нехочу. Главными критериями были простота и чтоб в результате был код на чистом C, без всякиих плюсплюсов — мне же для микроконтроллера! Но тут меня ждал облом. Либо не просто, либо не C, либо вообще монструозно. В общем, ничего подходящего, не нашёл. К обеду следующего дня у меня был простенький наколенный генератор на perl, как в мультике — лучше день потерять зато потом за пять минут долететь :). Потом уже, когда его стали использовать коллеги, дописал некоторые вещи по их замечаниям. В конце концов получилось нечто, что уже не раз пригождалось узкому кругу людей, и что я и хочу представить на суд общественности, может кому-то ещё поможет.

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


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

Инициализация периферии с помощью именованных аргументов

В статье речь пойдет о реализации способа работы c периферией микроконтроллера с помощью именованных аргументов функций Си. Способ разобран на примере реализации функции конфигурации таймера TIM4 семейства STM8L.

Вообще, существует 2 типа передачи параметров внутрь функции или программного модуля: позиционный или именной. Так например, обычные функции в Си используют позиционную передачу, т.е. мы должны знать что и в каком порядке передавать функции. Использование именованных аргументов же гарантирует, что мы присвоим нужные значения куда положено, да и освободим себя от необходимости помнить какой параметр за каким следует. Ну вообщем, на дальнейшем примере это станет понятно.


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

Формирование импульсов для IR-управления на аппаратном таймере-2 ATmega8

В этой статье приводится описание алгоритма формирования импульсов для IR-управления на аппаратном таймере-2 на примере ATmega8. К статье прилагается программа расчета констант и формирования фрагментов кода для AVR-С.

В процессе разработки поворотного стола для круговой фотосъемки возникла задача дистанционного управления фотокамерой. В поисках информации была найдена статья, автору которой я очень признателен за подробный разбор. Но у него стояла задача выдачи одной лишь команды на один тип камеры (ее выбор осуществляется на этапе компиляции), а мой девайс помимо этого занят другими важными делами, да и не люблю я транжирить память программ списком макросов Pulse/Pause. И к какой конфессии (Canon'истам или Nikon'истам) относится конечный пользователь — неизвестно. В результате было принято решение из статьи взять цифры, а остальное реализовать по-своему. Для этой задачи, как мне кажется, как нельзя лучше подходит аппаратный таймер-2. Потому что у нулевого нет прерывания по совпадению и, тем более, возможности «дрыгать» при этом ногой, а первый, 16-разрядный, тратить на это просто жалко.


Читать далее...
  • +5
  • 30 ноября 2014, 18:53
  • Kerim
  • 1

Программный таймер. Применение HAL

Сначала небольшая предыстория. Пользовался я раньше, значит, только прAVRославными контроллерами, да команды им посылал исключительно на богоугодном ассемблере. Все бы хорошо, но с портируемостью у асма, как известно, есть проблемы. В большинстве случаев, перенос какого-то куска интеллектуального труда с одного камня на другой подразумевал написание с нуля этого самого куска, но в реалиях периферии текущего мк. Вроде бы и несложно, да и обычно не особо напряжно, но как всегда есть НО. Проснулся интерес у меня к STMовским камням — обилие вкусной периферии плюс интересные цены прельщали (речь идет о STM8 и STM32). Вот тут-то я и задумался о том, что тут пора вспоминать С, да и изобретать свои велосипеды кроссплатформенно. Ибо каждый раз переписывать какое-нибудь типовое программное решение под другую архитектуру или модель контроллера, возможно и полезно с точки зрения тренировки и оптимизации, но грустно с точки зрения потраченного времени и сил. Такие вот дела.

А начал я, как следует из заголовка, с самого простого и необходимого модуля — программных таймеров.


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

Сигма-точечный фильтр Калмана

Если кому-то нужен протестированный код Unscented Kalman Filter (UKF) то предлагаю попробовать мою реализацию. Проверял на нескольких задачах, и сегодня проверил на модели BLDC, для которого никак не могу отладить EKF. На двигателе фильтр показывает себя хорошо, EKF так работать заставить не могу. Хотя он должен быть не на много хуже. Проблема только в поиске ошибок.


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

Простой способ создания меню для устройств с LCD дисплеем, пример на C для PSoC контроллера

Тема создания меню неоднократно обсуждалась, тем не менее мне захотелось создать более простой, компактный и универсальный вариант реализации, чем то, что нашёл в сети.

В итоге получилось довольно красивое решение, которым я буду рад поделиться с другими.

Меню может содержать до 127 пунктов, разделённых на группы. Выбор числа групп, связей между ними и числа пунктов в разных группах может иметь произвольную конфигурацию и легко задаётся в массиве констант.
В описаном примере меню состоит из 4х групп:


Видео работы на YouTube


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

Диспетчер, снова диспетчер

У каждого более-менее состоявшегося электронщика сформировалась своя система организации программ. Кто-то использует ОСРВ, кто-то диспетчеры, кто-то так и остался на уровне супер-цикла. В этой статье речь пойдет о диспетчере, который, так скажем, у меня недавно появился. Написан полностью на С.


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