Pull to refresh
11
0
Сергей @Bork1507

Программист

Send message

Дистанционный съем показаний со счетчиков

Reading time20 min
Views38K

При разработке домашней автоматизации ("умного дома") рано или поздно возникает задача дистанционного съема показаний с бытовых приборов учета (БПУ) электроэнергии, воды, тепла, газа. Если в БПУ нет специального интерфейса для считывания показаний, то такая задача решается с помощью дополнительного устройства, которое в своей памяти будет вести копию показаний БПУ и иметь интерфейс для считывания этих показаний. Есть много вариантов реализации такого устройства на любой вкус, но практически все они требуют наличия в БПУ электронного импульсного выхода. К сожалению, далеко не все БПУ оборудованы таким выходом. В этой статье представлен обзор одного устройства, которое может работать с любым БПУ, как с импульсным выходом, так и без.

Читать далее
Total votes 28: ↑28 and ↓0+28
Comments22

Собираем 8-битный компьютер

Reading time16 min
Views45K

Привет! Я всегда хотел собрать свой компьютер — не только в теории понять как «бегают» биты, складываются числа, работают прерывания, как программный код превращается в нули и единицы. У меня получилось и я хотел бы поделиться своим опытом. Это заняло у меня 140 часов и $400 на все компоненты и их доставку. Если вам интересно узнать о проекте, спускайтесь под кат.

Читать далее
Total votes 58: ↑57 and ↓1+72
Comments54

TDD для микроконтроллеров. Часть 1: Первый полет

Reading time10 min
Views15K
TDD для микроконтроллеров. Часть 1: Первый полет
TDD для микроконтроллеров. Часть 2: Как шпионы избавляют от зависимостей
TDD для микроконтроллеров. Часть 3: Запуск на железе


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


Сфера применения встраиваемых систем постоянно расширяется, сложность выполняемых ими задач растет. Это в свою очередь повышает риск внесения ошибок в процессе разработки, что увеличивает вероятность весьма дорогостоящих дефектов в ПО.


Одной из наиболее популярных методологий улучшения качества разрабатываемых приложений является Test-driven development (TDD). Но эффективна ли методология TDD для разработки встраиваемых систем? Ответ на этот вопрос будем искать под катом.

Читать дальше →
Total votes 18: ↑16 and ↓2+16
Comments33

Как оценить уровень владения английским языком

Reading time4 min
Views126K


На Хабре много статей о том, как самостоятельно изучать английский язык. Но вот вопрос, а как оценить свой уровень при самостоятельном изучении? Понятно, что есть IELTS и TOEFL, но эти тесты почти никто не сдает без дополнительной подготовки и эти тесты, как говорят, оценивают не сколько уровень владения языком, а скорее умение проходить эти самые тесты. Да и использовать их для контроля самообучения будет накладно.

В этой статье я собрал различные тесты, которые проходил сам. При этом я сверяю свою субъективную оценку владения языком с результатами тестов. А также сравниваю результаты между разными тестами.
Читать дальше →
Total votes 81: ↑77 and ↓4+91
Comments62

Правильная работа с потоками в Qt

Reading time13 min
Views79K
Qt — чрезвычайно мощный и удобный фреймворк для C++. Но у этого удобства есть и обратная сторона: довольно много вещей в Qt происходят скрыто от пользователя. В большинстве случаев соответствующая функциональность в Qt «магически» работает и это приучает пользователя просто принимать эту магию как данность. Однако когда магия все же ломается то распознать и решить неожиданно возникшую на ровном казалось бы месте проблему оказывается чрезвычайно сложно.

Эта статья — попытка систематизации того как в Qt «под капотом» реализована работа с потоками и о некотором количестве неочевидных подводных камней связанных с ограничениями этой модели.

Основы
Thread affinity, инициализация и их ограничения
Главный поток, QCoreApplication и GUI
Rendering thread
Заключение

А Вы правильно работаете с QThread и сигналами?
Total votes 44: ↑44 and ↓0+44
Comments38

Настолка для обучения основам электрических цепей. Почему бы и нет?

Reading time2 min
Views26K


Ранее я уже писал, как делал «электрический» конструктор из… картона. Увы проект пока так и остается на стадии прототипа, не перерастая в промышленный «физический» вид и ждет своего времени (и инвестора).

Но я решил пойти дальше — раз уж начали делать из картона, доведем ситуацию до ее логического завершения — сделаем полностью картонную настольную игру, но с электрическим сеттингом и обучающим эффектом. Вариантов было много — начиная от простой «ходилки» и заканчивая амитрешем с зомби с движением электронов и злобными короткими замыканиями и вздувшимися конденсаторами.
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments32

Создание процедурного генератора головоломок

Reading time11 min
Views6K
В этом посте описывается генератор уровней для моей игры-головоломки Linjat. Пост можно читать и без подготовки, но он легче усвоится, если сыграть в несколько уровней. Исходный код я выложил на github; всё обсуждаемое в статье находится в файле src/main.cc.

Примерный план поста:

  • Linjat — это логическая игра, в которой нужно закрыть все числа и точки в сетке линиями.
  • Головоломки процедурно генерируются при помощи комбинации из солвера, генератора и оптимизатора.
  • Солвер пытается решить головоломки так, как это делал бы человек, и присваивает каждой головоломке оценку интересности.
  • Генератор головоломок создан таким образом, чтобы можно было с лёгкостью менять одну часть головоломки (числа) и при этом все остальные части (точки) менялись таким образом, чтобы головоломка оставалась решаемой.
  • Оптимизатор головоломок многократно решает уровни и генерирует новые вариации из наиболее интересных, найденных на текущий момент.

Правила


Чтобы понять, как работает генератор уровней, нужно, к сожалению, разобраться с правилами игры. К счастью, они очень просты. Головоломка состоит из сетки, содержащей пустые квадраты, числа и точки. Пример:


Цель игрока — прочертить вертикальную или горизонтальную линию через каждое из чисел при соблюдении трёх условий:

  • Линия, идущая через число, должна иметь ту же длину, что и число.
  • Линии не могут пересекаться.
  • Все точки необходимо закрыть линиями.

Пример решения:


Ура! Дизайн игры готов, UI реализован, и теперь единственное, что осталось — найти несколько сотен хороших головоломок. А для подобных игр обычно не имеет смысла пытаться создавать такие головоломки вручную. Это работа для компьютера.
Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments11

Использование C++ и шаблонов с переменным количеством аргументов при программировании микроконтроллеров

Reading time7 min
Views23K

ARM с ядром Cortex Mx (на примере STM32F10x)


КДПВ Микроконтроллер ARM Cortex M3 STM32F103c8t6 широко распространен как 32-х битный микроконтроллер для любительских проектов. Как для практически любого микроконтроллера, для него существует SDK, включающая, в том числе и заголовочные файлы C++ определения периферии контроллера.

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

Для тех, кто не сталкивался с этим ранее, я немного опишу, как это определено, те же из читателей, которые знакомы с этим, могут пропустить это описание.

Эта структура и её экземпляр описаны вот так:
Читать дальше
Total votes 27: ↑26 and ↓1+25
Comments91

ZX Spectrum 128k своими руками. Часть 2

Reading time6 min
Views45K
image
Первая часть здесь

Все изображения кликабельны.

Прошло больше года c того момента как я написал статью про сборку клона ZX Spectrum «Ленинград». И за это время его возможности существенно расширились. Не думал что я буду писать ее продолжение, но все таки статей по ретрокомпьютерам не так уж и много, поэтому решился.

Порт расширения


Компьютер к которому ничего нельзя подключить очень ограничен в возможностях и я решился припаять к нему порт расширения. Кроме 40 pin IDE на плату больше ничего не влезало, но подсчитав количество нужных мне контактов вышло что хватит и этого. Минус один контакт на ключ, 2 контакта на +5в, 2 контакта на землю.
Читать дальше →
Total votes 85: ↑85 and ↓0+85
Comments54

В чем набрать и чем собрать C++ проект

Reading time14 min
Views82K
Задавшись этим вопросом я, в первую очередь, сформулировал требования: жесткие и опциональные (но желательные) для системы сборки и графической среды разработки.
Сразу хочу отметить что речь идет о написании C++ кода не под какую-то специфичную платформу типа Android или фреймворка, например Qt, — где все уже готово, как с построением так и с редактированием кода, а об generic коде не привязанному к конкретной платформе или фреймворку.
Читать дальше →
Total votes 57: ↑39 and ↓18+21
Comments111

Упрощенный доступ к данным внутренней FAT12 для STM32

Reading time3 min
Views5.1K
В предыдущей статье был рассмотрен вариант использования микроконтроллера STM32F103C8T6 как flash накопителя с внутренней файловой системой FAT12. Теперь можно рассмотреть, каким образом получить данные из нашей внутренней файловой системы. К примеру нам необходимо хранить некие настройки нашей программы.
Для хранения именованных настроек особого усложнения структур формата данных не потребуется. Примем следующий формат — одна настройка = один файл. К примеру, нам необходимо хранить скорость подключения по UART и допустим, задержку в миллисекундах мигания светодиода. Создадим (в любом текстовом редакторе) в нашей файловой системе файлы UART_SPD.SET и DELAY_BL.SET. Запишем в них значения: соответственно 115200 и 1000.
Чтобы получить эти данные, обратившись к нашей внутренней FAT12 потребуется либо взять стандартную библиотеку HAL FatFs и попытаться ее приспособить под внутреннюю flash. Или пойти более простым и удобным способом — написать свою функцию чтения файловых данных FAT12, что мы и сделаем:
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments12

STM32 fast start. Часть 1 ПО, материалы, Cube MX

Reading time6 min
Views81K
В последнее время все чаще сталкиваюсь с холиварами на тему Cube MX и HAL, применительно к контроллерам STM32.

С одной стороны — стоят защитники, которым нравится удобство конфигурирования и читаемость кода.

С другой — приверженцы писать все руками, которым важна скорость работы и бережное использование ресурсов.

Для того, чтобы расставить все точки над 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.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments46

Как правильно читать объявления в Си

Reading time7 min
Views45K
Даже совсем зеленые программисты на Си, не испытывают проблем с чтением таких объявлений:
int foo[5]; // foo массив из 5 элементов типа int
char *foo; // foo указатель на char
double foo(); // foo функция возвращающая значение типа double

Но как только объявления становятся немного сложнее, проблематично точно сказать что это. Например:
char *(*(**foo[][8])())[];

Как же научиться их читать?
Total votes 125: ↑108 and ↓17+91
Comments88

Работа с ESP8266: Собираем компилятор и пишем первую прошивку

Reading time15 min
Views187K
В прошлой статье мы рассмотрели первоначальную настройку и работу модуля ESP-01 с базовой AT-прошивкой. Возможности данной прошивки достаточно ограничены и использовать её для каких-то повседневных задач достаточно сложно. Как я писал в первой статье, для ESP8266 можно написать свою прошивку с нужным функционалом и тем самым сделать плату ESP-01 самодостаточным устройством. Всем кому это интересно, прошу под хабракат.
Подробности
Total votes 24: ↑23 and ↓1+22
Comments75

Машинка на Arduino, управляемая Android-устройством по Bluetooth, — полный цикл (часть 1)

Reading time6 min
Views42K

Введение


Подробная история того, как из трех двигателей была собрана машина на Arduino, управляемая Android-устройством по Bluetooth. В нескольких десятках абзацев постараюсь максимально пошагово изложить, куда подключить каждый из проводов, как написать фирменное приложение и на каких детских граблях пришлось попрыгать больше недели.

Немного об уровне, авторе и предостережения


Я, автор, пацан 16-17 лет с подмосковной деревни, специализируюсь на написании android-приложений (а там сложнее что-то сжечь), поэтому ответственность за оптимальный подход к решению задач с себя снимаю.

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

Задача


Задача легчайшая – заставить ездить машинку, управляемую Arduino, а пульт заменить андроидом. Но в большинстве моментов пришлось изобретать колесо, потому что в интернетах подходящего решения найдено не было.
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments31

Новые инструменты разработки с LEGO Education — от Microsoft, MIT и не только

Reading time3 min
Views13K
Из шести кубиков LEGO размером 2х4 можно собрать 915 миллионов различных комбинаций. Но в LEGO Education конструирование из кубиков — это лишь часть дела. Даже проекты для дошкольников здесь включают в себя программирование, пусть и в простейшей форме.


Мы стремимся к тому, чтобы гибкость программной платформы LEGO Education была сопоставима с ее гибкостью на аппаратном уровне. И в этом нам помогают наши партнеры — Microsoft, Массачусетский технологический университет, Институт интегральных схем общества Фраунгофера, а также разработчики из России. В этом посте мы расскажем о новых инструментах для программирования, с которыми возможности LEGO Mindstorms Education EV3 и WeDo 2.0 становятся шире.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments15

Распознавание цвета и уровня освещенности с помощью APDS-9960

Reading time8 min
Views14K

image


Недавно на Habr.com промелькнула статья в которой, среди прочего, сообщалось о датчике освещенности. Некоторое время назад я нашел и приобрел интересную вещь — модуль производства фирмы RobotDyn на основе датчика APDS-9960, который тоже умеет измерять уровень освещенности. Поискав и не сумев отыскать упоминаний сего прибора на данном ресурсе, я решил, что это подходящий повод для написания статьи.


В статье мне бы хотелось в общих чертах познакомить читателей с возможностями которые предоставляет этот датчик и более подробно рассмотреть каким образом с его помощью можно определять цвет и измерять уровень освещенности.

Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments10

ОСРВ МАКС — бесплатно? Планируем открыть лицензию для бесплатного коммерческого использования

Reading time2 min
Views7.5K
Мы открываем сбор средств на подготовку ОСРВ МАКС к бесплатному массовому использованию.

image

Новая версия позволит сторонним разработчикам добавлять в систему модули, а лицензия не будет ограничивать коммерческое применение.
Читать дальше →
Total votes 43: ↑32 and ↓11+21
Comments45

Information

Rating
Does not participate
Location
Россия
Registered
Activity