Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/67: Рейтинг темы: голосов - 67, средняя оценка - 4.99
Ssoom
1

И снова MRF49XA

29.05.2013, 17:06. Показов 13627. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, вот уже неделю копаюсь с MRF49XA, удалось запустить ее на передачу, но принять данные никак не получается. Может быть кто поделится рабочим исходником?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 17:06
Ответы с готовыми решениями:

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за...

Макетки для MRF49XA
Решил повозиться с радио, собрал пару макеток-трансиверов под MRF49XA. Раскурил мануал,...

проблема с приемом на MRF49XA
Всем привет, решил собрать однокомандное управление с подтверждением на MRF49XA, сейчас пытаюсь...

Как подключить трансивер MRF49XA к ПК , без МК.
Добрый день,всем. Возникла у меня необходимость подключить радиомодули(RXQ5) на основе MRF49XA к...

MRF49XA, IRQ в момент передачи постоянно в 0
В общем, найдя пару часов свободного времени и будучи рожденным очень упертым - продолжил попытки...

17
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
03.06.2013, 12:53 2
Цитата Сообщение от Ssoom
Здравствуйте, вот уже неделю копаюсь с MRF49XA, удалось запустить ее на передачу, но принять данные никак не получается. Может быть кто поделится рабочим исходником?
https://github.com/X13home/X13... e/RF/rfm12
Исправлен: https://github.com/X13home/X13... /Phy/RFM12
0
Ssoom
03.06.2013, 21:54 3
Это вообще не к этому модулю сорец.
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
03.06.2013, 22:22 4
Цитата Сообщение от Ssoom
Это вообще не к этому модулю сорец.
Вообще то RFM12 = MRF49XA
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
16.10.2014, 19:44 5
Обращаюсь за помощью к тем кто сделал обмен RFM12b с аппаратным SPI.
У меня два модуля RFM12BP. Намучился уже вдоволь с обменом.
ПОдскажите правильная ли сработка уровней на осциллограммах при передаче?
ПРавильно ли я понимаю саму передачу? Подскажите плз., уже не знаю куда рыть.
Полезная инфа но не помогла http://forum.ixbt.com/topys.cgi?id=48:7856-3

1.Установка на передачу.
2.Отсылка синхробайтов
3.Сам сброс передачи + чтение. Это конец транзакции всего пакета.

Далее все повтор. циклически.
Осциллограмма:
зел - CS
розов - SDO
син - SDI
желт - SCK





0
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
16.10.2014, 19:57 6
Если нужно, то могу скинуть тестовый проект, он у меня где-то еще валяется, вроде. Там два RFM12BP на 433 МГц обмениваются. Только не помню двухсторонний ли там обмен или просто один плюет пакетами, а второй принимает.
Правда значения регистров конфигурации там посчитаны в excel табличке от HopeRF и в исходнике отправляются просто как массив нигических чисел.
Сделать нормальную либу, которая бы сама считала нужные значения регистров тогда не получилось, а потом и вовсе нужда пропала в этих модулях.
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
16.10.2014, 22:52 7
Цитата Сообщение от DOOMSDOY
Если нужно, то могу скинуть тестовый проект, он у меня где-то еще валяется, вроде. Там два RFM12BP на 433 МГц обмениваются.
Скиньте плз. Буду очень признателен)
0
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
17.10.2014, 01:39 8
Цитата Сообщение от Kodir
Цитата Сообщение от DOOMSDOY
Если нужно, то могу скинуть тестовый проект, он у меня где-то еще валяется, вроде. Там два RFM12BP на 433 МГц обмениваются.
Скиньте плз. Буду очень признателен)Немного подправлю линк с сообщения сверху, вот из из моего проекта: https://github.com/X13home/X13... /Phy/RFM12
rfm12b и rfm12bp если мне изменяет память, на программном уровне совместимы, но требуется управлять снаружи выводами TXEN, RXEN, входы соответственно подключают к антенне PA или приемник.

По осцилллограмам на вскидку вроде все на месте.
0
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
17.10.2014, 11:56 9
Цитата Сообщение от Kodir
Скиньте плз. Буду очень признателен)
Прошу прощения, бес попутал. Сейчас глянул, а там не RFM12BP, а RFM23BP. Что-то память подвела..
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
17.10.2014, 20:27 10
Цитата Сообщение от DOOMSDOY
Цитата Сообщение от Kodir
Скиньте плз. Буду очень признателен)
Прошу прощения, бес попутал. Сейчас глянул, а там не RFM12BP, а RFM23BP. Что-то память подвела..
Да ниче, бывает))

Для программирования RFM12 использую даташиты на MRF49XA & TRC101 - мне кажется,что это одни и те же микросхемы, описание сильно сходится, причем диаграммы работы показаны только в MRF49XA. Корявые они правда, видимо разработчики не брали пример Analog Devices или там Atmel, где все очень наглядно показано)))
0
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
17.10.2014, 21:39 11
Походу там вот такой чип используется.http://www.silabs.com/products/wireless ... 42021.aspx
У силиконовцев обычно хорошая документация.
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
18.10.2014, 21:06 12
Цитата Сообщение от somporotor
По осцилллограмам на вскидку вроде все на месте.
1. Меня смущает тот факт,что линия IRQ со стороны модуля должна дергаться каждый раз при передаче каждого байта, а в моем случае такого не происходит - IRQ лежит в нуле аж до конца пакета.
2. Линия SDO при передаче байта должна быть в единице (тоесть модуль отвечает 0xFFFF), а на осцилограммах 0x0000.
В даташите это видно, вот

0
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
19.10.2014, 13:41 13
Цитата Сообщение от Kodir
1. Меня смущает тот факт,что линия IRQ со стороны модуля должна дергаться каждый раз при передаче каждого байта, а в моем случае такого не происходит - IRQ лежит в нуле аж до конца пакета.
IRQ при передаче дергается когда FIFO освобождается до указанного в конфигурации уровня, а FIFO там аж 16 бит, то есть 2 байта.
Я делаю следующим образом, уровень FIFO выставляю на 8 бит, перед началом передачи команда - сброс TX FIFO, при этом буфер автоматически заполняется 0xOOOA, команда на включение передачи, после этого имею прерывания на каждый байт.

На картинке как раз начало передачи


По уровню SDO, ничего не могу сказать, не заморачивался ни разу.
При простое так же зависит от конфигурации мастера, есть ли у него PullUp на этом выводе или нет.
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
19.10.2014, 18:23 14
Тоесть, IRQ после инита щелкать должен на каждых 16 бит данных передачи, Ок.
Зачем загонять у Вас в коде инициализации сначала в SLEEP а потом в IDLE режим? Это же ведь не обязательно? я проверял, модуль устанавливает сам IRQ=1 после инициализации регистров и ждет дальнейших комманд.
После инициализации отсылаю разрешение передачи и IRQ становится=0;
И подскажите, в какой момент я должен посылать и через какое время преамбулу в виде 3-х байт начала пакета 0xAA после отправки разрешения передачи 0x8239?
Я никак не пойму, отсылаю изначально правильные уровни IRQ, а когда уже начинаю отсылать байты из пакета IRQ умирает и не щелкает?
Спасибо))
0
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
20.10.2014, 12:27 15
Цитата Сообщение от Kodir
Тоесть, IRQ после инита щелкать должен на каждых 16 бит данных передачи, Ок.
Можно конечно и так, но я выставляю уровень в 8 бит, так удобнее.
Цитата Сообщение от Kodir
Зачем загонять у Вас в коде инициализации сначала в SLEEP а потом в IDLE режим? Это же ведь не обязательно? я проверял, модуль устанавливает сам IRQ=1 после инициализации регистров и ждет дальнейших комманд.
После инициализации отсылаю разрешение передачи и IRQ становится=0;
Были проблемы с некоторыми экземплярами RFM12, если его включать сразу в IDLE, то потом он ни на что не реагирует.Помогает только сброс по питанию.
При включении в SLEEP последующей конфигурации и переводе в IDLE все работает нормально.
По моему это даже было в какой-то Errate
Цитата Сообщение от Kodir
И подскажите, в какой момент я должен посылать и через какое время преамбулу в виде 3-х байт начала пакета 0xAA после отправки разрешения передачи 0x8239?
FIFO первыми байтами преамбулы вы должны забить ДО начала передачи.

Я делаю так:
На выходе из прерывания или инициализации, выключается TX FIFO

rfm12_control(RFM12_TXFIFO_DIS);

Перед началом передачи включаем FIFO снова

rfm12_control(RFM12_IDLE_MODE); // Switch to Idle state
rfm12_control(RFM12_TXFIFO_ENA); // Enable TX FIFO

вот в этот момент у нас в буфере уже лежит 0xOOOA

Можно обойтись и без этого, а просто сразу загружать в фифо преамбулу, например так:

rfm12_control(RFM12_IDLE_MODE);
rfm12_control(RFM12_CMD_TX | 0xAA);
rfm12_control(RFM12_CMD_TX | 0xAA);

Но сбрасывать буфера мне как-то привычнее.

rfm12_control(RFM12_TRANSMIT_MODE);

Начинается передача, после передачи первого символа преамбулы взводится прерывание
А уже в прерывании я высылаю добавочный 0xAA, GroupID, и собственно сам пакет побайтно.

rfm12_control(RFM12_CMD_TX | ch);

Цитата Сообщение от Kodir
Я никак не пойму, отсылаю изначально правильные уровни IRQ, а когда уже начинаю отсылать байты из пакета IRQ умирает и не щелкает?
Спасибо))
Не видя кода, сложно что то сказать.
Сравните в первую очередь инициализацию, я потратил довольно много времени на оптимизацию, и чтобы это работало со всеми и между всеми вариантами.
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
20.10.2014, 23:54 16
Спасибо, Comparator - осмыслил Ваши замечания.
Вот что у меня получилось. NIRQ начал шевелиться на каждый передаваемый байт как я того и ожидал, но не пойму почему линия SDO модуля так странно себя ведет (на осциллограммах)? Проверял обмен между модулями - его нет, предполагаю, что неправильно передаю байты. Код приложу.
1 рис. - желт осциллограмма - это SCK, розов. - SDO, син - SDI, зелен - CS


2 рис. - желт осциллограмма - это NIRQ, розов. - SDO, син - SDI, зелен - CS


Код
//Инициализация
RFMData.ReadData[0] = RFM_WriteACKCmd(0x0000);

if (RFMData.ReadData[0] & 0x4000)
{
//2. уровень на IRQ    стал высоким это SLEEP state

//3. Теперь загружаем полностью все базовые регистры в модуль
//Меняем регистры модуля, отсылаем один за одним данные регистров.

NParam = sizeof(RFM_CommomdStr)>>1;     //

for(i=0; i < NParam; i++)
{
RFM_WriteCmd(*Pstr);
Pstr++;
}

//Включаем всегда прием из радиоэфира
RM_RXEN_H();

//IDLE MODE....
RFM_WriteCmd(0x8219);
//Подождем пока стабилизируется осциллятор
HordDelay(10);          //10 ms

//Забиваем буфер модуля 0хAA
RFM_WriteCmd(TrRW_R | RM_PREAMBLE);
RFM_WriteCmd(TrRW_R | RM_PREAMBLE);

}

while(1)
{

RM_TXEN_H();//Включаем передатчик в радиоэфир
for(i=0;i<300;i++){}//Уст. фронта

RFM_WriteCmd(0х8239);

RFM_WriteACKCmd(0х0000);

RFM_WriteData(RM_PREAMBLE);
RFM_WriteData(RM_PREAMBLE);
RFM_WriteData(RM_PREAMBLE);

RFM_WriteData(0x00FF & RM_SYNC);
RFM_WriteData((0xFF00 & RM_SYNC)>>8);
RFM_WriteData(0x23);
RFM_WriteData(0x24);
RFM_WriteData(0x25);

RFM_WriteData(RM_PREAMBLE);
RFM_WriteData(RM_PREAMBLE);
RFM_WriteData(RM_PREAMBLE);

//Переходим к завершающему этапу передачи и закрываем передачу.
//Проверим nIRQ. Дождемся когда nIRQ станет = 0.Тогда выключаем передатчик
while (GPIO_ReadInputDataByt(GPIOA, GPIO_Pin_3))
{}

//Выключаем передатчик в радиоэфир выждать 16 бит
RM_TXEN_L();//Выкл передачу в радиоэфир
for(i=0;i<100;i++){}  //Уст. фронта

//Загоняем модуль в IDLE
RFM_WriteCmd(0х8219);

TimDelaySet(10000); //50 mks
//Передача пакета завершена
}
0
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
22.10.2014, 13:46 17
И еще, самое важное это осциллограмы обмена модуля, я думаю в них вся собака...Если у кого есть - поделитесь диаграммами или осциллограммами передачи отдельных байт с уровнями SDO, IRQ в течении передачи.

Один щепитильный момент запуска модуля - это переход от разрешения передачи в непоср. саму передачу байтов.
Делал на прерываниях аппаратным SPI STM32f100 - нифига не работает, те же процедуры тупой записью в осн. цикл - хоть какая-то реакция. Сделал вывод, что передачу пакета следует делать одним махом т.е. модуль очень чувствителен к таймингам.
0
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
02.11.2014, 15:01 18
Цитата Сообщение от Kodir
И еще, самое важное это осциллограмы обмена модуля, я думаю в них вся собака...Если у кого есть - поделитесь диаграммами или осциллограммами передачи отдельных байт с уровнями SDO, IRQ в течении передачи.
Лучше поздно чем никогда, в архиве:
RFM12.usbeesomp, открывается USBее Suite, если её нет то:
RFM12_data.csv собственно сами данные
RFM12_SIG.csv сами сигналы.
Динные: 05-00-93-03-01-00 + 2 байта CRC
Цитата Сообщение от Kodir
Один щепитильный момент запуска модуля - это переход от разрешения передачи в непоср. саму передачу байтов.
Делал на прерываниях аппаратным SPI STM32f100 - нифига не работает, те же процедуры тупой записью в осн. цикл - хоть какая-то реакция. Сделал вывод, что передачу пакета следует делать одним махом т.е. модуль очень чувствителен к таймингам.
Странно, ничего щепетильного там не заметил, появляется прерывание, спрашиваем почему, и скармливаем ему очередной байт. Скармливать весь пакет ему некуда, у него FIFO всего 16 бит.

[31.8 Кб]
0
02.11.2014, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2014, 15:01
Помогаю со студенческими работами здесь

Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?
Здравствуйте :) Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? TimerSec = 59;...

HP 625 снова и снова перезагружается в безопасный не заходит
Ребята помогите , проблема вот какая врубаю я ноут он доходит до заставки майкрософта и снова...

Почему функция вызывается снова и снова?
При просмотре всех учетных записей ( последняя функция = prosmotr_ych_z()) она не останавливается,...

Здравствуйте, снова проблема и снова к вам.
Имеется данный код: var iX, iY, fov: Integer; HD: HWND; sDC: hDC; begin HD :=...

Снова. Снова этот repaint()
Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru