Уважаемы знатоки, образовалась проблема которая, с одной стороны- простая, а с другой- где-то даже непонятная! Я опишу, ситуацию! Есть два устройства- сигнальное, и исполнительное. Связаны они- по синезубу. Работает все это так: в сигнальном есть инфракрасный излучатель и ИК- приемник. Когда к нему подносят что-либо, ИК- сигнал отражается от этого "чего-либо" и попадает на ИК- приемник, который выдает посделовательность импульсов которые, в свою очередь, передаются по синезубу на исполнительне устройство и оно- запускает чего-то там. При убирании этого "чего-либо", импульсы пропадают и испольнителбное- возвращается в исходное. Последовательность передаваемых импульсов мне удалось снять. В связи с чем вопрос: как можно, средствами МК повторить данную последовательность?
Заголовок сообщения: Re: Как повторить последовательность импульсов?
Добавлено: Ср янв 28, 2026 21:17:15
Вымогатель припоя
Карма: 2
Рейтинг сообщений: 24
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 577 Откуда: Маленький СССР посреди шариатской республики
Рейтинг сообщения:0
Да элементарно: настроить таймер с DMA. Период импульсов одинаковый, меняется лишь заполнение → в регистр CCRx по DMA передаем очередное значение. И будет щщассье. Я так и всякими "адресуемыми светодиодами" управлял, и 1-wire…
Да чего уж проще - поскольку частота низкая, в районе звуковой - записать на магнитофон (или в файл) - затем воспроизводить. Если последовательность всегда одна и та же - сдвиговый регистр + ПЗУ. Если даже и не одна, а конечное их число - то же самое с выборкой номера последовательности. И никаких тебе DMA и MK Взлом домофона?
Да чего уж проще - поскольку частота низкая, в районе звуковой - записать на магнитофон (или в файл) - затем воспроизводить. Если последовательность всегда одна и та же - сдвиговый регистр + ПЗУ. Если даже и не одна, а конечное их число - то же самое с выборкой номера последовательности. И никаких тебе DMA и MK Взлом домофона?
Нет, не домофона. Раскажу если- весь форум долго ржать будет! Приблуда домашнего использования. Китайская. Работает- как я описывал выше- при приближении к сигнальному устройству по блютуз отпраляется команда на открытие. Я хочу, чтобы срабатывало не только при приближении к датчику, а через определенные промежутки времени, допустим- каждый час. Грубо говоря, МК каждый час должен генерировать такую же последовательность импульсов- чтобы сработало исполнительное устройство.
Есть такая штука цифровой магнитоыон isd первые буквы только помню. На али одно времч много продавсли платы готовые с микроыоном и динамиком и конструкторы и готовые уже
Берем любой МК, а потом в течение месяца пишем функционал "копировальщика"
А зачем? Если нужно повторить именно вот эту последовательность: Спойлер то это, если я правильно понял, 0101101101010110101 Непонятна длительность одного импульса, и, если нужно точно повторить завершающий импульс, то делаете, например, три "такта"- 00011100011111100011111100011100011100011111100011101 Просто жестко записываете эту последовательность в .. Ну, думаю, Тини13 хватит
зы.. Если это ИК светодиод, то "единичка" это светодиод светится или нет? Или вы брали сигнал с выхода TSOP-а?
Берем любой МК, а потом в течение месяца пишем функционал "копировальщика"
А зачем? Если нужно повторить именно вот эту последовательность: Спойлер то это, если я правильно понял, 0101101101010110101 Непонятна длительность одного импульса, и, если нужно точно повторить завершающий импульс, то делаете, например, три "такта"- 00011100011111100011111100011100011100011111100011101 Просто жестко записываете эту последовательность в .. Ну, думаю, Тини13 хватит
зы.. Если это ИК светодиод, то "единичка" это светодиод светится или нет? Или вы брали сигнал с выхода TSOP-а?
Извиняюсь, это я тупанул картинку неполную выложил и там длительность непонятна. Заменил картинку. Длина пачки- прим. 9 мс. Да, это выход ТСОПа. Получается, единичка- это светодиод потухший, нолик- светится. Тогда последовательность будет все как у вас и написано, только инвертировано?
В схеме каждую секунду проскакивает "лог 0" синхроимпульс длит 9 мс, когда нет отраженного от Ик-светодиода света- импульсы без "наполнения", когда появляется "отраженка" то внутри синхроимпульса на выходе ТСОП и появляется данная последовательность импульсов- как на фото. То есть, как я понимаю, записать на Тини 13 последовательность- это пол дела, надо еще синхронизировать их...
Подобную же задачу (только для пультов сигналок авто) делал в 1996 году на платке от АОНа с Z80 на борту. Никаких МК с DMA тогда еще не было. Да и юзеров линукса было полторы штуки. Поэтому сейчас, чтобы не улезать в дебри, проще всего это сделать (как уже сказали) на любом МК, обычным ногодрыгом.
ее функционала хватит чтоб и одновременно 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 11:15:28
Вымогатель припоя
Карма: 2
Рейтинг сообщений: 24
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 577 Откуда: Маленький СССР посреди шариатской республики
Рейтинг сообщения:0
Ногодрыг - это фу. Аппаратно же можно сделать на 35-рублевом STM32F103C6T6. Подготавливаем массив и скармливаем его DMA, а дальше уже "оно само" таймер пинает, устанавливая новые значения в регистр ARR (как я смотрю, здесь меняется не скважность, а длительность "единичного" импульса, длительность "нуля" всегда одинаковая, т.е. в регистре CCRx будет постоянное значение). А по прерыванию окончания передачи DMA отключаем таймер.
можно использовать Тини 13... только там памяти мало... и таймер 8 битный... можно конечно использовать Тини 13... но так себе.
Ваш картинка показывает, что 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, если достигли в начало, иначе повтор.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения