Страница 2 из 8

Re: HOPERF RFM70, особенности работы

Добавлено: Ср янв 09, 2013 17:15:33
eess9
С асемблером я вообще никогда не дружил.
Может digitalr чего-то подскажет.

По поводу переменной длинны: как я понял у функции передачи данных в RFM70 sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck)
первый аргумент - данные, которые надо передать
второй - длинна передаваемых данных, соответственно количество байт первого аргумента должно (ну очень желательно) соответствовать второму аргументу
третий - как передать: просто выплюнуть и забыть, ждать подтверждения принятия или просьбы с повтором отсылки от приемника и т.д.

Соответственно receivePayload(uint8_t *payload) должна принять данные длиной равной второму аргументу функции sendPayload.

Мой немецкий друг такой же как и ваш. Просто это то, что мне удалось найти, на мой взгляд, толкового в google, в надежде побыстрей собрать и забыть, т.к. просто хотел попробовать идею на том что было под рукой, а дальше уже вдумчиво собирать. Принял байт по UART выплюнул в RFM70, принял с RFM70 записал в регистр сравнения таймера. Таймер настроен на ШИМ, вуаля и управление скважностью без проводов. Что казалось могло быть сложного?
Я этому другу написал в коменты, правда на английском, с немецким я вообще никак. Может что подскажет.

Re: HOPERF RFM70, особенности работы

Добавлено: Ср янв 09, 2013 17:18:22
ILYAUL
Плиз, :beer: Ваш пример+ DS постараюсь разобраться.

Re: HOPERF RFM70, особенности работы

Добавлено: Ср янв 09, 2013 17:30:51
eess9
Пацаны спасибо все заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Тупые немцы, поэтому войну и проиграли!!! Он передавал не данные, а адрес по которому в памяти находятся данные.
надо всеголишь

Код: Выделить всё

uint8_t UART_Buff;
uint8_t *buffer=&UART_Buff;
...
sendPayload(buffer,1, 0);
и все пидалит. Если код интересен давайте оба проекта выложу, но только через пару часов. Щас только от эйфории отойду)))

Re: HOPERF RFM70, особенности работы

Добавлено: Чт янв 10, 2013 09:54:53
eess9
Вот код, только с коментами у меня тоже глухо. Может кому поможет

Re: HOPERF RFM70, особенности работы

Добавлено: Ср янв 30, 2013 17:57:42
sapak12
avr3.asm
код приемника
(14.21 КБ) 346 скачиваний
Всем привет. Вот тоже приобрел пару трансиверов, а связь наладить не удалось. Использую аппаратный спи меги16 и меги8. Пишу на асме, так как в си не силен. Приму критику и пожелания по коду. Спасибо

Re: HOPERF RFM70, особенности работы

Добавлено: Чт янв 31, 2013 07:45:05
TripleKill
У этих модулей, как я понял, некоторые регистры пишутся с MSB, некоторые c LSB. Ещё и разной длины.
С аппаратным SPI там туго придётся. Я просто ногами дрыгать решил.
Впрочем, потом забил)) Щас с SIM20 играюсь)

Re: HOPERF RFM70, особенности работы

Добавлено: Чт янв 31, 2013 14:19:26
sapak12
Тогда можно попробовать программный спи по примеру авр320

Re: HOPERF RFM70, особенности работы

Добавлено: Пт фев 01, 2013 23:09:29
eess9
код на си при правильном применении #define одинаков для mega16 и mega8. Тот код, что я выкладывал в этой теме должен работать и для mega8. С ассемблером вообще глухо, извини. Есть мысль переписать этот код для ATtiny, но если руки дойдут и памяти программ у ATtiny хватит, "хорошая" инициализация rfm70 занимает нехило...

Re: HOPERF RFM70, особенности работы

Добавлено: Вс фев 03, 2013 20:49:55
digitalr
TripleKill писал(а):У этих модулей, как я понял, некоторые регистры пишутся с MSB, некоторые c LSB. Ещё и разной длины.
С аппаратным SPI там туго придётся.
Там все абсолютно нормально работает хоть с аппаратным SPI хоть с его ногодрыжной реализацией.
Длина всех регистров кратна одному байту. Битовый порядок не меняется. А то, что некоторые регистры при инициализации запихиваются вперед старшим байтом, а некоторые младшим, без особых проблем решается соответствующей подготовкой массива инициализационных констант. Все равно это делается раз - при старте. В дальнейшем их все равно дергать нет необходимости. Поэтому с аппаратной реализацией обмена никаких проблем нет.

eess9 писал(а):С ассемблером вообще глухо, извини. Есть мысль переписать этот код для ATtiny, но если руки дойдут и памяти программ у ATtiny хватит, "хорошая" инициализация rfm70 занимает нехило...
Просто ради информации - при ассемблерной реализации кода (к сожалению не "умею" я си), в случае использования софтового ногодрыга (ну нет нормального SPI у тиньки):
Весь проект:
"ATtiny2313A" memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000414 972 72 1044 2048 51.0%

Выкидываем на мороз все лишнее кроме так или иначе связанного с RFM70:

Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x0002d4 668 56 724 2048 35.4%

В принципе можно еще сильнее ужать. Процентов на 20-30, как минимум. Если "рабочие" регистры инициализировать тоже таблично, как и регистры первого банка.

Re: HOPERF RFM70, особенности работы

Добавлено: Пн фев 04, 2013 02:33:21
sapak12
Уважаемый digitalr можете ли посмотреть мой код, может найдете какие то замечания, или выложите свой пример кода. а то у меня не хотят они работать...

Re: HOPERF RFM70, особенности работы

Добавлено: Ср фев 27, 2013 16:23:45
xUSSR
тини2313+rfm70. Помогите пож. разобраться :cry:
пытаюсь прочитать однобайтовый регистр 0х06 в нулевом банке. вот код:

Код: Выделить всё

#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
#include <stdlib.h>
#define PORT_SPI PORTB
#define DDR_SPI  DDRB
#define PIN_SPI  PINB
#define UCSK     PB7
#define DO       PB6
#define DI       PB5
#define SS       PB4
#define CE       PB3

void USI_init_SPI_M (void){//инициализация USI как SPI
   DDR_SPI |=  (1<<DO);  //линия выхода данных - выход
   DDR_SPI |=  (1<<UCSK);//линия тактирующего сигнала - выход
   DDR_SPI |=  (1<<SS);  //линия выбора кристалла - выход
   DDR_SPI &= ~(1<<DI);  //линия входа данных - вход
}

unsigned char SPI_WR_M (unsigned char d_w){//функция передачи/приёма байта по USI
   USIDR = d_w;//передаваемые данные в сдвиговый регистр
   USISR |= (1<<USIOIF);//сбрасываем флаг
   while(!(USISR & (1<<USIOIF))){//пока нет флага окончания передачи
      USICR |= (1<<USIWM0) | (1<<USICS1) | (1<<USICLK) | (1<<USITC);//формируем такт
   }
   return (USIDR);//возвращаем полученные данные
}

int main (void){
   unsigned char d_w=0b00000110, d_r1, d_r2;//переменные передаваемых и принимаемых данных
   char s[1];
   
   lcd_init();//инициализация ЖКИ
   lcd_com(0x80);//курсор в начало 1строки

   USI_init_SPI_M ();//инициализация USI как SPI

   PORT_SPI |= 1<<CE;   // CE высокий сигнал
   PORT_SPI |= 1<<SS;   // SS высокий сигнал
   _delay_ms(1000);
   PORT_SPI &= ~(1<<SS);// SS низкий сигнал

   d_r1 = SPI_WR_M(d_w);//отправляем d_w по SPI, а принятые данные сохраняем в переменной d_r1
   d_r2 = SPI_WR_M(d_w);//отправляем d_w по SPI, а принятые данные сохраняем в переменной d_r2
   
   PORT_SPI |= 1<<SS;     // SS высокий сигнал
   PORT_SPI &= ~(1<<CE);// CE низкий сигнал

   itoa(d_r1,s,16); if(d_r1<16){s[1]=s[0];s[0]='0';}//перевод 1-го байта в hex-текст
   lcd_dat(s[0]);
   lcd_dat(s[1]);
   lcd_dat(':');

   itoa(d_r2,s,16); if(d_r2<16){s[1]=s[0];s[0]='0';}//перевод 2-го байта в hex-текст
   lcd_dat(s[0]);
   lcd_dat(s[1]);
}
d_r1-статусный регистр, прочитался как 0x00, и d_r2-сам регистр, тоже как 0x00
Что делаю не так? Где ошибка?

Re: HOPERF RFM70, особенности работы

Добавлено: Вт мар 12, 2013 09:31:46
digitalr
А схему подключения можно посмотреть? С нумерацией ног как на стороне тиньки, так и на стороне модуля?
Потому как навскидку могу предположить, что перепутаны MISO/MOSI.

Re: HOPERF RFM70, особенности работы

Добавлено: Чт апр 25, 2013 23:06:26
C0oo1D
Я вот не пойму, разве в даташите указанно что нужно переинициализировать все регистры? в них же при сбросе уже вбиты дефолтные значения.. (не все регистры проверял, несколько первых нулевого банка).

Re: HOPERF RFM70, особенности работы

Добавлено: Пт апр 26, 2013 08:02:18
digitalr
Дефолтные значения довольно далеки от оптимальных.

Re: HOPERF RFM70, особенности работы

Добавлено: Пт апр 26, 2013 21:15:54
C0oo1D
digitalr писал(а):Дефолтные значения довольно далеки от оптимальных.
Возможно, но под каждые условия свои ведь настройки. Почему не обеспечить работоспособность без кучи необязательных действий? А дальше уже каждый сам решит что ему необходимо :)

Re: HOPERF RFM70, особенности работы

Добавлено: Вт ноя 05, 2013 15:00:01
eess9
Народ, пришлось мне для одной задачки использовать RFM73 (аналог вышедший на замену RFM70). Код полностью идентичен, единственное изменил значения инициализации в паре регистров. Но это не существенно.
Передавать мне надо в обе стороны. Вопрос такой: в одну сторону - без проблем, когда начинает передавать второй модуль (передача идет в противоположную сторону) может передать, в лучшем случае, пару пакетов. Дальше виснет, передачи и/или приема нет. Кто-то сталкивался?

Re: HOPERF RFM70, особенности работы

Добавлено: Ср ноя 06, 2013 14:13:57
BigallS
eess9 писал(а):Народ, пришлось мне для одной задачки использовать RFM73 (аналог вышедший на замену RFM70). Код полностью идентичен, единственное изменил значения инициализации в паре регистров. Но это не существенно. ...
А я пробовал с STM32VL-DISCOVERY аналогичный модуль запустить с примером отсюда http://www.coocox.org/driver.html - RF Transceivers RFM70 (правда без результата пока с STM мало знаком), снес всё. Если пример работы у вас на СИ, могли бы поделиться?

Re: HOPERF RFM70, особенности работы

Добавлено: Ср ноя 06, 2013 14:21:19
eess9
Четвертый пост сверху на этой странице. Код для mega16/32. Сейчас переписал под atxmega256, изменил только настройку spi. Так что код полностью рабочий.
Со своей проблемой разобрался, пакеты без подтверждения. С подтверждением приема начинается чушь, но в таком виде меня вполне устраивает :))

Re: HOPERF RFM70, особенности работы

Добавлено: Пт ноя 08, 2013 18:45:27
eess9
Народ, кто с дальностью игрался на RFM73?
Вот тут есть таблица на 4 странице http://embeddedwirelesssolutions.com/re ... _RFM70.pdf
поставил -94 dBm дальность на открытом пространстве всего около 10 метров :shock: :shock: :shock: Что за чушь... Почему так мало???
Никто не сталкивался?

Re: HOPERF RFM70, особенности работы

Добавлено: Ср ноя 20, 2013 11:41:53
eess9
Кто работал с RFM73 подскажите пожалуйста какими числами инициализировали регистры. Я так понимаю, за дальность в основном отвечает банк регистров 1. Установил как в даташите рекоммендуют, дистанция метров 10 и то, если вертикально модули стоят. Если лежат горизонтально на столах, то метров 5, не больше. Поигрался с этими регистрами, еще пару метров вытянул. Я понимаю, что RFM73 по сравнению с RFM70 стал слабее по чувствительности приемника. Но не настолько же... Кому-то удавалось получить анонсированные метров 35-40???