Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

Сообщение Dismas »

[uquote="Reflector",url="/forum/viewtopic.php?p=4132662#p4132662"]Только не SPI :)[/uquote]
Чем он не стандартный ?
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

[uquote="ARV",url="/forum/viewtopic.php?p=4132660#p4132660"]если вы не умеете программировать МК, то будет ли польза от того, что я расскажу, как действовать?
на пальцах так:
1. мы имеем столбик чисел, равных интервалам в мс между фронтами сигнала (откуда он взят - оставим пока за кадром)
2. устанавливаем начальный уровень сигнала, допустим 0.
3. берем первое число и записываем его в регистр таймера (заранее настроенного на прерывание по истечению интервала)
4. когда таймер сформировал прерывание, т.е. когда первый интервал времени в мс истек, переключаем уровень сигнала на противоположный, берем следующее число из столбика и снова пишем его в таймер.
5. и так до конца всего столбика, после чего останавливаем таймер и выключаем сигнал.[/uquote]
Как раз это мне понятно. Я так себе и представлял. но дело в том, что там за пол секунды более 13 тыс импульсов набежало. А мне нужно допустим минуту повторить. Это я только неделю с утра до вечера буду писать программный код....
Может есть более рациональный вариант? Например, настроить один из выводов микроконтроллера на ввод, а другой на вывод. Первая ножка будет собирать информацию. А вторая по команде выводить их. Или так нельзя?

Добавлено after 24 minutes:
Я все надеялся, что существует готовая библиотека, которая поможет написать программный код одним кликом, что то вроде скопировать/ вставить CSV файл в нее... Прога, в которой планировалось писать программный код для AVR - это Atmel Studio 6. Я очень надеялся, что в ней есть сто-то подобное.
Но в моем случае все в конечном итоге сводится к тому, что если протокол неизвестен, то мы как ни как имеем аналоговый сигнал... Просто длительности импульсов, привязанные ко времени. Ну пусть так, для меня не это важно. Главное просто повторить точно такие же длительности импульсов и паузы между ними. Задача вроде бы простая до безобразия, но не могу догнать, как это осуществить. :)) Я просто предположил что через микроконтроллер можно. Но может как-то еще это можно сделать? Может каким-то другим электронно-механическим устройством. Что-то типа диктофона, только чтобы частота была дальше чем звуковой диапазон. или может есть уже готовые такие гаджеты?

Добавлено after 8 minutes 48 seconds:
а может быть есть готовый софт специально для таких частот. Полный аналог звукового редактора, только выводить импульсы не через звуковую карту, через USB, или через COM-порт прямо из ПК... :dont_know:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Олегыч1 писал(а):за пол секунды более 13 тыс импульсов набежало. А мне нужно допустим минуту повторить.
частота 26 килогерц... то есть 52000 фронтов импульсов в секунду, в минуту в 60 раз больше. это вам нужно МК с таймером, который очень-очень быстро считает. да и памяти под "столбик" значений интервалов надо под 400 килобайт - это неплохой такой микроконтроллер нужен, либо городить целый огород с внешним ОЗУ.
Олегыч1 писал(а):Это я только неделю с утра до вечера буду писать программный код
зачем?! ваш "программный код", грубо говоря, будет сводиться к описанным мной 5 строкам. ну, плюс еще пару строк на организацию цикла - итого не больше 10 строк на основную часть. плюс всякая инициализация, то-сё - в пару сотен строк основной код уложится, как пить дать. что вы там писать собрались круглосуточно?!
Олегыч1 писал(а):скопировать/ вставить CSV файл в нее
можно и так, если немного этот CSV-файл руками подправить. но тогда получится вариант "одна прошивка - один генерируемый код", никакой универсальности.
Олегыч1 писал(а):Главное просто повторить точно такие же длительности импульсов и паузы между ними.
а универсальное решение состоит из двух частей: сначала захватываем при помощи таймера длительности промежутков между фронтами сигнала и запоминаем их, а потом делаем наоборот, как я уже описал - берем запомненные длительности и формируем сигнал. только, как я ранее писал, быстродействие для вашего сигнала нужно дикое и памяти овердохрена... вы точно правильно условие задачи формируете?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

можно и так, если немного этот CSV-файл руками подправить. но тогда получится вариант "одна прошивка - один генерируемый код", никакой универсальности.
Такой вариант меня бы вполне устроил. Я, кстати, на него и рассчитывал 8) А что именно нужно подправить в CSV файле? И подскажите пожалуйста библиотеку из Atmel Studio 6 где можно применить этот подправленный CSV-файлик.

Добавлено after 34 seconds:
Я был бы вам мега-признателен :beer:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Олегыч1 писал(а):А что именно нужно подправить в CSV файле?
программа на Си понимает описание массива в таком виде:

Код: Выделить всё

int array[] = {
1234, 
3334, 
23, 
3944, 
44545
}
значит, открываете ваш CSV в Экселе или там где еще, и в клеточках рядом с цифрами ставите запятые. потом Copy-Paste в студию, пару ручных операций по расстановке скобок - вот и всё внедрение в код.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

Не понимаю... вот в первой ячейке (в CSV) значение: "0.000000000000000, 0 "Это время старта в секундах. Нолик на конце после запятой указывает на то, что пока импульса нет.
В следующей ячейке значение: "0.000050174000000, 1 " Это время в секундах когда появилась логическая единица. Единица на конце говорит о том, что это начало логической единицы.
В следующей ячейке значение: "0.000053862000000, 0" Все так же, время, когда логическая единица перешла в ноль... И т.д. и еще 13 тысяч таких ячеек...
Подскажите пожалуйста на вот этом конкретном примере, где именно надо расставить запятые? Как будет выглядеть правильный код на Си в моем случае?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

мда... ни шагу без инструкции в картинках.
1. открыли свой CSV в таблице, нарисовали рядом ВТОРОЙ столбик, ввели в него формулу перевода дробных секунд в наносекунды, чтобы было целое число, потом нарисовали ТРЕТИЙ столбик с запятыми:
Изображение
2. выделили ВТОРОЙ и ТРЕТИЙ столбики:
Изображение
3. Сделали Copy-Paste в редактор кода:
Изображение
4. дописали выше-ниже скопированного необходимые "буквы" программного кода.

Добавлено after 12 minutes 36 seconds:
то есть не совсем так: вам же нужно не время от начала записи, а между отсчетами... то есть формула у вас должна быть другой, для вычисления разницы между моментами времени... т.е. примерно так для показанной на рисунке ячейки: =(А3-А2)*1000000000
надеюсь, этого достаточно для вашей самостоятельной работы?
Вложения
1-3.PNG
(4.68 КБ) 391 скачивание
1-2.PNG
(3.02 КБ) 404 скачивания
1-1.PNG
(6.46 КБ) 396 скачиваний
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

Да! Спасибо!) То что нужно! 8) Очень выручили :beer:
Возможно возникнут вопросы по самому коду, но это уже чуть позже... Как выглядит массив в Си вы уже показали. Как отыскать нужную библиотеку в AtmelStudio6?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

какую еще библиотеку?! ваша задача - не типовая, писать придется самому.

Добавлено after 2 minutes 12 seconds:
для начала определитесь с МК: судя по вашему примеру, интервалы у вас измеряются единицами микросекунд - из AVR, например, подобные интервалы реализовать не сможет ни один МК, значит, вам потребуется ARM. а это немного другой уровень вхождения в программирование... вам-то и AVR пока высоковат.

Добавлено after 47 seconds:
вы, часом, не IR-пульт имитировать собираетесь?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=4132139#p4132139"]а где эти модули распологаются? в настройках самой программы я не нашел...[/uquote]
Эти модули суть есть режимы работы таймеров.
Таймер при включении в режим захвата при наличии на ВХОДЕ ЗАХВАТА активного фронта (активный фронт настраивается) в регистр захвата АППАРАТНО записывается текущее значение таймера. Таким образом, пользователь получает отметки времени (таймер это по сути часы) на каждый фронт. Разность времени соседних фронтов и есть время между событиями.
При включении таймера в режим OutputCompare (PWM) полученные при захвате времена вставляем в регистр периода и дьюти и таким образом мы генерируем на выходе искомый записанный ранее сигнал.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

[uquote="ARV",url="/forum/viewtopic.php?p=4132915#p4132915"]вы, часом, не IR-пульт имитировать собираетесь?[/uquote]
Попробую именно с него и начать. Да, я пока только для AVR могу что-то написать. Остальное пока не рассматриваю, т.к. реально пока сложновато для меня.
Эти модули суть есть режимы работы таймеров.
Таймер при включении в режим захвата при наличии на ВХОДЕ ЗАХВАТА активного фронта (активный фронт настраивается) в регистр захвата АППАРАТНО записывается текущее значение таймера. Таким образом, пользователь получает отметки времени (таймер это по сути часы) на каждый фронт. Разность времени соседних фронтов и есть время между событиями.
При включении таймера в режим OutputCompare (PWM) полученные при захвате времена вставляем в регистр периода и дьюти мы генерируем на выходе искомый записанный ранее сигнал.
КРАМ, это применимо для AVR? А в частности для Атмега 8 ?
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=4132930#p4132930"]КРАМ, это применимо для AVR? А в частности для Атмега 8 ?[/uquote]
Это есть практически во всех МК, где есть таймеры.
Откройте даташит на 8-ую атмегу в разделе первого таймера и там все прочтете.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Олегыч1 писал(а):Попробую именно с него и начать.
так для него подход совсем другой требуется! вам надо захватывать не несущую частоту 36-41 кГц, а модулирующую, а там частота ниже во много раз! захватывать несущую нужен ARM, а огибающую - любой AVR справится. вы своим логическим анализатором захватываете с фотодиода, небось, а вы захватите с приёмника TSOP*** и посмотрите, как оно все существенно проще станет! и, кстати, многие логические анализаторы сразу код распознают, а имитировать отправку известного кода по известному стандарту - вообще пара пустяков!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

