Поигравшись некоторое время с nRF24 пришел к выводу, что 2.4ГГц это плохо, слишком тесный диапазон, и постоянно все мешает. Дабы не извращаться с проверками и прыжками по каналам решил попробовать с модулями nRF905 на 433/869/915МГц
Как выяснилось библиотеки на них нет, так что пришлось уйти с головой в мануалы и датащиты. Модули, к слову, весьма вкусные, у них правда нет автоматического подтверждения и возможности принимать сразу под 6 пакетов, а ножек чуть ли не вдвое больше, но зато никаких помех, к тому же они в разы мощнее.
Минусов как и плюсов достаточно, хоть я еще не до конца во всем разобрался. Так или иначе, для тестов пришлось написать свою библиотеку под CodeVision AVR (если слегка допилить один файл, то и на GCC AVR встанет без проблем). Решил просто поделиться заготовкой. Я ее еще в процессе скорее всего допилю, но может кому-то она уже облегчит жизнь сейчас, и он сможет внести какие-то свои коррективы. SPI софтовый, взял реализацию от Tinker из либы на nRF24
Так, описание функций, которыми надо пользоваться:
- Код: Выделить всё • Развернуть
nrf905_init(); //инициализируем софтовый SPI
nrf905_config(116,32,MODE0); //выбираем канал 116, длину пакета 32 байта, и Mode0
//MODE0 : полоса 433МГц
//MODE1 : полоса 869/915МГц
//Формула такая: f=(422.3+CH_NO/10)*(1+MODEX): где MODE0=0&MODE1=1, CH_NO - номер канала
nrf905_rx_address("SERV"); //адрес нашего приемника
nrf905_tx_address("CLIE"); //адрес устройства, которому будем слать
nrf905_powerUpRx(); //включаем режим прослушки
nrf905_send("Any data you want"); //любая строка до 32 байт длиной
У модуля отдельно выведены ножки для индикации новых данных, занятости радиоканала в данный момент времени, совпадение адреса посылки с адресом приемника, что избавляет от необходимости ползать в регистры nRF905 и узнавать что там у нас случилось. В общем, пользуйтесь на здоровье, пожеланий и предложения приветствуются