При разработке домашней автоматизации ("умного дома") рано или поздно возникает задача дистанционного съема показаний с бытовых приборов учета (БПУ) электроэнергии, воды, тепла, газа. Если в БПУ нет специального интерфейса для считывания показаний, то такая задача решается с помощью дополнительного устройства, которое в своей памяти будет вести копию показаний БПУ и иметь интерфейс для считывания этих показаний. Есть много вариантов реализации такого устройства на любой вкус, но практически все они требуют наличия в БПУ электронного импульсного выхода. К сожалению, далеко не все БПУ оборудованы таким выходом. В этой статье представлен обзор одного устройства, которое может работать с любым БПУ, как с импульсным выходом, так и без.
Программист
Собираем 8-битный компьютер
Привет! Я всегда хотел собрать свой компьютер — не только в теории понять как «бегают» биты, складываются числа, работают прерывания, как программный код превращается в нули и единицы. У меня получилось и я хотел бы поделиться своим опытом. Это заняло у меня 140 часов и $400 на все компоненты и их доставку. Если вам интересно узнать о проекте, спускайтесь под кат.
Отладка микроконтроллеров ARM Cortex-M по UART
TDD для микроконтроллеров. Часть 1: Первый полет
TDD для микроконтроллеров. Часть 1: Первый полет
TDD для микроконтроллеров. Часть 2: Как шпионы избавляют от зависимостей
TDD для микроконтроллеров. Часть 3: Запуск на железе
Встраиваемые системы широко применяются в бытовой электронике, промышленной автоматике, транспортной инфраструктуре, телекоммуникациях, медицинском оборудовании, а также в военной, аэрокосмической технике и т. д. Хотя последствия любой ошибки проектирования обходятся дорого, ошибку в ПО для ПК или в большом корпоративном приложении обычно относительно легко исправить. А если дефект будет во встраиваемом ПО (далее – ВПО) электронного блока управления тормозной системой автомобиля, то это может вызвать массовый и дорогостоящий отзыв продукции.
Сфера применения встраиваемых систем постоянно расширяется, сложность выполняемых ими задач растет. Это в свою очередь повышает риск внесения ошибок в процессе разработки, что увеличивает вероятность весьма дорогостоящих дефектов в ПО.
Одной из наиболее популярных методологий улучшения качества разрабатываемых приложений является Test-driven development (TDD). Но эффективна ли методология TDD для разработки встраиваемых систем? Ответ на этот вопрос будем искать под катом.
Как оценить уровень владения английским языком
На Хабре много статей о том, как самостоятельно изучать английский язык. Но вот вопрос, а как оценить свой уровень при самостоятельном изучении? Понятно, что есть IELTS и TOEFL, но эти тесты почти никто не сдает без дополнительной подготовки и эти тесты, как говорят, оценивают не сколько уровень владения языком, а скорее умение проходить эти самые тесты. Да и использовать их для контроля самообучения будет накладно.
В этой статье я собрал различные тесты, которые проходил сам. При этом я сверяю свою субъективную оценку владения языком с результатами тестов. А также сравниваю результаты между разными тестами.
Правильная работа с потоками в Qt
Эта статья — попытка систематизации того как в Qt «под капотом» реализована работа с потоками и о некотором количестве неочевидных подводных камней связанных с ограничениями этой модели.
Основы
Thread affinity, инициализация и их ограничения
Главный поток, QCoreApplication и GUI
Rendering thread
Заключение
Начало работы с stm32 или не повторяйте моих ошибок
Небольшой рассказ о граблях, встреченных на пути познания ARM на примере stm32f103c8t6 и stm32l151rct6.
Настолка для обучения основам электрических цепей. Почему бы и нет?
Ранее я уже писал, как делал «электрический» конструктор из… картона. Увы проект пока так и остается на стадии прототипа, не перерастая в промышленный «физический» вид и ждет своего времени (и инвестора).
Но я решил пойти дальше — раз уж начали делать из картона, доведем ситуацию до ее логического завершения — сделаем полностью картонную настольную игру, но с электрическим сеттингом и обучающим эффектом. Вариантов было много — начиная от простой «ходилки» и заканчивая амитрешем с
Создание процедурного генератора головоломок
src/main.cc
.Примерный план поста:
- Linjat — это логическая игра, в которой нужно закрыть все числа и точки в сетке линиями.
- Головоломки процедурно генерируются при помощи комбинации из солвера, генератора и оптимизатора.
- Солвер пытается решить головоломки так, как это делал бы человек, и присваивает каждой головоломке оценку интересности.
- Генератор головоломок создан таким образом, чтобы можно было с лёгкостью менять одну часть головоломки (числа) и при этом все остальные части (точки) менялись таким образом, чтобы головоломка оставалась решаемой.
- Оптимизатор головоломок многократно решает уровни и генерирует новые вариации из наиболее интересных, найденных на текущий момент.
Правила
Чтобы понять, как работает генератор уровней, нужно, к сожалению, разобраться с правилами игры. К счастью, они очень просты. Головоломка состоит из сетки, содержащей пустые квадраты, числа и точки. Пример:
Цель игрока — прочертить вертикальную или горизонтальную линию через каждое из чисел при соблюдении трёх условий:
- Линия, идущая через число, должна иметь ту же длину, что и число.
- Линии не могут пересекаться.
- Все точки необходимо закрыть линиями.
Пример решения:
Ура! Дизайн игры готов, UI реализован, и теперь единственное, что осталось — найти несколько сотен хороших головоломок. А для подобных игр обычно не имеет смысла пытаться создавать такие головоломки вручную. Это работа для компьютера.
Использование C++ и шаблонов с переменным количеством аргументов при программировании микроконтроллеров
ARM с ядром Cortex Mx (на примере STM32F10x)
Микроконтроллер ARM Cortex M3 STM32F103c8t6 широко распространен как 32-х битный микроконтроллер для любительских проектов. Как для практически любого микроконтроллера, для него существует SDK, включающая, в том числе и заголовочные файлы C++ определения периферии контроллера.
И вот там последовательный порт, например, определен как структура данных, а экземпляр этой структуры находится в области адресов, отведенной под регистры и мы имеем доступ к этой области через указатель на конкретный адрес.
Для тех, кто не сталкивался с этим ранее, я немного опишу, как это определено, те же из читателей, которые знакомы с этим, могут пропустить это описание.
Эта структура и её экземпляр описаны вот так:
ZX Spectrum 128k своими руками. Часть 2
Первая часть здесь
Все изображения кликабельны.
Прошло больше года c того момента как я написал статью про сборку клона ZX Spectrum «Ленинград». И за это время его возможности существенно расширились. Не думал что я буду писать ее продолжение, но все таки статей по ретрокомпьютерам не так уж и много, поэтому решился.
Порт расширения
Компьютер к которому ничего нельзя подключить очень ограничен в возможностях и я решился припаять к нему порт расширения. Кроме 40 pin IDE на плату больше ничего не влезало, но подсчитав количество нужных мне контактов вышло что хватит и этого. Минус один контакт на ключ, 2 контакта на +5в, 2 контакта на землю.
В чем набрать и чем собрать C++ проект
Сразу хочу отметить что речь идет о написании C++ кода не под какую-то специфичную платформу типа Android или фреймворка, например Qt, — где все уже готово, как с построением так и с редактированием кода, а об generic коде не привязанному к конкретной платформе или фреймворку.
Упрощенный доступ к данным внутренней FAT12 для STM32
Для хранения именованных настроек особого усложнения структур формата данных не потребуется. Примем следующий формат — одна настройка = один файл. К примеру, нам необходимо хранить скорость подключения по UART и допустим, задержку в миллисекундах мигания светодиода. Создадим (в любом текстовом редакторе) в нашей файловой системе файлы UART_SPD.SET и DELAY_BL.SET. Запишем в них значения: соответственно 115200 и 1000.
Чтобы получить эти данные, обратившись к нашей внутренней FAT12 потребуется либо взять стандартную библиотеку HAL FatFs и попытаться ее приспособить под внутреннюю flash. Или пойти более простым и удобным способом — написать свою функцию чтения файловых данных FAT12, что мы и сделаем:
STM32 fast start. Часть 1 ПО, материалы, Cube MX
С одной стороны — стоят защитники, которым нравится удобство конфигурирования и читаемость кода.
С другой — приверженцы писать все руками, которым важна скорость работы и бережное использование ресурсов.
Для того, чтобы расставить все точки над i — попробуем написать «Hello world» тремя наиболее часто используемыми путями CMSIS, LL, HAL. Оценим затраты (ресурсы контроллера, объем исполняемого файла, и конечно же время работы разработчика).
Статья будет состоять из нескольких частей:
STM32 fast start. Часть 1 ПО, материалы, Cube MX.
STM32 fast start. Часть 2 Hello World на HAL, настройка отладки в Atollic TrueSTUDIO
STM32 fast start. Часть 3 Hello World на LL
STM32 fast start. Часть 4 Hello World на CMSIS
STM32 fast start. Часть 5 Подведение итогов, сравнение HAL, LL, CMSIS.
Как правильно читать объявления в Си
int foo[5]; // foo массив из 5 элементов типа int
char *foo; // foo указатель на char
double foo(); // foo функция возвращающая значение типа double
Но как только объявления становятся немного сложнее, проблематично точно сказать что это. Например:
char *(*(**foo[][8])())[];
Работа с ESP8266: Собираем компилятор и пишем первую прошивку
Машинка на Arduino, управляемая Android-устройством по Bluetooth, — полный цикл (часть 1)
Введение
Подробная история того, как из трех двигателей была собрана машина на Arduino, управляемая Android-устройством по Bluetooth. В нескольких десятках абзацев постараюсь максимально пошагово изложить, куда подключить каждый из проводов, как написать фирменное приложение и на каких детских граблях пришлось попрыгать больше недели.
Немного об уровне, авторе и предостережения
Я, автор, пацан 16-17 лет с подмосковной деревни, специализируюсь на написании android-приложений (а там сложнее что-то сжечь), поэтому ответственность за оптимальный подход к решению задач с себя снимаю.
Практически каждый из нижеописанных этапов занимал у меня больше, чем стоило бы, времени. Наверно, именно по этой причине хочу поделиться опытом. И при этом буду очень рад, если поругаете за ошибки и подскажите за оптимизацию.
Задача
Задача легчайшая – заставить ездить машинку, управляемую Arduino, а пульт заменить андроидом. Но в большинстве моментов пришлось изобретать колесо, потому что в интернетах подходящего решения найдено не было.
Новые инструменты разработки с LEGO Education — от Microsoft, MIT и не только
Мы стремимся к тому, чтобы гибкость программной платформы LEGO Education была сопоставима с ее гибкостью на аппаратном уровне. И в этом нам помогают наши партнеры — Microsoft, Массачусетский технологический университет, Институт интегральных схем общества Фраунгофера, а также разработчики из России. В этом посте мы расскажем о новых инструментах для программирования, с которыми возможности LEGO Mindstorms Education EV3 и WeDo 2.0 становятся шире.
Распознавание цвета и уровня освещенности с помощью APDS-9960
Недавно на Habr.com промелькнула статья в которой, среди прочего, сообщалось о датчике освещенности. Некоторое время назад я нашел и приобрел интересную вещь — модуль производства фирмы RobotDyn на основе датчика APDS-9960, который тоже умеет измерять уровень освещенности. Поискав и не сумев отыскать упоминаний сего прибора на данном ресурсе, я решил, что это подходящий повод для написания статьи.
В статье мне бы хотелось в общих чертах познакомить читателей с возможностями которые предоставляет этот датчик и более подробно рассмотреть каким образом с его помощью можно определять цвет и измерять уровень освещенности.
ОСРВ МАКС — бесплатно? Планируем открыть лицензию для бесплатного коммерческого использования
Новая версия позволит сторонним разработчикам добавлять в систему модули, а лицензия не будет ограничивать коммерческое применение.
Information
- Rating
- Does not participate
- Location
- Россия
- Registered
- Activity