Зарегистрирован: Ср мар 18, 2020 10:25:01 Сообщений: 14 Откуда: Москва
Рейтинг сообщения:0
Доброго все времени суток. Есть очень не стандарный вопрос: можно ли каким-либо способом преобразовать любой стандартный интерфейс (UART, SPI, CAN) в поток битов, например в кодировки NRZ средствами самого мк ?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Зарегистрирован: Ср мар 18, 2020 10:25:01 Сообщений: 14 Откуда: Москва
Рейтинг сообщения:0
a797945, вы правильно поняли вопрос. Да, я понимаю, что можно через gpio с таймером по dma. Но проблема в том, что кодировка может быть любой: NRZ, NRZI, манчестерский кол итд. Сейчас есть проект, в котором прием NRZI, а вот выход может быть другим.
Добавлено after 10 minutes 49 seconds: a797945, да еще забыл добавить: просто поток байтов как в мк то и из него без какого либо тактирования со стороны.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Забавно. А я для вывода битов в WS2812 использовал SPI с кольцевым буфером (фактически, буфером на два светодиода) и его заполнением через DMA по переходу через середину и конец буфера. Конкретно для диодов - отличное решение. Для более широких временнЫх интервалов, лучше всё же таймер.
Я для адресных светодиодов таймер с DMA использовал.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера. а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил. формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.
пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу.
Поток произвольных битов легко сделать на LPC43xx. Там и периферия соответствующая имеется - SGPIO. Хоть на ввод хоть на вывод. Хоть с DMA хоть без. С макс. частотой <=102МГц (если не путаю). Вроде в некоторых других линейках LPC SGPIO тоже есть.
SGPIO - это не костыли на GPIO+DMA. Совсем другой уровень.
в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера. а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил. формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.
пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу.
Зарегистрирован: Ср мар 18, 2020 10:25:01 Сообщений: 14 Откуда: Москва
Рейтинг сообщения:0
Уважаемые, может быть подскажите возможное решение вопроса: есть сформированный массив из n элементов (каждый 1 байт). Его нужно преобразовать в NRZI кодировку. Каким алгоритмом это можно сделать ?
Представьте, как выглядит NRZI: - если подряд идет два нулевых бита, состояние выхода не переключается. - если соседние биты меняются из 1 в 0, состояние выхода не переключается. - если соседние биты меняются из 0 в 1, состояние выхода переключится между битами на противоположное. - если подряд идут два единичных бита, состояние выхода переключится между этими битами на противоположное. (существует вариант, когда выход инвертируется при двух нулевых битах, а при двух единичных не изменяется)
Таким образом, есть 4 входных комбинации и 2 выходных состояния. Это надо и записать. Проверка состояние бита в языке Си делается через логическую операцию AND по маске, содержащей 1 в проверяемом разряде. Здесь нужно проверять два соседних бита. Можно сделать несколькими способами. Например вот так:
, где массив change[] содержит признак, требующий смены состояния на выходе (THUE) после передачи бита или оставляющий состояние выхода без изменения (FALSE).
PS. Кодирование NRZ и NRZI значительно отличается по виду. В NRZ смена состояния выхода на противоположное происходит при изменении двух соседних битов и по форме оно повторяет битовые измениния. А в NRZI алгоритм сложнее. Вам какое всё-таки нужно? Вначале вы писали про NRZ а сейчас NRZI хотите.
Зарегистрирован: Ср мар 18, 2020 10:25:01 Сообщений: 14 Откуда: Москва
Рейтинг сообщения:0
MLX90640, спасибо. Сейчас принято решение про NRZI. Я понимаю как устроена кодировка NRZI. Вопрос в следующем: есть последовательность байтов, она может быть любой длины (ну в разумных пределах, естественно). Проблема в том, что в ручную, когда последовательность маленькая можно и в ручную построить последовательность. А вот когда она неизвестного размера.... Я понимаю, что NRZ и NRZI принципиально отличаются. Меня интересует NRZI. Просто про NRZ я написал для примера, там могла быть абсолютно любая кодировка.
Сейчас этот форум просматривают: ESASHA и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения