|
|
 |
Ответов
|
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
--------------------
Это не то что вы подумали ...
|
|
|
|
Сообщений в этой теме
Asty проблемы с NORDIC nRF2401A May 12 2006, 07:57 Михаил Горюнов Слишком общий вопрос: Всe подключил правильно, но ... May 18 2006, 12:23 Asty С передачей разобрался)
Но на прием так и не рабо... Jun 8 2006, 08:39 Asty Вот время идет мы умнеем...
Разобрался с nRF2401A... Aug 18 2006, 07:20 Viktor O. А с nRF24L01 никто не работал ? че-то не получаетс... Aug 22 2006, 12:03 _pv Цитата(Viktor O. @ Aug 22 2006, 19:03) А ... Aug 22 2006, 14:21 Viktor O. выставляю
PWR_UP = 1
PRIM_RX = 0
СЕ все время 1.
п... Aug 23 2006, 06:37 _pv Цитата(Viktor O. @ Aug 23 2006, 12:37) вы... Aug 23 2006, 08:08  Viktor O. Цитата(_pv @ Aug 23 2006, 12:08) Цитата(V... Aug 24 2006, 08:05 Михаил Горюнов У меня nrf24e1, и если я буду держать СЕ все время... Aug 23 2006, 08:29 _pv Цитата(Михаил Горюнов @ Aug 23 2006, 14:2... Aug 23 2006, 08:34 Viktor O. VDD_PA - Power Output - Power Supply (+1.8V) to Po... Aug 24 2006, 08:29 _pv Цитата(Viktor O. @ Aug 24 2006, 15:29) VD... Aug 24 2006, 13:22  Михаил Горюнов Цитата(_pv @ Aug 24 2006, 16:22) Цитата(V... Aug 24 2006, 13:24 Viktor O. CONFIG у меня так записан - 0x72
я этот бит в сам... Aug 24 2006, 13:49 Viktor O. нет, дело не в этом. его хоть как включай - хоть в... Aug 24 2006, 14:31 Viktor O. а зачем нужен IREF ? на схеме в даташите он через ... Aug 24 2006, 14:45 Viktor O. IREF как раз и нужен для VDD_PA
ура, получилось пе... Aug 25 2006, 09:16 Михаил Горюнов Цитата(Viktor O. @ Aug 25 2006, 12:16) I... Aug 25 2006, 09:21  _pv Цитата(Михаил Горюнов @ Aug 25 2006, 16:2... Aug 25 2006, 09:51   Михаил Горюнов Цитата(_pv @ Aug 25 2006, 12:51) Цитата(М... Aug 25 2006, 10:16 Viktor O. т е длина передаваемого пакета должна быть меньше ... Aug 25 2006, 09:47 Михаил Горюнов Цитата(Viktor O. @ Aug 25 2006, 12:47) т ... Aug 25 2006, 09:50 Viktor O. все три "этажа" имеют размер 32 байта ? Aug 25 2006, 10:05 _pv Цитата(Viktor O. @ Aug 25 2006, 17:05) вс... Aug 25 2006, 10:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|