HOPERF RFM70, особенности работы
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
С асемблером я вообще никогда не дружил.
Может digitalr чего-то подскажет.
По поводу переменной длинны: как я понял у функции передачи данных в RFM70 sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck)
первый аргумент - данные, которые надо передать
второй - длинна передаваемых данных, соответственно количество байт первого аргумента должно (ну очень желательно) соответствовать второму аргументу
третий - как передать: просто выплюнуть и забыть, ждать подтверждения принятия или просьбы с повтором отсылки от приемника и т.д.
Соответственно receivePayload(uint8_t *payload) должна принять данные длиной равной второму аргументу функции sendPayload.
Мой немецкий друг такой же как и ваш. Просто это то, что мне удалось найти, на мой взгляд, толкового в google, в надежде побыстрей собрать и забыть, т.к. просто хотел попробовать идею на том что было под рукой, а дальше уже вдумчиво собирать. Принял байт по UART выплюнул в RFM70, принял с RFM70 записал в регистр сравнения таймера. Таймер настроен на ШИМ, вуаля и управление скважностью без проводов. Что казалось могло быть сложного?
Я этому другу написал в коменты, правда на английском, с немецким я вообще никак. Может что подскажет.
Может digitalr чего-то подскажет.
По поводу переменной длинны: как я понял у функции передачи данных в RFM70 sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck)
первый аргумент - данные, которые надо передать
второй - длинна передаваемых данных, соответственно количество байт первого аргумента должно (ну очень желательно) соответствовать второму аргументу
третий - как передать: просто выплюнуть и забыть, ждать подтверждения принятия или просьбы с повтором отсылки от приемника и т.д.
Соответственно receivePayload(uint8_t *payload) должна принять данные длиной равной второму аргументу функции sendPayload.
Мой немецкий друг такой же как и ваш. Просто это то, что мне удалось найти, на мой взгляд, толкового в google, в надежде побыстрей собрать и забыть, т.к. просто хотел попробовать идею на том что было под рукой, а дальше уже вдумчиво собирать. Принял байт по UART выплюнул в RFM70, принял с RFM70 записал в регистр сравнения таймера. Таймер настроен на ШИМ, вуаля и управление скважностью без проводов. Что казалось могло быть сложного?
Я этому другу написал в коменты, правда на английском, с немецким я вообще никак. Может что подскажет.
- Реклама
Re: HOPERF RFM70, особенности работы
Плиз,
Ваш пример+ DS постараюсь разобраться.
Ваш пример+ DS постараюсь разобраться.- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Пацаны спасибо все заработало!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Тупые немцы, поэтому войну и проиграли!!! Он передавал не данные, а адрес по которому в памяти находятся данные.
надо всеголишь
и все пидалит. Если код интересен давайте оба проекта выложу, но только через пару часов. Щас только от эйфории отойду)))
Тупые немцы, поэтому войну и проиграли!!! Он передавал не данные, а адрес по которому в памяти находятся данные.
надо всеголишь
Код: Выделить всё
uint8_t UART_Buff;
uint8_t *buffer=&UART_Buff;
...
sendPayload(buffer,1, 0);
и все пидалит. Если код интересен давайте оба проекта выложу, но только через пару часов. Щас только от эйфории отойду)))
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Вот код, только с коментами у меня тоже глухо. Может кому поможет
- Вложения
-
- AVR studio.rar
- (78.45 КБ) 580 скачиваний
Re: HOPERF RFM70, особенности работы
Всем привет. Вот тоже приобрел пару трансиверов, а связь наладить не удалось. Использую аппаратный спи меги16 и меги8. Пишу на асме, так как в си не силен. Приму критику и пожелания по коду. Спасибо
- Вложения
-
- avr4.asm
- код передатчика
- (13.85 КБ) 450 скачиваний
- Реклама
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: HOPERF RFM70, особенности работы
У этих модулей, как я понял, некоторые регистры пишутся с MSB, некоторые c LSB. Ещё и разной длины.
С аппаратным SPI там туго придётся. Я просто ногами дрыгать решил.
Впрочем, потом забил)) Щас с SIM20 играюсь)
С аппаратным SPI там туго придётся. Я просто ногами дрыгать решил.
Впрочем, потом забил)) Щас с SIM20 играюсь)
Re: HOPERF RFM70, особенности работы
Тогда можно попробовать программный спи по примеру авр320
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
код на си при правильном применении #define одинаков для mega16 и mega8. Тот код, что я выкладывал в этой теме должен работать и для mega8. С ассемблером вообще глухо, извини. Есть мысль переписать этот код для ATtiny, но если руки дойдут и памяти программ у ATtiny хватит, "хорошая" инициализация rfm70 занимает нехило...
Re: HOPERF RFM70, особенности работы
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, особенности работы
Уважаемый digitalr можете ли посмотреть мой код, может найдете какие то замечания, или выложите свой пример кода. а то у меня не хотят они работать...
Re: HOPERF RFM70, особенности работы
тини2313+rfm70. Помогите пож. разобраться
пытаюсь прочитать однобайтовый регистр 0х06 в нулевом банке. вот код:
d_r1-статусный регистр, прочитался как 0x00, и d_r2-сам регистр, тоже как 0x00
Что делаю не так? Где ошибка?
пытаюсь прочитать однобайтовый регистр 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, особенности работы
А схему подключения можно посмотреть? С нумерацией ног как на стороне тиньки, так и на стороне модуля?
Потому как навскидку могу предположить, что перепутаны MISO/MOSI.
Потому как навскидку могу предположить, что перепутаны MISO/MOSI.
-
C0oo1D
- Первый раз сказал Мяу!
- Сообщения: 38
- Зарегистрирован: Пн дек 29, 2008 14:23:35
- Откуда: Донецк, Украина
Re: HOPERF RFM70, особенности работы
Я вот не пойму, разве в даташите указанно что нужно переинициализировать все регистры? в них же при сбросе уже вбиты дефолтные значения.. (не все регистры проверял, несколько первых нулевого банка).
Re: HOPERF RFM70, особенности работы
Дефолтные значения довольно далеки от оптимальных.
-
C0oo1D
- Первый раз сказал Мяу!
- Сообщения: 38
- Зарегистрирован: Пн дек 29, 2008 14:23:35
- Откуда: Донецк, Украина
Re: HOPERF RFM70, особенности работы
digitalr писал(а):Дефолтные значения довольно далеки от оптимальных.
Возможно, но под каждые условия свои ведь настройки. Почему не обеспечить работоспособность без кучи необязательных действий? А дальше уже каждый сам решит что ему необходимо
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Народ, пришлось мне для одной задачки использовать RFM73 (аналог вышедший на замену RFM70). Код полностью идентичен, единственное изменил значения инициализации в паре регистров. Но это не существенно.
Передавать мне надо в обе стороны. Вопрос такой: в одну сторону - без проблем, когда начинает передавать второй модуль (передача идет в противоположную сторону) может передать, в лучшем случае, пару пакетов. Дальше виснет, передачи и/или приема нет. Кто-то сталкивался?
Передавать мне надо в обе стороны. Вопрос такой: в одну сторону - без проблем, когда начинает передавать второй модуль (передача идет в противоположную сторону) может передать, в лучшем случае, пару пакетов. Дальше виснет, передачи и/или приема нет. Кто-то сталкивался?
Re: HOPERF RFM70, особенности работы
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, особенности работы
Четвертый пост сверху на этой странице. Код для mega16/32. Сейчас переписал под atxmega256, изменил только настройку spi. Так что код полностью рабочий.
Со своей проблемой разобрался, пакеты без подтверждения. С подтверждением приема начинается чушь, но в таком виде меня вполне устраивает
Со своей проблемой разобрался, пакеты без подтверждения. С подтверждением приема начинается чушь, но в таком виде меня вполне устраивает
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Народ, кто с дальностью игрался на RFM73?
Вот тут есть таблица на 4 странице http://embeddedwirelesssolutions.com/resources/Precautions_on_RFM73_Replacing_RFM70.pdf
поставил -94 dBm дальность на открытом пространстве всего около 10 метров
Что за чушь... Почему так мало???
Никто не сталкивался?
Вот тут есть таблица на 4 странице http://embeddedwirelesssolutions.com/resources/Precautions_on_RFM73_Replacing_RFM70.pdf
поставил -94 dBm дальность на открытом пространстве всего около 10 метров
Никто не сталкивался?
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Кто работал с RFM73 подскажите пожалуйста какими числами инициализировали регистры. Я так понимаю, за дальность в основном отвечает банк регистров 1. Установил как в даташите рекоммендуют, дистанция метров 10 и то, если вертикально модули стоят. Если лежат горизонтально на столах, то метров 5, не больше. Поигрался с этими регистрами, еще пару метров вытянул. Я понимаю, что RFM73 по сравнению с RFM70 стал слабее по чувствительности приемника. Но не настолько же... Кому-то удавалось получить анонсированные метров 35-40???


