Страница 1 из 4

Как повторить последовательность импульсов?

Добавлено: Ср янв 28, 2026 20:54:30
Dmitrudo
Уважаемы знатоки, образовалась проблема которая, с одной стороны- простая, а с другой- где-то даже непонятная! Я опишу, ситуацию! Есть два устройства- сигнальное, и исполнительное. Связаны они- по синезубу. Работает все это так: в сигнальном есть инфракрасный излучатель и ИК- приемник. Когда к нему подносят что-либо, ИК- сигнал отражается от этого "чего-либо" и попадает на ИК- приемник, который выдает посделовательность импульсов которые, в свою очередь, передаются по синезубу на исполнительне устройство и оно- запускает чего-то там. При убирании этого "чего-либо", импульсы пропадают и испольнителбное- возвращается в исходное.
Последовательность передаваемых импульсов мне удалось снять. В связи с чем вопрос: как можно, средствами МК повторить данную последовательность?

Re: Как повторить последовательность импульсов?

Добавлено: Ср янв 28, 2026 21:17:15
linux_rulezz
Да элементарно: настроить таймер с DMA. Период импульсов одинаковый, меняется лишь заполнение → в регистр CCRx по DMA передаем очередное значение. И будет щщассье.
Я так и всякими "адресуемыми светодиодами" управлял, и 1-wire…

Re: Как повторить последовательность импульсов?

Добавлено: Ср янв 28, 2026 22:59:04
Jack_A
Да чего уж проще - поскольку частота низкая, в районе звуковой - записать на магнитофон (или в файл) - затем воспроизводить.
Если последовательность всегда одна и та же - сдвиговый регистр + ПЗУ. Если даже и не одна, а конечное их число - то же самое с выборкой номера последовательности. И никаких тебе DMA и MK
Взлом домофона? :shock: :)

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 00:13:46
Dmitrudo
[uquote="Jack_A",url="/forum/viewtopic.php?p=4783796#p4783796"]Да чего уж проще - поскольку частота низкая, в районе звуковой - записать на магнитофон (или в файл) - затем воспроизводить.
Если последовательность всегда одна и та же - сдвиговый регистр + ПЗУ. Если даже и не одна, а конечное их число - то же самое с выборкой номера последовательности. И никаких тебе DMA и MK
Взлом домофона? :shock: :)[/uquote]

Нет, не домофона. Раскажу если- весь форум долго ржать будет!
Приблуда домашнего использования. Китайская. Работает- как я описывал выше- при приближении к сигнальному устройству по блютуз отпраляется команда на открытие. Я хочу, чтобы срабатывало не только при приближении к датчику, а через определенные промежутки времени, допустим- каждый час.
Грубо говоря, МК каждый час должен генерировать такую же последовательность импульсов- чтобы сработало исполнительное устройство.

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 00:54:07
vlasovzloy
Есть такая штука цифровой магнитоыон isd первые буквы только помню. На али одно времч много продавсли платы готовые с микроыоном и динамиком и конструкторы и готовые уже

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 01:48:41
roman.com
[uquote="Dmitrudo",url="/forum/viewtopic.php?p=4783762#p4783762"]вопрос: как можно, средствами МК повторить данную последовательность?[/uquote]
очень просто)) с помощью обычного копировальщика пультов...

Изображение

-берём любой МК.
-нажимаем на кнопочку "записать код".
-передаём код... МК измеряем длительность импульсов и сохраняет в своей памяти.

-потом нажимаем на кнопочку "воспроизвести код".
-МК берёт из своей памяти длительность импульсов и воспроизводит код.

Всё))
:tea:

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 08:41:16
linux_rulezz
roman.com писал(а):очень просто
roman.com писал(а):берём любой МК
Угу. Берем любой МК, а потом в течение месяца пишем функционал "копировальщика" ☺

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 08:50:25
АлександрЛ
linux_rulezz писал(а):Берем любой МК, а потом в течение месяца пишем функционал "копировальщика"
А зачем? Если нужно повторить именно вот эту последовательность:
СпойлерИзображение
то это, если я правильно понял, 0101101101010110101
Непонятна длительность одного импульса, и, если нужно точно повторить завершающий импульс, то делаете, например, три "такта"-
00011100011111100011111100011100011100011111100011101
Просто жестко записываете эту последовательность в .. Ну, думаю, Тини13 хватит

зы.. Если это ИК светодиод, то "единичка" это светодиод светится или нет? Или вы брали сигнал с выхода TSOP-а?

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 09:17:13
Муркиз
Инвертировать ее сначала надо. И потом уточнить - это стековая запись или как ?

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 09:52:08
Dmitrudo
[uquote="АлександрЛ",url="/forum/viewtopic.php?p=4783830#p4783830"]
linux_rulezz писал(а):Берем любой МК, а потом в течение месяца пишем функционал "копировальщика"
А зачем? Если нужно повторить именно вот эту последовательность:
СпойлерИзображение
то это, если я правильно понял, 0101101101010110101
Непонятна длительность одного импульса, и, если нужно точно повторить завершающий импульс, то делаете, например, три "такта"-
00011100011111100011111100011100011100011111100011101
Просто жестко записываете эту последовательность в .. Ну, думаю, Тини13 хватит

зы.. Если это ИК светодиод, то "единичка" это светодиод светится или нет? Или вы брали сигнал с выхода TSOP-а?[/uquote]

