|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jun 8 2006, 08:39
|
Участник

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

|
С передачей разобрался)
Но на прием так и не работает отсылаю конфигурацию такуюже как на передатчик но за исключением того что последнее слово 0х05 -- т.е. прием а на передатчике 0х04 -- т.е передача передатчик передает нормально смотрю по фирменной отладке. На приемние передаю конфигурацию и после устанавливаю CE -- в еденицу. P_UP-тоже 1 выводы МК на прием, но приемник молчит и Флаг полученной посылки не выдает.
|
|
|
|
|
Jun 8 2006, 08:50
|

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
--------------------
Это не то что вы подумали ...
|
|
|
|
|
Jun 8 2006, 09:23
|

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

|
Цитата(acex2 @ Jun 8 2006, 12:16)  Народ, а подскажите где и по чем вы берете nRF2401A в России? Поиск по eFind ничего не дал. по моему плохо искал... на складе конечно нет, но... в 7 дней уложиться обещают. А вообще я брал nrf24e1 в симметроне. www.simmetron.ru
--------------------
Это не то что вы подумали ...
|
|
|
|
|
Aug 18 2006, 07:20
|
Участник

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

|
Вот время идет мы умнеем... Разобрался с nRF2401A полностью  так что если есть вопросы обращайтесь
|
|
|
|
|
Aug 22 2006, 12:03
|
Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735

|
А с nRF24L01 никто не работал ? че-то не получается ниче  насчет СЕ... а нельзя ли его просто в единицу поставить? в nRF24L01 я на него единичку подал ... мож потому и не получается. подскажите, пожалуйста, если кто знает.
|
|
|
|
|
Aug 22 2006, 14:21
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(Viktor O. @ Aug 22 2006, 19:03)  А с nRF24L01 никто не работал ? че-то не получается ниче  насчет СЕ... а нельзя ли его просто в единицу поставить? в nRF24L01 я на него единичку подал ... мож потому и не получается. подскажите, пожалуйста, если кто знает. в даташите на 10 странице все очень хорошо описано. если не надо: уходить в standby-ii, начинать передачу в сторого определенное время (по положительному фронту CE), или автоматически переключаться на прием после поcылки пакета, то можно.
|
|
|
|
|
Aug 23 2006, 06:37
|
Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735

|
выставляю PWR_UP = 1 PRIM_RX = 0 СЕ все время 1. получается, что передача начинается, когда в TX FIFO что-то записали. nRF24L01 передаёт данные, переключается автоматом в RX режим, ждет подтверждения, когда оно поступит TX FIFO сбрасывается и в TX_DS пишется 1.
т е передача идёт автоматом после записи в TX FIFO, никакие дополнительные команды не нужны ?
|
|
|
|
|
Aug 23 2006, 08:08
|
Гуру
     
Группа: Свой
Сообщений: 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х у приёмника?
|
|
|
|
|
Aug 24 2006, 08:05
|
Группа: Новичок
Сообщений: 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 что то записалось...  смотрю по регистру статуса - данные ушли (TX_DS = 1), все это запихиваю в бесконечный цикл и запускаю. тыкаю осциллографом в выход на антенну - тишина, но ведь по идее что то там быть должно
|
|
|
|
|
Aug 24 2006, 08:29
|
Группа: Новичок
Сообщений: 10
Регистрация: 22-08-06
Из: Московская обл.
Пользователь №: 19 735

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