реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> проблемы с NORDIC nRF2401A
Asty
сообщение May 12 2006, 07:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-11-04
Из: Питер
Пользователь №: 1 266



Подключаю nRF2401A к микроконтроллеру MSP430
тайминги и сигналы передачи настроены правильно
проверил по осцилографу

ничего не работает

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

Спасибо
Go to the top of the page
 
+Quote Post
gormih
сообщение May 18 2006, 12:23
Сообщение #2


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



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


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Asty
сообщение Jun 8 2006, 08:39
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-11-04
Из: Питер
Пользователь №: 1 266



С передачей разобрался)

Но на прием так и не работает отсылаю конфигурацию такуюже как на передатчик но за исключением того что последнее слово 0х05 -- т.е. прием а на передатчике 0х04 -- т.е передача
передатчик передает нормально смотрю по фирменной отладке. На приемние передаю конфигурацию и после устанавливаю CE -- в еденицу. P_UP-тоже 1 выводы МК на прием, но приемник молчит и Флаг полученной посылки не выдает.
Go to the top of the page
 
+Quote Post
gormih
сообщение Jun 8 2006, 08:50
Сообщение #4


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



вообщем так - я научился передавть 1 байт, а вот с передачей пакета из нескольких пока проблемы.
Передеача одного байта с АЦП и выдача его на rs232 у меня осуществяляется вот так:

#include <Nordic\reg24e1.h>

struct RFConfig
{
unsigned char n;
unsigned char buf[15];
};

typedef struct RFConfig RFConfig;

#define ADDR_INDEX 8 // Index to address bytes in RFConfig.buf
#define ADDR_COUNT 4 // Number of address bytes

const RFConfig txconf =
{
15,
0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x34, 0x56, 0x78, 0x83, 0x6c, 0x04
};

const RFConfig rxconf =
{
15,
0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
};

void Delay100us(volatile unsigned char n)
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}

unsigned char SpiReadWrite(unsigned char B)
{
EXIF &= ~0x20; // Clear SPI interrupt
SPI_DATA = b; // Move byte to send to SPI data register
while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting
;
return SPI_DATA;
}

void InitUart(void)
{
TH1 = 243;// 19200@16MHz (when T1M=1 and SMOD=1)
CKCON |= 0x10; // T1M=1 (/4 timer clock)
PCON = 0x80; // SMOD=1 (double baud rate)
SCON = 0x52; // Serial mode1, enable receiver
TMOD = 0x20; // Timer1 8bit auto reload
TR1 = 1; // Start timer1
P0_DIR |= 0x02; // P0.1 (RxD) is an input
P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
}

void PutChar(char B)
{
while(!TI)
;
TI = 0;
SBUF = b;

}


void InitADC(void)
{
ADCCON = 0x20; // Channel 0, NPD=1, ADCRUN=0, EXTREF=0
ADCSTATIC &= 0x1c;
ADCSTATIC |= 0x03; // 12bit
ADCCON &= ~0x80; // Start..
ADCCON |= 0x80; // ..new conversion
}
/*
void InitPWM(void)
{
P0_ALT |= 0x80; // Enable PWM output
PWMCON = 0xc0; // Enable 8 bit PWM with minimum prescaler
}
*/

unsigned char ReceivePacket()
{
unsigned char b;
CE = 1;
while(DR1 == 0)
;
b = SpiReadWrite(0);
CE = 0;
return b;
}

void TransmitPacket(unsigned char B)
{
unsigned char i;
CE = 1;
Delay100us(0);
// Start with the address of the receiver:
for(i=0;i<ADDR_COUNT;i++)
SpiReadWrite(rxconf.buf[ADDR_INDEX+i]);
SpiReadWrite(B);
CE = 0;
Delay100us(3); // Wait ~300us
}

unsigned char ReadADC(void)
{
unsigned char b;

while((EXIF & 0x10) == 0) // Wait until ADC conversion complete
;
EXIF &= ~0x10; // Clear ADC completion bit
b = ADCDATAH; // Read ADC data
ADCCON &= ~0x80; // Start..
ADCCON |= 0x80; // ..new conversion
return b;
}

/*void WritePWM(unsigned char B)
{
PWMDUTY = b;
}
*/
void Receiver(void)
{
unsigned char b;
CS = 1;
Delay100us(0);
for(b=0;b<rxconf.n;b++)
{
SpiReadWrite(rxconf.buf[b]);
}
CS = 0;
for(;;)
{
b = ReceivePacket();
PutChar(B);
}
}

void Transmitter(void)
{
unsigned char b;

CS = 1;
Delay100us(0);
for(b=0;b<txconf.n;b++)
{
SpiReadWrite(txconf.buf[b]);
}
CS = 0;
for(;;)
{


b = ReadADC(); // Read ADC
TransmitPacket(B); // Transmit data
}
}

void Init(void)
{
P0_DIR = 0x40; // P0.6 is input, the rest output
P0 = 0x10; // P0.4 = 1 for the rec/tran selection
PWR_UP = 1; // Turn on Radio
Delay100us(30); // Wait > 3ms
SPICLK = 0; // Max SPI clock (XTAL/8)
SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
}

void main(void)
{
Init();
if(P0 & 0x40)
{
InitUart();
Receiver();
}
else
{
InitADC();
Transmitter();
}
}


Это написано на си под 8051. Прога рабочая - выдает на 232 интерфейс последовательность байт, которые соответствуют значению напряжения на АЦП передатчика.
Вопрос в другом - я изменил значение DATA_1W в конфигурации, но пакет из нескольких байт не хочет передаваться - то есть приемник его не принимает (не знаю, передает ли передатчик еще не проверял)
Если решишь эту пробелму - пиши. Если решу сам - напишу :-))

Сообщение отредактировал Михаил Горюнов - Jun 8 2006, 08:53


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
acex2
сообщение Jun 8 2006, 09:16
Сообщение #5


Адепт
****

Группа: Свой
Сообщений: 520
Регистрация: 15-02-05
Пользователь №: 2 656



Народ, а подскажите где и по чем вы берете nRF2401A в России?
Поиск по eFind ничего не дал.
Go to the top of the page
 
+Quote Post
gormih
сообщение Jun 8 2006, 09:23
Сообщение #6


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(acex2 @ Jun 8 2006, 12:16) *
Народ, а подскажите где и по чем вы берете nRF2401A в России?
Поиск по eFind ничего не дал.

по моему плохо искал...
на складе конечно нет, но... в 7 дней уложиться обещают.
А вообще я брал nrf24e1 в симметроне.
www.simmetron.ru


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Asty
сообщение Aug 18 2006, 07:20
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 30-11-04
Из: Питер
Пользователь №: 1 266



Вот время идет мы умнеем...

Разобрался с nRF2401A полностью smile3009.gif

так что если есть вопросы обращайтесь smile.gif
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 22 2006, 12:03
Сообщение #8





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



А с nRF24L01 никто не работал ? че-то не получается ниче sad.gif

насчет СЕ... а нельзя ли его просто в единицу поставить? в nRF24L01 я на него единичку подал ... мож потому и не получается.
подскажите, пожалуйста, если кто знает.
Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 22 2006, 14:21
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Viktor O. @ Aug 22 2006, 19:03) *
А с nRF24L01 никто не работал ? че-то не получается ниче sad.gif

насчет СЕ... а нельзя ли его просто в единицу поставить? в nRF24L01 я на него единичку подал ... мож потому и не получается.
подскажите, пожалуйста, если кто знает.

в даташите на 10 странице все очень хорошо описано.
если не надо: уходить в standby-ii, начинать передачу в сторого определенное время (по положительному фронту CE), или автоматически переключаться на прием после поcылки пакета, то можно.
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 23 2006, 06:37
Сообщение #10





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



выставляю
PWR_UP = 1
PRIM_RX = 0
СЕ все время 1.
получается, что передача начинается, когда в TX FIFO что-то записали.
nRF24L01 передаёт данные, переключается автоматом в RX режим, ждет подтверждения, когда оно поступит TX FIFO сбрасывается и в TX_DS пишется 1.

т е передача идёт автоматом после записи в TX FIFO, никакие дополнительные команды не нужны ?
Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 23 2006, 08:08
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Viktor O. @ Aug 23 2006, 12:37) *
выставляю
PWR_UP = 1
PRIM_RX = 0
СЕ все время 1.
получается, что передача начинается, когда в TX FIFO что-то записали.
nRF24L01 передаёт данные, переключается автоматом в RX режим, ждет подтверждения, когда оно поступит TX FIFO сбрасывается и в TX_DS пишется 1.
т е передача идёт автоматом после записи в TX FIFO, никакие дополнительные команды не нужны ?

насколько я понял, если все время держать CE, то в RX передатчик не перейдет после посылки пакета и ack соответсветнно не примет и поэтому попробует послать еще 3 (по умолчанию) раза и на этом успокоится..
так что смотрите что творится в OBSERVE_TX..

зы а длина передаваемого пакета совпадает с тем что записано в RX_PW_Pх у приёмника?
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 23 2006, 08:29
Сообщение #12


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



У меня nrf24e1, и если я буду держать СЕ все время в 1 - передатчик работать не будет однозначно.
После того, как заталкиваю в него через spi данные - устанавливаю ce в 0 - только тогда начинается передача пакета.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 23 2006, 08:34
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Михаил Горюнов @ Aug 23 2006, 14:29) *
У меня nrf24e1, и если я буду держать СЕ все время в 1 - передатчик работать не будет однозначно.
После того, как заталкиваю в него через spi данные - устанавливаю ce в 0 - только тогда начинается передача пакета.

nrf24l01 как передатчик так вполне работает, только если autoacknoledgment выключить.
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 24 2006, 08:05
Сообщение #14





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



Цитата(_pv @ Aug 23 2006, 12:08) *
Цитата(Viktor O. @ Aug 23 2006, 12:37) *

выставляю
PWR_UP = 1
PRIM_RX = 0
СЕ все время 1.
получается, что передача начинается, когда в TX FIFO что-то записали.
nRF24L01 передаёт данные, переключается автоматом в RX режим, ждет подтверждения, когда оно поступит TX FIFO сбрасывается и в TX_DS пишется 1.
т е передача идёт автоматом после записи в TX FIFO, никакие дополнительные команды не нужны ?

насколько я понял, если все время держать CE, то в RX передатчик не перейдет после посылки пакета и ack соответсветнно не примет и поэтому попробует послать еще 3 (по умолчанию) раза и на этом успокоится..
так что смотрите что творится в OBSERVE_TX..

зы а длина передаваемого пакета совпадает с тем что записано в RX_PW_Pх у приёмника?


длина совпадает, автоподтверждение выключил
передаю байт в TX FIFO, проверяю по регистру статуса FIFO - в TX FIFO что то записалось... smile.gif
смотрю по регистру статуса - данные ушли (TX_DS = 1), все это запихиваю в бесконечный цикл и запускаю. тыкаю осциллографом в выход на антенну - тишина, но ведь по идее что то там быть должно sad.gif
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 24 2006, 08:29
Сообщение #15





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



VDD_PA - Power Output - Power Supply (+1.8V) to Power Amplifier
на нем должно быть +1,8 В по идее, а на нём 0.
этот выход управляется битом в каком-то регистре ? или им управлять нельзя?
че-то никак не найду
Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 24 2006, 13:22
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Viktor O. @ Aug 24 2006, 15:29) *
VDD_PA - Power Output - Power Supply (+1.8V) to Power Amplifier
на нем должно быть +1,8 В по идее, а на нём 0.
этот выход управляется битом в каком-то регистре ? или им управлять нельзя?
че-то никак не найду

(00) CONFIG : bit1 (PWR_UP). по умолчанию - он в нуле... smile.gif
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 24 2006, 13:24
Сообщение #17


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(_pv @ Aug 24 2006, 16:22) *
Цитата(Viktor O. @ Aug 24 2006, 15:29) *

VDD_PA - Power Output - Power Supply (+1.8V) to Power Amplifier
на нем должно быть +1,8 В по идее, а на нём 0.
этот выход управляется битом в каком-то регистре ? или им управлять нельзя?
че-то никак не найду

(00) CONFIG : bit1 (PWR_UP). по умолчанию - он в нуле... smile.gif


Ага. В nrf24e1 так же.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 24 2006, 13:49
Сообщение #18





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



CONFIG у меня так записан - 0x72

я этот бит в самом начале установил и больше не трогал...
нужно что-ли только во время передачи PWR_UP включать ?
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 24 2006, 14:31
Сообщение #19





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



нет, дело не в этом. его хоть как включай - хоть в начале, хоть на время передачи.
не работает sad.gif питания на VDD_PA нет, и сигнал не передаётся... хотя в статусе TX_DS появляется... вот ерунда какая-то
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 24 2006, 14:45
Сообщение #20





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



а зачем нужен IREF ? на схеме в даташите он через резистор идёт на землю, а на моей он висит в воздухе. может ли это так влиять на VDD_PA ?
подскажите кто-нибудь
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 25 2006, 09:16
Сообщение #21





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



smile.gif IREF как раз и нужен для VDD_PA
ура, получилось передать байт ! biggrin.gif
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 25 2006, 09:21
Сообщение #22


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viktor O. @ Aug 25 2006, 12:16) *
smile.gif IREF как раз и нужен для VDD_PA
ура, получилось передать байт ! biggrin.gif


a14.gif

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


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 25 2006, 09:47
Сообщение #23





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



т е длина передаваемого пакета должна быть меньше или равна размеру RX FIFO ?
это имеется ввиду ?
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 25 2006, 09:50
Сообщение #24


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(Viktor O. @ Aug 25 2006, 12:47) *
т е длина передаваемого пакета должна быть меньше или равна размеру RX FIFO ?
это имеется ввиду ?

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

Сообщение отредактировал Михаил Горюнов - Aug 25 2006, 09:50


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 25 2006, 09:51
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Михаил Горюнов @ Aug 25 2006, 16:21) *
А теперь главное не забывай, что буфер не должен заполнятся раньше, чем будет будет завершена передача пакета.
Мне чтобы это понять пришлось потратить 2 недели.

???
в nrf24L01 фифо трехэтажное smile.gif т.е. вполне можно загнать еще пару пакетов не дожидаясь отсылки предыдущего.
Цитата
nRF24L01 has a three level deep RX FIFO
(shared between 6 pipes) and a three level deep TX FIFO. The MCU can access the
FIFOs at any time, in power down mode, in standby modes, and during RF packet
transmission.


Сообщение отредактировал _pv - Aug 25 2006, 09:56
Go to the top of the page
 
+Quote Post
Viktor O.
сообщение Aug 25 2006, 10:05
Сообщение #26





Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735



все три "этажа" имеют размер 32 байта ?
Go to the top of the page
 
+Quote Post
gormih
сообщение Aug 25 2006, 10:16
Сообщение #27


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(_pv @ Aug 25 2006, 12:51) *
Цитата(Михаил Горюнов @ Aug 25 2006, 16:21) *

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

???
в nrf24L01 фифо трехэтажное smile.gif т.е. вполне можно загнать еще пару пакетов не дожидаясь отсылки предыдущего.
Цитата
nRF24L01 has a three level deep RX FIFO
(shared between 6 pipes) and a three level deep TX FIFO. The MCU can access the
FIFOs at any time, in power down mode, in standby modes, and during RF packet
transmission.



Вообще совсем :-)


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
_pv
сообщение Aug 25 2006, 10:33
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(Viktor O. @ Aug 25 2006, 17:05) *
все три "этажа" имеют размер 32 байта ?

а в даташите посмотреть?
Код
TX_PLD  255:0
Written by separate SPI command TX
data payload register 1 - 32 bytes.
This register is implemented as a FIFO
with 3 levels. Used in TX  mode only

RX так же.
и еще, это фифо оно общее на все 6 pipe.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 07:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01635 секунд с 7
ELECTRONIX ©2004-2016