roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 17:18

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 18 ноя 2012, 20:34 
Не в сети
Аватара пользователя

Зарегистрирован: 29 сен 2012, 14:41
Сообщения: 40
прог. языки: C\C++, AutoIt, PHP
Всем доброго времени суток.

Захотелось поднять беспроводной канал связи (хочу по нему температуру с DHT22\AM2303 передавать). Заказал для этих целей пару трансиверов nRF24L01+ (eBay, ДШ). Полез в даташит, а он - 78стр... Беглое чтение дало понять, что работает по SPI, есть куча фич (125каналов, автосборка-разборка пакета, возможность принимать от 6 девайсов параллельно, проверка на правильность). Но как с ним работать - так и не понял... Даже проверить не могу. Нашел либу на С, но она под WinAVR и под обычную (не +) версию... В рунете про нее очень мало, на англоязычных тоже шаром покати (ну или я ищу неправильно...)

Подскажите пожалуйста, как с ним работать? Я так понял, под SPI придется писать свою либу (в встроенной только одна функция, сразу пишет и читает по 1 байту, а там нек. данные (адреса например) - 5 байт) нашел подходящую. Может, есть какие-то готовые либы под данный трансивер, или хотя бы примеры приема\передачи?

Заранее спасибо.


Последний раз редактировалось sky-walker 03 янв 2013, 02:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+...
СообщениеДобавлено: 19 ноя 2012, 12:04 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
обычный spi радиоудлинитель только с буферизацией и своим протоколом общения
как я понял DHT22 это 1-wire устройство , т.е. контроллер надо ставить на двух сторонах, на стороне датчика для конвертации из 1-wire to spi

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+...
СообщениеДобавлено: 19 ноя 2012, 13:44 
Не в сети
Аватара пользователя

Зарегистрирован: 29 сен 2012, 14:41
Сообщения: 40
прог. языки: C\C++, AutoIt, PHP
Про DHT я разобрался давно, он у меня работает.
Спасибо, буду пробовать подключать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+...
СообщениеДобавлено: 19 ноя 2012, 20:58 
Не в сети
Аватара пользователя

Зарегистрирован: 29 сен 2012, 14:41
Сообщения: 40
прог. языки: C\C++, AutoIt, PHP
Так, регистры считывать научился, уже хорошо :)
Вроде SPI работает в режиме 0, макс. скорость не выяснил, стоит максимально доступная в codeWizard - 2МГц (без "x2" флага).
Попробую что-нибудь записать, и, собственно, осуществить передачу...

Romikgy писал(а):
контроллер надо ставить на двух сторонах, на стороне датчика для конвертации из 1-wire to spi

Что-то не сразу въехал, медленный сегодня... Да, это само собой. Планирую что-нибудь с малыми энергозатратами - может тиньку какую, или мегу с L на конце...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+...
СообщениеДобавлено: 21 ноя 2012, 14:04 
Не в сети
Аватара пользователя

Зарегистрирован: 29 сен 2012, 14:41
Сообщения: 40
прог. языки: C\C++, AutoIt, PHP
Запустил, ура! За основу взял либу от Tinkerer, немного переделал. Сейчас буду добавлять функций для удобной работы... Тему можно считать закрытой (но как допишу либу, сюда скину).

UPD (03.01.13): Появилось свободное время и интерес - взялся наконец за либу. Пока реализовал: настройку скорости, мощности, канала, размера payload для каждой pipe, количество и время задержки для retransmit.
Следующие приоритетные вещи: разрешение\запрет pipe1-5, динамический размер payload, считывание приемных буферов с pipe1-5 (сейчас только p0), улучшение кода прерывания (тогда и функция mirf_data_ready отпадет, и проверка успешной передачи будет), режим работы библиотеки без прерывания (мало ли - нога занята и т.д., все функции будут блокирующими), возможность выбора порта для CSN и CS. Как доделаю все это - выложу сюда промежуточную версию. А то в инете кроме библиотеки Tinkerer'а (я на его основе делаю) - ничего нет...

И кстати, с Новым Годом! :beer:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 04 сен 2013, 03:10 
Не в сети

Зарегистрирован: 04 сен 2013, 03:07
Сообщения: 1
sky-walker Здравствуйте, я вот почитал вашу тему, и у меня вопрос, у вас получилось с бибилиотекой на CodeVisionAvr? Если да то пожалуйста поделитесь... очень прошу... unu@mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 02 апр 2014, 14:06 
Не в сети

Зарегистрирован: 02 апр 2014, 14:04
Сообщения: 1
Здравствуйте! Поделитесь библиотекой(проектом) под CodeVisionAvr пожалуйста! Сбросьте в личку или здесь приложите. СПАСИБО!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 24 апр 2014, 02:56 
Не в сети

Зарегистрирован: 24 апр 2014, 02:46
Сообщения: 42
Откуда: Санкт-Петербург
прог. языки: С
А можно и мне, пожалуйста? :roll:
Asondo.kun@gmail.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 25 апр 2014, 09:08 
Не в сети

Зарегистрирован: 25 апр 2014, 09:04
Сообщения: 1
И мне сбросьте, пожалуйста?
AV89@yandex.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 09:57 
Не в сети

Зарегистрирован: 24 апр 2014, 02:46
Сообщения: 42
Откуда: Санкт-Петербург
прог. языки: С
Скачал либу Tinkener'a, все поставил. Отредактировал файлик. Все компилится. Ща буду экспериментировать. Код для radioPinFunctions.c получился такой:
Код:
//#include <avr/io.h>

#define set_bit(reg,bit) reg |= (1<<bit)
#define clr_bit(reg,bit) reg &= ~(1<<bit)
#define check_bit(reg,bit) (reg&(1<<bit))

/* ------------------------------------------------------------------------- */
void nrf24_setupPins()
{
    DDRB=0b101110;
    /*
    set_bit(DDRA,0); // PB2 CE output
    set_bit(DDRA,1); // PB1 CSN output
    set_bit(DDRA,2); // PB5 SCK output
    set_bit(DDRA,3); // PB3 MOSI output
    clr_bit(DDRA,4); // PB4 MISO input
    */
}
/* ------------------------------------------------------------------------- */
void nrf24_ce_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.2=1;
    }
    else
    {
        PORTB.2=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_csn_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.1=1;
    }
    else
    {
        PORTB.1=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_sck_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.5=1;
    }
    else
    {
        PORTB.5=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_mosi_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.3=1;
    }
    else
    {
        PORTB.3=0;
    }
}
/* ------------------------------------------------------------------------- */
uint8_t nrf24_miso_digitalRead()
{
    return PINB.4;
}
/* ------------------------------------------------------------------------- */



Настраивается все как-то так уже в void main(void) :)
Код:
/* Настройка nRF24 */
nrf24_init();
nrf24_rx_address("serv1"); //адрес приемника
nrf24_tx_address("cli1");   //адрес кому отправлять будем
nrf24_config(2, 32);  //выбираем канал №2, и длину пакета в 32 байта


Добавлено спустя 2 часа 21 минуту 50 секунд:
Так. Все завелось. Итого результаты такие.
Вот код конфигурации для mega328p в файле radioPinFunctions.c:
Код:
#define set_bit(reg,bit) reg |= (1<<bit)
#define clr_bit(reg,bit) reg &= ~(1<<bit)
#define check_bit(reg,bit) (reg&(1<<bit))

/* ------------------------------------------------------------------------- */
void nrf24_setupPins()
{
    DDRB.2=1;
    DDRB.1=1;
    DDRB.5=1;
    DDRB.3=1;
    DDRB.4=0;
    /*
    set_bit(DDRA,0); // PB2 CE output
    set_bit(DDRA,1); // PB1 CSN output
    set_bit(DDRA,2); // PB5 SCK output
    set_bit(DDRA,3); // PB3 MOSI output
    clr_bit(DDRA,4); // PB4 MISO input
    */
}
/* ------------------------------------------------------------------------- */
void nrf24_ce_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.2=1;
    }
    else
    {
        PORTB.2=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_csn_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.1=1;
    }
    else
    {
        PORTB.1=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_sck_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.5=1;
    }
    else
    {
        PORTB.5=0;
    }
}
/* ------------------------------------------------------------------------- */
void nrf24_mosi_digitalWrite(uint8_t state)
{
    if(state)
    {
        PORTB.3=1;
    }
    else
    {
        PORTB.3=0;
    }
}
/* ------------------------------------------------------------------------- */
uint8_t nrf24_miso_digitalRead()
{
    return PINB.4;
}


Используемые либы; не забываем в свойствах проекта указать пути к библиотеке. Файл radioPinFunctions.c лежит где-то в примерах, я его выкинул в корень либы и вытаскиваю оттуда:
Код:
#include <mega328p.h>
#include <delay.h>
#include <stdio.h>
#include <nrf24.h>
#include <radioPinFunctions.c>


Настраиваем передатчик в void mai(void):
Код:
/* Настройка nRF24 */
nrf24_init();
nrf24_rx_address("serv1"); //адрес приемника
nrf24_tx_address("cli1");   //адрес кому отправлять будем
nrf24_config(2, 32);  //выбираем канал №2, и длину пакета в 32 байта


Как выглядит передача данных:
Код:
nrf24_send("banana"); //отправляем строку
while(nrf24_isSending()); //ждем пока отправится. Бесконечные циклы это зло, не забудьте создать таймаут


Прием данных:
Код:
nrf24_powerUpRx(); //выводим и спячки и говорим "Слушай!"
while(!nrf24_dataReady()); //ждем пока придут данные
nrf24_getData(data_array); //вытаскиваем данные из буфера


Бонусные вкусности:
Код:
var = nrf24_lastMessageStatus(); //возвращает 1 если в последний раз все отправилось успешно
var = nrf24_retransmissionCount(); //возвращает количество попыток отправить ушедший пакет
nrf24_powerDown(); //отправляет модуль спать


Пока все. Курю мануалы дальше 8)

Добавлено спустя 49 минут 35 секунд:
Теперь у меня вопрос :)

А кто-нибудь игрался с адресами? Или делал ретранслятор?

Ну допустим. Есть сеть, в которой несколько клиентов, сервер и ретранслятор.

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

Как реализовать проверку адресов уже на месте, без автоматической проверки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 10:52 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Подтверждения не нужны, это всё есть в железке, надо только включить настройки правильно (и CRC тоже). Выглядит это всё просто, отправляешь данные и считываешь регистр состояния по прерыванию, там сразу ясно становится, данные отправлены/приняты корректно или нет.

Проблема с адресацией модулей имеется, на эту тему долго размышлял, сложность вся в том, что модули на себя берут только 50% рутины. Если в сети будет более одного устройства с одинаковыми адресами, то данные примут все, но подтвердить получение у них не получится, т.к. адресация одна (все откликнуться). Автоматическую адресацию делать практически не реально, всё сводится к ручной выдачи адреса (PID). Можно попытаться организовать авто раздачу адресов в сети, но будет жесткое ограничение, на единицу времени может подключаться только одно устройство! Если сразу включится много устройств, то будет опять клин и всё потому, что трансивер/ресивер разные блоки в чипе...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 11:04 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Советую делать мешь сеть или что-то мульти-точечное, а не точка точка.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 18:10 
Не в сети

Зарегистрирован: 24 апр 2014, 02:46
Сообщения: 42
Откуда: Санкт-Петербург
прог. языки: С
Нет, ну вот есть же функция ретранслятора. То есть в теории модуль может принять данные от любого девайса, и потом их же нужному адресу кинуть в воздух, в этом время данные все хранятся в FIFO, и их оттуда реально стянуть...
Можно же как-то выйти на ручное управление и выключить авто подтверждения и прочие вещи. В датащите я уже перекопал все, но формулировки какие-то слишком расплывчатые

Добавлено спустя 9 минут 59 секунд:
Нет, ну в принципе, одинаковые адреса это можно обойти. Другой вопрос, а вот прислал мне допустим клиент какие-то данные. Я могу откуда-то вытащить адрес этого клиента? Чтобы после обработки данных я мог вернуть какие значения тому, кто их запросил. Или придется обратный адрес включать в пакет данных дополнительно?

И еще надо подумать как обойти конфликт двух серверов, если они окажутся в области видимости )

Вот, еще вопрос появился. В теории, судя по датащиту, я могу запустить на стороне сервера аж 6 параллельных уха, и каждое могу настроить на свой адрес и канал, кто-нибудь пробовал реализовать? Часть конфликтов по крайней мере может решится так. Если канал в данный момент занят переходит на другой и передаем серверу тож самое

Добавлено спустя 35 минут 15 секунд:
:pardon:

Добавлено спустя 11 минут 5 секунд:
avr123.nm.ru писал(а):
Советую делать мешь сеть или что-то мульти-точечное, а не точка точка.



А какие-нибудь примеры можете привести? :roll:


Вложения:
Комментарий к файлу: Вот это не то, что мне нужно? :)
мкуц.PNG
мкуц.PNG [ 31.36 КиБ | Просмотров: 8468 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 18:19 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
вот из моих заметок:

mesh xbee стек RFM22B RFM23B Si4430 RF22 Arduino atmega328 - http://www.airspayce.com/mikem/arduino/RF22/index.html

RFBee RF module Arduino Atmega168 и CC1101 RF transceiver
http://www.seeedstudio.com/depot/RFbee- ... p-614.html

ZigBee модули Telit mesh на CC2430 протокол симплисити www.ti.com

MESH-протокол с открытым кодом для Интернета вещей Thingsquare

аппаратные сети радио-чипы соки:

zigbee mesh чип ATmega256RFR2 atmel http://www.atmel.com/devices/ATMEGA256RFR2.aspx

mesh чип http://www.analog.com/static/imported-f ... DF7023.pdf

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: cvAVR + nRF24L01+ (разрабатывается библиотека)
СообщениеДобавлено: 27 апр 2014, 20:54 
Не в сети

Зарегистрирован: 24 апр 2014, 02:46
Сообщения: 42
Откуда: Санкт-Петербург
прог. языки: С
Madf писал(а):
Если в сети будет более одного устройства с одинаковыми адресами, то данные примут все, но подтвердить получение у них не получится, т.к. адресация одна (все откликнуться).

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO