Сообщество - TECHNO BROTHER
Добавить пост

TECHNO BROTHER

1 672 поста 12 556 подписчиков

Популярные теги в сообществе:

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом?

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Я, как и многие мои читатели, очень люблю игры. Уже довольно обширное число моих статей было посвящено ремонту и моддингу самых разных игровых консолей — как китайских «нонеймов», так и брендовых PSP и PS Vita! Однако, меня тянет к железу не только желание отремонтировать и поставить в строй «устаревшие» девайсы, но и мания делать и созидать что-то своё! А ещё я очень люблю программировать игры и графику сам. Недавно я загорелся идеей разработать с нуля свой портативный «тетрис»: от схемы и разводки платы, до написания прошивки и игр под нее. Что получается, когда программист, который поставил электронику практически во главе своей жизни, пытается сделать свое устройство? Читайте в статье!

❯ Как я к этому вообще пришел?


Проекты разработки самодельных игровых приставок стали очень популярны к нашему времени. Если раньше embedded-разработка была достаточно дорогой и доступной лишь для избранных, то сейчас на рынке можно найти все что хочешь — и мощные микроконтроллеры с кучей периферии за 300 рублей, и готовые дисплейные модули по 250 рублей, и макетные платы с удобными dupont коннекторами за весьма скромные деньги.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Собрать свой гаджет в пределах одной-двух тысяч рублей стало вполне реальным. Люди собирают себе самые разные устройства, а игровые приставки — одна из самых популярных тем. Однако, для многих людей, которые только начинают знакомится с миром embedded-электроники, собрать консоль в своем корпусе с Raspberry Pi на борту и RetroPie в качестве оболочки — за счастье.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу


Однако есть определенная категория электронщиков, к которой отношусь и я — нам нужно делать всё с нуля! Свои проекты я стараюсь реализовывать на самопальных фреймворках/движках, точно также я мыслю и в подходе электроники — ну не могу я использовать чужие решения и стараюсь разобраться в вопросе сам. За моей спиной есть весьма интересные демки. Например, это моя игрушка с незамысловатым названием «ралли-кубок ТАЗов», которую я написал за неделю с нуля (рендерер, звук, ввод, редактор уровней — все свое) в 2022 году:

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу


Вот так, с любовью программировать игры, я и пришел к мысли сделать свою консоль, так как вижу её именно я. Только без чужих библиотек и наработок, но не прям уж bare metal. Сел я и начал думать, на чём же мы будем строить наш игровой девайс!

❯ Из чего будем делать?


Как я уже говорил выше, в наше время выбор железа для создания своих девайсов большой — тут и мощные микроконтроллеры/одноплатники, по производительности сравнимые с телефонами 2005-2006 годов, и различная периферия — аж глаза разбегаются. Однако проектировать будущую консоль нужно исходя из некоторых требований.

Характеристики моего девайса следующие:

  1. Процессор: двухядерный ARM микроконтроллер RP2040 на частоте 133мгц, построенный на архитектуре Cortex-M3. Сам процессор распаян на плате Raspberry Pi Pico.

  2. ОЗУ: 260 килобайт SRAM, встроена в процессор. Немного, но если грамотно распоряжаться ресурсами — то хватит.

  3. ПЗУ: 2Мб SPI Flash-памяти, также распаяны на плате.

  4. Дисплей: 1.8" TFT-матрица с разрешением 128x160. Выбор разрешения обусловлен производительностью будущей консоли — процессор банально не сможет заполнять матрицу с относительно высоким разрешением.

  5. Ввод: 6 кнопок, 4 из которых — направление, 2 — действий. В будущем могут добавиться еще несколько.

  6. Звук: динамик. Пока не знаю, с чего рулить будем — возможно, возьмем «железный» ШИМ-контроллер процессора, а возможно прикрутим внешний ЦАП с i2s.

  7. Питание: 3.7в аккумулятор BL-4C. Да, да, тот самый с Nokia и современных кнопочников! Аккумулятора, емкостью в 800мАч должно хватать хотя-бы на 4-5 часов игры. При этом зарядка АКБ обеспечивается модулем TP4056.


Весьма неплохо для самоделки, согласны? Как я уже говорил раннее, эти характеристики примерно соответствуют мобильным телефонам 2004-2006 годов — Nokia 6600, Sony Ericsson K510i, Samsung D800. Отличие лишь в ОЗУ (в телефонах её 2-4 мегабайта) и периферийных модулях типа контроллера дисплея.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу


На фото E398 — мобилка 2004 года выпуска, но она здесь не просто так. :)

Важную пометку нужно сделать касательно дисплеев: эти 1.8" матрицы бывают приходят с «синевой» — это не железная проблема и не совсем брак. Сам контроллер в дисплея в них сильно греется (хотя токоограничивающий резистор стоит) и негативно влияет на клей, из-за чего матрицы отклеивается от подсветки и слои поляризации начинают «синить» картинку. Лечится проклееванием подложки матрицы суперклеем.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



RPi Pico я решил выбрать, поскольку информации про них достаточно мало, характеристики хорошие и пока что никто особо ничего на них не делал, тем более в рунете. А ещё у них очень удобное и простое SDK, практически bare-metal. ESP32, например, работает на FreeRTOS и имеет кучу библиотек, здесь же API простое и понятное.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Закупаем все необходимое и начинаем творить!

❯ Графика


В первую очередь нам нужно подключить дисплей и что-нибудь на него вывести. Заодно и SPI погоняем на незнакомом чипсете, благо работа с ним очень простая — задаем конфигурацию пинам (gpio_set_function), настраиваем SPI-контроллер и можно посылать данные.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу


SPI у RP2040 работает на частоте вплоть до ~60мгц — это достойная скорость передачи, в том числе и для быстрого вывода графики. На самом деле, SPI даже предпочтительнее чем параллельный 8080-интерфейс для использования в микроконтроллерах: дело не только в количестве занимаемых пинов, но и в возможности использования DMA!

В подобных проектах всегда нужно делать так, чтобы дисплей можно было при необходимости поменять, а желательно вообще научить работать его с несколькими контроллерами: разные дисплеи одной диагонали могут использовать разные контроллеры. В моём случае, этоST7735. Для разрешений 240x320 используются ILI9325, ILI9341, ST7789. Команды инициализации дисплея честно позаимствованы, но именно в этом нет ничего зазорного — сама система команд относительно стандартизирована, отличается лишь первичная настройка питания, гамма-коррекции и т. д — часто init sequence вставляет сам производитель в даташит.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



После инициализации дисплея пробуем что-нибудь вывести. Да, все работает без проблем. Пару важных нюансов: ST7735 требует посаженный на землю CS, в воздухе его оставлять нельзя, как некоторые ILI (вы ведь навряд ли будете вешать несколько устройств на одну шину с дисплеем, когда есть вторая?) и логическое состояние 1 на пине RESET (в воздухе и «на земле» он будет висеть в постоянном ресете).

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



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

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Саму картинку подготавливает процессор: именно он рисует картинки и он же делает их прозрачными. На него ложится основная работа, однако мы можем ему помочь разгрузиться, если отдадим передачу уже подготовленного кадра на дисплей на DMA (Direct Memory Access) — устройство в микроконтроллере, которое позволяет процессору настроить параметры передачи данных, а DMA их будет сам копировать из памяти или в память. Таким образом, можно реализовать асинхронное копирование нескольких блоков ОЗУ, или, как в моем случае — передачу буфера кадра на дисплей, пока процессор готовит следующий. Чем больше разрешение — тем больше эффекта от DMA!

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Кроме того, важно выбрать формат цвета для нашего дисплея: я выбрал 2-х байтный RGB565 (5 бит красный, 6 бит зеленый, 5 бит синий). Это экономичный формат который выглядит красивее палитровой графики и кушает не так уж и много драгоценной памяти. Кроме того, на данный момент мы умеем отрисовывать изображения произвольных размеров с прозрачностью — вместо альфа-канала здесь используется так называемый colorkey — концепция, очень близкая к хромакею, только она берет в качестве трафарета конкретный цвет. В нашем случае это «255 0 255» (ярко розовый).

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Общая производительность рендерера порадовала: он легко осилит около сотни-двух различных спрайтов с адекватной производительностью, в зависимости от их размера. Но для такого разрешения экрана и будущих игр — это неплохой результат!

❯ Ввод


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

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Кидаем общий минус на все кнопки, а второй вывод размыкателя кидаем на соответствующие пины GPIO. Я выбрал предпоследние т. к. на них ничего важного не висит, текущая конфигурация занимает 6 пинов. На фото выглядит не очень красиво — на то она и макетка.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



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

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу

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

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу

❯ Пишем игру


Теперь у нас есть минимально-необходимая основа для написания игры. Первой игрой для своей консоли я решил написать классический шутер в космосе — летаем на кораблике и сбиваем врагов, попутно уворачиваясь от их пулек. Заодно проверим консоль на стабильность.
Писать я её решил в классическом C-стиле, как и принято в embedded-мире: без std и тем более stl, без ООП и виртуальных методов, аллокаций по минимуму. В общем, примерно как писали игры под GBA! В первую очередь, подготавливаем спрайты нашей игры, прямо в пейнте, а затем конвертируем их в представление обычного массива байтов в виде header-файла. На первых порах это удобнее, чем делать свой ассет-пул:

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Архитектуру я организовал в виде нескольких подфункций, каждая из которых занимается своим стейтом (world/menu) и своими объектами (playerUpdate) и их отдельные версии для отрисовки. Сами игровые объекты я описал в виде структур, а центральным объектом сделал CWorld.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу


Время я решил описывать в тиках, а не миллисекундах, как я обычно это делаю на ПК — у консоли железо одно и там следить за этим нужно меньше.

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Единственные аллокации, что я использовал — это для пулов с пулями, и с врагами. Оба пула четко ограничены — до 8 врагов на экране, и до 16 пулек — вполне хватает. Динамические аллокации помогли мне найти серьезную ошибку в коде — в один из моментов игра просто валилась с Out Of Memory. После того, как я немного поменял условия и делал аллокейты тех же самых объектов каждый кадр — игра переставала крашится. Причина оказалась простая — невнимательность (вместо >= было >), по итогу при отрисовке спрайтов за пределами экрана, программа сама начинала портить вунтренние структуры аллокатара и самой игры (проявлялось в глюках и телепортациях). После фикса, все заработало как нужно. :)


Ну и для основной части геймплея с выстрелами и столкновениями, я предусмотрел несколько функций, которые спавнят игровые объекты и сами управляют пулом. Противники обновляются как обычно, для коллизий используется AABB (axis aligned bounding box, ну или его 2D-подмножество в виде rect vs rect).

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



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

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Ниже выкладываю принципиальную схему устройства, она очень простая, поэтому смысла делить ее на несколько листов нет. Разводить учился, читая сервис-мануалы и схемы :)

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу

❯ Заключение


Полная цена сборки прототипа составила:

  • Raspberry Pi Pico — 557 рублей (но я брал на Яндекс Маркете, на «алике» дешевле — около 300 рублей).

  • Дисплей — 380 рублей, заказывал на «алике».

  • Макетка — 80 рублей, в местном радиомагазине.

  • Кнопки. По 5 или 10 рублей штучка, пусть будет 60 рублей.


По итогу, прототип мне обошелся в 1077 рублей. Бюджетненько, да, с учетом того, что можно сделать еще дешевле? Я тут так подумал, у меня есть желание развивать и поддерживать консоль в будущем и под консоль уже можно делать что-то своё… может, если вам будет интересно, делать их на заказ? Соберу вам по себестоимости (до 1.000 рублей) + доставка, если хочется попрограммировать под что-то маленькое, но самому паять не хочется. Мне было бы очень приятно. Пишите в личку или комменты, если вас заинтересовало бы такое! :)

Сам себе игровая консоль: как я сделал свой «тетрис» с нуля. Что происходит, когда программист встречается с железом? Гаджеты, Gamedev, Разработка, Своими руками, Raspberry pi, Самоделки, Железо, 2D, Игры, Консоли, Видео, Без звука, Длиннопост, Авторская неделя на Пикабу



Весь процесс разработки этого девайса занял у меня всего несколько дней. Я и до этого понимал концепцию работы 2D-графики на видеокартах прошлого века, поэтому ничего особо нового я для себя не открыл. Однако, я попробовал свои силы в разработке игровых девайсов, которые могут приносить удовольствие — как ментальное от самого процесса сборки и программирования, так и физическое от осознания того, что игра на нем работает. :)

Однако, это далеко не конец проекта! У нас ещё много работы: нужно развести и протравить полноценную плату, реализовать звук и API для сторонних игр, придумать корпус и распечатать его 3D-принтере. Кстати, я ведь обещал что скоро будут и другие интересные проекты с 3D-принтером: как минимум, мы доделаем предыдущий проект игровой консоли из планшета с нерабочим тачскрином и RPi Pico.

Пост подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Показать полностью 23 1

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей

Случилось яркое событие, я наконец-то заимел в свою коллекцию радиоприемник легендарной серии "Grundig Satellit" :) Эта серия вещательных радиоприемников по достоинству оценена радиолюбителями по всему миру. Подробный рассказ далее ...

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

При упоминании марки "Грюндиг", первое что вспоминается - это строки из песни Владимира Высоцкого:
"...Вон дантист-надомник Рудик,
У него приёмник "Грюндиг",
Он его ночами крутит,
Ловит контра ФРГ..."

Во времена СССР аппаратуру подобного класса имели единицы, купить в обычном магазине его было невозможно, а в комиссионных магазинах стоимость подобного приемника составляла около 2000 рублей!

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

Не знаю как у других, но у меня фирма "Грюндиг" ассоциируется именно с радиоприемниками! Мой красавец привезен из Дании. Начало данной серии положил приемник Satellit 205, который был выпущен в 1964 году. Радиоприемник Grundig Satellit 2100 производился с 1976 по 1979 год. Радиочастотный тракт у него такой же, как и в предыдущих моделях Grundig Satellit 210 и 2000. В отличии от 210, 2000 и 2100 имеют горизонтальное расположение шкал. Функционально они ничем не отличаются от модели 210. Просто менялась, улучшалась схемотехника, появлялись новые технологии. 2100 выпускался в разных видах внешней отделки, у меня достаточно "шикарная" версия, с обилием хромированных деталей.

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

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

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

На правой боковой панели расположена ручка переключения КВ диапазонов, они переключаются барабанным механизмом. Избирательность обеспечена керамическими фильтрами.

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

На задней панели расположен отсек сетевого кабеля, разъемы подключения внешней акустической системы, внешнего питания и переключатель питания сеть/батарея. Выход для записи радиопрограмм на магнитофон и разъем подключения блока SSB, который приобретался отдельно. Разъемы для подключения антенн. В нижней части расположен отсек для батареек и аккумулятора. Питание осуществляется как от сети 220В, так и от сетевого адаптера 6В. или прикуривателя автомобиля 12В.

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

Данная модель выпущена в ФРГ, позже в 80-х годах производство перенесли в Португалию, а в 90-х понятное дело в Китай. В моем приемнике установленые точеные алюминиевые ручки, были более дешевые варианты оформления с пластиковыми ручками.

"Грюндиг" дантиста Рудика. Радиоприемник стоимостью 2000 советских рублей Техника, Электроника, Гаджеты, Радио, Длиннопост

У приемника раздельное управление низких и высоких частот, под ручкой регулировки громкости расположено гнездо для подключения наушников. Рядом с окошками настройки расположены расположены переключатели полосы пропускания ПЧ (узкая/широкая). Справа три отдельные ручки настройки частот по диапазонам.

Доволен как слон))

Показать полностью 7

Изящная ретро-клавиатура Fineday «щелкает», как пишущая машинка

Изящная ретро-клавиатура Fineday «щелкает», как пишущая машинка Технологии, Разработка, Электроника, Нейронные сети, Изобретения

Южнокорейская компания Fineday разместила на Kickstarter проект механической Bluetooth-клавиатуры Fineday 3.0 в форме классической пишущей машинки. Ее можно подключить к компьютеру с ОС Windows/Mac, планшету или смартфону на iOS/Android. Причем, эти гаджеты можно установить на то место, где обычно в пишущую машинку вставлялся лист бумаги.

Корпус Fineday 3.0 и часть клавиш изготовлены из авиационного алюминия. Выгравированные на них символы гарантированно не сотрутся, подобно буквам на обычной клавиатуре. Клавиши в стиле ретро, на самом деле, скрывают под собой вполне современные переключатели Cherry MX Blue со светодиодной подсветкой, в точности воспроизводящие уже порядком забытые щелкающие звуки пишущей машинки.

Помимо клавиш, на Fineday 3.0 есть еще три детали от прежних ретро-машинок — расположенные справа и слева круглые ручки, с помощью которых прокручивался валик с листом бумаги и рычаг возврата каретки. Правда, в новом исполнении левая ручка — это регулятор яркости светодиодной подсветки, правая устанавливает уровень громкости подключенного устройства, а рычаг — дополнительная «клавиша» ввода/возврата.

Если кампания на Kickstarter окажется удачной и Fineday 3.0 поступит в производство, то со временем ее можно будет приобрести за $1100 в черном, темно-синем или темно-зеленом цвете.

Еще больше больше технологий тут - https://t.me/TechTalksZone

Показать полностью 1

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности

Дополнительные фото, ссылки, а также информация по терминалу в источнике материала и комментариях.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

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

В данной статье описан пример возможности пребывания в современном интернете на примере компьютера архитектуры PC/XT, без Ethernet-карты, болгарского производителя «Правец».

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

Также данное решение может быть использовано для управления хостом — мы получим MS-DOS терминал с функционалом Kermit.

Под катом детальные фото содержимого «ретро-Правц»а, настройка терминального соединения через RS-232, видеодемонстрация выхода в интернет. Фото кликабельны.

Приступим? :)

❯ Введение


Для чего городить огород?

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

Общая картина взаимодействия выглядит так:

  • Компьютер под управлением операционной системы Linux (хост), имеет выход в интернет.

  • На хосте в качестве экспериментальных текстовых браузеров установлены Lynx и Links2.

  • К хосту при помощи нуль-модемного кабеля подключен «Правец» (используется в качестве терминала), через com-порт (RS-232).

  • На «Правце» в качестве терминальной программы установлен терминальный клиент-Kermit, позволяющий осуществить соединение с хостом.

  • Настройки com-портов будут одинаковыми на обеих машинах. 8N1, что означает: 8 — количество бит в пакете, N — отсутствие контроля четности и 1-стоповый бит. Работать будем со скоростью 9600 бит/с.


Почему выбрано именно такое решение, а не использована Ethernet-карта с интерфейсом ISA? Для аутентичности, в «Правце» ISA-Ethernet отсутствовала, а COM-порт был. Мы обойдемся малым, но вставить ISA-Ethernet и работать в MS-DOS в сети на скорости 10 Мбит тоже возможно.

❯ Предыстория


«Правец» — компьютер болгарского производства.

Мой экземпляр системного блока случайно был обнаружен в заброшенном сарае — КУНГе, у папы, где пролежал неизвестное количество лет. В дань уважения был установлен и выпущен погулять в интернет в 2023 году.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

На момент написания статьи согласно наклейке-шильдику «Правцу» — 35 лет.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

❯ Начинка/архитектура


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

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Опишу основные узлы.

Правец базируется на процессоре архитектуры Intel 8088 производства фирмы Siemens:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Материнская плата фирмы производителя XL-7 TURBO:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Оперативная память (RAM) объемом 640Кб:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Вичестер MFM — оказался неисправным, поэтому, скрепя сердцем, отошел от аутентичности и заменил дисковую подсистему на новодельный контроллер ISA с картой Compact Flash.

Неисправный винчестер — крест на нем не ставлю, но возможно в перспективе попытаюсь реанимировать и поместить обратно в корпус:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Контроллер флоппи:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Контроллер жесткого диска:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Плата, на которую сделан упор в рамках данной статьи — плата коммуникационных портов. Данная плата содержит две БИС. Любопытно, что разных номиналов — UM8250B и FM88450-A.
Торцы платы содержат разъемы db9 и db25.

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

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Итак, физически компьютер проинспектирован и собран. Приступим к загрузке операционной системы, тестам и коннекту.

Аутентичного монитора и клавиатуры, к сожалению, у меня нет. Возьму единственный свой ЭЛТ-монитор и AT-клавиатуру, подключенную через конвертер AT-XT, ну а манипулятор-мышь в данном примере не нужен, хотя его можно воткнуть в тот же универсальный COM-порт.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Запуск тестовой программы Checkit.

Характеристики видны на последующих фотографиях экрана:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube
Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

❯ Настройка хоста на стороне Linux


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

Описание общей конструкции приведено выше, здесь мы увидим основные шаги настройки сервиса agetty.

Что делает agetty? Он открывает определенный (прописанный в конфигурационном файле) com-порт и выводит приглашение для авторизации. Приглашение — связка login и password для последующей работы в консоли. Таким же образом работает и подобный, по сути, сервис mgetty, только в данном случае соединение должно производиться через модем.

Нам нужно пройти 4 шага:

1. Копируем agetty.

«serial-getty@.service», изначально расположенный по пути /lib/systemd/system
в /etc/systemd/system:

sudo cp /lib/systemd/system/serial-getty@.service /etc/systemd/system/serial-getty@ttyS0.service

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube


2. Конфигурируем agetty.

Редактируем следующий файл:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

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

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube


3. Запускаем созданный сервис agetty.

sudo systemctl daemon-reload

sudo systemctl start serial-getty@ttyS0.service

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube


4. Устанавливаем текстовые браузеры Lynx и Links2.

Для наглядности в две команды:

sudo apt install lynx

sudo apt install links2

Можно и так:

sudo apt install lynx links2

Все, настройка хоста завершена, он готов принимать входящие соединения через com-порт, и готов выходить в интернет с помощью текстовых браузеров.

❯ Настройка на стороне терминала MS-DOS


Версия MS-DOS 6.22 выбрана как наиболее зрелая, она прекрасно идет на нашей архитектуре, в части того, что нам требуется.

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

Соединение с хостом под управлением OS Linux на программном уровне мы будем осуществлять с помощью Kermit.

Настроек в Kermit много, можно весьма гибко тюнинговать различные параметры, но в нашем случае достаточно лишь выставить скорость com-порта.

Запускаем «kermit.exe», пишем:

set speed 9600

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube


Скорость порта настроена, можно переходить к соединению через последовательный порт RS232.

❯ Коннект!


В запущенном Kermit вводим комманду: connect.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

Мы видим приглашение авторизации, которое нам предоставляет agetty, запущенный на хосте.

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube


Работаем на камеру:

Консольные браузеры описаны тут и тут.

Были испробованы два — LYNX и Links2.

Вот мы и подобрались к вопросу — а что можно делать в консольном интернете?

Практическую пользу я вижу в чтении текстовой информации — это могут быть различные мануалы, новостные ленты. Также в познавательных целях можно подсоединиться к bbs (bulletin board system) — это электронная доска объявлений, а так же посмотреть telnet-мультики и играть в игры текстового жанра. Данные шаги ведут к пониманию механизмов и основ современного/былого интернета.

Посмотрите ролики, наглядно показывающие, как это выглядит:

Lynks2:


LYNX:

Ну ASCII-ART напоследок:

Болгарский «Правец-16» (ЕС-1839). Вылазка в консольный интернет в 2023 году на PC/XT 35-летней давности IT, Программирование, Техника, Ретро, Timeweb, Электроника, Познавательно, Длиннопост, Видео, YouTube

❯ Выводы


Мы подключились к текстовому интернету при помощи терминала, построенного на архитектуре PC/XT. Получать информацию из интернета описанным способом — вполне возможно.
Комментируйте, пожалуйста, всё ли было понятно, напишите свое видение данных механизмов, и как еще можно использовать подобные конструкции.

Спасибо за терпение. :)

Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.

Показать полностью 22 3

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума!

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



В прошлой статье, мы с вами рассмотрели на что способен одноплатный компьютер, который стоит всего 1.000 рублей. Как мы выяснили, перспективы у данного девайса весьма неплохие, однако по факту, Orange Pi продаёт практически голую железку, которую нужно дорабатывать самому. Да, тут есть Ubuntu/Fedora, да, тут выведена гребенка с I2C/SPI — однако из коробки это всё работает криво-косо, либо не работает совсем. Даже обещанные шины SPI/I2C фактически не доступны в системе «из коробки». Материалов о доработке этого одноплатника в сети мало, поэтому я решил довести его до ума сам и поделится с вами — в том числе, готовыми бинарными образами! Интересно, на что способен доработанный одноплатник по цене ящика пива? :)

Над чем будем работать

В прошлой статье, мы с вами определились с потенциальными перспективами такого устройства. По цене 3х ESP32, производитель предлагает нам два полноценных вычислительных ARM-ядра, 256 мегабайт оперативной памяти, 512 мегабайт встроенной NAND-памяти, контроллер питания с возможностью работы от литий-ионных АКБ и 3G модем. Но в бочке меда нашлась ложка дегтя: никто не собирался это всё поддерживать и Orange Pi практически сразу «забили» на поддержку устройства, ограничившись портом Debian/Ubuntun на устройство.

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Более того, производитель даже не описал как работать с GPIO и шинами устройства — что фактически превращало его из одноплатника в обычную ТВ-приставку, только без нормального видеовыхода. Меня крайне удивило, почему над такой дешевой платой не хотело работать коммьюнити — большинство людей только видели всю ситуацию и шли оставлять негативный отзыв, не попытавшись даже разобраться. А ведь для опытного линуксоида-эмбеддера здесь работы на день-два!

Ко всему прочему, в Linux не работает GSM-стек. Да, совсем. Производитель даже не стал кооперироваться с MediaTek, чтобы попытаться реализовать работу с модемом на уровне системы. А ведь фактически, вся работа с модемом происходит лишь на уровне AT-команд. Так в чем же проблема была?

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Со всем этим мне и предстоит разобраться! Клонируем репозиторий с исходниками ядра и бежим собирать!

Собираем ядро. I2C и SPI.

Вместо типичного Buildroot, Orange Pi использует свою собственную простую систему сборки на shell-скриптах: в качестве тулчейна используется уже готовый linaro. Отчасти, это связано с самими чипами, на которых работают их устройства — MediaTek, например, не использует Mainline ядро и в процессе сборке имеет ещё кучу шагов для подготовки финального образа. Там даже menuconfig не работает и все изменения приходится делать в уже сгенерированной когда-то конфигурации.

Клонируем репозиторий с системой сборки и запускаем скрипт:

git clone https://github.com/orangepi-xunlong/OrangePi_Build cd OrangePi_Build ./Build_OrangePi.sh

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Выбираем нашу плату — 3G IoT и ждем, пока система сборки фактически скачает все необходимое для сборки — исходный код ядра, папки external (драйвера, загрузчик и порт linux MediaTek). Обратите внимание, OrangePi даже систему сборки завязали на конкретной версии системы: только Ubuntu 18.04, но на самом деле, ядро соберется без проблем практически где угодно. После того, как все было скачано, переходим в папку с скриптом сборки и запускаем скрипт сборки:

cd ../OrangePi3G_iot/
./build.sh


А нет, не запускаем — скрипт жалуется на то, что не может поставить некоторые пакеты. Не беда — ставим bsdtar и python minimal вручную и идем править код скрипта. Находится в он scripts/general.sh: убираем оттуда устаревшие имена пакетов.

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



После этого, компиляция ядра должна пройти успешно. Обратите внимание на версию вашей платы — те, что продают сейчас — именно A. Если пытаться подкинуть им ядро для B, то они будут уходить в kernel panic из-за отсутствия eMMC.

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Если mkbootimg будет жаловаться на libstdc++6, то ставим его x86 версию из репозиториев.

Готовое ядро будет лежать вoutput/kernel/boot.img, которое можно прошить на устройство. С одним маленьким нюансом — оно рассчитано на загрузку из внутренней памяти, которой критически мало для дистрибутива Linux! У нас нет boot_sd.img, который есть в оригинальном дистрибутиве. Попытка разобрать образ стандартным AndImgTool не увенчалась успехом — рамдиск встроен прямо в образ zImage, а не отдельно, как это обычно бывает у Android-образов.

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Покопавшись в скриптах сборки, я так и не понял логику создания boot_sd, ничего связанного с sd я не нашел даже grep'ом по всей папке. Ну что-ж, тогда попробуем обходным путем: скомпилируем нужные драйвера в виде загружаемых модулей (ko). Идём в наш конфиг, расположенный в linux/arch/arm/configs/3giot_defconfig и меняем CONFIG_I2C_CHARDEV и CONFIG_SPI_SPIDEV на m. Пояснение: y заставит систему сборки скомпоновать драйвер статически с ядром, а m выделит его в виде отдельного модуля ko, который затем можно загрузить черезinsmod.

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Снова собираем ядро, на этот раз компиляция занимает не больше минуты. Нужные нам файлы появятся в linux/drivers/spi/spidev.ko и linux/drivers/i2c/i2c-d-ev.ko. Переносим их на хост-пк, а затем и на само устройство с помощью SSH:

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Загружаем модули ядра:

insmod i2c-dev.ko


И та-дам! Целых две i2c шины появилось в системе (/dev/i2c-0, /dev/i2c-1). Устанавливаем i2c-tools и идем проверять с помощью i2cdetect: первая шина полностью свободна под наши проекты, а на второй по некоторым адресам висит периферия (FM-радио как вариант):

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



I2C теперь точно работает! Но как насчет SPI?

insmod spidev.ko
Device or resource busy.



Увы! spidev нельзя подгружать динамически, только статически линковать с ядром, чего мы сделать пока не можем. Однако техническая возможность заставить работать SPI есть: например, написать свой драйвер, который транслирует команды из юзерспейса в SPI API, которое работает на уровне ядра.

GPIO

В прошлой статье, я вкратце рассказал, как работать с gpio из user-space на уровне терминала. Однако, большинство разработчиков потенциально будет пользоваться нативным API для GPIO — ну не всерьез же им парсить вывод состояния в консоль? Поэтому я решил написать крошечную библиотеку для работы с GPIO, такую же простую, как и DigitalWrite/DigitalRead!

Давайте сначала разберемся, как именно работать с драйвером GPIO. Для этого открываем исходники ядра и смотрим внимательно, что нам предлагает драйвер: в нашем случае, это вызовы IOCTL, да еще и простые и понятные. Это просто отлично! Я написал single-header библиотеку минут за 10: без проверки ошибок, но работоспособная.

void gpioInit();

void gpioSetDir(int num, byte dir);

byte gpioGetDir(int num);

void gpioWrite(int num, byte value);

byte gpioGetState(int num); byte gpioRead(int num);

void gpioSetPullState(int num, byte enabled, byte up);



Пример использования (141 — крайний пин на гребенке):

#define GPIO_IMPL

#include "gpio.h"

#include <stdio.h>

void testPin(int pin)

{

printf("Pin state %i is %i\n", pin, gpioGetState(pin));

gpioSetDir(pin, 1);

gpioWrite(pin, 0);

printf("Pin state %i is %i\n", pin, gpioGetState(pin));

gpioWrite(pin, 1);

printf("Pin state %i is %i\n", pin, gpioGetState(pin));

}

int main(int argc, char** argv) {

gpioInit();

testPin(141);

}

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



Модем

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

В устройствах MediaTek, драйвер для общения с GPS, A-GPS и модемом один — ccci, судя по всему cross chip communication interface. Именно ccci создает устройства, с в которые поступает вход с микрофона и выход на динамики, а также он создает управляющие интерфейсы для общения с различными модулями этого SoC.

При старте ядра, ccci создаёт много устройств — ccci_ioctl, ccci_ipc, ccci_fs и самое нужное нам —ttyC0/ttyC1/ttyC2— в зависимости от количества СИМ-карт в системе. Кроме ccci, в системе есть некий 6620_launcher — бинарник, который загружает прошивку Wi-Fi и gsm0710muxd — специальный сервис, который позволяет в GPRS-сетях одновременно разговаривать и сидеть в интернете.

На смартфонах MTK есть factory mode — так называемый тестовый режим, который гоняют на заводах. Вы, вероятно, когда-то видели китайские меню похожее на рекавери — это и есть factory mode. Из этого режима можно дозвонится в 911 и активировать модем без запуска Android и RIL. Как это работает? Идём читать исходники ядра!

В factory-режиме, для каждого теста, программа активирует модем заново. Для этого есть функции тестового режима для работы с AT-командами и для инициализации модема. Сначала, она открывает терминал /dev/ttyC0 — именно там происходит общение с модемом с помощью AT-команд:

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума! Гаджеты, Смартфон, Программирование, IT, Orange Pi, Одноплатный компьютер, Linux, Android, Raspberry pi, Минипк, Дешево, Покупка, Моддинг, Своими руками, Embedded, Длиннопост, Авторская неделя на Пикабу



После этого, программа выводит модем из режима сна с помощью команды «AT+ESLP=0», инициализирует СИМ-карту с помощью команды «AT+ESIMS» и задает режим работы с помощью «AT+EFUN=1» и «AT+CREG=1». После этого, модем начинает искать сеть и доступен для обычного общения с помощью AT-команд. Однако, написав тестовую софтину для общения с модемом из под Debian, я получал ошибки вида Device not found. Почему? Пока не знаю. Однако я продолжаю изучать данный вопрос!

Заключение

Подготовленные мною файлы вы можете скачать на диске. Там скомпилированные модули ядра, библиотека для работы с GPIO и пару тестовых программ в качестве примеров.

К счастью, довести гаджет до ума мы смогли своими силами. Весьма странно, что такой крупный и уважаемый производитель как Orange Pi, банально решил «забить» на поддержку собственного устройства. И я лично считаю, что не стоит закидывать в долгий ящик их тем читателям, которые купили когда-то себе подобный девайс и забили, смирившись с отсутствием гайдов.

Немного энтузиазма, опыта и видения будущего проекта — и все получится :)

Показать полностью 11

Sol Reader — электронные очки с дисплеем E-ink для чтения книг

Sol Reader — электронные очки с дисплеем E-ink для чтения книг Технологии, Электроника, Разработка, Arduino, Техника

Гаджет Sol Reader разрабатывался для настоящих фанатов чтения, которые очень не любят, когда внешние раздражители отвлекают их от этого процесса. Он похож на гарнитуру виртуальной реальности, только внутри окуляров расположены E-Ink экраны, как во многих электронных книгах. Текст со смартфона или иного устройства выводится на них и оказывается прямо перед глазами читающего.

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

Время работы на одной зарядке достигает 25 часов. Sol Reader продается в комплекте с дистанционным пультом управления, который нужен для перелистывания страниц и других манипуляций. Стоимость устройства $350, в продажу оно поступит будущей осенью.
Еще больше технологий тут - https://t.me/TechTalksZone

Показать полностью

Помогите найти нормальный ноутбук

Так уж вышло, что я(для обучения конечно же) начал присматривать ноутбук. Бюджет 70 тысяч рублей и выбор в онлайн магазинах ДНС не велик(из нормального железа).

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

P.S. Мне нужен конкретно ноутбук, а не список деталей для сборки ПК.

Поиграем в бизнесменов?

Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.

СДЕЛАТЬ ВЫБОР

Умные часы Samsung Galaxy Watch смогут измерить температуру у всего: от борща до воды в бассейне. Приложение уже доступно

Умные часы Samsung Galaxy Watch смогут измерить температуру у всего: от борща до воды в бассейне. Приложение уже доступно Гаджеты, Технологии, Samsung

Как отмечает Samsung, приложение позволяет легко измерять температуру самых разных объектов — от пищи, которую пользователь собирается съесть, до воды, в которой пользователь собирается поплавать. И благодаря инфракрасному датчику всё это без физического контакта.

Приложение уже доступно в Google Play, однако в описании говорится, что использовать его можно лишь с моделями Galaxy Watch6. Однако в пресс-релизе Samsung говорится иное: приложение сначала станет доступно для пользователей новых Galaxy Watch6 (вероятнее предустановленным), а затем и для серии Galaxy Watch5.

Судя по более ранним утечкам, датчик температуры в Galaxy Watch6 используется точно такой же, что и в существующей линейке умных часов Galaxy Watch5. И работать они будут одинаково. Samsung наконец-то открыла доступ к  температурному датчику Galaxy Watch5 с обновлением в апреле, однако тогда сосредоточилась в основном на отслеживании женских циклов.

Презентация Galaxy Unpacked состоится 26 июля 2023 года, в 14:00 по московскому времени.
Еще больше технологий тут - https://t.me/TechTalksZone

Показать полностью
Отличная работа, все прочитано!