Извиняюсь, это я тупанул картинку неполную выложил и там длительность непонятна. Заменил картинку.
Длина пачки- прим. 9 мс. Да, это выход ТСОПа. Получается, единичка- это светодиод потухший, нолик- светится. Тогда последовательность будет
все как у вас и написано, только инвертировано?

В схеме каждую секунду проскакивает "лог 0" синхроимпульс длит 9 мс, когда нет отраженного от Ик-светодиода света- импульсы без "наполнения", когда появляется "отраженка" то внутри синхроимпульса на выходе ТСОП и появляется данная последовательность импульсов- как на фото.
То есть, как я понимаю, записать на Тини 13 последовательность- это пол дела, надо еще синхронизировать их...

Задача чем дальше тем кудрявей...

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 09:57:03
abc
Подобную же задачу (только для пультов сигналок авто) делал в 1996 году на платке от АОНа с Z80 на борту.
Никаких МК с DMA тогда еще не было. Да и юзеров линукса было полторы штуки.
Поэтому сейчас, чтобы не улезать в дебри, проще всего это сделать (как уже сказали) на любом МК, обычным ногодрыгом.

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 10:17:39
AlexS4
[uquote="АлександрЛ",url="/forum/viewtopic.php?p=4783830#p4783830"]думаю, Тини13 хватит[/uquote]
ее функционала хватит чтоб и одновременно 6 подобных асинхронных сигнала генерить ;)

а эта задача - элементарнейшая,
1 таймер настраиваем на 500uS
в его прерывании:
сбрасываем С-флаг
делаем 16битный сдвиг регистра через С
С флаг копируем в gpio порт (выход).
тогда 0- будет пассивный уровень, 1- активный. (чтоб проинвертировать надо устанавливать С в 1 а не в 0)

перед этим загружаем в нужный регистр 16бит слово (последовательность 1-битных сэмплв сигнала)

и делаем это каждый раз когда хотим послать команду.

если не хватило 16 бит для записи сэмплов (здесь похоже 18 если не ошибся) то загружаем и крутим 2 регистра или чуть усложняем алгоритм обработчика перрываний чтоб он не тик-семплы загонял сразу а биты кода (пропускал 1 доп тик на очередную выдвинутую 1 и не пропускал на очередной 0 при формировании импульса, это добавит 2 условных оператора и 2 бита для хранения флагов - состояний)

все! это 10..20 avr инструкций не считая алгоритма выбора момента отсылки команды !

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 10:50:51
vlasovzloy
Там еще же частота модуляции нужна

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 11:11:20
roman.com
linux_rulezz писал(а):Угу. Берем любой МК, а потом в течение месяца пишем функционал "копировальщика"
думаю можно быстрей))
:tea:
abc писал(а):Подобную же задачу (только для пультов сигналок авто) делал в 1996 году на платке от АОНа с Z80 на борту.
точно ! возьмём процессор с компа))
правда не ясно где в наше время найти Z80... но это мелочи))
:tea:
AlexS4 писал(а):а эта задача - элементарнейшая
ничего не ясно...
:dont_know:
vlasovzloy писал(а):Там еще же частота модуляции нужна
не нужна.
:tea:

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 11:15:28
linux_rulezz
Ногодрыг - это фу. Аппаратно же можно сделать на 35-рублевом STM32F103C6T6. Подготавливаем массив и скармливаем его DMA, а дальше уже "оно само" таймер пинает, устанавливая новые значения в регистр ARR (как я смотрю, здесь меняется не скважность, а длительность "единичного" импульса, длительность "нуля" всегда одинаковая, т.е. в регистре CCRx будет постоянное значение).
А по прерыванию окончания передачи DMA отключаем таймер.

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 11:17:23
roman.com
вот сигнал...

Изображение

можно использовать Тини 13...
только там памяти мало... и таймер 8 битный...
можно конечно использовать Тини 13... но так себе.
:?

Изображение

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 11:41:44
Муркиз
А простые решения через delay ныне уже не котируются ?

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 12:07:27
diplodok
Грубо измерил длительности на осциллограмме (часть)
Изображение

Просто для сведение.

PS: "Мерил" в пикселях. :))) :cry: :facepalm:

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 12:23:00
Муркиз
Судя по этой расшифровке, осциллограф был мегагц этак до 2 ? А код пересылаться AES 256 ?

А может быть, все же все гораздо проще ?

Re: Как повторить последовательность импульсов?

Добавлено: Чт янв 29, 2026 15:42:59
akl
[uquote="roman.com",url="/forum/viewtopic.php?p=4783850#p4783850"]можно использовать Тини 13...
только там памяти мало... и таймер 8 битный...
можно конечно использовать Тини 13... но так себе.[/uquote]Ваш картинка показывает, что tiny13 вполне хватит. Как вариант, разбиваете ее на фрагменты по 50мкс. Получится 9000мкс/50=180. Загружаете FLASH фрагментами типа
TB_FRAME:
.DB 0xFF,0xFE,0xFE,0xFE,,0xFF......0xFE,0xFE,0xFE,0xFF ;младший бит содержит последовательность
TB_FRAME_END:
Таймер настраиваете на работу в режим CTC.
Fo=1200000
OC0A=50*Fo/1000000-1
Устанавливаете ZH:ZL на TB_FRAME*2
В нужный момент запускаете таймер, по прерыванию которого считываете текущий фрагмент и выводите на вывод. Сравниваете ZH:ZL с TB_FRAME_END*2, если достигли в начало, иначе повтор.