Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'nRF24l01+'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Автомобильная электроника
    • Питание
    • Ремонт
    • Системы охраны и наблюдения. Личная безопасность
    • Роботы и модели на ДУ-управлении
    • Световые эффекты и LED
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Металлоискатели
    • Автоматика
    • Электрика
    • Промышленная электроника
    • Измерительная техника
    • Мастерская радиолюбителя
    • КВ и УКВ радиосвязь
    • Радиопередатчики
    • Сотовая связь
    • Спутниковое ТВ
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Схемотехника для профессионалов
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • Arduino, ESP32, ESP8266, Raspberry Pi
    • AVR
    • STM32
    • PIC
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Курилка
    • Сайт Паяльник и форум
    • FAQ (Архив)
    • Технический английский (English)
    • Личные блоги
    • Наши проекты для Android и Web
    • Корзина
    • Конкурсы сайта с призами
    • Вопросы с VK
  • Переделки ATX->ЛБП
  • Переделки разные темы
  • Киловольты юмора Юмор в youtube

Блоги

  • Твори, выдумывай, пробуй.
  • fant's блог
  • Ток покоя
  • Где купить велпатасвир, epclusa, velpanat, velasof, софосбувир в России по лучшей цене.
  • Китайские бренды видеокамер
  • Создание Маленькой Мастерской
  • Блог администрации
  • STEN50's блог
  • Изучение, наладка, исследование
  • MiSol62's блог
  • короткие записки по ходу дела
  • Программирование AVR и PIC блог
  • Стабилизированный выпрямитель тока ТЕС 12-3-НТ
  • Блог getshket
  • ТНПА
  • welder's блог
  • blog cheloveka loshadi
  • OPeX3's блог
  • Подводная робототехника
  • Сабвуфер и акустика.
  • Радиоуправляемая машина
  • Консультация психолога сексолога онлайн, психолог онлайн
  • Nokian блог
  • Оповещения Dermabellix Scam !! Не покупайте это !!!
  • Cheerful Boss' блог
  • Cheerful Boss' блог
  • VLAD1996B's блог
  • "Коллективное увеличение продаж"
  • Dudok's блог
  • "Коллективное увеличение продаж"
  • Goluboglazyi's блог
  • Прибор определяющий электролитический конденсатор на работоспособность.
  • Mosfet@'s блог
  • mazzi's блог
  • Лучшие компьютерные игры 2017
  • Marchenkokerya's блог
  • Заметки начинаущего аудиофила
  • Почти бесполезные проги
  • Светлый блог.
  • дядюшка Филин's блог
  • Дневники нуба
  • satyrn's блог
  • Люк. В погреб.
  • Фильм Дом Солнца
  • Светодиодная лента B-LED 2835-120 W белая негерметичная
  • Само-Реплицируещиеся Производственные Системы
  • Блог от Eknous
  • РВС's блог
  • Den_R's blog
  • РВС's блог
  • Чтото крутое и про криворукость
  • ekadom's блог
  • Проектирование любых чертежей
  • Lisovic's блог
  • Блог уже не юного радиогубителя
  • денди
  • eHouse
  • zaregan's блог
  • Схемотехника УНЧ с низковольтным питанием на примере приёмников фирмы Grundig
  • То, что в руки попало.
  • Блок питания водородного генератора и все что с ним связано
  • slava_va@mail.ru's блог
  • Блог alex123al97
  • slava_va@mail.ru's блог
  • параленое соединение КРЕНок или как сделать стабилизатор напряжения 24-12в
  • Свободная генерация Андрея Мельниченко
  • реобас
  • Модернизации системы впрыска на 555
  • помощь
  • Копии схем и печатных плат устройств попавшие ко мне
  • MBM75's блог
  • Буду
  • lagutai's блог
  • Мои проекты.
  • lagutai's блог
  • Трудовик
  • vOVK@'s блог
  • токарь-радиолюбитель
  • azlk3000's блог
  • Коллизия сингулярности
  • SmallAlex's блог
  • Вопрос по Цифровому усилителю мощности звука 2x12 Вт YDA138-E
  • bebulo's блог
  • Простейший макет станка термо-вакуумной формовки
  • Блог им. pryanic
  • peratronika
  • Zer's блог
  • MEDBEDb's
  • Гнездо кукушки
  • hiMiческий блог
  • luna_kamen's блог
  • Изучаем USI на основе сверхэкономичного прототипа
  • Алекс-Юстасу
  • SUBWOOFER.RU
  • kot sansher's блог
  • Поделки стареющего пионера
  • доброжелатель2's блог
  • Grig96. Полезные заметки.
  • Attiny 0-ой и 1-ой серии (Attiny817, 1614 и прочие)
  • pavlo's блог
  • MSP430FR
  • viper2's блог
  • Моя Электро Чинильня
  • Selyk's блог
  • VoltServis.ru
  • kpush's блог
  • OM3 на новых платах.
  • конни's блог
  • Электронный экстазёр "MASHKA".
  • ptimai's блог
  • noc functionalities
  • Sun kapitane's blog
  • ODEON AV-500
  • Sun kapitane's blog
  • Логика на транзисторах,диодах, счетние тригери на транзисторах
  • AleksandrBulchuck's блог
  • Качественные окна от производителя
  • KRALEX's блог
  • Javaman's projects
  • SeVeR36's блог
  • 3232
  • Пять копеек.
  • Az@t's блог
  • Индукционный нагрев
  • Схемы разных устройств
  • Кардшаринг SAT ТВ блог
  • PENTAGRID SAYS
  • Ещо раз о "Кощее 5И"
  • Игровые автоматы на официальном сайте
  • коллекционер
  • дямон's блог
  • Ламповый усилитель и акустика для озвучки семейных мероприятий
  • дямон's блог
  • tiosmutoutrup1971
  • Светомузыкальная установка для новачков
  • Лучшие игры для ПК скачать бесплатно
  • sqait's блог
  • Блокнотик
  • Gubernator's блог
  • Записки электрика
  • Полстакана
  • Vrednyuka
  • Интегральные микросхемы
  • grigorik's блог
  • Интегральные микросхемы
  • VMWare удобство и безопастность
  • Профсоюз обычных пользователей
  • rtfcnf's блог
  • Гидроэнергетика в России: отечественные гидроэлектростанции, типы и характеристики
  • VMWare удобство и безопастность
  • Лайфхаки от Кати
  • Kinh chong anh sang xanh gia re
  • ukabumaga's блог
  • АО "Диполь Технологии"
  • artos5's блог
  • блог
  • Kraftwerk's блог
  • 1
  • Kraftwerk's блог
  • Как выбрать точечный светильник?
  • мастерская ky3ne4ik'а
  • Работа с микроконтроллером Atmega8
  • Aronsky
  • Игорь Камский
  • Диммеры
  • 5В = 1,5+3
  • vitiv' блог
  • Ремонт цифровой панели прибора тойоты марк 100. Замена транзистора 36 ( SOT- 23 )PNP
  • Все СРО России
  • 300writers
  • Металлоискатель Tracker FM-1D3
  • Былое
  • Создание монстра "Blaster 8920"
  • 2Smart Cloud Blog
  • EmmGold's блог
  • 2Smart Cloud Blog
  • ivan15961596's блог
  • Кумир у-001
  • ivan15961596's блог
  • My blog
  • Интернет радио в машину
  • SamON
  • Помогите люди добрые
  • AI
  • Помогите подключить маяк 231 стерео.
  • Гаусс-пушки
  • Название
  • 7400's блог
  • Как я собирал свой первый импульсный источник питания
  • Віталік Приходько_130349's блог
  • Lithium ECAD - российская САПР печатных плат
  • Евгений Малюта's блог
  • ПИшу свои мысли
  • werekpro
  • Venera Electronica
  • afurgon's блог
  • Выбросьте это в парашу!
  • odaplus' блог
  • Zvik's блог
  • Smart overload protection power amplifier «Zita (Z) ThermalTrak™»
  • радиоэлектоника
  • BoBka777's блог
  • МиУЗР - Модернизация и Усовершенствование Звуковой Радиотехники .
  • aleksey9900's блог
  • Лабораторная блок питания
  • Нашел статью о пайке проводов к светодиодов
  • Китайский городовой
  • Костик0's блог
  • УФ лампа для маникюра SK-818
  • 8 Contrasts Between Web Servers and Application Servers
  • Конденсатор
  • Новости, обзоры и другая полезная информация от ИМ "Радиодар"
  • Цветомузыка
  • OPeX3's блог
  • Sem2012's блог
  • это не хлам – это часть моей жизни
  • Контроллер на базе ПК (OS Win LTSC)
  • OdiS' блог
  • Хитрости строителя
  • aleksfil's блог
  • Color Preamp - предусилитель на лампах 12AU7
  • Проблема с зарядкой литиевого аккумулятора для шуруповерта 21 вольт
  • EmmGold's блог; AVR
  • Микроэлектроника
  • З
  • CH32V
  • Блог Плотникова Ильи
  • Бесплатные радиодетали с Алиэкспресс
  • Повышение качества и снижение временных затрат при испытаниях электронных компонентов с помощью отечественного испытательного оборудования
  • Источники питания MEAN WELL
  • Жизнь и рыбалка
  • yureika's блог
  • Глушитель спутникогого интернета
  • Всякая всячина
  • Для начинающих
  • Ignite your senses with the grace and allure of female escorts near Laguna Niguel
  • Fumitox's блог
  • Наш-RXT6 топ-10 на январь 2023: Лучшие сайты онлайн казино в России
  • Лицензионные казино онлайн в 2024 году на реальные деньги
  • Самоделки блог
  • Домашняя автоматика
  • Интересное и полезное
  • Ремонт Амфитон 35у-101с
  • ульян's блог
  • Свет в грузовой газели
  • Блок питания 0-12В для начинающих
  • Список лучших онлайн казино (RU+KZ) по играм на реальные деньги: Легальные сайты России по рейтингу 2024
  • Dimko's блог
  • Иван Самец's блог
  • SolomonVR's блог
  • gendzz's блог
  • fleh138's блог
  • Электроника forever!
  • aleksejhozhenets' блог
  • aleksejhozhenets' блог
  • diserver блог
  • aleksey290476 блог
  • ВАРГ's блог
  • Люстра Чижевского
  • wanes101's блог
  • voldemar2009's блог
  • Jana's блог
  • Jana's блог
  • Рена Искужин's блог
  • abduraxman7's блог
  • Kuzumba's блог
  • Самопальник
  • заработок через интернет на запчасти!!!
  • electric.kiev's блог
  • lolo's блог
  • leravalera's блог
  • ideomatic's блог
  • приглашаем на работу инженера-радиоэлектронщика
  • FREEMAN_77's блог
  • Блог автоэлектрика
  • Блог начинающего электронщика
  • Dersu's блог
  • Электроэнергия и её экономия!
  • Электроэнергия и её экономия!
  • Семён Ковалёв's блог
  • piligrim-666's блог
  • помогите с партотивной калонкой
  • помогите с партотивной калонкой
  • Музыка в стене.
  • m-a-r-i-k-a's блог
  • cosmos44's блог
  • oyama14's блог
  • блог Виталика!
  • ciornii's блог
  • Великий и Ужастный блог
  • Denis__Ricov's блог
  • Universal12's блог
  • Sprut's блог
  • Alexeyslav's блог
  • cosmosemo's блог
  • Заметки радиолюбителя
  • Falconist. Мемуары
  • Блог MillyVolt
  • усилитель импульсов
  • Panasonic sa-ak 18
  • Простое радиоуправление из того, что было.
  • 35house
  • Блог Радиочайника
  • Блохи iiiytnik'a
  • Хороший сервис- Бяка
  • Аудиолаборатория "Философия Звука"
  • ОколоCADовое
  • Блог KVLADS
  • Короп блог
  • Автоматизация котла Protherm MTV
  • Бложиг Касянича
  • Обо всём
  • Эксперимент
  • No electronics
  • ПРИРОДА СВЕТА и ЕГО ВОЗМОЖНОСТИ
  • Генератор на xr2206
  • HTPOWLASER
  • Когда-то были очень популярны у радиолюбителей
  • AVR - микроконтроллеры
  • Микроконтроллер
  • Самодельный автосимулятор
  • Интернет-магазин керамической плитки «Боярская Плитка»
  • Разработка электронных метрических мишеней IPSC для мягкой пневматики (страйкбол)
  • ,

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Skype


ICQ


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено: 4 результата

  1. Всем привет! Давно разрабатываю проект беспроводного и живучего датчика температуры. Вообще изначально я хотел найти готовое устройство с понятным интерфейсом взаимодействия. Что бы без гемороя и танцев с бубном можно было подключать датчик температуры к любому проекту (Как пример: часы на ГРИ или ВЛИ) и просто выводить температуру. К сожалению ничего вменяемого я не нашел. Либо датчики используются в закрытой эко-системе. Либо это BLE с которым вообще не понятно как работать ибо информации почти нет. Решил попробовать разработать такую вещь самостоятельно. Конечно это изобретение велосипеда, но лично для себя я практиковался с BME280, nrf24l01 и сном МК. Как минимум тут выгода есть Вот что получилось. Приемник и передатчик. Немножко информации. Приемник: МК (328p) + USB to COM (CP2102) ____ (Дополнительно светодиод и расшивка SPI) частота 8MHz от внутреннего кварца Передатчик: МК (328p) + BME280 + nrf24l01 + бат CR2032 +Опорное напряжение ____ (Дополнительно светодиод и расшивка SPI, uart, кнопка) частота 1MHz от внутреннего кварца Что по потреблению: Очень долго пытался понять по мультиметру, но он постоянно как то врал. При первом сне показывал 40мкА, а потом с каждой итерацией сна прибавлял +10мкА. В общем поставил стрелочный прибор на 100мкА По прибору. ЕСЛИ ВСЕ ШТАТНО РАБОТАЕТ!!!!! Во время сна стрелка лежит в 0. При измерении и отправке 70-100мкА. Но стрелка мгновенно дергается и потом сразу в 0. ВОТ Дальше я зашел в тупик! И мне нужна ваша помощь! 1) У меня в СОМ порт постоянно летят логи программы и как выяснилось это очень много жрет энергии. Странность вот в чем. Если вытащить провода Тх, Rx то МК как бы зависает несколько секунд для отправки пакета.... скажите разве у UART есть подтверждение отправки пакета? 2) Я решил убрать вообще весь код UART. И все равно если убрать провода Тх, Rx то зависание присутствует (Зависание я фиксирую на стрелочном приборе. Как максимальное потребление и неуход в сон). PS/ питаю все от 3,3в с платы конвектора 3)Теперь я подключаю батарейку она у меня немного подсевшая 2,8в, Но я планировал что устройство должно работать до 2в! . Раз я отключил UART, то решил использовать светодиод как метку как выполняется код. И вот еще САМАЯ СТРАННАЯ проблема. Программа не стартует! Вообще. Идет большое потребление тока, но светодиод не горит. Почему так происходит? ___________________________________________(У меня есть предположение что это бутлоадер как то не так себя ведет..... ) PS/ в Фьюзах я отключил отслеживание питания.
  2. Цель - разработка экономичного беспроводного монитора температуры и относительной влажности. Что мы имеем: МК Attiny24A, датчик SHT10 от SENSIRION, популярный трансивер nRF24l01+ и источник питания в виде пары батареек LR41. Работа будет весьма насыщенной и объемной, т.к. мы будем использовать модуль USI сразу в двух режимах, жонглировать регистрами (с) и заниматься прочими непристойными вещами. Но давайте сначала разберем и проанализируем ошибки первого моего прототипа такого устройства, но на датчике DS18B20. Первая детская неожиданность Первый прототип состоял из озвученного DS18B20 в металлическом корпусе и МК atmega 328p на плате ProMini с кварцем на 8 МГц. Т.е. это была версия, адаптированная под питание 3.3в. Сперва разберем Схемотехнические ошибки Разумеется, что на плате была проведена операция стабилизатороэктомия, а также светодиодоэктомия. Но для контроля работы интерфейса SPI был оставлен ещё один светодиод - на линии данных. Какой бы небольшой ток он не потреблял, но первый путь утечки тока присутствовал. Как известно, для работы датчика DS18B20 необходим подтягивающий резистор. Был поставлен первый попавшийся под руку и он же рекомендуемый - сопротивлением 4700 Ом (у монтажников-слаботочников отобрал =) ). Это был второй путь утечки тока абсолютно на ровном месте. Как не сложно догадаться, величина этого тока составляла до 0,64 мА при питании напряжением три вольта. Третье. Я никак не выключал свои периферийные устройства. Трансивер nRF24L01+ в режиме PowerDown потребляет до 0.9 мкА, а датчик DS18B20 до 1 мкА, что в сумме дает 2 мкА. Четвертое. Для такого класса устройств DS18B20 вообще не подходит. Абсолютно не интересный диапазон питающих напряжений (хоть у меня он и работал при 2.7в, но это не показатель. Ведь напряжение у литиевой батарейки может проседать до 2 вольт без снижения отдаваемого тока), очень длительный период измерения - до 750 мс, потребляемый ток при этом доходит до 1.5 мА. Программные ошибки Я работал на внешнем кварце 8 МГц при этом никак не снижая частоту. У меня был включен BOD, который останавливал работу МК при напряжении на батарее 2.7в. И вроде как я его программно выключал, но в устройствах подобного класса он не нужен вообще. Тем более, что он и кушает также прилично. Я работал с датчиком DS18B20 в абсолютно дичайшем режиме - все необходимые паузы были организованы с помощью delay_us(), Один только сброс в 480 мкс поднимал с пола озвученные выше 0.6 мА и заставлял МК нопить. Ну и реализация всего протокола общения с этим датчиком реализована в таком же ключе. Это сегодня я бы попробовал реализовать этот протокол через USI или более экономичным способом. А тогда мне было важно всё это дело запустить, ну а оптимизация потом... Работа с трансивером nRF24L01+ была организована по образцу из какого-то проекта. А так как я тогда ещё не умел жонглировать регистрами (с), то кусок кода был выдран из проекта полностью. А трансивер там работал с подтверждением приема, ну и в нагрузку ещё проверялся буфер приемника, хотя никаких данных с пакетом подтверждения я не отправлял (прим. ну разумеется - я ж не умел ещё тогда жонглировать регистрами (с)). Пакеты с данными слались раз в 8-9 секунд (максимальный период вачдога у МК atmega). Для монитора окружающей температуры так часто не нужно. Сам код был написан самым не оптимальным образом несмотря на глубокий сон везде, где только можно. Результат ошибок Всё это вкупе приводило к тому, что литиевая батарейка 123A за почти полтора года проседала с 3.0 до 2.7 вольт. Ну а дальше привет BOD и сушим весла. Такой разряд батареи - это не то, чтобы немного - это даже слишком.
  3. Kirill Lubinets

    STM32f303vc NRF24l01+

    Надо с stm32f303vc отправить массив через SPI на радио модуль nRF24l01+ и принять другим nRF24l01+, сохранить изменения в другой массив). Эту удачную передачу отметить активацией светодиода (их на отладке 8 штук). Кон фигурирую проект в CubeMX Компилирую и занимаюсь отладкой в EWARM P.S. В сети есть пара примеров, но они не взаимодействуют с библиотекой HAL, а значит надо всё переписывать. P.S.S. даташиты изучаю, но там такое количество битов и регистров что я в них банально путаюсь. Ссылка на мои старания, но без успешные. https://1drv.ms/f/s!Ann2CRUC07O49m1X_PqH1Q7AsPQ4
  4. igor_ryzhov

    проблема с nrf24l01

    Здравствуйте! Уже неделю пытаюсь запустить данный радиомодуль, но пока безуспешно. Для начала решил проверить работает ли SPI. Контроллер атмега8. Проблема заключается в том, что я не могу записать регистр в нрф, то есть я записываю туда какое - то значение, в пределах допустимого, например в регистр RF_CH записываю 25, затем считываю этот регистр и если там хранится 25, то должен загореться светодиод, но фиг там.. Пробовал тоже самое с регистром STATUS, та же беда... В чем может быть проблема? Запись и чтение реализовано с помощью функций write_register и read_register соответственно. Светодиод висит на PB1 #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #define CE PC0 #define IRQ PC2 #define MOSI PB3 #define MISO PB4 #define SCK PB5 #define SS PB2 #define R_REGISTER 0x00 // + n Прочитать регистр n #define W_REGISTER 0x20 // + n Записать регистр n #define R_RX_PAYLOAD 0x61 // Принять данные данные из верхнего слота очереди приёмника. После чтения, данные из очереди удаляются #define W_TX_PAYLOAD 0xA0 // Записать в очередь передатчика данные для отправки #define FLUSH_TX 0xE1 // Сбросить очередь передатчика #define FLUSH_RX 0xE2 // Сбросить очередь приёмника #define REUSE_TX_PL 0xE3 // Использовать повторно последний переданный пакет #define R_RX_PL_WID 0x60 // Прочитать размер данных принятого пакета в начале очереди приёмника. Значение больше 32, означает ошибку приёма, пакет должен быть удалён командой FLUSH_RX #define W_ACK_PAYLOAD 0xA8 // + p Записать данные для отправки с пакетом подтверждения по каналу p. При этом бит EN_ACK_PAY в регистре FEATURE должен быть установлен #define W_TX_PAYLOAD_NOACK 0xB0 // Записать в очередь передатчика данные для отправки, для которых не требуется подтверждение приёма. #define NOP 0xFF // Нет операции. Может быть использовано для чтения регистра статуса /* Регистры */ #define CONFIG 0x00 // Регистр настроек #define EN_AA 0x01 // Выбор автоподтверждения #define EN_RXADDR 0x02 // Выбор каналов приёмника #define SETUP_AW 0x03 // Настройка размера адреса #define SETUP_RETR 0x04 // Настройка повторной отправки #define RF_CH 0x05 // Номер радиоканала, на котором осуществляется работа. От 0 до 125. Несущая частота равна 2400 + номер_канала МГц #define RF_SETUP 0x06 // Настройка радиоканала #define STATUS 0x07 // Регистр статуса. Значение регистра статуса также передаётся к МК по SPI, одновременно с передачей от МК байта команды #define OBSERVE_TX 0x08 // Количество повторов передачи и потерянных пакетов #define RPD 0x09 // Мощность принимаемого сигнала. Если младший бит = 1, то уровень сигнала более -64dBm #define RX_ADDR_P0 0x0A // 3-5 байт (начиная с младшего байта). Адрес канала 0 приёмника. При использовании в режиме передатчика, этот адрес должен быть равен TX_ADDR, для использования автоподтверждения приёма #define RX_ADDR_P1 0x0B // 3-5 байт (начиная с младшего байта). Адрес канала 1 приёмника, одновременно задаёт старшие байты адресов каналов 2 - 5. #define RX_ADDR_P2 0x0C // Младший байт адреса канала 2 приёмника. Старшие байты соответствуют значению старших байт в регистре RX_ADDR_P1 #define RX_ADDR_P3 0x0D // Младший байт адреса канала 3 приёмника. Старшие байты соответствуют значению старших байт в регистре RX_ADDR_P1 #define RX_ADDR_P4 0x0E // Младший байт адреса канала 4 приёмника. Старшие байты соответствуют значению старших байт в регистре RX_ADDR_P1 #define RX_ADDR_P5 0x0F // Младший байт адреса канала 5 приёмника. Старшие байты соответствуют значению старших байт в регистре RX_ADDR_P1 #define TX_ADDR 0x10 // 3-5 байт (начиная с младшего байта). Адрес устройства, которому осуществляется передача #define RX_PW_P0 0x11 // Размер данных при приёме по каналу 0: от 1 до 32. 0 - канал не используется. #define RX_PW_P1 0x12 // Размер данных при приёме по каналу 1: от 1 до 32. 0 - канал не используется. #define RX_PW_P2 0x13 // Размер данных при приёме по каналу 2: от 1 до 32. 0 - канал не используется. #define RX_PW_P3 0x14 // Размер данных при приёме по каналу 3: от 1 до 32. 0 - канал не используется. #define RX_PW_P4 0x15 // Размер данных при приёме по каналу 4: от 1 до 32. 0 - канал не используется. #define RX_PW_P5 0x16 // Размер данных при приёме по каналу 5: от 1 до 32. 0 - канал не используется. #define FIFO_STATUS 0x17 // Состояние очередей FIFO приёмника и передатчика #define DYNPD 0x1C // Выбор каналов приёмника для которых используется режим произвольной длины пакетов. #define FEATURE 0x1D // Регистр опций /* Биты регистров */ // CONFIG #define MASK_RX_DR 6 // Запрещает прерывание по RX_DR (получение пакета) #define MASK_TX_DS 5 // Запрещает прерывание по TX_DS (завершение отправки пакета) #define MASK_MAX_RT 4 // Запрещает прерывание по MAX_RT (превышение числа повторных попыток отправки) #define EN_CRC 3 // Включает CRC #define CRCO 2 // Размер поля CRC: 0 - 1 байт; 1 - 2 байта #define PWR_UP 1 // Включение питания #define PRIM_RX 0 // Выбор режима: 0 - PTX (передатчик) 1 - PRX (приёмник) // EN_AA #define ENAA_P5 5 // Включает автоподтверждение данных, полученных по каналу 5 #define ENAA_P4 4 // Включает автоподтверждение данных, полученных по каналу 4 #define ENAA_P3 3 // Включает автоподтверждение данных, полученных по каналу 3 #define ENAA_P2 2 // Включает автоподтверждение данных, полученных по каналу 2 #define ENAA_P1 1 // Включает автоподтверждение данных, полученных по каналу 1 #define ENAA_P0 0 // Включает автоподтверждение данных, полученных по каналу 0 // EN_RXADDR #define ERX_P5 5 // Включает канал 5 приёмника #define ERX_P4 4 // Включает канал 4 приёмника #define ERX_P3 3 // Включает канал 3 приёмника #define ERX_P2 2 // Включает канал 2 приёмника #define ERX_P1 1 // Включает канал 1 приёмника #define ERX_P0 0 // Включает канал 0 приёмника // SETUP_AW #define AW 0 // Два бита, Выбирает ширину поля адреса: 1 - 3 байта; 2 - 4 байта; 3 - 5 байт. 0 - недопустимое значение #define SETUP_AW_3BYTES_ADDRESS (1 << AW) #define SETUP_AW_4BYTES_ADDRESS (2 << AW) #define SETUP_AW_5BYTES_ADDRESS (3 << AW) // SETUP_RETR #define ARD 4 // 4 бита. Задаёт значение задержки перед повторной отправкой пакета, 0 - 250мкс, 1 - 500мкс, 2 - 750мкс, ..., 15 - 4000мкс #define ARC 0 // 4 битай. Количество повторных попыток отправки. 0 - отключено, 1 - до 1 попытки, ..., 15 - до 15 попыток #define SETUP_RETR_DELAY_250MKS (0 << ARD) #define SETUP_RETR_DELAY_500MKS (1 << ARD) #define SETUP_RETR_DELAY_750MKS (2 << ARD) #define SETUP_RETR_DELAY_1000MKS (3 << ARD) #define SETUP_RETR_DELAY_1250MKS (4 << ARD) #define SETUP_RETR_DELAY_1500MKS (5 << ARD) #define SETUP_RETR_DELAY_1750MKS (6 << ARD) #define SETUP_RETR_DELAY_2000MKS (7 << ARD) #define SETUP_RETR_DELAY_2250MKS (8 << ARD) #define SETUP_RETR_DELAY_2500MKS (9 << ARD) #define SETUP_RETR_DELAY_2750MKS (10 << ARD) #define SETUP_RETR_DELAY_3000MKS (11 << ARD) #define SETUP_RETR_DELAY_3250MKS (12 << ARD) #define SETUP_RETR_DELAY_3500MKS (13 << ARD) #define SETUP_RETR_DELAY_3750MKS (14 << ARD) #define SETUP_RETR_DELAY_4000MKS (15 << ARD) #define SETUP_RETR_NO_RETRANSMIT (0 << ARC) #define SETUP_RETR_UP_TO_1_RETRANSMIT (1 << ARC) #define SETUP_RETR_UP_TO_2_RETRANSMIT (2 << ARC) #define SETUP_RETR_UP_TO_3_RETRANSMIT (3 << ARC) #define SETUP_RETR_UP_TO_4_RETRANSMIT (4 << ARC) #define SETUP_RETR_UP_TO_5_RETRANSMIT (5 << ARC) #define SETUP_RETR_UP_TO_6_RETRANSMIT (6 << ARC) #define SETUP_RETR_UP_TO_7_RETRANSMIT (7 << ARC) #define SETUP_RETR_UP_TO_8_RETRANSMIT (8 << ARC) #define SETUP_RETR_UP_TO_9_RETRANSMIT (9 << ARC) #define SETUP_RETR_UP_TO_10_RETRANSMIT (10 << ARC) #define SETUP_RETR_UP_TO_11_RETRANSMIT (11 << ARC) #define SETUP_RETR_UP_TO_12_RETRANSMIT (12 << ARC) #define SETUP_RETR_UP_TO_13_RETRANSMIT (13 << ARC) #define SETUP_RETR_UP_TO_14_RETRANSMIT (14 << ARC) #define SETUP_RETR_UP_TO_15_RETRANSMIT (15 << ARC) // RF_SETUP #define CONT_WAVE 7 // (Только для nRF24L01+) Непрерывная передача несущей (для тестов) #define RF_DR_LOW 5 // (Только для nRF24L01+) Включает низкую скорость передачи 250кбит/с. При этом бит RF_DR_HIGH должен быть 0 #define PLL_LOCK 4 // Для тестов #define RF_DR_HIGH 3 // Выбор скорости обмена (при значении бита RF_DR_LOW = 0): 0 - 1Мбит/с; 1 - 2Мбит/с #define RF_PWR 1 // 2бита. Выбирает мощность передатчика: 0 - -18dBm; 1 - -16dBm; 2 - -6dBm; 3 - 0dBm #define RF_SETUP_MINUS18DBM (0 << RF_PWR) #define RF_SETUP_MINUS12DBM (1 << RF_PWR) #define RF_SETUP_MINUS6DBM (2 << RF_PWR) #define RF_SETUP_0DBM (3 << RF_PWR) #define RF_SETUP_1MBPS (0 << RF_DR_HIGH) #define RF_SETUP_2MBPS (1 << RF_DR_HIGH) #define RF_SETUP_250KBPS (1 << RF_DR_LOW) // этот режим не должен использоваться с автоматическим контролем отправки // STATUS #define RX_DR 6 // Флаг получения новых данных в FIFO приёмника. Для сброса флага нужно записать регистр со значением этого бита 1 #define TX_DS 5 // Флаг завершения передачи. Для сброса флага нужно записать регистр со значением этого бита 1 #define MAX_RT 4 // Флаг превышения установленного числа повторов. Без сброса этого флага дальнейший радиообмен не возможен. Для сброса флага нужно записать регистр со значением этого бита 1. Передаваемые данные остаются в очереди, их можно удалить командой FLUSH_TX #define RX_P_NO 1 // 3 бита. Номер канала, данные для которого доступны в FIFO приёмника: 0 - канал 0, ..., 5 - канал 5, 7 - FIFO приёмника пусто. #define TX_FULL_STATUS 0 // Признак заполнения FIFO передатчика: 1 - FIFO передатчика заполнено; 0 - есть доступные слоты (переименовано из TX_FULL во избежание путаницы с одноимённым битом из регистра FIFO_STATUS) // OBSERVE_TX #define PLOS_CNT 4 // 4 бита. Общее количество пакетов без подтверждения. Не меняется после достижения 15. Сбрасывается записью регистра RF_CH #define ARC_CNT 0 // 4 бита. Количество предпринятых повторов при последней отправке. Сбрасывается при начале отправки следующего пакета // FIFO_STATUS #define TX_REUSE 6 // Признак готовности последнего пакета для повтрной отправке. Устанавливается командой REUSE_TX_PL #define TX_FULL_FIFO 5 // Флаг переполнения FIFO очереди передатчика: 0 - есть свободное место в очереди; 1 - очередь переполнена (переименовано из TX_FULL во избежание путаницы с одноимённым битом из регистра STATUS) #define TX_EMPTY 4 // Флаг освобождения FIFO очереди передатчика: 0 - в очереди есть данные; 1 - очередь пуста #define RX_FULL 1 // Флаг переполнения FIFO очереди приёмника: 0 - есть свободное место в очереди; 1 - очередь переполнена #define RX_EMPTY 0 // Флаг освобождения FIFO очереди приёмника: 0 - в очереди есть данные; 1 - очередь пуста // DYNDP #define DPL_P5 5 // Включает приём пакетов произвольной длины по каналу 5 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P5 в регистре EN_AA) #define DPL_P4 4 // Включает приём пакетов произвольной длины по каналу 4 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P4 в регистре EN_AA) #define DPL_P3 3 // Включает приём пакетов произвольной длины по каналу 3 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P3 в регистре EN_AA) #define DPL_P2 2 // Включает приём пакетов произвольной длины по каналу 2 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P2 в регистре EN_AA) #define DPL_P1 1 // Включает приём пакетов произвольной длины по каналу 1 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P1 в регистре EN_AA) #define DPL_P0 0 // Включает приём пакетов произвольной длины по каналу 0 (должы быть установлены биты EN_DPL в регистры FEATURE и ENAA_P0 в регистре EN_AA) // FEATURE #define EN_DPL 2 // Включает поддержку приёма и передачи пакетов произвольной длины #define EN_ACK_PAY 1 // Разрешает передачу данных с пакетами подтверждения приёма #define EN_DYN_ACK 0 // Разрешает использование W_TX_PAYLOAD_NOACK ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //uint8_t mas[5]; //uint8_t dataOnTheModule[5] = { 254, 254, 254, 254, 254}; uint8_t read_register(uint8_t address) //чтение байта из оз, address -адрес байта { address = address | R_REGISTER; PORTB &=~(1 << SS); //Прижимаем вывод CSN к земле, тем самым сообщаем о начале обмена данных. SPDR = address; while (SPSR & (1 << SPIF));//ожидаем когда освободится SPI для последующей записи байта if (!(address == STATUS)) { SPDR = NOP; while (SPSR & (1 << SPIF)); } PORTB |= (1 << SS);//Вывод CSN(SS) МК к питанию, обмен данных завершен. return SPDR; } void write_register(uint8_t address, uint8_t data) //адрес регистра,что пишем в регистр. { address = address | W_REGISTER; //накладываем маску PORTB &=~(1 << SS); SPDR = address; while (SPSR & (1 << SPIF)); SPDR = data; while (SPSR & (1 << SPIF)); address = SPDR; //это для сброса флага SPIF PORTB |= (1 << SS); } //void read_several_registers(uint8_t address, uint8_t *buff, uint8_t size_reg) //чтение мнoгобайтового регистра, address - адрес байта { address = address | W_REGISTER; PORTB &=~(1 << SS); //Прижимаем вывод CSN к земле, тем самым сообщаем о начале обмена данных. SPDR = address; while (SPSR & (1 << SPIF));//ожидаем когда освободится SPI для последующей записи байта while(size_reg--) { SPDR = NOP; while (SPSR & (1 << SPIF)); *buff = SPDR; *buff++; } address = SPDR; //для сброса флага SPIF PORTB |= (1 << SS);//Вывод CSN(SS) МК к питанию, обмен данных завершен. } //void write_several_registers(uint8_t address, uint8_t *data, uint8_t size_reg)//адрес регистра, что пишем в регистр, размер регистра в байтах { address = address | W_REGISTER; //накладываем маску и отправляем адрес, в который хотим записать PORTB &=~(1 << SS); SPDR = address; while (SPSR & (1 << SPIF)); while(size_reg--) { SPDR = *data; while (SPSR & (1 << SPIF)); *data++; } address = SPDR; //это для сброса флага SPIF PORTB |= (1 << SS); } //char writebyte(unsigned char cData) { SPDR = cData; while(!(SPSR & (1<<SPIF))); return SPDR; } //uint8_t readreg (uint8_t reg) { _delay_us(10); PORTB &=~(1 << SS); _delay_us(10); writebyte(R_REGISTER+reg); _delay_us(10); reg = writebyte(NOP); _delay_us(10); PORTB |= (1 << SS); return reg; } int main(void) { SPCR = (1 << SPE) | (1 << MSTR); // режим 0, мастер, частота 1/4 от частоты ЦП DDRC |= (1<<CE); DDRC &=~(1<<IRQ); DDRB |= (1<<SCK)|(1<<MOSI)|(1<<SS)|(1<<PB1); DDRB &=~(1<<MISO); PORTB |= (1<<SS); write_register(RF_CH, 25); if(read_register(RF_CH) == 25) { PORTB |= (1<<PB1); } while(1) { } }
×
×
  • Создать...