Ssoom
|
|
1 | |
И снова MRF49XA29.05.2013, 17:06. Показов 13627. Ответов 17
Метки нет (Все метки)
Здравствуйте, вот уже неделю копаюсь с MRF49XA, удалось запустить ее на передачу, но принять данные никак не получается. Может быть кто поделится рабочим исходником?
|
29.05.2013, 17:06 | |
Ответы с готовыми решениями:
17
Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино Макетки для MRF49XA проблема с приемом на MRF49XA Как подключить трансивер MRF49XA к ПК , без МК. MRF49XA, IRQ в момент передачи постоянно в 0 |
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
|
|
03.06.2013, 12:53 | 2 |
Сообщение от Ssoom
Исправлен: 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
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
0
|
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
|
|
17.10.2014, 01:39 | 8 |
Сообщение от Kodir
rfm12b и rfm12bp если мне изменяет память, на программном уровне совместимы, но требуется управлять снаружи выводами TXEN, RXEN, входы соответственно подключают к антенне PA или приемник. По осцилллограмам на вскидку вроде все на месте.
0
|
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
|
|
17.10.2014, 11:56 | 9 |
Сообщение от Kodir
0
|
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 197
|
|
17.10.2014, 20:27 | 10 |
Сообщение от DOOMSDOY
Да ниче, бывает)) Для программирования 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
2. Линия SDO при передаче байта должна быть в единице (тоесть модуль отвечает 0xFFFF), а на осцилограммах 0x0000. В даташите это видно, вот
0
|
0 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 43
|
|
19.10.2014, 13:41 | 13 |
Сообщение от Kodir
Я делаю следующим образом, уровень 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
Сообщение от Kodir
При включении в SLEEP последующей конфигурации и переводе в IDLE все работает нормально. По моему это даже было в какой-то Errate
Сообщение от Kodir
Я делаю так: На выходе из прерывания или инициализации, выключается 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
Сравните в первую очередь инициализацию, я потратил довольно много времени на оптимизацию, и чтобы это работало со всеми и между всеми вариантами.
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
RFM12.usbeesomp, открывается USBее Suite, если её нет то: RFM12_data.csv собственно сами данные RFM12_SIG.csv сами сигналы. Динные: 05-00-93-03-01-00 + 2 байта CRC
Сообщение от Kodir
[31.8 Кб]
0
|
02.11.2014, 15:01 | |
02.11.2014, 15:01 | |
Помогаю со студенческими работами здесь
18
Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? HP 625 снова и снова перезагружается в безопасный не заходит Почему функция вызывается снова и снова? Здравствуйте, снова проблема и снова к вам. Снова. Снова этот repaint() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |