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

 
 
> MRF49XA, Как с ним работать?
MKdemiurg
сообщение Jun 8 2014, 06:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Собственно сабж!
Заколебался.
Использую режим SPI 0,0 в АВРке.

Подключены 4 линии SPI( SDO,SDI,CS,SCK) , FSEL ,RCLKOUT, INT|DIO, RSSIO,IRQ.

Решил переделать пример из microchipa.

http://www.microchip.com/stellent/idcplg?I...ppnote=en545176

Не могу разобраться, чего ждать, какая логика работы...В русском даташите на аналог TC102 - какая то КАША!

Допустим из примера:

CODE
int SPI_Read(void)
{
char i;
int spidata = 0;

SPI_SDO = 0;
SPI_SCK = 0;
for (i=0;i<8;i=i+1)
{
spidata=spidata<<1;

if(SPI_SDI)
spidata |= 0x01;
else
spidata &= 0xFE;

SPI_SCK = 1;
SPI_SCK = 0;
}
return(spidata);
}

//--------------------------------------------------------------------
// SPI_Write ()
//--------------------------------------------------------------------
void SPI_Write(int spidata)
{
char i;

SPI_SDO = 0;
SPI_SCK = 0;
for (i=0;i<8;i=i+1)
{
if(spidata & 0x80)
SPI_SDO = 1;
else
SPI_SDO = 0;

SPI_SCK = 1;
SPI_SCK = 0;
spidata=spidata<<1;
}

SPI_SDO = 0;
}

SPI_SDO - это выход из контроллера MOSI?(нога контроллера сформирована как выход) Подключено к входу SDI MRF49xa/
SPI_SDI - это вход на контроллер (сформировано как высокоомный вход) . SDO MRF-ки


Тогда тут что такое RF_SDO?


CODE
void MRF49XA_Send_Packet(unsigned char *data, unsigned char length){

int a;
//---- turn off receiver , enable Tx register
SPI_Command(PMCREG); // turn off the transmitter and receiver
SPI_Command(GENCREG | 0x0080); // Enable the Tx register
//---- Packet transmission
// Reset value of the Tx regs are [AA AA], we can start transmission
//---- Enable Tx
SPI_Command(PMCREG |0x0020); // turn on tx

SPI_CS=0; // chip select low
while(!RF_SDO);
SPI_Write16(TXBREG | 0xAA); // preamble
while(!RF_SDO);
SPI_Write16(TXBREG | 0x2D); // sync pattern 1st byte
while(!RF_SDO);
SPI_Write16(TXBREG | 0xD4); // sync pattern 2nd byte
while(!RF_SDO);
SPI_Write16(TXBREG | length);
#ifdef SPECTRUM_TEST
for (a=0;1;){ // endless loop
#else
for (a=0;a<length;a++){ // send payload
#endif
while(!RF_SDO); // wait for SDO, when buffer data <=8 bits
#ifdef SPECTRUM_TEST
SPI_Write16(0xAA); // spectrum test
#else
SPI_Write16(TXBREG | data[a]); // write a byte to tx register
#endif
}
while(!RF_SDO){}
SPI_Write16(TXBREG |0x00); // write a dummy byte since the previous byte is still in buffer
while (!RF_SDO){} // wait for the last byte transmission end
SPI_CS=1; // chip select high, end transmission

//---- Turn off Tx disable the Tx register
SPI_Command(PMCREG | 0x0080); // turn off Tx, turn on the receiver
SPI_Command(GENCREG | 0x0040); // disable the Tx register, Enable the FIFO
}


По факту не могу даже считать ни одного регистра...Чтобы хотя бы проверить - работает оно или нет.

Как проверить хотя бы передачу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
mempfis_
сообщение Jun 8 2014, 09:43
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Судя по докам этот трансивер аналог si4421.
Мы недавно перешли с него на какойто микрочиповский полный аналог - возможно он и называется mrf49 (смогу проверить только на работе не раньше вториника).
Суть в том, что он завёлся без какого-либо переписывания кода для si4421

Посмотрите по ссылке - я описывал как работать с si4421.
http://electronix.ru/forum/lofiversion/index.php/t55716.html
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jun 8 2014, 10:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(mempfis_ @ Jun 8 2014, 17:53) *
Судя по докам этот трансивер аналог si4421.
Мы недавно перешли с него на какойто микрочиповский полный аналог - возможно он и называется mrf49 (смогу проверить только на работе не раньше вториника).
Суть в том, что он завёлся без какого-либо переписывания кода для si4421

Посмотрите по ссылке - я описывал как работать с si4421.
http://electronix.ru/forum/lofiversion/index.php/t55716.html


Я код повторяю вот отсюда...
http://we.easyelectronics.ru/part/voznya-s-mrf49xa.html



Микруха как будто мёртвая.

#define RF_SDO BitIsSet(PORTB,MISO)

MRF_CS_0; // chip select low
while(!RF_SDO);
MRF_write(TXBREG | 0xAA); // preamble


Циклится на while и всё...Т.е. она не отвечает. На RSSIO - 1 мв.
Go to the top of the page
 
+Quote Post
Voldemari4
сообщение Jun 9 2014, 02:09
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-14
Из: Минск
Пользователь №: 81 582



Я бы лучше аппаратный SPI задействовал. Осциллографом смотрели, с SPI порта МК вообще что-нибудь идет?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 12 2014, 06:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



MRF49XA полный аналог SI4421 так что смотрите описание работы с трансивером по ссылке, что я приводил выше.
Думаю Вам поможет анализ работы с помощью осциллографа. nIRQ после сброса должно быт в 0. Нужно читать статус до тех пор, пока nIRQ не перейдёт в 1. Посылка по SPI должна быть 16 бит. Не должно быть лишних дёрганий nSS между 2 байтами. Всё остальное (настройка, работа) описаны по ссылке.
Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jun 19 2014, 13:59
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Здравствуйте sm.gif

Таки заработало. Дело было в неправильной фазе аппаратного SPI.
Передаёт. Не знаю насколько хорошо: в пределах 2 этажей панельного дома из 100 12 байтных пакеты - 80-95 приходит без ошибок. Дальше резко ухудшается.
---

Пытаюсь наладить слип режим.
Выставляю в регистр WTSREG 0xE3FA - 250 мс * 2^3=8c. Потом включаю WKUPEN для регистра управления питанием.

Цитата
Этот регистр устанавливает интервал пробуждения для TRC102. После установки интервала
пробуждения бит WKUPEN (бит 1 Регистра управления питанием) необходимо сбрасывать и
устанавливать в конце каждого цикла пробуждения.


Всё вроде как перестаёт жрать ток, но /nIRQ - низкий уровень постоянно. Почему не срабатывает таймер?
Go to the top of the page
 
+Quote Post

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

 


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


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