Проекты микроконтроллер pic модуль 433 мгц: Проекты с использованием радиочастотных модулей

Проекты с использованием радиочастотных модулей

Главная→Метки радиочастотный модуль 1 2 >>

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

Опубликовано автором admin-new3 сентября, 2022

В эпоху интернета вещей (Internet of Things, IoT) беспроводная связь с каждым годом становится все более популярной. В наши дни электронные устройства могут «разговаривать» друг с другом с помощью какого либо облачного сервиса или локальной сети. Для задач локальной (на … Читать далее →

Рубрика: Схемы на PIC | Метки: arduino, nRF24L01, PIC, беспроводная связь, радиочастотный модуль | Добавить комментарий

Опубликовано автором admin-new15 июля, 2022

В данной статье мы рассмотрим подключение к микроконтроллерам PIC радиочастотных модулей и осуществим передачу данных между ними используя радиосвязь.

В данном проекте мы будем осуществлять следующие основные операции: Мы будем подключать к микроконтроллеру PIC16F877A модуль передатчика, а к микроконтроллеру PIC18F4520 … Читать далее →

Рубрика: Схемы на PIC | Метки: PIC, беспроводная связь, ЖК дисплей, радиочастотный модуль | Добавить комментарий

Опубликовано автором admin-new13 апреля, 2022

Беспроводные технологии играют важную роль в жизни современного общества. К подобным технологиям можно отнести Bluetooth, WiFi, радиочастотные модули 433 МГц (433 MHz RF) и т.д. Каждая из этих технологий имеет свои преимущества и недостатки по скорости, дальности, стоимости и т.п. … Читать далее →

Рубрика: Проекты на STM32 | Метки: arduino uno, HC-SR04, STM32, беспроводная связь, ЖК дисплей, радиочастотный модуль, ультразвуковой датчик | Добавить комментарий

Опубликовано автором admin-new27 июня, 2021

В настоящее время технологии беспроводной связи (радиосвязи) получают все большее распространение. К наиболее распространенным сейчас технологиям беспроводной связи можно отнести такие системы как Bluetooth Low Energy (BLE 4.0), Zigbee, Wi-Fi, Lora, 4G и 5G. Для радиосвязи на небольшие расстояния в … Читать далее →

Рубрика: Проекты на Raspberry Pi | Метки: arduino, arduino uno, nRF24L01, Raspberry Pi, беспроводная связь, ЖК дисплей, радиочастотный модуль | Добавить комментарий

Опубликовано автором admin-new16 мая, 2021

В данной статье мы рассмотрим создание на основе платы Arduino и двух джойстиков пульта дистанционного управления (RC controller), который будет работать на частоте 2,4 ГГц. Данный пульт дистанционного управления (ДУ) автор проекта в дальнейшем планирует использовать для управления квадрокоптером (дроном), … Читать далее →

Рубрика: Схемы на Arduino | Метки: arduino, arduino nano, nRF24L01, джойстик, радиочастотный модуль | Добавить комментарий

Опубликовано автором admin-new10 августа, 2021

Несомненно, беспроводная связь является одной из ключевых технологий будущего. А в настоящее время широкое применение находят различные радиочастотные модули (RF modules), работающие на частотах диапазона 2,4 ГГц, в так называемом ISM диапазоне (ISM band) – диапазоне частот, выделенного для безлицензионного … Читать далее →

Рубрика: Схемы на Arduino | Метки: arduino, arduino uno, nRF24L01, беспроводная связь, радиочастотный модуль | Добавить комментарий

Опубликовано автором admin-new19 апреля, 2021

В данной статье мы рассмотрим управление светодиодами по радиоканалу с помощью платы Raspberry Pi и радиочастотных модулей. Аналогично на основе данного проекта вы можете создать пульты дистанционного управления на основе радиочастотных модулей для любых устройств. На нашем сайте мы уже … Читать далее →

Рубрика: Проекты на Raspberry Pi | Метки: Raspberry Pi, ЖК дисплей, радиочастотный модуль | Добавить комментарий

Опубликовано

автором admin-new31 июля, 2022

В этой статье мы рассмотрим создание на основе платы Arduino и радиочастотных модулях (RF-модулях) 433 МГц дистанционно управляемой лодки. Управляться лодка будет с пульта дистанционного управления, который мы сделаем своими руками. Для дистанционного управления лодкой можно использовать различные технологии: связь … Читать далее →

Рубрика: Схемы на Arduino | Метки: arduino, arduino pro mini, l293d, LM7805, драйвер мотора, радиочастотный модуль, робототехника | Добавить комментарий

Опубликовано автором admin-new6 сентября, 2021

Мы сегодня живем в эпоху доминирования 4G и наступающей эры средств связи 5G, но, тем не менее, простые УКВ радиостанции (еще их называют walkie-talkie) все еще продолжают играть важную роль в тех ситуациях, когда необходимо организовать простую и дешевую радиосвязь … Читать далее →

Рубрика: Схемы на Arduino | Метки: arduino, arduino uno, nRF24L01, беспроводная связь, радиопередатчик, радиоприемник, радиостанция, радиочастотный модуль, усилитель | Добавить комментарий

Опубликовано автором admin-new10 августа, 2021

Bluetooth Low Energy (BLE) – это версия технологии Bluetooth, причем значительно более оптимизированная чем классический Bluetooth. Ее часто называют «умной» Bluetooth (Smart Bluetooth). Первоначально технология BLE разрабатывалась для обеспечения минимально возможного энергопотребления при низкой стоимости, маленькой ширины полосы частот и … Читать далее →

Рубрика: Схемы на Arduino | Метки: arduino, arduino uno, BLE, Bluetooth, DHT11, nRF24L01, датчик влажности, датчик температуры, радиочастотный модуль | Комментарии (

11)

Использование RF-модулей / Хабр

Иногда, между устройствами требуется установить беспроводное соединение. В последнее время для этой цели все чаще стали применять Bluetooth и Wi-Fi модули. Но одно дело передавать видео и здоровенные файлы, а другое — управлять машинкой или роботом на 10 команд. С другой стороны радиолюбители часто строят, налаживают и переделывают заново приемники и передатчики для работы с готовыми шифраторами/дешифраторами команд. В обеих случаях можно использовать достаточно дешевые RF-модули. Особенности их работы и использования под катом.

Типы модулей

RF-модули для передачи данных работают в диапазоне УКВ и используют стандартные частоты 433МГц, 868МГц либо 2,4ГГц (реже 315МГц, 450МГц, 490МГц, 915МГц и др.) Чем выше несущая частота, тем с большей скоростью можно передавать информацию.
Как правило, выпускаемые RF-модули предназначены для работы с каким-либо протоколом передачи данных. Чаще всего это UART (RS-232) или SPI. Обычно UART модули стоят дешевле, а так же позволяют использовать нестандартные (пользовательские) протоколы передачи. Вначале я думал склепать что-то типа такого, но вспомнив свой горький опыт изготовления аппаратуры радиоуправления выбрал достаточно дешевые HM-T868 и HM-R868 (60грн. = менее $8 комплект). Существуют также модели HM-*315 и HM-*433 отличающиеся от нижеописанных лишь несущей частотой (315МГц и 433МГц соответственно).

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

Передатчик

Почти все RF-модули представляют собой небольшую печатную плату с контактами для подключения питания, передчи данных и управляющих сигналов. Рассмотрим передатчик(трансмиттер) HM-T868
На нем имеется трехконтактный разъем: GND(общий), DATA(данные), VCC(+питания), а также пятачок для припайки антенны(я использовал огрызок провода МГТФ на 8,5см — 1/4 длинны волны).

Приемник

Ресивер HM-R868, внешне, очень похож на соответствующий ему трансмиттер

но на его разъеме есть четвертый контакт — ENABLE, при подаче на него питания приемник начинает работать.

Работа

Судя по документации, рабочим напряжением является 2,5-5В, чем выше напряжение, тем большая дальность работы. По сути дела — это радиоудлинитель: при подаче напряжения на вход DATA передатчика, на выходе DATA приемника так же появится напряжение (при условии что на ENABLE также будет подано напряжение).

НО, есть несколько нюансов. Во-первых: частота передачи данных (в нашем случае — это 600-4800 бит/с). Во-вторых: если на входе DATA нету сигнала более чем 70мс, то передатчик переходит в спящий режим(по-сути отключается). В-третьих: если в зоне приема ресивера нету работающего передатчика — на его выходе появляется всякий шум.

Проведем небольшой эксперимент: к контактам GND и VCC трансмиттера подключим питание. Вывод DATA соединим с VCC через кнопку или джампер. К контактам GND и VCC ресивера также подключаем питание, ENABLE и VCC замыкаем между собой. К выходу DATA подключаем светодиод (крайне желательно через резистор). В качестве антенн используем любой подходящий провод длинной в 1/4 длинны волны. Должна получиться такая схемка:


Сразу после включения приемника и/или подачи напряжения на ENABLE должен загореться светодиод и гореть непрерывно (ну или почти непрерывно). После нажатии кнопки на передатчике, со светодиодом также ничего не происходит — он продолжает гореть и дальше. При отпускании кнопки светодиод мигнет(погаснет и снова загорится) и продолжает гореть дальше. При повторном нажатии и отпускании кнопки все должно повторится. Что же там происходило? Во время включения приемника, передатчик находился в спящем состоянии, приемник не нашел нормального сигнала и стал принимать всякий шум, соответственно и на выходе появилась всякая бяка. На глаз отличить непрерывный сигнал от шума нереально, и кажется, что светодиод светит непрерывно. После нажатия кнопки трансмиттер выходит из спячки и начинает передачу, на выходе ресивера появляется логическая «1» и светодиод светит уже действительно непрерывно. После отпускания кнопки передатчик передает логический «0», который принимается приемником и на его выходе также возникает «0» — светодиод, наконец, гаснет. Но спустя 70мс передатчик видит что на его входе все тот же «0» и уходит в сон, генератор несущей частоты отключается и приемник начинает принимать всякие шумы, на выходе шум — светодиод опять загорается.

Из вышесказанного следует, что если на входе трансмиттера сигнал будет отсутствовать менее 70мс и находится в правильном диапазоне частот, то модули будут вести себя как обычный провод (на помехи и другие сигналы мы пока не обращаем внимания).

Формат пакета

RF-модули данного типа можно подключить напрямую к аппаратному UART или компьютеру через MAX232, но учитывая особенности их работы я бы посоветовал использовать особые протоколы, описанные программно. Для своих целей я использую пакеты следующего вида: старт-биты, байты с информацией, контрольный байт(или несколько) и стоп-бит. Первый старт-бит желательно сделать более длинным, это даст время чтобы передатчик проснулся, приемник настроился на него, а принимающий микроконтроллер(или что там у Вас) начал прием. Затем что-то типа «01010», если на выходе приемника такое, то это скорее всего не шум. Затем можно поставить байт идентификации — поможет понять какому из устройств адресован пакет и с еще большей вероятностью отбросит шумы. До этого момента информацию желательно считывать и проверять отдельными битами, если хоть один из них неправильный — завершаем прием и начинаем слушать эфир заново. Дальше передаваемую информацию можно считывать сразу по байтам, записывая в соответствующие регистры/переменные. По окончании приема выполняем контрольное выражение, если его результат равен контрольному байту — выполняем требуемые действия с полученной информацией, иначе — снова слушаем эфир. В качестве контрольного выражения можно считать какую-нибудь контрольную сумму, если передаваемой информации немного, либо Вы не сильны в программировании — можно просто посчитать какое-то арифметическое выражение, в котором переменными будут передаваемые байты. Но необходимо учитывать то, что в результате должно получится целое число и оно должно поместится в количество контрольных байт. Поэтому лучше вместо арифметических операций использовать побитовые логические: AND, OR, NOT и, особенно, XOR. Если есть возможность, делать контрольный байт нужно обязательно так как радиоэфир — вещь очень загаженная, особенно сейчас, в мире электронных девайсов. Порой, само устройство может создавать помехи. У меня, например, дорожка на плате с 46кГц ШИМ в 10см от приемника очень сильно мешала приему. И это не говоря о том, что RF-модули используют стандартные частоты, на которых в этот момент могут работать и другие устройства: рации, сигнализации, радиоуправление, телеметрия и пр.

Что еще можно почитать

HM-T и HM-R — описание и документация на сайте производителя.
1, 2 и 3 — интересные статьи и наблюдения (много чего полезного можно найти в комментариях).

Карманный пульт дистанционного управления PIC — журнал «Сделай сам»

Создание сверхкомпактного контроллера размера FOB для беспроводных точек питания.

У меня есть несколько точек питания с дистанционным управлением по всему дому (управляемых Arduino, который запускается приложением для смартфона), но я хотел что-то маленькое, что можно было бы положить в карман и знать, что я могу включить свет с, даже если WiFi был выключен. Микроконтроллер PIC казался идеальным выбором для такой простой задачи.

Десять или пятнадцать лет назад, еще до появления Arduino, микроконтроллеры PIC (от компании Microchip) были обычным выбором для любителей. Инструменты для написания, компиляции и загрузки проекта были дешевыми и доступными (по сравнению с профессиональными альтернативами). PIC развивались, но многие из старых микроконтроллеров PIC все еще доступны, поэтому мой комментарий выше о том, что они идеально подходят для простой задачи, относится к этим старым моделям, поскольку многие из новых PIC имеют такие функции, как USB или аналогичные микроконтроллерам AVR во многих Arduino. доски.

В любом случае, мне нужно было сделать простой пульт дистанционного управления на 433 МГц, и я задавался вопросом, смогу ли я собрать все это вместе, используя старые микросхемы PIC и инструменты, и как они будут сравниваться с некоторыми из более новых инструментов PIC.

Сама сборка довольно проста и требует всего четыре компонента, включая батарею. Это было совершенно необходимо, поскольку моей целью было разместить проект в крошечном корпусе брелока, чтобы сделать устройство, которое я мог бы носить с собой в кармане. В конце концов, потребовалось небольшое хирургическое вмешательство, но, поскольку это все еще карманный размер, я буду называть это победой.

Большим препятствием было написать код для выполнения того, что я хотел (отправить команду 433 МГц), а затем загрузить его в PIC. В конце концов, я обнаружил, что использую ту же установку, что и 10 лет назад. Код создается в любом старом текстовом редакторе — в наши дни это Wordpad, но когда-то это была утилита DOS Edit. Компиляция выполняется другой программой DOS, а загрузка осуществляется через аппаратное обеспечение, называемое PICkit 2 (без встроенного загрузчика и последовательного USB-конвертера, такого как Arduino), и через собственное специальное приложение. Существует программное обеспечение MPLABX, которое поддерживает более новые устройства PIC (и большинство старых), но я обнаружил, что новое программное обеспечение предлагает гораздо больше функций и опций, чем мне нужно для этого проекта, на самом деле настолько много, что делает его более сложно.

Это небольшой скачок от Arduino и его компиляции и загрузки в один клик с подсветкой синтаксиса, но я бы рекомендовал использовать некоторые из этих инструментов, если вы хотите получить хорошее представление о том, как на самом деле работают микроконтроллеры — как от пользователя, так и от пользователя. аппаратный уровень.

Коммерческая беспроводная точка питания.

На самом деле от самого проекта не так много, как только он будет завершен, поскольку задействованными компонентами являются микроконтроллер PIC 12F675, батарея 3 В, тактильный переключатель и модуль передатчика 433 МГц. Как и во многих проектах, магия заключается в коде, и по большей части код предназначен для эмуляции сигнала с пульта дистанционного управления 433 МГц; в этом случае выдается тот же код, что и для кнопок A-on и A-off.

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

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

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

Цифровой шаблон — самая сложная часть кода; к счастью, я ранее расшифровал сигнал с этих пультов. Это шаблон из 35 бит, который включает 20-битный адрес, 4-битную команду, 8-битную контрольную сумму и 3 завершающих бита, которые всегда эквивалентны биту «0». Также можно «записать» сигнал, открыв оригинальный пульт и прощупав правильную дорожку на печатной плате.

Будучи цифровым сигналом, вход модуля 433 МГц либо включен, либо выключен (что приводит к включению или выключению несущей волны 433 МГц), но включение и выключение не соответствуют «1» и «0». «1» передается цифровым сигналом, включенным в течение (около) 800 мкс, а затем выключенным в течение 320 мкс, в то время как «0» включен в течение 320 мкс и выключен в течение 800 мкс.

Итак, все, что нужно сделать микроконтроллеру, это вывести 35 бит по порядку, затем подождать и повторить цикл несколько раз на случай помех. Подобная система используется в ИК-пультах дистанционного управления и называется она «широтно-импульсным кодированием».

Вы почти можете видеть битовую последовательность в сигнале — единицы имеют широкий пик, а 0 — узкий пик — очевидны три нуля в конце.

Требуемые детали: Джейкар Алтроникс
1 x беспроводной пульт дистанционного управления Powerpoint МС6148
1 x Корпус брелока ХБ5605
1 батарея CR2032 с выводами под пайку СБ1762
1 тактильный переключатель СП0601 S1120
1 x ПОС 12F675 ЗЗ8603
1 модуль 433 МГц ЗВ3100 Z6900
1 красный светодиод (дополнительно) ЗД0100 Z0700
1 резистор 100 Ом (дополнительно) РР0548 Р7534

Конечно, для программирования микроконтроллера необходим отдельный программатор PIC. Я решил, что лучше сначала протестировать все на макетной плате, прежде чем впаивать ее в корпус. Хотя Microchip прекратила продажу PICkit 2, они, похоже, разместили схему и программное обеспечение в сети. Люди также делают свои собственные версии, и есть другие доступные программисты, такие как более новый PICkit 3. См. раздел кода позже, чтобы узнать о моем опыте работы с программистом.

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

Вы увидите два провода, которые, кажется, никуда не идут — серый справа от PICkit 2, который является запасным выходом от PICkit 2 и не нужен для программирования 12F675. Другой — зеленый провод от модуля 433 МГц, который является антенной.

PICkit 2 имеет множество функций, и когда программирование не происходит, можно управлять контактами, чтобы подавать входные данные на схему для тестирования; так что мне даже не понадобился тактильный переключатель для этапа тестирования. Однако я добавил светодиод и резистор, чтобы получить визуальное подтверждение того, что выход что-то делает.

Важно отметить, что контакты 4, 6 и 7 используются только для программирования PIC и не используются в конечном проекте. Контакт 5, известный внутри как GP2, подключен к светодиоду и контакту данных модуля 433 МГц, и именно он управляет излучаемым сигналом. 12F675 может использовать внешний кварцевый генератор, но из-за небольшого количества выводов и небольшого свободного места я остановился на его внутреннем генераторе с частотой 4 МГц.

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

Для тех, кто знаком с Arduino, язык ассемблера, который я использую для кодирования этого проекта, может стать шоком. Язык ассемблера — это не столько язык, сколько удобочитаемая версия машинного кода, которая загружается как прошивка микроконтроллера (или даже микропроцессора или компьютера). Как такового единого «языка ассемблера» нет, а есть разные версии для разных процессоров. Для PIC среднего уровня, таких как 12F675 и даже всеми любимая 16F84 и ее преемница 16F88, каждая инструкция машинного кода представляет собой 14-битное слово, и большинство строк исходного кода полностью соответствуют 14-битной машине. инструкция кода.

То, что я использую язык ассемблера, не означает, что нет компиляторов для языков более высокого уровня, таких как «C». Microchip предоставляет MPLABX IDE и компилятор XC8 (12F675 считается 8-битным PIC, потому что он может работать только с 8 битами данных за раз), и я попытался загрузить и использовать их. Я обнаружил, что система проектов MPLABX была избыточной для того, что я пытался сделать, и компилирование базового проекта занимало несколько минут, тогда как моя верная старая программа для DOS занимала несколько секунд (даже на старом 486). Если бы я имел в виду более сложный проект, возможно, я бы постарался заставить MPLABX работать, но он просто не подходил для этого проекта.

Мой первый шаг состоял в том, чтобы получить работающую версию «мигающего скетча» Arduino, чтобы показать, что все части моей цепочки инструментов (редактирование, компиляция и загрузка) работают. Загвоздка в том, что в языке ассемблера нет даже функции «задержки», поэтому мне пришлось создавать это с нуля. Это было важно в финальном проекте, так как мне нужно посылать точно синхронизированные импульсы на модуль 433 МГц.

Зная, что внутренние часы с частотой 4 МГц выполняют один миллион инструкций в секунду (этим PIC требуется четыре тактовых цикла для выполнения одной инструкции), это означало, что при задержке в одну секунду приходится бездействовать для одного миллиона инструкций. Учитывая, что счет до миллиона в двоичном коде занимает 20 бит, а мы работаем на 8-битной машине, это тоже не так просто, как считать до миллиона. Возможны шестнадцатибитные и более высокие операции, но они должны быть построены из восьмибитных строительных блоков.

Первый шаг состоит в том, чтобы построить блок кода, который задерживается в течение 16 циклов:

 задержка 2; 255 циклов 16 циклов задержка 
MOVLW 0FFH
MOVWF DEL
Задержка; задержка 16x Del Cycles
NOP 1
//** *** *** *** * 2-12 ПРОПУЩЕНО ДЛЯ ЯСНОСТИ ****//
  nop     ;13
 decfsz DEL,f
 goto delayn ;15,16 => 16 x const циклов
    return

Команда «nop» проще всего понять просто означает «нет операции» и ничего не делает в течение одного такта. Это очень полезно во время задержки, но при наличии всего 1 КБ памяти программ у нас нет места для миллиона таких программ!

Метка «delayn» в первом столбце упоминается в инструкции «goto» позже, так что это цикл. Если вы посчитаете инструкции до «goto», вы увидите, что их всего 15, но получается 16 тактов, потому что PIC требуется два такта для выполнения перехода или перехода. Инструкция «decfsz» расшифровывается как «уменьшить размер файла и пропустить, если он равен нулю», что является нашим выходом из этого цикла, как только значение DEL будет уменьшено до нуля.

Первые две инструкции расшифровываются как «переместить литерал в w» и «переместить w в файл». В данном случае «w» — «рабочий регистр» PIC, а «файл» — файловый регистр, или, проще говоря, ячейка памяти в ОЗУ. «Литерал» — это просто константа 0xFF или 255, а файл — это переменная DEL. Установив переменную «DEL» в число, мы можем контролировать, сколько раз мы делаем цикл. В этом случае начните с 255 (наивысшее 8-битное число), и цикл повторится 255 раз, занимая 4080 циклов, или 4,0·9. 0003

8 мс.

Конечно, я не могу просто предположить, что мне доступна переменная «DEL», мне пришлось объявить ее при старте программы так:

 BD equ 020h 
DEL equ 021h

Это другое тип инструкции, которая на самом деле не создает никакого кода, а просто сообщает компилятору использовать псевдоним «DEL» для адреса 0x21 в ОЗУ. Обратите внимание, что значение в «DEL» не инициализируется — если мне нужно, чтобы оно было определенным значением, мне нужно сделать это отдельно. Я также должен быть уверен, что адрес 0x21 доступен для использования, в чем я должен обратиться к техническому описанию, чтобы быть уверенным.

Чтобы расширить мой цикл 4,08 мс во что -то дольше, я добавляю этот код в начало кода цикла выше:

 Bigdel; большая задержка 255 небольших задержек 
Movlw 0ffh
Movwf BD
L3
Задержка 2
DECFSZ BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD, BD. f
  goto l3
  return

Это дает еще один цикл из 255 циклов с использованием «BD» в качестве счетчика вокруг внутреннего цикла, что дает в общей сложности примерно 1,04 с задержки (во внешнем цикле есть немного дополнительных накладных расходов, которые я не считал).

Еще две вещи, которые нам нужно сделать для программы «мигания», — это включать и выключать вывод вывода, чтобы светодиод мигал. Есть два регистра для изменения: один говорит о том, что вывод является выходом, а не вводом, а другой регистрирует, установлен ли вывод на высокий или низкий уровень.

Еще одна сложная проблема с большинством PIC — управляющие регистры часто распределены по двум «банкам» памяти, поэтому есть еще один регистр, который необходимо изменить, чтобы убедиться, что вы работаете в правильном банке:

 bsf RP0      ;bank 1 
clrf TRISIO ;GPIO является выходом
bcf RP0      ;bank 0
bcf GP2     ;pin 5 low регистр (сокращение от «регистр с тремя состояниями», т. е. вход, выход — высокий уровень или выход — низкий уровень), который делает все выводы выходными, после чего мы очищаем бит выбора банка, возвращаясь к банку 0, а затем очищаем бит GP2, чтобы убедиться, что что выход низкий и светодиод не горит. Если бы мы попытались получить доступ к регистру TRIS, находясь в банке 0, фактически получили бы доступ к регистру GP, поскольку они оба находятся по адресу 5 (на 12F675) в своих соответствующих банках.

Даже имена регистров не известны компилятору, а предоставляются в отдельном файле «include», специфичном для используемого мной микроконтроллера. В данном случае это не более чем ряд директив «equ», создающих псевдонимы для различных номеров регистров и позволяющих использовать более запоминающееся имя.

Фактический код, вызывающий мигание, следующий:

 loop 
  bsf GP2     ; высокий уровень вывода
  call bigdel      ; ожидание
  bcf GP2      ; низкий уровень
 вызовите bigdel      ;подождите
goto loop      ;и снова по кругу

Код, который на самом деле запускает пульт (вместо того, чтобы просто мигать светодиодом), не сильно отличается, за исключением определенной последовательности задержек между максимумами и минимумами. Код выводит шаблон несколько раз, а затем выполняет команду «sleep», чтобы перейти в режим пониженного энергопотребления.

Теперь мы создаем и редактируем наш файл с исходным кодом. Далее нам нужно скомпилировать исходный код в HEX-файл, который можно загрузить в PIC. Как я отметил выше, я использую инструмент, который у меня был в течение длительного времени. Это старая программа для DOS под названием AF84, и она была включена в самый первый комплект программатора PIC, который я купил. В этом пакете также была программа-загрузчик, но, поскольку она была разработана для работы с параллельным портом принтера, сейчас от нее мало толку. Компилятор все еще работает, но мне приходится запускать его на моем старом 32-битном ноутбуке. Возможно, вы сможете запустить его на эмуляторе, таком как DOSbox, если у вас 64-битный ПК.

Я даже написал себе короткий командный файл под названием make.bat, чтобы не вводить каждый раз все параметры: .pic’ так же просто, как запустить:

 make Blink 

Если ошибок нет, будет создан файл с именем blink. hex в той же папке. Если есть ошибки компилятора, они отображаются, чтобы помочь при отладке.

Параллельные порты давно исчезли, поэтому я купил PICkit2 много лет назад, и программное обеспечение все еще доступно для загрузки. Главное окно содержит много информации, включая содержимое памяти программ и содержимое EEPROM (которое можно редактировать вручную).

Если в окне не отображается «Средняя/стандартная конфигурация», нажмите «Семейство устройств»> «Средний диапазон»> «Стандартная», чтобы установить это.

Процесс загрузки очень прост: нажмите «Файл» > «Импортировать в шестнадцатеричном формате», выберите файл и нажмите «Записать». Для проверки схемы можно подать питание, нажав «Вкл.» в VDD PICkit 2.

Это процесс загрузки. После этого я настроил программу, чтобы обеспечить правильные импульсы для модуля 433 МГц, и как только я убедился, что схема макета правильно работает с удаленной точкой питания, я перешел к окончательной сборке.

Финальная схема довольно проста – самое сложное втиснуть ее в корпус!

Когда дело дошло до финальной версии, я начал с размещения компонентов вокруг тактильного переключателя. Это очень важно, так как он должен совпадать с задней частью кнопки на корпусе. Обратите внимание, как ножки согнуты, чтобы вывести их из корпуса, что облегчает пайку. Вы также можете увидеть карандашные линии, которые я использовал для выравнивания переключателя. Я сделал это, измерив расстояния от края корпуса.

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

Затем PIC и аккумулятор устанавливаются на место и припаиваются к коммутатору. Эти соединения просты, поскольку нет необходимости в проводах. Я еще ничего не приклеивал, на случай, если нужно будет подправить.

Затем я добавил модуль 433 МГц, отметив, что я не могу полностью разместить его внутри корпуса, не сделав обрезки. У меня было два варианта: либо вырезать стойку для винта, и склеить корпус, либо сделать прорезь на краю корпуса, чтобы модуль 433 МГц немного выступал. В итоге я сделал прорезь в корпусе.

Оранжевые провода — это положительные соединения, а черный провод — отрицательные. Использование дополнительных клемм на переключателе для плюса позволило мне соединить три провода без необходимости удерживать их все в одном месте, пытаясь их припаять.

Последние два провода — это данные от контакта 5 на PIC к модулю 433 МГц (желтый) и антенне (белый). Я обнаружил, что мне пришлось немного подрезать антенну после установки, чтобы она не блокировала защелку за батареей.

Последним шагом является небольшая обрезка корпуса, чтобы он закрывался. Я использовал набор плоскогубцев в качестве очень грубого «высекателя», а затем выпрямил край канцелярским ножом.

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

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

Я очень доволен тем, как закончился пульт, хотя в следующий раз я мог бы использовать ATTiny85 и запрограммировать его с помощью Arduino IDE, используя другой Arduino в качестве программатора ISP. Программирование на C часто более знакомо, и с его помощью можно довольно просто добиться хорошего результата и сократить время разработки, даже с сырым чипом.

Надеюсь, это дало вам некоторое представление о возможностях микроконтроллеров PIC. Одним из преимуществ использования языка ассемблера по сравнению с C является то, что у вас гораздо больше контроля, когда требуется точная синхронизация, тогда как даже разные версии Arduino IDE могут генерировать разный код, что, в свою очередь, изменит синхронизацию кода.

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

Сейчас меня больше интересует, что могут предложить PIC, и я планирую потратить больше времени на изучение работы MPLABX, так как он будет гораздо более мощным, чем древний компилятор, который я использовал в этом проекте. Хотя этого было достаточно для базового проекта, MPLABX предлагает интеграцию компилятора C и загрузку через PICkit 2. Хотя PICkit 2, по-видимому, недоступен в Microchip, у них есть PICkit 3, который мне еще предстоит попробовать.

Пока я искал свой PICkit 2, я купил в интернет-магазине еще один программатор PIC под названием «K150». У меня получилось, но было много хлопот. Программа, казалось, работала хорошо, но оказалось, что некоторые из них имеют поддельный чип PL2303 USB-последовательный преобразователь, который просто не работает под Windows 10. Учитывая, что это всего лишь последовательный интерфейс, я уже начал собирать Arduino- программатор на основе PIC, который должен работать под Windows 10. Одна из интересных частей программирования PIC заключается в том, что они должны генерировать около 13 В, чтобы перевести PIC в режим программирования (если вы подключите мультиметр к контакту 4 12F675 во время программирования, вы это увижу). Одной из задач программатора PIC на базе Arduino будет генерация и коммутация 13 В от источника питания 5 В USB.

На данный момент у меня есть программатор PIC для Arduino, программирующий 16F84A с помощью программы из комплекта K150, и он даже работает под Windows 10. Мне просто нужно немного поработать над 12F675, но это должно быть довольно просто .

Для тех, кто не хочет ждать, чтобы собрать программатор на базе Arduino, я бы порекомендовал приобрести PICkit 3 и использовать MPLABX IDE для загрузки, поддерживаемую Microchip, а также рекомендуется для кодирования на языках, отличных от ассемблера. .

В конце концов я нашел свой PICkit 2, и, кроме того, им легко пользоваться; у него даже есть функция логического пробника, которую я использовал для захвата сигнала в разделе «Как это работает».

Для других этот проект должен быть адаптирован к любой системе, которая должна передавать один или два простых кода на частоте 433 МГц. Возможно суперкап вместо аккумулятора позволит 433МГц модулю полностью поместиться внутри корпуса. Вероятно, это был бы отличный ИК-пульт, учитывая, что ИК-светодиоды довольно маленькие. Если 12F675 слишком большой, Microchip также предлагает 6-контактный 10F206.

РЧ-интеграция с pic

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

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

У вас есть большой выбор, и кажется, что стандартные беспроводные протоколы (BLE, Zigbee) и беспроводные приемопередатчики LoRa будут работать, но, вероятно, это излишне. Если вы используете одно из этих решений, вам, вероятно, понадобится модуль, что избавит вас от необходимости проектирования печатной платы, связанной с генератором, антенной и связанными с ними проблемами целостности сигнала.

Вы можете взглянуть на метки NFC/RFID и считывающие устройства, я никогда не проектировал их, но подозреваю, что они могут быть использованы для решения вашей проблемы. Я понятия не имею, насколько маленькой может быть антенна для считывателя RFID, и она может потребовать больше места на печатной плате (и мощности?), чем антенна BLE/Zigbee или LoRa.

Определение минимального/максимального диапазона обнаружения (например, 1 метр всегда обнаруживается, 2 метра никогда не обнаруживается) может оказаться сложной задачей. Возможно, размер и мощность антенны NFC/RFID повлияют на дальность обнаружения, что может сыграть вам на руку. В любом из этих подходов, если вы хотите, чтобы обнаружение работало очень быстро, вам придется чаще выполнять широковещательную рассылку/опрос, что потребует большей мощности. Удачи!

Спасибо, Мэтьюбарр.

Позвольте мне объяснить, как я разработал.

Я использовал модуль передатчика и приемника 433 МГц (дешевые модули доступны в магазинах, таких как Amazon), соединил передатчик и приемник 433 МГц с микроконтроллером pic16f877a, так как я не хочу, чтобы передатчик и приемник включались в одну и ту же цепь, потому что устройство идентифицирует себя, когда оба включены в одном устройстве, поэтому я управлял переключением с помощью микроконтроллера таким образом, чтобы при включении передатчика приемник выключался, и наоборот, эта идея кажется хорошей, но когда я практически реализовал и протестировал их, это было неэффективно, вероятность обнаружения сигнала/идентификации устройства составляла всего 50%.

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

Еще раз спасибо

О, из вашего исходного поста я не понял, что вы зашли так далеко, медленное раскрытие!

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

Решения на основе протокола (BLE, Zigbee и подобные) обычно поставляются со встроенным процессором, например ARM. Поставщик, как правило, предоставляет демонстрационные проекты и комплект для разработки программного обеспечения, после чего вам нужно приступить к программированию для разработки приложения, отвечающего вашим потребностям. Если протокол и аппаратное обеспечение являются для вас новыми, это не так просто, как использование базового беспроводного трансивера с относительно простым интерфейсом управления и контроля.

Да, точно, и мне нужно поработать над модулями, такими как zigbee, чтобы добиться эффективного вывода, перед этим я подумаю о том, чтобы попытаться отладить, что не так с моим существующим дизайном

Спасибо, Мэтьюбарр

Привет, blaze_embed_94!

Это не в помощь, но я не мог устоять перед искушением сказать, что в восьмидесятых (да, я стар) британский журнал Elektor Electronics опубликовал пару схем, делающих именно это. Они назывались «не забывай меня, передатчик» и «не забывай меня, не получай» и были направлены на то, чтобы помочь человеку не забыть свой зонт, закончив посещение какого-либо места в дождливый день.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *