?

Log in

No account? Create an account
Костерок

eddy_em


Емельянов Эдуард Владимирович


Entries by category: компьютеры

[sticky post]Содержание
Костерок
eddy_em
Здесь - краткое содержание моего графоманстваCollapse )

promo eddy_em august 17, 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:

Ростелеком идет дорогой Мегафона?
Костерок
eddy_em
Тоже охамели, сволочи!
Захожу сегодня интернет оплатить. Смотрю — странно, на счету какая-то кривая сумма в минусе. А они списывают по 700р ежемесячно, и плачу я, соответственно, по 700р.
Жена говорит — проверь-ка в личном кабинете. А эти твари мне "касперского" подключили. Без разрешения. Прямо-таки в духе опсосов, которые сначала "нахаляву" подключают какую-нибудь ненужную дрянь, а потом начинают за нее деньги брать!
Я что — похож на вендузятника, которому без "касперского" жизнь не мила? Хотя, даже вендузятникам этот кусок дерьма не нужен, т.к. есть более приличные антивирусы! Касперский выигрывает лишь тем, что их команда сначала пишет вирусы, а потом под них антивирусы — поэтому немного шустрей появляются заплатки, чем у других.

Как поставить андроид на Orange PI PC Plus?
Костерок
eddy_em
Во "встроенном" андроиде ничего, похожего на "market" нет, т.е. установить софт невозможно. Скачиваю с офсайта образ sun8iw7p1_android_dolphin-p1_uart0._PCPlus.rar (интересно, какой дурак его в rar закатал?) и вижу, что dd не позволяет закатать образ на флешку. Пишут, что нужна какая-то PhoenixCard. И где мне это в линуксе достать?

LCD-экранчик от Nokia 5110 и STM8
Костерок
eddy_em
Я уже давно набросал основной код для работы с этим экранчиком и даже составил шрифт для любимой кодировки, но никак руки не доходили это собрать воедино. Вот, за вчерашний вечер и сегодняшний день соединил. Видео на тытрубе:

ДальшеCollapse )

Программный I2C для STM8
Костерок
eddy_em
Я еще где-то в июне подготовил код софтового I2C, но только вчера вечером руки дошли протестировать на железе. С таймингами я, конечно, намучился, а еще хуже было с порядком изменения состояния ног SDA и SCL (т.к. между последовательными сменами состояния возникали интервалы до 0.5мкс — все-таки, у меня еще и прерывания разные работают, то иногда получалось так, что в конце переданного байта "самопроизвольно" возникал STOP).
Но вроде бы со всем разобрался, выложил код на примере работы с SI7005. Кстати, заметил неплохую "очепятку": почему-то я везде humidity называл pressure (то ли забыл, что датчик не давление, а влажность измеряет, то ли с другим его поначалу перепутал). В этом коде все исправлено: команда 'H' запускает измерение влажности (результат выводится в виде H*10), а команда 'T' измеряет температуру (результат выводится в виде T*100).

Теперь при желании можно на основе "вольтметра" на STM8S003 сделать термометр-гигрометр.

1-wire на STM8
Костерок
eddy_em
(написал бы вчера, но почти двое суток интернета не было в поселке)

Потихоньку мои сниппеты для STM8 разрастаются. Чтобы переделать "вольтметр" в термометр на 1-wire (кстати, можно и простое термореле сделать на трехсимвольном "вольтметре" — у него свободных ног достаточно),понадобилась поддержка 1-wire. Все, что в интернете находил, было реализовано совершенно некрасиво: ногодрыгом с жуткими задержками (по сути, операция опроса термодатчика везде делалась блокирующей, что не очень хорошо для таких вещей, как динамическая индикация, опрос клавиатуры и т.п.).
Я сделал на таймере: у трехсимвольного "вольтметра" как раз второй канал compare/capture таймера TIM2 используется как аналоговый вход для измеряемого напряжения, т.е. модифицировать будет проще всего. И Вот, что получилось. Пока что код непричесанный, содержит много отладочной информации + не до конца допиленный.

Что уже реализовано:
  • опрос одного-единственного датчика с командой Skip ROM,

  • вывод температуры в тысячных долях °C,

  • сохранение ROM-кода подключенного датчика в EEPROM (т.к. я рассчитывал на STM8S003, то, несмотря на то, что у 105-го, на котором я тренируюсь, 1кБ EEPROM, датчиков максимум 14, т.к. у 003-го всего лишь 128Б),

  • поочередный опрос всех датчиков с сохраненным ROM и выдача температуры.

Что еще нужно реализовать (UPD 08.04):
  • убрать тысячные (т.к. точность DS18 ниже плинтуса, там даже округление до целых градусов — многовато, по-хорошему, надо в сторону ближайшей тройки, а то и четверки округлять), (сделано), теперь по крайней мере не так в глаза бросается; вот, например, для "устаканившихся" трех B20 и одного (четвертого) S20: 23.6, 23.5, 23.4, 23.5. А то и вообще: 23.6, 23.6, 23.4, 24.0...

  • добавить возможность удаления ROM несуществующих датчиков, (сделано)

  • перенести весь код на "вольтметр".


Потом еще хочу с DHT11/DHT22 научиться работать. Но у них совсем все уныло, т.к. только 1 датчик на линию можно вешать. Да и точность там ну совсем жуткая, даже DS18 фору даст!

А еще надо бы закончить с реализацией аппаратного 1-wire (через таймер с DMA) на STM32.

Морфологические операции: эрозия и диляция.
hram nauki
eddy_em
Итак, как я уже говорил в предыдущей записи, за время, бесцельно проведенное в Нижнем Новгороде, кое-что полезное я таки сделал. В этой записи расскажу о реализации операций эрозии и диляции.
ПодробностиCollapse )
В следующей заметке изложу эпопею поиска оптимального алгоритма выделения связанных областей. Но для начала надо отрихтовать "китайский" вариант, чтобы работал правильно. Ну и подумать насчет параллелизации (мало ли: вдруг на пару порядков быстрей будет).

Попробовал ADG506A в действии
hram nauki
eddy_em
Сегодня наконец-то у меня появилось время, чтобы проверить, как же работает аналоговый коммутатор. А работает он превосходно.
ПодробнейCollapse )
Вот, кстати, даже видео снял на веб-камеру (качество, правда, получилось жуткое: вебка-то дешевенькая).

[C][pthreads] Использование преобразований Хафа (Hough transform) для выделения прямых на изображени
Костерок
eddy_em
Об алгоритме преобразования Хафа можно найти много источников в интернете, поэтому касаться алгоритма я не буду, а сразу перейду к программной реализации метода и демонстрации примера.

Строить массив [R, Θ] можно двумя способами. Первый — последовательно пройтись по всем точкам этого массива, занося туда суммарную интенсивность пикселей, расположенных на соответствующей прямой. Сложность этого способа пропорциональна произведению площади изображения-преобразования Хафа на характерный размер оригинального изображения.

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

Какой из способов использовать — выбор наиболее оптимальной производительности. В моем случае второй способ был удобнее (т.к. изображение-преобразование Хафа имеет меньшую площадь).

Еще один вопрос: что заносить в ячейки преобразования Хафа. Мы можем заносить туда единицу для каждого пикселя, чья интенсивность выше некоего порогового значения, а можем заносить саму эту интенсивность. Я выбрал второй способ, т.к. он лучше отражает наиболее интенсивные линии на фоне более слабых.

Так как это преобразование — задача довольно ресурсоемкая, ее можно попытаться распараллелить. Единственным узким местом является точка занесения данных в результирующий массив. Поэтому желательно либо синхронизовать эту точку (при помощи мьютексов, например), либо же использовать атомарные операции.


ПодробностиCollapse )