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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

С асемблером я вообще никогда не дружил.
Может digitalr чего-то подскажет.

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

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

Мой немецкий друг такой же как и ваш. Просто это то, что мне удалось найти, на мой взгляд, толкового в google, в надежде побыстрей собрать и забыть, т.к. просто хотел попробовать идею на том что было под рукой, а дальше уже вдумчиво собирать. Принял байт по UART выплюнул в RFM70, принял с RFM70 записал в регистр сравнения таймера. Таймер настроен на ШИМ, вуаля и управление скважностью без проводов. Что казалось могло быть сложного?
Я этому другу написал в коменты, правда на английском, с немецким я вообще никак. Может что подскажет.
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Плиз, :beer: Ваш пример+ DS постараюсь разобраться.
Реклама
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Пацаны спасибо все заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Тупые немцы, поэтому войну и проиграли!!! Он передавал не данные, а адрес по которому в памяти находятся данные.
надо всеголишь

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

uint8_t UART_Buff;
uint8_t *buffer=&UART_Buff;
...
sendPayload(buffer,1, 0);

и все пидалит. Если код интересен давайте оба проекта выложу, но только через пару часов. Щас только от эйфории отойду)))
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Вот код, только с коментами у меня тоже глухо. Может кому поможет
Вложения
AVR studio.rar
(78.45 КБ) 580 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
sapak12
Родился
Сообщения: 3
Зарегистрирован: Ср янв 30, 2013 17:43:19

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

Сообщение sapak12 »

avr3.asm
код приемника
(14.21 КБ) 340 скачиваний
Всем привет. Вот тоже приобрел пару трансиверов, а связь наладить не удалось. Использую аппаратный спи меги16 и меги8. Пишу на асме, так как в си не силен. Приму критику и пожелания по коду. Спасибо
Вложения
avr4.asm
код передатчика
(13.85 КБ) 450 скачиваний
Реклама
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

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

Сообщение TripleKill »

У этих модулей, как я понял, некоторые регистры пишутся с MSB, некоторые c LSB. Ещё и разной длины.
С аппаратным SPI там туго придётся. Я просто ногами дрыгать решил.
Впрочем, потом забил)) Щас с SIM20 играюсь)
Реклама
sapak12
Родился
Сообщения: 3
Зарегистрирован: Ср янв 30, 2013 17:43:19

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

Сообщение sapak12 »

Тогда можно попробовать программный спи по примеру авр320
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

код на си при правильном применении #define одинаков для mega16 и mega8. Тот код, что я выкладывал в этой теме должен работать и для mega8. С ассемблером вообще глухо, извини. Есть мысль переписать этот код для ATtiny, но если руки дойдут и памяти программ у ATtiny хватит, "хорошая" инициализация rfm70 занимает нехило...
Аватара пользователя
digitalr
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт май 05, 2011 13:18:54

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

Сообщение 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, как минимум. Если "рабочие" регистры инициализировать тоже таблично, как и регистры первого банка.
sapak12
Родился
Сообщения: 3
Зарегистрирован: Ср янв 30, 2013 17:43:19

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

Сообщение sapak12 »

Уважаемый digitalr можете ли посмотреть мой код, может найдете какие то замечания, или выложите свой пример кода. а то у меня не хотят они работать...
xUSSR
Родился
Сообщения: 1
Зарегистрирован: Ср фев 27, 2013 14:57:55

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

Сообщение 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
Что делаю не так? Где ошибка?
Аватара пользователя
digitalr
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт май 05, 2011 13:18:54

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

Сообщение digitalr »

А схему подключения можно посмотреть? С нумерацией ног как на стороне тиньки, так и на стороне модуля?
Потому как навскидку могу предположить, что перепутаны MISO/MOSI.
C0oo1D
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн дек 29, 2008 14:23:35
Откуда: Донецк, Украина

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

Сообщение C0oo1D »

Я вот не пойму, разве в даташите указанно что нужно переинициализировать все регистры? в них же при сбросе уже вбиты дефолтные значения.. (не все регистры проверял, несколько первых нулевого банка).
Аватара пользователя
digitalr
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт май 05, 2011 13:18:54

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

Сообщение digitalr »

Дефолтные значения довольно далеки от оптимальных.
C0oo1D
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пн дек 29, 2008 14:23:35
Откуда: Донецк, Украина

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

Сообщение C0oo1D »

digitalr писал(а):Дефолтные значения довольно далеки от оптимальных.

Возможно, но под каждые условия свои ведь настройки. Почему не обеспечить работоспособность без кучи необязательных действий? А дальше уже каждый сам решит что ему необходимо :)
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Народ, пришлось мне для одной задачки использовать RFM73 (аналог вышедший на замену RFM70). Код полностью идентичен, единственное изменил значения инициализации в паре регистров. Но это не существенно.
Передавать мне надо в обе стороны. Вопрос такой: в одну сторону - без проблем, когда начинает передавать второй модуль (передача идет в противоположную сторону) может передать, в лучшем случае, пару пакетов. Дальше виснет, передачи и/или приема нет. Кто-то сталкивался?
Аватара пользователя
BigallS
Опытный кот
Сообщения: 752
Зарегистрирован: Пт апр 15, 2011 21:11:22
Откуда: Россия

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

Сообщение BigallS »

eess9 писал(а):Народ, пришлось мне для одной задачки использовать RFM73 (аналог вышедший на замену RFM70). Код полностью идентичен, единственное изменил значения инициализации в паре регистров. Но это не существенно. ...


А я пробовал с STM32VL-DISCOVERY аналогичный модуль запустить с примером отсюда http://www.coocox.org/driver.html - RF Transceivers RFM70 (правда без результата пока с STM мало знаком), снес всё. Если пример работы у вас на СИ, могли бы поделиться?
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Четвертый пост сверху на этой странице. Код для mega16/32. Сейчас переписал под atxmega256, изменил только настройку spi. Так что код полностью рабочий.
Со своей проблемой разобрался, пакеты без подтверждения. С подтверждением приема начинается чушь, но в таком виде меня вполне устраивает :))
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Народ, кто с дальностью игрался на RFM73?
Вот тут есть таблица на 4 странице http://embeddedwirelesssolutions.com/resources/Precautions_on_RFM73_Replacing_RFM70.pdf
поставил -94 dBm дальность на открытом пространстве всего около 10 метров :shock: :shock: :shock: Что за чушь... Почему так мало???
Никто не сталкивался?
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

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

Вернуться в «Периферия»