программа на Си понимает описание массива в таком виде:
Код:
int array[] = { 1234, 3334, 23, 3944, 44545 }
значит, открываете ваш CSV в Экселе или там где еще, и в клеточках рядом с цифрами ставите запятые. потом Copy-Paste в студию, пару ручных операций по расстановке скобок - вот и всё внедрение в код.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Не понимаю... вот в первой ячейке (в CSV) значение: "0.000000000000000, 0 "Это время старта в секундах. Нолик на конце после запятой указывает на то, что пока импульса нет. В следующей ячейке значение: "0.000050174000000, 1 " Это время в секундах когда появилась логическая единица. Единица на конце говорит о том, что это начало логической единицы. В следующей ячейке значение: "0.000053862000000, 0" Все так же, время, когда логическая единица перешла в ноль... И т.д. и еще 13 тысяч таких ячеек... Подскажите пожалуйста на вот этом конкретном примере, где именно надо расставить запятые? Как будет выглядеть правильный код на Си в моем случае?
мда... ни шагу без инструкции в картинках. 1. открыли свой CSV в таблице, нарисовали рядом ВТОРОЙ столбик, ввели в него формулу перевода дробных секунд в наносекунды, чтобы было целое число, потом нарисовали ТРЕТИЙ столбик с запятыми:
2. выделили ВТОРОЙ и ТРЕТИЙ столбики:
3. Сделали Copy-Paste в редактор кода:
4. дописали выше-ниже скопированного необходимые "буквы" программного кода.
Добавлено after 12 minutes 36 seconds: то есть не совсем так: вам же нужно не время от начала записи, а между отсчетами... то есть формула у вас должна быть другой, для вычисления разницы между моментами времени... т.е. примерно так для показанной на рисунке ячейки: =(А3-А2)*1000000000 надеюсь, этого достаточно для вашей самостоятельной работы?
Да! Спасибо!) То что нужно! Очень выручили Возможно возникнут вопросы по самому коду, но это уже чуть позже... Как выглядит массив в Си вы уже показали. Как отыскать нужную библиотеку в AtmelStudio6?
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
какую еще библиотеку?! ваша задача - не типовая, писать придется самому.
Добавлено after 2 minutes 12 seconds: для начала определитесь с МК: судя по вашему примеру, интервалы у вас измеряются единицами микросекунд - из AVR, например, подобные интервалы реализовать не сможет ни один МК, значит, вам потребуется ARM. а это немного другой уровень вхождения в программирование... вам-то и AVR пока высоковат.
Добавлено after 47 seconds: вы, часом, не IR-пульт имитировать собираетесь?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
а где эти модули распологаются? в настройках самой программы я не нашел...
Эти модули суть есть режимы работы таймеров. Таймер при включении в режим захвата при наличии на ВХОДЕ ЗАХВАТА активного фронта (активный фронт настраивается) в регистр захвата АППАРАТНО записывается текущее значение таймера. Таким образом, пользователь получает отметки времени (таймер это по сути часы) на каждый фронт. Разность времени соседних фронтов и есть время между событиями. При включении таймера в режим OutputCompare (PWM) полученные при захвате времена вставляем в регистр периода и дьюти и таким образом мы генерируем на выходе искомый записанный ранее сигнал.
Попробую именно с него и начать. Да, я пока только для AVR могу что-то написать. Остальное пока не рассматриваю, т.к. реально пока сложновато для меня.
Цитата:
Эти модули суть есть режимы работы таймеров. Таймер при включении в режим захвата при наличии на ВХОДЕ ЗАХВАТА активного фронта (активный фронт настраивается) в регистр захвата АППАРАТНО записывается текущее значение таймера. Таким образом, пользователь получает отметки времени (таймер это по сути часы) на каждый фронт. Разность времени соседних фронтов и есть время между событиями. При включении таймера в режим OutputCompare (PWM) полученные при захвате времена вставляем в регистр периода и дьюти мы генерируем на выходе искомый записанный ранее сигнал.
КРАМ, это применимо для AVR? А в частности для Атмега 8 ?
так для него подход совсем другой требуется! вам надо захватывать не несущую частоту 36-41 кГц, а модулирующую, а там частота ниже во много раз! захватывать несущую нужен ARM, а огибающую - любой AVR справится. вы своим логическим анализатором захватываете с фотодиода, небось, а вы захватите с приёмника TSOP*** и посмотрите, как оно все существенно проще станет! и, кстати, многие логические анализаторы сразу код распознают, а имитировать отправку известного кода по известному стандарту - вообще пара пустяков!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ARV, , да, именно!) Логическим анализатором с фотодиода, там и несущая и огибающая. Протокол очень похож на "Neс". Один в один как здесь: https://www.radiokot.ru/articles/14/ Но мой анализатор не знает этого протокола и по любому найдется какой-нибудь хитрый протокол, который тоже не распознается...
Цитата:
и, кстати, многие логические анализаторы сразу код распознают, а имитировать отправку известного кода по известному стандарту - вообще пара пустяков!
Я примерно представляю, какой сигнал будет на приемнике. Наверняка без несущей частоты, просто импульсы, которые образованы от огибающей. И наверняка они распознаются софтом от логического анализатора. Допустим. И как дальше быть? Как воспроизвести теперь распознанный сигнал? Кстати, приемник может быть абсолютно любой? Не обязательно от родного пульта? Таких у меня навалом, старые цифровые приставки от TV подойдут? Очень хочется попробовать на конкретном примере сгенерировать сигнал
приемники и пульты отличаются по частоте несущей. несущая практически всегда лежит в диапазоне 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, могут генерировать модулированную несущую более близким к аппаратному методу способом, там есть блоки, способные аппаратно умножать (логически) сигналы... но принципиально сути процесса это не меняет
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
И как дальше быть? Как воспроизвести теперь распознанный сигнал? Кстати, приемник может быть абсолютно любой? Очень хочется попробовать на конкретном примере сгенерировать сигнал
Для того чтобы не создавать огромную базу команд различных пультов, я решил записывать IR-команды с оригинального пульта в память микроконтроллера и впоследствии их воспроизводить (своего рода диктофон для IR-команд). Обучаемому пульту нет разницы, по какому протоколу работает оригинальный пульт, нет разницы какого формата и длины IR-команда, он записывает всю передаваемую оригинальным пультом информацию в сыром (RAW) виде и точно так же воспроизводит.
ARV, Вроде все теперь понятно, теперь наступает практика.
Добавлено after 2 hours 51 minute 14 seconds: А для чего вообще нужна несущая частота в инфракрасных пультах? Ведь инфракрасное излучение передается оптически. Это же не радиоволна...
Ну и что? Импульсы от лампочки не попадают ни под один протокол) Да какой там, даже если и протокол будет один и тот же, а кодировка другая, то все равно сигнал получается индивидуальный
если вы считаете, что помехи не мешают приему полезного сигнала, мне нечего вам добавить к ранее сказанному. и вообще сомневаюсь в пользе продолжения диалога: очевидные, многократно описанные вещи у вас вызывают удивление и/или сомнение...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения