Pull to refresh
135
0
Алексей @UA3MQJ

Инженер программист

Send message

SimulIDE: открытый симулятор цифровых схем и микроконтроллеров

Reading time 3 min
Views 20K

В этой заметке я решил рассказать о SimulIDE. Это относительно новое программное средство с открытым исходном кодом, предназначенное для моделирования 8-битных микроконтроллеров семейств AVR и PIC, а также прочих электронных схем. По интерфейсу SimulIDE напоминает Proteus. SimulIDE кроссплатформенный и работает под Linux, Windows и Mac. Далее будут рассмотрены основные возможности этого симулятора и рассказано о моих личных впечатлениях от работы с данной программой.

Читать далее
Total votes 57: ↑57 and ↓0 +57
Comments 35

Цифровая музыка на микрокомпьютерах (часть 1/2)

Level of difficulty Easy
Reading time 25 min
Views 9.1K

Сегодня, когда любой школьник имеет возможность сочинять модные биты на своём домашнем компьютере или смартфоне, идея применения компьютерных устройств для создания музыки никого не удивляет. Кажется, что эти технологии с нами уже очень давно. Однако, массовому пользователю возможность составления мелодий из фрагментов реалистичных звуков на компьютере стала доступна лишь немногим больше четверти века назад. Поговорим о том, как это устроено, о первых шагах цифровых музыкальных редакторов в дома обычных людей, и о неожиданной запинке, приключившейся на этом пути в странах запаздывающего технического прогресса.
Читать дальше →
Total votes 118: ↑117 and ↓1 +116
Comments 76

Отрабатываем протокол valid/ready и конвейеры на микроархитектурном тренажере

Level of difficulty Medium
Reading time 2 min
Views 1.4K

Чем хорош FPGA-хаб на Хабре это еще и тем что тема протокола valid/ready время от времени тут всплывает. И это действительно важно так как valid/ready является одним из основных протоколов организации управления потоком (flow-control). Понимание valid/ready для микроархитектора так же необходимо как необходимо понимание закона Ома электрику.

На прошлом занятии мы отработали концепцию очереди FIFO на микроархитектурном тренажере - hdlgadgets. В этот раз мы возьмем два FIFO буфера (которые образуют конвейер с valid/ready рукопожатиями) и будем менять flow-control логику конвейера.

Мы покажем что valid/ready это не только механизм передачи данных от одной очереди к другой, но еще и метод для организации разного рода логического функционала между очередями.

Если до этого момента вы не сталкивались с протоколом valid/ready, то будете приятно удивлены как легким движением руки (а если точнее, написанием пары строк на верилоге) мы можем реализовывать разного рода функционал взяв за основу конвейер из двух FIFO.

Читать статью целиком и смотреть видео
Total votes 4: ↑4 and ↓0 +4
Comments 0

Пишем трассировщик лучей для ZX Spectrum

Level of difficulty Easy
Reading time 16 min
Views 20K

Я люблю трассировщики лучей и даже посвятил им половину своей книги. Менее известна моя любовь к ZX Spectrum — домашнему компьютеру 1982 года, с которым я вырос и с которого начался мой интерес к графике и программированию. По современным стандартам эта машина столь смехотворно слаба (и даже по стандартам 1980-х), поэтому возникает неизбежный вопрос: в какой степени удастся портировать трассировщик лучей из книги Computer Graphics from Scratch на ZX Spectrum?

В ZX Spectrum установлен процессор Z80 на 3,5 МГц (в тысячу раз медленнее, чем современные компьютеры), который не может умножать числа (!!!), и 48 КБ ОЗУ (в миллион раз меньше); он имеет графический режим 256x176 (примерно в двести раз меньше современного разрешения), способный отображать 15 цветов (в миллион раз меньше, к тому же с довольно необычными особенностями). Интересная машина для графического приложения, активно задействующего CPU!

Я планирую реализовать его на Sinclair BASIC — встроенном языке программирования Spectrum. Это не просто BASIC, а древний, очень ограниченный диалект BASIC. Например, единственные структуры управления в нём — это FOR и IF (а у IF нет ELSE и даже ENDIF); все переменные глобальны; не существует вызовов функций, только GO TO и GO SUB; и так далее. Кроме того, он интерпретируемый, то есть сверхмедленный. Но, по крайней мере, он реализует программное умножение! Если мне нужна будет производительность, то я всегда могу переписать трассировщик на ассемблере.

Я настроил минимально необходимую среду: код на BASIC я пишу в VS Code, компилирую его с помощью BAS2TAP и запускаю в эмуляторе FUSE. Благодаря этому скорость итераций оказалась достаточно высокой.

Читать далее
Total votes 142: ↑141 and ↓1 +140
Comments 85

Сколько стоит умный дом? Рассказываю, как строил свой и что получилось за 1000 руб./м²

Level of difficulty Easy
Reading time 25 min
Views 93K

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

Читать
Total votes 300: ↑298 and ↓2 +296
Comments 296

Введение в модулярную арифметику

Reading time 6 min
Views 73K
В обычной жизни мы обычно пользуемся позиционной системой счисления. В позиционной системе счисления значение каждого числового знака (цифры) в записи числа зависит от его позиции (разряда) [1]. Однако существуют и так называемые «непозиционные системы счисления», к одной из которых относится «система остаточных классов» (СОК) (или в оригинале Residue Number System (RNS)), являющаяся основой модулярной арифметики. Модулярная арифметика базируется на «Китайской теореме об остатках» [2], которая для нашего случая звучит следующим образом:
Для любой системы взаимно простых чисел p1, … pn, любое число X из диапазона [0; M), где M = p1*p2*…*pn взаимооднозначно представимо в виде вектора (a1, a2, …, an), где ai = X%pi (здесь и далее «%» — операция взятия остатка от целочисленного деления X на pi).
p1, … pn – модули системы
a1, a2, …, an – остатки (вычеты) числа по заданной системе модулей

Читать дальше →
Total votes 85: ↑80 and ↓5 +75
Comments 39

Быстрое индексное умножение по модулю

Reading time 4 min
Views 37K

Введение


Обычно данный материал приводится с обилием формул и рассчитан больше на математиков. Я постараюсь расписать его наиболее доступно на простых численных примерах с точки зрения применения этого метода в микроэлектронике на аппаратном уровне. В численных примерах для наглядности будет использоваться значение p = 11.

Постановка задачи


Положим, что нам требуется выполнить умножение следующего вида: res = (a*b) mod p, где
0 <= a < p
0 <= b < p
p – простое число.
mod p – операция нахождения остатка по модулю.
И выполнить его надо на низком уровне, где нет как таковой операции умножения и операции взятия остатка от деления или же они реализуются достаточно сложно (например, в электронном устройстве).
Подробности
Total votes 42: ↑41 and ↓1 +40
Comments 23

Вы тоже любите приятные сюрпризы?

Reading time 6 min
Views 15K


Недавно я подбирал отладочную плату для своих задач. Цены не очень радовали, я даже немного расстроился. Но потом неожиданно нашёл одну очень интересную плату по весьма приятной цене. С неё всё и началось. Потом были ещё платы, наклейки, сюрпризы… Любопытно что под капотом наклейкой? Тогда в путь!
Читать дальше →
Total votes 49: ↑46 and ↓3 +43
Comments 30

Звуковая карта USB на STM32. Часть 2: Используем встроенный АЦП

Reading time 7 min
Views 8.4K

Во второй части публикации речь пойдёт о реализации линейного входа описанной ранее звуковой карты USB на встроенном в MCU STM32F411CEU6 АЦП.

В статье будут разобраны несколько неочевидных нюансов подобной реализации, а в финале мы сравним характеристики линейного входа на встроенном АЦП с характеристиками линейного входа на кодеке TLV320AIC3104IRHB.
Читать дальше →
Total votes 65: ↑64 and ↓1 +63
Comments 17

Справочник по антеннам для радаров

Reading time 15 min
Views 106K
Статья на перевод предложена alessandro893. Материал взят с обширного справочного сайта, описывающего, в частности, принципы работы и устройство радаров.

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

image
Слева – изотропная антенна, справа – направленная

Дипольная антенна





over9000 картинок
Total votes 63: ↑60 and ↓3 +57
Comments 23

RadSensor v1.0: собираем портативный персональный дозиметр из готовых компонентов

Reading time 7 min
Views 14K

Собираем свой первый мобильный датчик радиации из готовых электронных компонентов. Второй мануал из цикла про diy-дозиметры.

К этому материалу мы шли долгие 3 года. И продолжаем путь. В статье почти нет шуток, воды и экскурсов в историю. Только электронное мясо: BOM со ссылками на Али, код, модели корпуса, фото-инструкция и задел на будущее.

Читайте, повторяйте, опровергайте и спорьте. Только не будьте равнодушны к российскому DIY.

Приступить к сборке
Total votes 32: ↑31 and ↓1 +30
Comments 47

Универсальный DSL. Возможно ли это?

Reading time 25 min
Views 7.7K

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

Однако создание DSL требует от разработчика соответствующей квалификации. Регулярное использование этого подхода превращается в рутину разработки очередного языка. Решением может стать создание универсального инструмента — движка, который будет применим к совершенно разным задачам и прост в модификации. В этой статье мы на C# разработаем простейший с точки зрения реализации, но при этом достаточно мощный языковой движок, при помощи которого можно решить достаточно широкий круг задач.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Comments 48

Народная дозиметрия. Бюджетный детектор радиации своими руками

Reading time 7 min
Views 20K

Сегодня мы изготовим простой и бюджетный DIY-дозиметр на базе wifi-контроллера ESP32 и платы RadSens. В качестве сенсора будет использована популярная трубка СБМ20. 

Целью статьи является создание максимально подробной инструкции по сборке. Если повторить описанные шаги сможет самый юный инженер-дозиметрист - мы достигли успеха.

Читать далее
Total votes 34: ↑33 and ↓1 +32
Comments 29

Миллион WebSocket и Go

Reading time 11 min
Views 97K

image


Привет всем! Меня зовут Сергей Камардин, я программист команды Почты Mail.Ru.


Это статья о том, как мы разработали высоконагруженный WebSocket-сервер на Go.


Если тема WebSocket вам близка, но Go — не совсем, надеюсь, статья все равно покажется вам интересной с точки зрения идей и приемов оптимизации.

Читать дальше →
Total votes 119: ↑115 and ↓4 +111
Comments 78

Zettelkasten: как один немецкий учёный стал невероятно продуктивным

Reading time 18 min
Views 364K
Изображение предоставлено автором. Основано на фотографии Патрика Томаса с Ансплэша

Это перевод статьи Дэвида Клира о методе ведения заметок Zettelkasten, благодаря которому немецкий социолог Никлас Луман написал более 70 книг и 400 научных статей. Стоит читать, если вы хотите создать собственную базу знаний, систематизировать идеи и перестать забывать важные мысли.

Статья бережно перенесена из блога бегущего редактора. Кстати, следить за анонсами новых статей можно в моём телеграм-канале. Подписывайтесь, чтобы ничего не пропустить!
Читать дальше →
Total votes 52: ↑48 and ↓4 +44
Comments 82

Как отличить начинающего профессионала от умудренного хоббиста в цифровой схемотехнике?

Reading time 7 min
Views 12K

В чем главное отличие между FPGA-хоббистом, ностальгирующим по КР580ИК80 на пенсии - и начинающим микроархитектором, ориентированным на будущее трудоустройство в передовую процессорную компанию или сфинансированный венчурными капиталистами стартап?

Три слова: понимание концепции конвейера. Молодым профессионалом, не старым хоббистом.

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

(Некоторые из таких людей даже пишут книги - вот некий Роберт Дунне реализовал процессор конечным автоматом с состояниями fetch/decode/execute, но до конвейера не дожал)

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

Но это надо преодолеть, поскольку если вы прийдете интервьироваться в какой-нибудь AMD на позицию юного проектировщика, вас будут спрашивать не как помигать лампочками и засунуть Радио РК-86 в Xilinx, а как стоя перед интервьирующим написать на доске на языке описания аппаратуры Verilog - конвейерную реализацию какого-нибудь умножения со сложением. Или сделать это на компьютере отрезанном от интернета, так что вы даже не cможете нагуглить решение - вот садисты, а?

Именно этому вопросу будет посвящено следующее занятие Сколковской Школы Синтеза Цифровых Схем.

Объяснение концепции конвеера военкоматом
Total votes 26: ↑18 and ↓8 +10
Comments 91

Разработка собственного ядра для встраивания в процессорную систему на базе ПЛИС

Reading time 11 min
Views 6.2K


Итак, в первой статье цикла говорилось, что для управления нашим оборудованием, реализованным средствами ПЛИС, для комплекса Redd лучше всего использовать процессорную систему, после чего на протяжении первой и второй статей показывалось, как эту систему сделать. Хорошо, она сделана, мы даже можем выбирать какие-то готовые ядра из списка, чтобы включить их в неё, но конечная цель — именно управлять нашими собственными нестандартными ядрами. Пришла пора рассмотреть, как включить в процессорную систему произвольное ядро.
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 3

Изобретаем библиотеку vusb

Reading time 27 min
Views 17K

Введение


После прочтения названия может возникнуть закономерный вопрос: зачем в наше время изучать программную реализацию low-speed USB, когда существует куча дешевых контроллеров с аппаратным модулем? Дело в том, что аппаратный модуль, скрывая уровень обмена логическими уровнями, превращает протокол USB в своеобразную магию. Для того же, чтобы прочувствовать как эта «магия» работает, нет ничего лучше, чем воспроизвести ее с нуля, начиная с самого низкого уровня.


С этой целью попробуем изготовить на основе контроллера ATmega8 устройство, прикидывающееся USB-HID'ом. В отличие от распространенной литературы, мы пойдем не от теории к практике, от самого нижнего уровня к верхнему, от логических напряжений на выводах, и закончим «изобретением» той самой vusb, после каждого шага проверяя, работает ли код как ожидалось. Отдельно отмечу, что не изобретаю альтернативу этой библиотеке, а напротив, последовательно воспроизвожу ее исходный код, максимально сохраняя оригинальную структуру и названия, поясняя, для чего служит тот или иной участок. Впрочем, привычный для меня стиль написания кода отличается от стиля авторов vusb. Сразу же честно признаюсь, что помимо альтруистического интереса (рассказать другим сложную тему) имею и корыстный — изучить тему самостоятельно и через объяснение выловить для себя максимум тонких моментов. Отсюда же следует, что какой-то важный момент может быть упущен, или какая-то тема не до конца раскрыта.


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


Также отмечу, что рассматривается только low-speed USB, даже без упоминания, чем отличаются более скоростные разновидности.

Читать дальше →
Total votes 33: ↑33 and ↓0 +33
Comments 22

Программисты, давайте изучать исходники классических программ

Reading time 2 min
Views 54K
Современные программисты — счастливчики: мы живём в мире, в котором исторические и оказавшие существенное влияние программы имеют открытый код, доступный для изучения. Однако, многие программисты только учатся, и изучают те программы, над которыми работают сами. У нас редко находится время для изучения исторических работ, и курсы программирования редко тратят время на такие вещи.

Мы полагаем, что разработчикам следует изучать исходники программ, оказавших большое влияние, подобно тому, как архитекторы изучают здания, оказавшие влияние на архитектуру (и критикуют их). Чем повторять те же ошибки снова и снова, мы должны изучить большую работу, проделанную до нас, и вынести из неё уроки.
Читать дальше →
Total votes 74: ↑69 and ↓5 +64
Comments 68

Эмулятор магнитофона для ZX-Spectrum

Reading time 2 min
Views 24K
Как это ни странно, даже сейчас, спустя столько десятилетий, есть множество людей, которым интересен ZX-Spectrum. И дело не ограничивается программными эмуляторами, нет. У этих людей есть вполне себе настоящие, “железные” спектрумы. Подавляющее большинство этих компьютеров оснащено дисководами, но есть и экземпляры только с магнитофонным входом. Такой компьютер можно загрузить, например, с аудиоплейера. Но при таком способе загрузки неудобно переходить между блоками данных внутри аудиофайла, например, если игра требует загрузки уровней. Да и места аудиофайлы занимают порядочно… Есть, конечно, ещё разные программы для смартфонов, воспроизводящие форматы файлов данных для спектрума tap и tzx. Но можно для этих же целей собрать аппаратный эмулятор магнитофона, описанный в этой статье.
Total votes 48: ↑47 and ↓1 +46
Comments 30

Information

Rating
Does not participate
Location
Рыбинск, Ярославская обл., Россия
Date of birth
Registered
Activity