Когда не знаешь, как соврать, говори правду – это очень озадачивает окружающих.
Григорий Горин

Меню навигации для мобильных

Последние сообщения

#1
Путешествия / Re: Отчёты о велопрогулках
Последний ответ от Slabovik - Вчера в 22:51
Карты говорят, что из Ощепково в Бутку узкололейка была...
#2
Доброго Вам :)

Вы о LECAD что-нибудь слышали?
Я смутно припоминаю, что было что-то такое, но вот в последнее время на разных форумах появились заметки, о 'новой САПР', что вышла новая версия, и таки решил попробовать.

Сразу ссылка на сайт: https://www.lecad.ru/

Скачать лучше сразу актуальную версию, объём небольшой. В пакете установки только каталог с исполняемыми файлами. Библиотек нет - их добавляют отдельно (в принципе, такой подход одобряю - практически никогда не пользуюсь чужими библиотеками).

Первое впечатление: работает. По стилю оформления напоминает KiCAD, а по дружелюбности по-видимому, авторы вдохновлялись DipTrace.

Правда, сразу же вынужден сказать, что несмотря на то, что есть "коммерческие" версии, программа пока очень сырая в плане юзабилити: очень много мест, где откровенно недоделан функционал, и в редакторе компонентов, и в редакторе схем и плат. Ну, вот например, при рисовке полилинии, при её замыкании не под 90°, ставится в одну точку два узла, при этом ни удалить, ни добавить узел в полилинию не получается (нету, нечем). При зеркалировании нарисованного объекта манипуляции с ним (подвинуть узел и т.п.) тоже становятся зеркальными, т.е. например мышь двигаешь вправо, а то, что ты ей двигаешь - двигается влево :P. При сохранении компонента ругается, что не заполнен RefDes и предлагает только "сохранить" - "отменить". Если сохраняешь - нормально, но если отменяешь - отменяется ВСЁ, что ты делал с компонентом... а... а я только refdes хотел поправить. А поправить его... тоже нечем - нету. И таких мест пока что очень много.

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

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

Саппорт можно найти здесь: https://vk.com/lithium_group
хотя я предпочёл бы традиционный форум.

#3
Путешествия / Re: Из кабины машиниста
Последний ответ от Slabovik - 29 Янв., 2023, 20:06
Где-то в тёплой Франции
Ница - Торам
[свернуть]
А это Испания
Portbou - Barcelona
[свернуть]
#4
Путешествия / Re: Отчёты о велопрогулках
Последний ответ от Slabovik - 25 Янв., 2023, 18:52
Да, интересная штука. Дорогая. Но я посмотрел, что GoPro умеет 60 кадров делать, в отличие от более дешёвых.
А вот умеет ли она запись вести, скажем, сутки. При подаче внешнего питания.

зы: пытаюсь вспомнить, куда я ездил этим летом и, что-то не собирается на рассказ. Помню только прокол за проколом... Сам-то куда-нибудь ездил?
#5
Путешествия / Re: Отчёты о велопрогулках
Последний ответ от Shaman - 25 Янв., 2023, 10:59
Это съёмка на экшен камеру, у тойже GoPro есть отличная электронная стабилизация картинка не дрожит даже на жестком подвесе. Особо упоротые ставят Вот такие вещи на раму.
#6
Путешествия / Re: Отчёты о велопрогулках
Последний ответ от Slabovik - 23 Янв., 2023, 17:28
Есть желание снимать вот так


но нет понимания, чего вообще для этого нужно.
Может, кто поделится опытом?
#7
Цифровая техника / Re: АЦП в AVR
Последний ответ от Slabovik - 22 Янв., 2023, 23:51
Есть ощущение, что работа никак не идёт. Да?
Я смотрел алгоритм с разных сторон, но некоторые куски мне не понятны. Возможно "деревья мешают", а может там действительно какой-то косяк. Проблема в том, что мне видится неправильной такая разница в прохождении кругов ада циклов, тем более, что они получаются достаточно длинные. Поэтому я снова хотел бы начать с самого-самого начала - организации работы программы таким образом, чтобы обеспечить многозадачность (а здесь она имеется даже не скрытая) хотя бы в самом простом виде. И начинать всегда надо от крупной структуры, которая и будет формировать "скелет" алгоритма. Наполнить же его можно по мере проработки мелочей.
Если делать наоборот, то обычно получается так, что реализованная без учёта "встраивания в скелет" функциональность не даст его реализовать.

Для задачи "фонарик" могу предложить рассмотреть вот такой базовый алгоритм
Алго_1.png
Он не подробный, но это форма для роста, которая поможет разобраться в том, как сделать многозадачность.
Что здесь имеем? Имеем здесь большой круг программы, всё время сканирующий "а не случилось ли какое событие". Если событие случилось, то производится вызов соответствующих процедур для их обработки. Для организации строгой периодичности используется "тормозок" в виде перевода процессора в режим Stop (Idle), в котором он находится до поступления первого же прерывания, которое произойдёт. Периоды задаёт таймер (какой настроите - тот и будет). Они не должны быть слишком маленькими, но и не должны быть слишком большими. Обычно период выбирается соответственно наиболее часто исполняющемуся событию. Это может быть, например, период обновления индикатора, период замера какого-то параметра и т.п. Более редкие функции вызываются не каждый раз в цикле, а, например, либо по требованию, либо организуется пропуск N циклов.
В принципе, можно вообще без Idle - программа просто не будет останавливаться, дожидаясь события (именно так работали системы, в которых не было прерываний - они постоянно в цикле опрашивали аппаратуру на предмет нужных событий), но это слегка увеличивает энергопотребление процессора (тем больше, чем быстрее процессор).
В процедурах прерываний действий производится не много - только самые необходимые. Ибо прерывание - это суть событие, о котором надо "дать знать" самой программе. В прерывании можно считывать-записывать данные (например UART или АЦП), помещая их в очередь-буфер для дальнейшей их обработки основной программой, и обязательно информируем основную программу о событиях установкой соответствующих флагов (которые организованы при помощи обычных переменных в ОЗУ).
Алго_2.png
Дальше нужно определиться с тем, какие функции и какие события вообще в системе будут. Начать с основных. Обычно это вывод на индикатор, обработка кнопок, измерение чего-либо. Требующие наиболее чёткой периодичности должны быть первыми после Idle. Потому что каждая их процедур по цепочке в процессе выполнения имеет не строго одинаковую трудоёмкость, и чем дальше от Idle - тем больше будет "дрожать" периодичность их запуска. В случае с фонариком наиболее периодичной является наверное процедура обновления показаний на дисплее (матричном фонаре). А вот наиболее быстрой реакции будет требовать процедура взаимодействия с UART. Данные с регистра надо снимать достаточно быстро, пока не пришёл следующий байт. Поэтому это действие лучше всего организовать через промежуточный буфер приёма-передачи. Процедура в основном круге будет взаимодействовать с этим буфером на уровне "сообщений", а данные в/из портов UART в/из буфера можно перемещать в прерывании, потому что это короткие действия.

Функции на первом этапе достаточно определить только основные. Дополнительные можно "навесить", если это будет нужно, просто встроив их в цепочку опросов после Idle.

Ну и на следующих шагах надо определиться с алгоритмами этих основных функций. Предлагаю начать с АЦП (ибо по теме), который измеряет напряжение питания и выключает систему, если напряжение становится слишком низким. Вроде не сложно. Мысли (предложения) есть? (знаю, были на прошлой странице, но сюда оно пока не вписывается)
#8
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Slabovik - 19 Янв., 2023, 15:31
Сейчас я делаю просто через DB/DW, но из-за 16-разрядной структуры программной памяти это напрягает.
Вот так приходится писать слово, если хотеть соответствия расположения байт с их расположением в дампе
Label: DW  (xx) | ( xx <<8 )
ну это потому что в дампе младший вперёд, он же первым и выбирается при чтении.

Но вопрос вообще был не про файлы шрифтов из какой-то ос, а вообще о том, как прикомпилить абстрактные данные, если они у тебя просто в бинарном виде.
Простого решения я пока не нашёл. Вариант с их переписыванием через DW точено, трудоёмок, но в принципе работает.
Также работает вариант, когда я заблаговременно резервирую (через DW же) область в памяти, а потом на программаторе (использую его HEX-редактор) заполняю эту область нужными данными и её прошиваю уже отдельно. Слегка менее трудоёмко, но более восприимчив к ошибкам.
зы: в примере с Си работа с файлами. Это несколько другое, скорее к вопросам ввода-вывода, к тому же в рамках используемой ОС, а в контроллерах это всё отсутствует, поскольку ОС нету.
#9
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Shaman - 19 Янв., 2023, 12:28
Насколько я знаю внутри файла шрифтов храниться растровое изображение оного с описанием. В си есть работа с бинарниками, по смещению. Думаю здесь нужен такой-же подход. По смещению читаем код символа и загружаем его в подпрограмму способную его переварить.
#10
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Slabovik - 17 Янв., 2023, 16:32
Господа, а есть ли способ "пристегнуть" готовый бинарный код в программу на .asm?
Суть в том, что мне нужны матричные шрифты, которые готовятся визуально в другой программе, но результатом её работы является .bin файл.