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

 
 
> проблемы с 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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
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

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:25
Рейтинг@Mail.ru


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