Самое важное вечером – успеть лечь спать до того, как захочется есть.

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

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

#1
Как назло в эти дни подгружен выше среднего. Но так посмотрел.
Сразу скажу, что в скалывании схемы помощь оказать вряд ли смогу, ибо по фотке оно крайне неэффективно выходит (от слова 'совсем'). А вот картинку покомментирую.

Что здесь видим. Левая часть - контроллер обратнохода с ШИ регулировкой. Больших косяков вроде нет, а мелкие проплыли мимо.
Правая часть наиболее интересна тем, что задаёт логику работы устройства.

Сразу виден узел подключения нагрузки на VT14. R72 в нём делает местную ПОС для более чёткого срабатывания. И управляется он сигналами от DA4A и DA4B. Ещё усачтвует и DA4C. DA4A похоже следит за током, точнее, за падением напряжения на ключе VT14. DA4C явно отслеживает напряжение. И вот тут, с этого момента, начинаются непонятки. Ибо схема срисована с большим количеством ошибок, из-за которых неясно, как именно она работает. Ну т.е.  будучи собранная вот так, как нарисовано, она работать точно никак не может. Сомнения везде, начиная от соединеиния DA4A с DA4B, бессмысленен в таком изображении узел на DA5 DA6 (транзисторные сборки), не могут работать узлы на VT16, VT23, VT9, VT10, и даже соединение VT8, VT8 и иже с ними явно неверное.

Надо поработать ещё над сколкой схемы (да, процесс сложный, требующий с десяток-полтора итераций), но без этого понять, как именно работает именно эта схема будет очень затруднительно.
#2
Потестил блок, почитал документацию. Блок исправно работает под нагрузкой 5A в течении 2-х часов были стабильно, все напряжения соответствуют паспортным, переход на батарею отрабатывает. Но разобраться в его работе всё равно хочется.

З.Ы. кирпичем ещё минут 30 можно было лечить ревматизм
WhatsApp Image 2022-10-04 at 17.28.57.jpeg
[свернуть]
#3
Попался вот такой зверь, ИВЭПР 12/5 По сути безперебойник, но полностью аналоговый. Якобы не выдаёт заявленный ток.
Я не силён в аналоговых схемах и меня хватило только отреверсить оную с платы и попросить помощи у сообщества в пояснении принципов его работы.
Я пока проверил только электролиты.

Состояния:
1. При подключении АКБ, без нагрузки:
Появляется питание на выходе 12.48V,
Напряжение на клеммах батарей 12.51V;
Светодиод HL2 горит зеленым через R56, HL3 горит, HL1 нет, HL4 нет.

2. При подключении АКБ и внешнего питания, без нагрузки:
Появляется питание на выходе 13.64V;
Напряжение на клеммах батарей 13.00V;
Светодиод HL2 горит зеленым через R56, HL3 горит, HL1 горит, HL4 нет;
При отключении внешнего питания переходит в состояние 1.

3. При подключении внешнего питания, без АКБ и нагрузки:
Появляется питание на выходе 13.64V;
Напряжение на клеммах батарей 5.00V;
Светодиод HL2 горит красным через R55, HL3 горит, HL1 нет, HL4 нет;

Напряжение на обоих TL431 2.5V.

Под нагрузкой пока не проверял, жду резисторов.
Проект кикада в аттачах, там по любому есть ошибки, хоть я и проверял.
Схема
Без имени.png
[свернуть]

Фото платы
IMG_20220926_120834.jpg

IMG_20220926_120927.jpg 
[свернуть]
#4
Цифровая техника / Re: e-Paper :: включить и упра...
Последний ответ от Slabovik - 27 Сен., 2022, 13:18
Похоже, нашёл настоящее название моей матрицы. Под стикером продавца удалось прочитать стикер производителя (заклеивают, гады). Прочитал я CDEM029T94. Однако гугель такого названия не находит, зато быстро находит GDEM029T94. Ну что же, тот же самый китайский Good Display... И этот тип уже не производится. Думаю, не беда - чтение даташитов показало, что они весьма похожи, независимо от интерфейса. Зато там чётко написано название контроллера матрицы: SSD1680. Полагаю, хорошей практикой на УГО индикатора указывать и тип контроллера тоже - это поможет снимать непонятки.

SSD1680.pdf

Начинает проявляться желание хранить копию памяти индикатора где-то "рядом", желательно в ОЗУ (вообще, ОЗУ для хранения изображения - вещь очень удобная, но в ряде случаев есть конфликт за доступ к этой области памяти между ЦП, видеоконтроллером и контроллером ПДП впридачу). У МК же ОЗУ как правило очень маленькое. У индикатора чтение из его ОЗУ довольно корявое.

Реализовать можно двумя путями. Первый - взять контроллер "потолще". Как минимум с 8 кБ ОЗУ (очень скромно), но для реализации всех 4-х оттенков (или двух цветов) даже при таком разрешении необходимо (296/8)*128=4736 байт памяти на каждый слой, а здесь их два. Оптимально - 16 кБ, и это если ещё не заниматься обсчётом каких-нибудь картинок, подаваемых извне.

Второй вариант - прикрутить внешнюю микросхему ОЗУ. Минусы этого решения - надо много выводов + схема. Хотя, к 8051 прикрутится вообще без проблем (оно там изначально заточено для таких случаев), к некоторым Mega тоже можно также, только я сам не пробовал ещё. Z80/8080 - вопрос вообще не стоит, т.к. там памяти сколько захочешь - столько и будет.

Полагаю, надо сформировать хоть какое-то т.з., задающее направление, ибо имеющейся информации уже достаточно для следующего шага. Из возможных МК можно взять что-нибудь из этого: 8051/AtMega/Z8/STM8... STM32 пока не возьму, т.к. с asm там будет тяжеловато.

зы: но если ограничиться статической картинкой (картинками) или текстовой информацией, то такую картинку и шрифты очень даже можно ранить в памяти программ, которой достаточно много.
зызы: зафиксирую ссылку на преобразователь картинок для дисплеев https://github.com/abao66669999/Good-Display-Software

p.s. План действий:
Первое - соединить экран с МК. Проще всего интерфейс организовать программно (если что, смотреть и управлять легче), в случае успеха в следующих шагах, можно изменить на аппаратный (при этом аппаратный обязательно будет 4-проводным, а вот программный в силу гибкости можно завести и на 3 провода, т.е. избавиться от провода Data/Command).
Второе - научиться инициализировать экран и выводить на него статическую картинку.
Третье - научиться частичному обновлению экрана. Тут будет сложность с обновлением смежных пикселей, попадающих в один байт экранного ОЗУ. Придётся научиться чтению - модификации этих байт.
Четвёртое - нарисовать шрифты и научиться выводить текст шрифтами. При этом суть происходящего заключается в том, что шрифты - это маленькие картинки.

Пока наверное всё на данный момент. Просто дальше может (не обязательно, зависит от конкретики) понадобиться значительной величины ОЗУ.

ЗЫ: Для тех, кто не любит "много проводов", нашёл редко встречающуюся вещь - RAM со SPI интерфейсом. Объём 32кБ: 23K256.pdf.
Но 5 вольт питания она не умеет, что несколько ограничивает круг применения (универсальный преобразователь уровня наверное поможет).
#5
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Shaman - 24 Сен., 2022, 03:11
Понятно, но раз avr-gcc один то и отладчик тоже должен быть один и тот же, а именно avr-gdb и по строкам он шагать как раз позволяет, а также позволяет на лету менять значения в регистрах (например для отработки внешних воздействий). Одна беда, он консольный и работать только в нём могут лишь "джентльмены знающие толк"  :)  VS Code способен работать с ним.
Вот необходимый для работы json
{
  "configurations": [
    {
      "name": "(gdb) Запустить",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}.elf",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "setupCommands": [
          {
              "description": "Включить автоматическое форматирование для gdb",
              "text": "target remote localhost:1200", 
              "ignoreFailures": true
          },
          {
            "text": "file \"${fileDirname}/${fileBasenameNoExtension}.elf\""
          },
          {
            "text": "load"
          }
      ]
    },

    {
      "name": "avr",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}.elf",
      "cwd": "${fileDirname}",
      "MIMode": "gdb",
      "targetArchitecture": "arm",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "externalConsole": false,
      "debugServerPath": "",
      "debugServerArgs": "",
      "customLaunchSetupCommands": [
        {
          "text": "target remote localhost:1200"
        },
        {
          "text": "file \"${fileDirname}/${fileBasenameNoExtension}.elf\""
        },
        {
          "text": "load"
        }
      ],
      "stopAtEntry": true,
      "serverStarted": "Info\\ :\\ [\\w\\d\\.]*:\\ hardware",
      "launchCompleteCommand": "exec-continue",
      "filterStderr": true,
      "args": []
    },
    {
      "name": "C/C++ Runner: Debug Session",
      "type": "cppdbg",
      "request": "launch",
      "args": [],
      "stopAtEntry": false,
      "cwd": "/home/shaman/.bind/Sklad/Svalka/Фонарь/Код",
      "environment": [],
      "program": "/home/shaman/.bind/Sklad/Svalka/Фонарь/Код/build/Debug/outDebug",
      "internalConsoleOptions": "openOnSessionStart",
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "externalConsole": false
    }
  ]
}
[свернуть]
Но как в таком случае менять на лету значения в регистрах, я не знаю. И как "джентльмен" при отладке пишу подпрограммы меняющие эти значения.
Но avr-gdb это только отладчик для его работы нужен процессор в котором запускается код. Может ли он работать с реальным железом я не знаю, но с эмулятором точно может. В Atmel Studio он скорее всего встроен. А под линукс есть simulavr о нем я уже писал. Я думаю он сможет запуститься и на современных Форточках, поскольку там по умолчанию есть аналог Вайна наоборот, но пока только для запуска консольных приложений.

зы: В теме вопрос был не по компилятору, но предположение о неработоспособности кода на разных компиляторах я в ней выдвигал.
#6
Цифровая техника / Re: e-Paper :: включить и упра...
Последний ответ от Slabovik - 23 Сен., 2022, 20:56
Насколько я понимаю даташит, если необходимо частичное обновление, можно поступать двумя способами.
Первый: использовать команды SetRAMX и SetRAMY для установки адресного счётчика. Это придётся делать столько раз за одно обновление, сколько строк необходимо обновить.
Второе: есть на мой взгляд более интересная команда "Set Ram X address Start/End position" и "Set Ram Y address Start/End position". Как написано, они задают "окно", в которое производится запись поступающих байт изображения. Поскольку согласно описания команды WriteRAM, все поступающие после получения контроллером этой команды байты интерпретируются как байты изображения (до тех пор, пока контроллер не получит какую-либо другую команду), а адресный счётчик после получения очередного байта автоинкрементируется по X, а по заполнении строки автоинкрементируется по Y, очень хочется полагать, что такое же поведение сохраняется при задании "окон" для записи. Отличие только в том, что автоинкрементация будет происходить только в рамках этого заданного окна.
Но разъяснения по работе команд практически отсутствуют, поэтому пока это только мои предположения.

зы: я, похоже, нашёл производителя чипов-контроллеров матриц. Это Solomon Systech: https://www.solomon-systech.com/
Копаясь в подворачивающихся даташитах наткнулся вначале на этот

SSD1606.pdf

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

Как оказалось, Соломон не раздаёт даташиты направо и налево: https://www.solomon-systech.com/product-category/bistable-display/
Понять можно - чипы буквально встраиваются (вклеиваются) в шлейфы и инфа по ним нужна реальным производителям. Но хотя бы зная названия, кое-что можно найти в хранилищах интернета. Вот, например, нашёлся сразу:

SSD1675.pdf

это для двуцветной матрицы 160x296...
#7
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Slabovik - 23 Сен., 2022, 20:26
Да, собственно, AVRgcc один и тот же в обоих случаях, разве что скомпилированный под разные платформы. Но компиляция под разные платформы по-идее не затрагивает алгоритм компиляции, а так по мелочи типа ввод-вывод и взаимодействие с ОС. Так что на выходе код должен быть одинаков (соответственно, при условии абсолютной одинаковости настроек проекта и компилятора).
Я пробовал Visual Studio Code в связке с Platformio - вполне юзабльно. Кроме одной штуки: не понял, как прикрутить симуляттор-отладчик. Atmel Studio имеет его "из коробки". А отладчик, позволяющий шагать по программе прямо по строкам - вещь очень нужная, отладка в "чужом" эмуляторе будет только на уровне кода, а код и текст программы на Цэ - вещи зело разные.

Впрочем, вопрос таки очень интересный, я бы вполне хотел попробовать решение для совместной работы VS Code + AVRgcc + отладчик, если таковое вдруг будет доступно и понятно.

p.s. Arduino IDE ведь тоже AVRgcc использует, но до сих пор удивляюсь, насколько по-разному среды интерпретируют синтаксис программ. В то время, когда ArduinoIDE весьма лоялен к неопределённостям, Atmel Studio и особенно VS Code заметно более требовательны к правильности оформления кода.

зы: а в той темке вроде вопрос не по компилятору был...
#8
Мастерская радиолюбителя / Re: Atmel Studio :: учимся раб...
Последний ответ от Shaman - 23 Сен., 2022, 18:04
За информацию спасибо. А подскажите, что может среда разработки такого, что не может avr-gcc в связке visual studio. Это не попытка тролинга, просто хочу разобраться. Я её использовать не могу (пишу под линуксом), но в процессе обучения столкнулся с тем, что код который в видео уроке нормально компилировался в Atmel Studio не работает при компиляции в avr-gcc пока не разобрался почему, но скорее всего из-за синтаксического сахара в одной из строк, вот здесь я поднимал эту тему. И если это так, то на мой взгляд это не правильно. Поэтому пока Atmel Studio у меня в минусе.
#9
Цифровая техника / Re: e-Paper :: включить и упра...
Последний ответ от Shaman - 23 Сен., 2022, 17:20
Интересно т.е. если судить по этой информации
↓ спойлер ↓
Выделение_063.png
[свернуть]
Пиксели управляются побайтово, 1-й байт пиксель с 1 по 8, 4736-й байт последняя группа пикселей. А как контроллер распознает порядковый номер байта Или всегда нужно полностью формировать матрицу? Тогда я не понимаю как сделать частичное обновление Единственное, что приходит в голову это в матрице менять биты и передавать её всю. Но тогда непонятно как экран может не поддерживать частичного обновления если оно чисто программное
#10
Цифровая техника / e-Paper :: включить и управлят...
Последний ответ от Slabovik - 23 Сен., 2022, 14:19
Ещё до вируса у меня был прикуплен вот такой девайс

Front.jpg Back.jpg

Экранчик на e-ink, он же e-paper. Хочется научиться им управлять, естественно, с самого нижнего уровня. Когда он ко мне попал, я задачу осилить не смог из-за отсутствия документации на них. Однако сейчас, благодаря потолстевшему интернету, задача уже не выглядит безнадёжной. Предлагаю в этой темке собрать всё воедино и... вдруг получится :)

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

296x128 e-paper schematic.pdf

Хороший файлик, удаляющий непонятки. Становится ясно, что большой чип посередине - это TXS0108E, а не то, что на чипе нарисовано. TXS0108E - двунаправленный преобразователь логических уровней. Весьма удобен тем, что реально двунаправленный - переключать ничего не надо, всё делается внутри чипа автоматически (прям колдунство какое-то). Т.е. модуль смело подключается к 5V питанию. 3.3 вольта, необходимые e-ink панельке, получаются из пятиногого линейного регулятора. Ну а преобразователь с индуктивностью, что справа - это пиание для внутренностей e-ink, причём на платке только силовые элементы, управляется он непосредственно с кристалла e-ink.

Полагаю, вот так можно отобразить этот экранчик, как компонент электрической схемы

Экран как компонент.png

Питаться же всё это может, благодаря распаянному преобразователю уровней, от любого напряжения в пределах 3.3~5 вольт, так что к той же ардуине подключить получится без проблем.

Остаётся вопрос: как этой штукой управлять?

Там же, на WaveShare, в самом низу странички есть кое-какие материалы. В частности, даташит

296x128 e-paper v2 specification.pdf

в котором можно найти интересную таблицу с командами - на 20-й странице. Однако беглое прочтение пока даёт изрядное количество вопросов. В частности, в описании первой же команды почему-то первый байт данных сопровождён сигналом DC =1, а последующие - нет. Не расшифрованы аббревиатуры. Не показаны значения и зависимости от настроек управляющих напряжений (ох, из много там). Всё это надо искать где-то ещё. Тут надо понимать, что WaveShare - не производитель дисплея, он сделал только платку-адаптер. А описание - корявая копипаста откуда-то ещё. Для начала нужно разобраться, что вообще за контроллер установлен на дисплее и кто его производитель. Возможно, тогда найдётся и более подробная информация.