ARV, , да, именно!) Логическим анализатором с фотодиода, там и несущая и огибающая. Протокол очень похож на "Neс". Один в один как здесь: https://www.radiokot.ru/articles/14/
Но мой анализатор не знает этого протокола :? и по любому найдется какой-нибудь хитрый протокол, который тоже не распознается...
и, кстати, многие логические анализаторы сразу код распознают, а имитировать отправку известного кода по известному стандарту - вообще пара пустяков!
- Как именно это делается? на примере атмега 8 :roll:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

Проблема в том, что у меня нет приемника... Только пульт :?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Сообщение Олегыч1 »

Я примерно представляю, какой сигнал будет на приемнике. Наверняка без несущей частоты, просто импульсы, которые образованы от огибающей. И наверняка они распознаются софтом от логического анализатора. Допустим. И как дальше быть? Как воспроизвести теперь распознанный сигнал?
Кстати, приемник может быть абсолютно любой? Не обязательно от родного пульта? Таких у меня навалом, старые цифровые приставки от TV подойдут? Очень хочется попробовать на конкретном примере сгенерировать сигнал :)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Олегыч1 писал(а):приемник может быть абсолютно любой?
приемники и пульты отличаются по частоте несущей. несущая практически всегда лежит в диапазоне 32-45 кГц, крайне редки случаи, когда она вне этого диапазона. в среднем можно считать, что несущая 36-38 кГц. любой пульт на эту частоту будет принимать сигналы и на другой несущей в упомянутом диапазоне, но дальность приема, конечно, будет существенно ниже. для экспериментов в пределах 1-2 метров о частоте несущей и соответствующего ей приемника можно не волноваться, считайте, что любой TSOP**** вам подойдет к любому пульту.
Олегыч1 писал(а):Как воспроизвести теперь распознанный сигнал?
есть несколько способов.
1. определить стандарт, по которому передает пульт, и формировать стандартный код, не занимаясь "воспроизведением захваченного"
2. сделать так, как я ранее уже рассказывал: определить частоту несущей при помощи анализатора, определить импульсы огибающей при помощи анализатора и приемника, записать CSV-таблицу и потом по ней повторить огибающий сигнал, промодулировав им сгенерированную несущую.
3. захватить огибающий сигнал сразу при помощи МК, и повторить его, генерируя пачки несущей частоты 38 кГц (подходящей с натяжкой для любого приемника). сам принцип формирования импульсов тот же самый, что и в п.2, только таблица длительностей строится сразу в памяти МК, а не грузится туда извне.

захват длительностей делается при помощи режима "захвата" таймера, в AVR это TIMER1

генерация несущей делается при помощи таймера МК, настроенного на генерацию меандра (чаще всего стандарты на IR-управление применяют не меандр, а импульсы в пропорции 1/3...1/4, но принципиальной разницы нет)

модуляция несущей делается путем включения-выключения вышеупомянутого режима таймера. то есть несущая генерируется аппаратно, а модуляция делается программно.

как сформировать сигнал стандарта RC5 (практически вся продукция PHILIPS), вы можете посмотреть в моем проекте: https://simple-devices.ru/prj/9-electr/ ... te-control там есть исходники для передачи этого кода, все очень просто.
даже таймер для интервалов не применялся - простые задержки циклом. такой подход для примитивного пульта, больше ничего не делающего, кроме генерации кода, вполне допустим.

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

да, продвинутые МК, типа новейших версий AVR, PIC и некоторых ARM, могут генерировать модулированную несущую более близким к аппаратному методу способом, там есть блоки, способные аппаратно умножать (логически) сигналы... но принципиально сути процесса это не меняет
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="Олегыч1",url="/forum/viewtopic.php?p=4133542#p4133542"]И как дальше быть? Как воспроизвести теперь распознанный сигнал?
Кстати, приемник может быть абсолютно любой? Очень хочется попробовать на конкретном примере сгенерировать сигнал[/uquote]
можно посмотреть как сделано тут:
http://www.getchip.net/posts/092-univer ... myjj-pult/
Для того чтобы не создавать огромную базу команд различных пультов, я решил записывать IR-команды с оригинального пульта в память микроконтроллера и впоследствии их воспроизводить (своего рода диктофон для IR-команд). Обучаемому пульту нет разницы, по какому протоколу работает оригинальный пульт, нет разницы какого формата и длины IR-команда, он записывает всю передаваемую оригинальным пультом информацию в сыром (RAW) виде и точно так же воспроизводит.
Обсуждение:
http://www.forum.getchip.net/viewtopic.php?f=8&t=253
Ответить

Вернуться в «Разные вопросы по МК»