Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь.

Ответ
Опции темы
Непрочитано 26.04.2013, 09:48   #611
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Сообщение от niXto Посмотреть сообщение
С чего вы взяли, что скачет? Какую установлю командами, такая и будет. Только если кварц поплывет...

Чип заточен под 50 Ом, то есть под 1/4. У 5/8 если не ошибаюсь, 75 Ом, без балуна хорошо работать не будет
Ну да. У меня опыта ноль на этих частотах, но на метровых и дециметровых балун не сложен - катушка согласования. Наверное и здесь что-то подобное пройдет.
Насчет "скачет" - вы же сами сказали "какую установлю". Разве это не "скачет", подстраивать не придется? Или полоса антенны такая, что эти скачки в нее укладываются? Я не знаю.
Реклама:
__________________
С уважением,
Vic / ut1wpr

Последний раз редактировалось ut1wpr; 26.04.2013 в 09:51.
ut1wpr вне форума   Ответить с цитированием
Непрочитано 26.04.2013, 12:00   #612
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Частота задается цифровым способом - записью в специальный регистр определенного числа. У меня трансиверы работают на одной частоте, т.е. в этот регистр записывается одно и то же число, и "скачет" она максимум на 100...200 кГц, иначе трансиверы просто не увидят друг друга

Балун конечно пройдет, но много нюансов, например, лишний 1 см дорожки - это уже 1/12 длины волны, т.е. фактически паразитная индуктивность - нужен сверхплотный монтаж на сверхминиатюрных деталях, чтобы окончательно не угробить параметры... Есть пьезокерамические балуны, но они тоже заточены под выходные 50 Ом
niXto вне форума   Ответить с цитированием
Непрочитано 28.04.2013, 20:42   #613
Pika4u56
Частый гость
 
Регистрация: 17.06.2010
Сообщений: 40
Сказал спасибо: 28
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Pika4u56 на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Итак, "И снова здравствуйте!". В общем,мудохаюсь с этими модулями вторую неделю. Библиотека Tinkerer прекрасно работала,но только до первого обрыв связи. FLUSH_TX посылается по дефолту в mirf_send(),так что этот вариант отпадает. Решил использовать простой и дубовый жизненный принцип:"мне пофиг на всех,я апельсин". смысл в том,что никаких ACK'ов, интерраптов и прочей ненужной фигни. Отрубил я ACK,отрубил прерывания, ну вы поняли. Испытал-вроде бы все классно. Однако, в рандомный момент передача может сдохнуть напрочь. Ладно,не в первой. Цепляю светодиоды на вывод меги и смотрю исполнение программы. Опытным путем установлено,что передача сдыхает на функции mirf_send(). То есть,МК в неё входит и все,приплыли,из неё уже не выбирается. Это что за прикол,интересно?))))Вот код:
Код меги,которая на UART:
Код:
#include "CPU_settings.h"
#include "makros.h"
#include "nrf24l01_register.h"
#include "UART.h"
#include "nrf24l01_function.h"
unsigned char rx_buffer[mirf_PAYLOAD];
unsigned char tx_buffer[mirf_PAYLOAD];
unsigned char trans=0;
unsigned char rec=0;
int main( void )
{
UART_init();
mirf_init();
delay_ms(1000);
mirf_config();
delay_ms(50);
__enable_interrupt();
for(unsigned char i=0;i‹mirf_PAYLOAD;i++)
{
tx_buffer[i]=0;
rx_buffer[i]=0;
}
while(1)
{
while(!mirf_data_ready());
mirf_get_data(rx_buffer);
SB(UCSRB,UDRIE);
delay_ms(3);
mirf_send(tx_buffer,mirf_PAYLOAD);
delay_ms(1);
RX_POWERUP;
mirf_config_register(STATUS,((1‹‹TX_DS)|(1‹‹MAX_RT)));  
delay_ms(1);
}
}
#pragma vector=USART_UDRE_vect 
__interrupt void Uart_UDRE(void)
{
UDR=rx_buffer[trans];
trans++;
if(trans==mirf_PAYLOAD)
{
CB(UCSRB,UDRIE);
for(char i=0;i‹mirf_PAYLOAD;i++)
rx_buffer[i]=0;
trans=0;
}
}
#pragma vector=USART_RXC_vect 
__interrupt void Uart_RX(void)
{
tx_buffer[rec]=UDR;
rec++;
if(rec==mirf_PAYLOAD)
rec=0;
}
Часть кода меги,которая на роботе:
Код:
receive[0]=0;
receive[1]=15;
mirf_send(tranceive,mirf_PAYLOAD);
DDRD_Bit1=1;
PORTD_Bit1=1;
delay_ms(1);
RX_POWERUP;
mirf_config_register(STATUS,(1‹‹TX_DS)|(1‹‹MAX_RT)); // Reset status register                
mirf_over=0;
while(mirf_data_ready()==0)
{
delay_ms(1);
mirf_over++;
if(mirf_over›20)
{
mirf_avaria=1;
DDRD_Bit0=1;
PORTD_Bit0=1;
break;
}
}
if(!mirf_avaria)
{
DDRD_Bit0=1;
PORTD_Bit0=0;
mirf_avaria=0;
mirf_get_data(receive);
switch(receive[0])
{
case 0:{brake(); break;}
case 1:{back_forward();break;}
case 2:{back_back();break;}
case 3:{brake();break;}
case 4:{back_brake_and_turn_left();break;}
case 5:{back_forward_and_turn_left();break;}
case 6:{back_back_and_turn_left();break;}
case 7:{brake();break;}
case 8:{back_brake_and_turn_right(); break;}
case 9:{back_forward_and_turn_right();break;}
case 10:{back_back_and_turn_right();break;}
case 11:{brake();break;}
case 12:{brake();break;}
case 13:{brake();break;}
case 14:{brake();break;}
case 15:{brake();break;}
}
if((receive[0]!=0)&&(receive[0]!=3)&&(receive[0]!=4)&&(receive[0]!=7)&&(receive[0]!=8)&&(receive[0]!=11)&&(receive[0]!=12)&&(receive[0]!=13)&&(receive[0]!=14)&&(receive[0]!=15))
engine_power=receive[1];
}
else
{
mirf_avaria=0;
brake();
}
tranceive_array_full();
delay_ms(period_interview);
DDRD_Bit1=1;
PORTD_Bit1=0;
Инициализация и измененные функции библиотеки:
Код:
#define mirf_CH         2
#define mirf_PAYLOAD    16
#define mirf_CONFIG     ( (1‹‹MASK_RX_DR) | (1‹‹EN_CRC) | (0‹‹CRCO) )
#define CE  0
#define CSN 1
#define mirf_CSN_hi     PORTB |=  (1‹‹CSN);
#define mirf_CSN_lo     PORTB &= ~(1‹‹CSN);
#define mirf_CE_hi      PORTB |=  (1‹‹CE);
#define mirf_CE_lo      PORTB &= ~(1‹‹CE);
#define TX_POWERUP mirf_config_register(CONFIG, mirf_CONFIG | ( (1‹‹PWR_UP) | (0‹‹PRIM_RX) ) )
#define RX_POWERUP mirf_config_register(CONFIG, mirf_CONFIG | ( (1‹‹PWR_UP) | (1‹‹PRIM_RX) ) )
void mirf_init();
void mirf_config();
void mirf_set_RADDR(unsigned char * adr);
void mirf_set_TADDR(unsigned char * adr);
unsigned char mirf_data_ready();
void mirf_get_data(unsigned char * data);
void mirf_config_register(unsigned char reg, unsigned char value);
void mirf_read_register(unsigned char reg, unsigned char * value, unsigned char len);
void mirf_write_register(unsigned char reg, unsigned char * value, unsigned char len);
void mirf_send(unsigned char * value, unsigned char len);
unsigned char TX_ADDRESS[5]={0xE7,0x2A,0xB4,0xCA,0xBA};
unsigned char RX_ADDRESS[5]={0xE7,0x2A,0xB4,0xCA,0xBA};
unsigned char mirf_avaria=0;

void mirf_init()
{
    DDRB |= ((1‹‹CSN)|(1‹‹CE));
    mirf_CE_lo;
    mirf_CSN_hi;
    spi_init();
}
void mirf_config() 

{

    mirf_config_register(RF_CH,mirf_CH);
  
    mirf_config_register(RX_PW_P0, mirf_PAYLOAD);//Объем буфера 10 байт
    mirf_config_register(CONFIG,((1‹‹MASK_RX_DR)|(1‹‹EN_CRC)|(1‹‹CRCO)));//Включить прерывание по передаче пакета,по превышению кол-ва попыток передачи,включить CRC
   mirf_config_register(RF_SETUP,(1‹‹1)|(1‹‹2)|(1‹‹5));//Мощность 0dBm
    mirf_config_register(EN_AA,~(1‹‹ENAA_P2));
    mirf_set_TADDR(TX_ADDRESS);
    mirf_set_RADDR(RX_ADDRESS);
    // Start receiver 
    RX_POWERUP;     // Power up in receiving mode
    mirf_CE_hi;     // Listening for pakets
}

void mirf_set_RADDR(unsigned char * adr) 
{
    mirf_CE_lo;
    mirf_write_register(RX_ADDR_P0,adr,5);
    mirf_CE_hi;
}

void mirf_set_TADDR(unsigned char * adr)
{
    mirf_write_register(TX_ADDR, adr,5);
}
unsigned char mirf_data_ready() 
{
    unsigned char status;
    // Read MiRF status 
    mirf_CSN_lo;                                // Pull down chip select
    status = spi_fast_shift(NOP);               // Read status register
    mirf_CSN_hi;                                // Pull up chip select
    return status & (1‹‹RX_DR);
}

void mirf_get_data(unsigned char * data) 
{
    mirf_CSN_lo;                               // Pull down chip select
    spi_fast_shift( R_RX_PAYLOAD );            // Send cmd to read rx payload
    spi_transfer_sync(data,data,mirf_PAYLOAD); // Read payload
    mirf_CSN_hi;                               // Pull up chip select
    mirf_config_register(STATUS,(1‹‹RX_DR));   // Reset status register
}

void mirf_config_register(unsigned char reg, unsigned char value)
{
    mirf_CSN_lo;
    spi_fast_shift(W_REGISTER | (REGISTER_MASK & reg));
    spi_fast_shift(value);
    mirf_CSN_hi;
}

void mirf_read_register(unsigned char reg, unsigned char * value, unsigned char len)
{
    mirf_CSN_lo;
    spi_fast_shift(R_REGISTER | (REGISTER_MASK & reg));
    spi_transfer_sync(value,value,len);
    mirf_CSN_hi;
}

void mirf_write_register(unsigned char reg, unsigned char * value, unsigned char len) 
{
    mirf_CSN_lo;
    spi_fast_shift(W_REGISTER | (REGISTER_MASK & reg));
    spi_transmit_sync(value,len);
    mirf_CSN_hi;
}


void mirf_send(unsigned char * value, unsigned char len) 
{
    mirf_CE_lo;
    TX_POWERUP;                     // Power up
    
    mirf_CSN_lo;                    // Pull down chip select
    spi_fast_shift( FLUSH_TX );     // Write cmd to flush tx fifo
    mirf_CSN_hi;                    // Pull up chip select
    
    mirf_CSN_lo;                    // Pull down chip select
    spi_fast_shift( W_TX_PAYLOAD ); // Write cmd to write payload
    spi_transmit_sync(value,len);   // Write payload
    mirf_CSN_hi;                    // Pull up chip select
    
    mirf_CE_hi;      

}
Pika4u56 вне форума   Ответить с цитированием
Непрочитано 28.04.2013, 21:03   #614
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Команды FLUSH нельзя подавать когда буфер пустой - у меня на старых чипах (2010 год) это с вероятностью примерно 1/1000 приводило к зависанию намертво до перетыкания питания. Можно подавать только когда в буфере что-то есть. Я это уже второй раз повторяю тебе, и раз 10 - в этой теме
niXto вне форума   Ответить с цитированием
Сказали "Спасибо" niXto
Pika4u56 (28.04.2013)
Непрочитано 28.04.2013, 21:06   #615
Pika4u56
Частый гость
 
Регистрация: 17.06.2010
Сообщений: 40
Сказал спасибо: 28
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Pika4u56 на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Спасибо))))Так,модули у меня nrf24l01+. Но ведь в библиотеке Tinkerer FLUST_TX подавался,даже если буфер пуст.....Причем,судя по всему,зависает МК...Хм,значит,придется копать ещё глубже....

Последний раз редактировалось Pika4u56; 28.04.2013 в 21:10.
Pika4u56 вне форума   Ответить с цитированием
Непрочитано 28.04.2013, 21:29   #616
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Копайся в контроллере... л01+ - это л01Р, скачай даташит на Р-шку, хотя отличий мало
niXto вне форума   Ответить с цитированием
Сказали "Спасибо" niXto
Pika4u56 (29.04.2013)
Непрочитано 29.04.2013, 08:46   #617
Pika4u56
Частый гость
 
Регистрация: 17.06.2010
Сообщений: 40
Сказал спасибо: 28
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Pika4u56 на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Даташит уже скачал....Зависает,я думаю,только в.одном месте- когда ждет установки бита SPIF. Больше,как бы негде. Получается,при подаче FLUSH_TX нрф просто перестает отвечать?)
Pika4u56 вне форума   Ответить с цитированием
Непрочитано 29.04.2013, 10:03   #618
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

Примерно так, подробно не разбирался. Если не пытаться очистить пустой буфер - работает очень надежно, здесь http://forum.ixbt.com/topic.cgi?id=48:10609 без зависаний и перезагрузок работает с августа прошлого года, порядка 200 нажатий в сутки, то есть минимум 20.000 пакетов было отправлено. Это кстати говорит и об экономичности трансивера - батарейка CR2032 стоит ещё родная
niXto вне форума   Ответить с цитированием
Сказали "Спасибо" niXto
Pika4u56 (29.04.2013)
Непрочитано 29.04.2013, 10:46   #619
Pika4u56
Частый гость
 
Регистрация: 17.06.2010
Сообщений: 40
Сказал спасибо: 28
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Pika4u56 на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

ХМ,за ссылку спасибо)))Сейчас понаставил delay_ms,перед каждой передачей стал заново настраивать трансивер-пока что полет нормальный)
Pika4u56 вне форума   Ответить с цитированием
Непрочитано 29.04.2013, 11:03   #620
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Кто-нибудь работал с RF модулями nRF2401A?

У меня 86000 пакетов за сутки уходит и работает уже пол года на 2032 и не самом экономичном STM8S103. Еще был вариант на PIC12 с софтовым SPI. Тот уже полтора года работает.
Easyrider83 вне форума   Ответить с цитированием
Сказали "Спасибо" Easyrider83
Pika4u56 (29.04.2013)
Ответ

Закладки


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто работал с драйвером DM132? sdsrem Микроконтроллеры, АЦП, память и т.д 0 06.07.2010 21:37
Кто нибудь имеет описание, как обращаться к KEELOQовскому регистру в PIC12F635/PIC16F636? Make_Pic Микроконтроллеры, АЦП, память и т.д 1 07.05.2010 12:53
Кто нибудь работал с MUST II System ? trilobit Производственное оборудование 0 28.04.2010 11:51
Кто нибудь имел дело со шрифтами? Djakovskij Микроконтроллеры, АЦП, память и т.д 8 18.02.2010 20:35
Кто работал с Ad7714? ALEKSEY188 Микроконтроллеры, АЦП, память и т.д 18 11.02.2010 03:54


Часовой пояс GMT +4, время: 21:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot