HOPERF RFM70, особенности работы
Re: HOPERF RFM70, особенности работы
Уважаемый eess9, мы с Вами собратья по несчастью. Сам уже бьюсь пятый день с RFM73. И mega 8, и С8051F320 и даже 32 разрядный LPC2148 прикручивал к нему, так и есть "стоя" 10 метров, "лёжа" 5 -6. Самое плохое, что примеры инициализации банка 1 очень разняться с документацией, а их только записать можно, прочитать можно далеко не все (самые нужные только для записи). Причём, я тоже наигралься с автоподтверждениями, CRC и т.п ничего это не меняет. Ролики, как два рядом лежащие модуля передают данные - это красиво, но не убедительно. Сам производитель гордо заявляет:
4-pin SPI interface with maximum 8 MHz clock rate
Support 1 and 2 Mbps air data rate
FSK/GFSK modulation
Programmable output power: -35 ~ +5 dBm
Rx sensitivity -88dBm at the 1M data rate
Programmable frequency range 2400-2483.5MHz, 83 channels selectable
Ultra low power consumption
Data buffering, burst data transmission, auto re-transmission and auto acknowledge
6 data pipes for 1:6 star networks
Low-price MCU enables high-performance RF system
Open area distance: 70-80m
Последняя фраза заставляет сильно усомниться.
А по сему, много уважаемые Коты, уже как минимум два человека не могут понять в чём "беда", может кто-нибудь сможет разъяснить.
Спасибо.
4-pin SPI interface with maximum 8 MHz clock rate
Support 1 and 2 Mbps air data rate
FSK/GFSK modulation
Programmable output power: -35 ~ +5 dBm
Rx sensitivity -88dBm at the 1M data rate
Programmable frequency range 2400-2483.5MHz, 83 channels selectable
Ultra low power consumption
Data buffering, burst data transmission, auto re-transmission and auto acknowledge
6 data pipes for 1:6 star networks
Low-price MCU enables high-performance RF system
Open area distance: 70-80m
Последняя фраза заставляет сильно усомниться.
А по сему, много уважаемые Коты, уже как минимум два человека не могут понять в чём "беда", может кто-нибудь сможет разъяснить.
Спасибо.
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Видимо, уважаемый Sadmivi, народу ответить нечего.
Банк 1 я инициализировал таким образом:
Может быть... кому-то... или кто-то чего-то скажет....
Банк 1 я инициализировал таким образом:
Код: Выделить всё
const uint8_t PROGMEM RFM70_bank1Init[][5] = {
// address data
{ (0x20|0x00), 0x40, 0x4B, 0x01, 0xE2 },
{ (0x20|0x01), 0xC0, 0x4B, 0x00, 0x00 },
{ (0x20|0x02), 0xD0, 0xFC, 0x8C, 0x02 },
{ (0x20|0x03), 0x99, 0x00, 0x39, 0x41 },
{ (0x20|0x04), 0xb9, 0x96, 0x82, 0x1B },
{ (0x20|0x05), 0x28, 0x02, 0x7F, 0xA6 },
{ (0x20|0x06), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x07), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x08), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x09), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x0a), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x0b), 0x00, 0x00, 0x00, 0x00 },
{ (0x20|0x0C), 0x00, 0x12, 0x73, 0x00 },
{ (0x20|0x0D), 0x46, 0xb4, 0x80, 0x00 }
};Может быть... кому-то... или кто-то чего-то скажет....
Re: HOPERF RFM70, особенности работы
Кто нибудь пробовал этот пример работы с RFM73, https://www.tindie.com/products/Heye/ar ... -wireless/ там есть ссылка на https://github.com/heye/rfm73
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Я нашел некоторые отличия в инициализации банков регистров. Надо будет попробовать на выходных с такой инициализацией.
- DooMmen
- Встал на лапы
- Сообщения: 93
- Зарегистрирован: Вс фев 22, 2009 15:57:47
- Откуда: Харьков
- Контактная информация:
Re: HOPERF RFM70, особенности работы
Столкнулся с той-же проблемой на RFM73 что и большинство - маленькая дальность. У меня была цель передавать данные через толстую несущую кирпичную стену данные с термометра. Раньше я использовал модули RFM12, но у них было очень много проблем и мороки с обработкой данных на уровне контроллера (мусора в эфире на частоте 868МГц в нашем доме неимоверное количество), но посмотрев на цену RFM73 и его характеристики и возможности - набрал себе кучу.
После глубочайшего изучения даташитов и семплов я пришел к выводу что китайцы и сами не знают что они сделали, так как семплы то-же кривые в плане дальности работы.
Ниже привожу инициализацию для банка 1, с которой у меня модули работают лучше всего.
Кусок кода написан под asm, 0x00 в самом конце - стоповый для программы (в модуль не передавать)
Отличия от вышеприведенных инициализаций - отключил RSSI, PLL - 130us (регистры 0x05 и 0x0C).
* Отредактировано! Включил режим совместимости - с ним стабильнее работает при низкой температуре.
После глубочайшего изучения даташитов и семплов я пришел к выводу что китайцы и сами не знают что они сделали, так как семплы то-же кривые в плане дальности работы.
Ниже привожу инициализацию для банка 1, с которой у меня модули работают лучше всего.
Код: Выделить всё
RFM_Const: .db 5, W_REG|0x00, 0x40, 0x4B, 0x01, 0xE2
.db 5, W_REG|0x01, 0xC0, 0x4B, 0x00, 0x00
.db 5, W_REG|0x02, 0xD0, 0xFC, 0x8C, 0x02
.db 5, W_REG|0x03, 0x99, 0x00, 0x39, 0x41
.db 5, W_REG|0x04, 0xD9, 0xB6, 0x82, 0x1B
.db 5, W_REG|0x05, 0x24, 0x06, 0x7F, 0xA6
.db 5, W_REG|0x0C, 0x00, 0x12, 0x73, 0x05
.db 5, W_REG|0x0D, 0x46, 0xB4, 0x80, 0x00
.db 12, W_REG|0x0E, 0x41, 0x20, 0x08, 0x04, 0x81, 0x20, 0xCF, 0xF7, 0xFE, 0xFF, 0xFF, 0x00Кусок кода написан под asm, 0x00 в самом конце - стоповый для программы (в модуль не передавать)
Отличия от вышеприведенных инициализаций - отключил RSSI, PLL - 130us (регистры 0x05 и 0x0C).
* Отредактировано! Включил режим совместимости - с ним стабильнее работает при низкой температуре.
Скажем нет пиратству! - Качаем только лицензионные диски.
Re: HOPERF RFM70, особенности работы
Добрый день уважаемые коты!!
Прошу вашей помощи в проверке работы с радиомодулями RFM70, есть у меня модуль с подключенным датчиком температуры и давления, необходимо реализовать вывод информации по радиоканалу на другой модуль, к которому подключен дисплей, с выводом значений температуры и давления.
1-й модуль - Atmega 8а, к которому порт D подключён датчик температуры PD3(выв 1), порт С датчик давления PС3 (выв 26). Радиомодуль подключён к порту B
2-й модуль - Atmega 32a, к порту А (PA0-PA7 - шина данных) и порту С (управление PC4-PC7 - RD,RES,CS,WR,DC соответственно) подключён дисплей S5230, к порту B радиомодуль
В модуле 1 сделал приём данных с датчика температуры (проверил работает - для этого временно подключал дисплей и выводил температуру, потом отключил дисплей и подключил радиомодуль к пинам указанным выше). Инициализацию радиомодуля взял с предыдущей страницы с примеров уважаемого "eess9", пример для передатчика.
В модуле 2 - настроил вывод на дисплей (работает), инициализацию радиомодуля также с примера уважаемого "eess9", пример для приёмника.
В первом модуле в main пытаюсь передать температуру переменная (uint8_t Temperature ), а во втором принять и вывести на экран.
1 модуль - код получение данных с датчика температуры и передача
Модуль 2 приём - main
В результате на дисплее надпись "Нет Приёма". т.е. receivePayload не работает.
Что я делаю неправильно?
Радиомодули покупал в китае, как проверить что они работают?
Может я по пинам неправильно подключил?
P/S. Есть ещё RFM73 могу и их попробовать подключить.
Прошу вашей помощи в проверке работы с радиомодулями RFM70, есть у меня модуль с подключенным датчиком температуры и давления, необходимо реализовать вывод информации по радиоканалу на другой модуль, к которому подключен дисплей, с выводом значений температуры и давления.
1-й модуль - Atmega 8а, к которому порт D подключён датчик температуры PD3(выв 1), порт С датчик давления PС3 (выв 26). Радиомодуль подключён к порту B
Код: Выделить всё
// PIN SETUP
//for atmega 8a
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define CE PB0
#define CSN PB2
#define SCK PB5
#define MISO PB4
#define MOSI PB3
#define IRQ PB1
2-й модуль - Atmega 32a, к порту А (PA0-PA7 - шина данных) и порту С (управление PC4-PC7 - RD,RES,CS,WR,DC соответственно) подключён дисплей S5230, к порту B радиомодуль
Код: Выделить всё
// PIN SETUP
//Atmega32a
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define CE PB2
#define CSN PB4
#define SCK PB7
#define MISO PB6
#define MOSI PB5
#define IRQ PD2
В модуле 1 сделал приём данных с датчика температуры (проверил работает - для этого временно подключал дисплей и выводил температуру, потом отключил дисплей и подключил радиомодуль к пинам указанным выше). Инициализацию радиомодуля взял с предыдущей страницы с примеров уважаемого "eess9", пример для передатчика.
В модуле 2 - настроил вывод на дисплей (работает), инициализацию радиомодуля также с примера уважаемого "eess9", пример для приёмника.
В первом модуле в main пытаюсь передать температуру переменная (uint8_t Temperature ), а во втором принять и вывести на экран.
1 модуль - код получение данных с датчика температуры и передача
Код: Выделить всё
int main(void)
{
int PWMValue;
char buffer2[] = ""; //Переменная температуры char
//---------- Configure LCD1202 ----------
// nlcd_Init();
// _delay_ms(10);
// nlcd_GotoXY(0,0);
// nlcd_PrintF(PSTR("Gauge pressure")); // Выводим строку из программной памяти // Displaying the string of program memory
//----------
// - Buffer for ROM
uint8_t ROM[ 9 ];
//---------- init--------------------------------------------
sei();
_delay_ms(1000);
Begin();
setMode(1);
setChannel(28);
setMode(0);//transmit
//setMode(1);//resive
//USART_Init ( MYUBRR );
//UCSRA=0x00;
//UCSRB=0x18;
//UCSRC=0x86;
//UBRRH=0x00;
//UBRRL=0x33;
//PORTA |= (1<<PA4);
//j=0;
//---------- RFM70 init--------------------------------------------
while(1)
{
//------- работа с датчиком температуры ds18B20
// - Prepare for new cycle
// _delay_ms( 1000 );
memset( ROM, 0, sizeof( ROM ) );
// - Start conversion
OneWire_reset();
OneWire_writeByte( 0xCC, 1 );
OneWire_writeByte( 0x44, 1 );
// - Wait until conversion finished
_delay_ms( 1000 );
// - Read ROM
OneWire_reset();
OneWire_writeByte( 0xCC, 1 );
OneWire_writeByte( 0xBE, 1 );
OneWire_read( ROM, sizeof( ROM ) );
// --- Get 8-bit temperature
// - Construct 16-bit register value from 0 and 1 bytes of ROM.
// - Remove float part (4 right bits) to get integer value
uint8_t Temperature = ((( ROM[ 1 ] << 8 ) | ROM[ 0 ]) >> 4);
//---------- end--- прочитали данные от датчика температуры
//---------- transmit-------------------------------------
sendPayload(Temperature,1, 0);
//---------- RFM70 transmit-------------------------------------
//-- вывод на дисплей - отключено, проверял когда выводил на дисплей
//PWMValue = Temperature; // * 2; // - 40;
/*
buffer2[0]=PWMValue % 10;
PWMValue/=10;
buffer2[1]=PWMValue % 10;
PWMValue/=10;
buffer2[2]=PWMValue % 10;
PWMValue/=10;
buffer2[3]=PWMValue % 10;
PWMValue/=10;
buffer2[4]=PWMValue % 10;
PWMValue/=10;
buffer2[5]=PWMValue % 10;
PWMValue/=10;
buffer2[6]=PWMValue % 10;
PWMValue/=10;
buffer2[7]=PWMValue % 10;
nlcd_GotoXY(0,4);
nlcd_Putc(0x30+buffer2[7]);
nlcd_GotoXY(1,4);
nlcd_Putc(0x30+buffer2[6]);
nlcd_GotoXY(2,4);
nlcd_Putc(0x30+buffer2[5]);
nlcd_GotoXY(3,4);
nlcd_Putc(0x30+buffer2[4]);
nlcd_GotoXY(4,4);
nlcd_Putc(0x30+buffer2[3]);
nlcd_GotoXY(5,4);
nlcd_Putc(0x30+buffer2[2]);
nlcd_GotoXY(6,4);
nlcd_Putc(0x30+buffer2[1]);
nlcd_GotoXY(7,4);
nlcd_Putc(0x30+buffer2[0]);
nlcd_GotoXY(0,5);
nlcd_PrintF(PSTR("Get 8-bit temperature"));
*/
}
}
Модуль 2 приём - main
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "rfm70.c"
unsigned char fonB, fonG, fonR;
unsigned int i=0;
unsigned int *buffer;
int main(void)
{
io_init();//инит портов для дисплея
LCDInitV2();//инит дисплея s5230
fonR=0; //
fonG=0; //
fonB=255;
CLSLcd(); //очистка дисплея
//выводим на дисплей текст
showstr("Привет",0,50,0,0,128); //Текст, начало X Y, цвет
showstr("BigAll'у",0,80,0,0,128); //Текст, начало X Y, цвет
//---------- для радиомодуля ----------
sei();
Begin();
setMode(1);
setChannel(28);
//setMode(0);//transmit
setMode(1);//resive
DDRD |= (1<<PD2);
TCCR0=0b01111010;
TCCR2=0b01111010;
TCCR1A=0b11110001;
TCCR1B=0b00001010;
OCR0=125;
OCR2=125;
OCR1A=125;
OCR1B=125;
i=0;
//---------- end для радиомодуля ----------
while(1)
{
//---------- для радиомодуля ----------
if (receivePayload(buffer))
{
showstr("Приём",0,100,0,0,255); //это строка для проверки хотябы чтото пришло?
//PORTA=*buffer;
i++;
//PORTA^=(1<<PA4);
if (i == 1)
OCR0=*buffer;
if (i == 2)
OCR2=*buffer;
if (i == 3)
OCR1A=*buffer;
showstr((unsigned char)OCR1A,0,120,0,0,128); //Текст, начало X Y, цве
if (i==4)
{
OCR1B=*buffer;
i=0;
}
showstr((unsigned char)OCR1B,0,150,0,0,128); //Текст, начало X Y, цве
}
else
{
showstr("Нет Приёма",0,100,0,0,55); //это строка для проверки
}
//---------- end для радиомодуля ----------
}
}
В результате на дисплее надпись "Нет Приёма". т.е. receivePayload не работает.
Что я делаю неправильно?
Радиомодули покупал в китае, как проверить что они работают?
Может я по пинам неправильно подключил?
P/S. Есть ещё RFM73 могу и их попробовать подключить.
- Вложения
-
- IMG_20140413_180526_2.jpg
- (174.79 КБ) 377 скачиваний
-
- IMG_20140413_180457_2.jpg
- (162.37 КБ) 417 скачиваний
-
- IMG_20140413_153132_2.jpg
- (171.25 КБ) 611 скачиваний
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Проверьте что точно правильно все подключили: MISO к MISO, MOSI к MOSI, а SCK к SCK. Покажите саму инициализацию spi. Она отличается от моей? mega32 совместима с mega16, так что все должно быть норм, если инициализацию не трогать. Соединения на плате проверьте, чтобы был контакт.
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Еще вопрос: кто-то пробовал садить вывод SS (CSN для RFM73) сразу на землю? Будет работать? Пытаюсь запустить ATTiny44 + RFM73. Выводов не хватает вообще.
Re: HOPERF RFM70, особенности работы
eess9 писал(а):Проверьте что точно правильно все подключили: MISO к MISO, MOSI к MOSI, а SCK к SCK. Покажите саму инициализацию spi. ....
Ещё раз проверил подключение, контакты, инициализацию не трогал, как у вас было так и есть, кроме того для Atmega 32a использовал те же выводы, если вы посмотрите в первом моем сообщении код и приложенные рисунки. Большое сомнение у меня вызывает подключение радимодуля к Atmega 8a, т.к. там нумерация выводов другая, но сам SPI я подключил соответсвенно как вы советовали (МК-радиомодуль) MISO к MISO, MOSI к MOSI, а SCK к SCK это Atmega 8a - PB4 = MISO, PB3 = MOSI, PB5 = SCK.
А вот остальные PB0 = CE , PB2= CSN, PB1 = IPQ возможно здесь надо по другому подключить их?
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Единственное что приходит на ум: в mega8 вы поменяли IRQ с порта D на B. Соответственно надо внести изменения в файле rfm70.c заменив в строках порт на B.
Код: Выделить всё
PORTD|=(1<<IRQ);
DDRD &=~ (1<<IRQ);Re: HOPERF RFM70, особенности работы
А.. ну да, точно не заметил, пересмотрю ещё весь код.
Сегодня распаяю разъёмы для 2 модулей RFM73 чтобы попробовать ещё на них, исключить неисправность самих модулей (надежды полной на китайцев нет). Для этих модулей что необходимо изменить в Bank0 register, Bank1 register?
В ваших примерах используется uart может как тот это повлиять на работу в моем варианте,
я этот код отключил в 1 модуле
получаю в переменную Temperature температуру и её подаю на вход процедуры sendPayload(Temperature,1, 0);
во втором модуле в строке
if (receivePayload(buffer))
если что есть в buffer то вставил строку showstr("Приём",0,100,0,0,255); //это строка для проверки
для отладки чтобы понять есть что там или нет, и вижу что там ничего нет так как попадаю в секцию else
Сегодня распаяю разъёмы для 2 модулей RFM73 чтобы попробовать ещё на них, исключить неисправность самих модулей (надежды полной на китайцев нет). Для этих модулей что необходимо изменить в Bank0 register, Bank1 register?
В ваших примерах используется uart может как тот это повлиять на работу в моем варианте,
я этот код отключил в 1 модуле
Код: Выделить всё
//UCSRA=0x00;
//UCSRB=0x18;
//UCSRC=0x86;
//UBRRH=0x00;
//UBRRL=0x33;
//PORTA |= (1<<PA4);
получаю в переменную Temperature температуру и её подаю на вход процедуры sendPayload(Temperature,1, 0);
во втором модуле в строке
if (receivePayload(buffer))
если что есть в buffer то вставил строку showstr("Приём",0,100,0,0,255); //это строка для проверки
для отладки чтобы понять есть что там или нет, и вижу что там ничего нет так как попадаю в секцию else
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
UART на работу rfm70 не влияет. Миграция с RFM70 на RFM73 описана в прикрепленном файле. Но даже если вы ничего не меняете, то RFM73 заработает, но дальность будет меньше чем могла бы быть. Да, еще у RFM73 мощность передатчика ниже, так что дальность тоже будет меньше чем у RFM70.
- Вложения
-
- Precautions_on_RFM73_Replacing_RFM70.pdf
- (174.13 КБ) 628 скачиваний
Re: HOPERF RFM70, особенности работы
Ясно, вечером попробую.
Re: HOPERF RFM70, особенности работы
К сожалению исправление кода на порт B и подключение модулей RFM73 результата не дали. Вечером подключу логический анализатор вот такой http://elementus.ru/public_html/WD/arch ... 0%BE%D1%80 клон USBee Ax. Как можно проверить эти модули в режиме передачи и приёма?
Re: HOPERF RFM70, особенности работы
Подключил логический анализатор, похоже что работает обмен информацией между радиомодулем RFM73 и Atmega 8a, но почему приёмник не принимает
может передатчику надо указать на какой адрес приёмника передавать?
На 1429,85 ms начало передачи пакета, 1432,45 ms окончание передачи пакета потом никаких изменений уровней нет. На 2754,75 ms подтверждение передачи пакета и изменение уровня IRQ на низкий!!! Т.е. обмен между МК и радиомодулем происходит?
P.S. Только что тут прочитал http://we.easyelectronics.ru/part/radio ... rfm70.html что
"...Когда передатчик посылает пакет, он переключается в режим приёмника ждёт пакет подтверждения приема (ACK) с адресом удаленного модуля (того, кому мы передавали). И только при получении подтверждения сигнализирует успешную передачу низким уровнем на ножке IRQ..."
Модуль 1 получил от модуля 2 подтверждение что пакет принят, обмен идёт и у меня просто в модуле 2 не правильно работает функция receivePayload?
На 1429,85 ms начало передачи пакета, 1432,45 ms окончание передачи пакета потом никаких изменений уровней нет. На 2754,75 ms подтверждение передачи пакета и изменение уровня IRQ на низкий!!! Т.е. обмен между МК и радиомодулем происходит?
P.S. Только что тут прочитал http://we.easyelectronics.ru/part/radio ... rfm70.html что
"...Когда передатчик посылает пакет, он переключается в режим приёмника ждёт пакет подтверждения приема (ACK) с адресом удаленного модуля (того, кому мы передавали). И только при получении подтверждения сигнализирует успешную передачу низким уровнем на ножке IRQ..."
Модуль 1 получил от модуля 2 подтверждение что пакет принят, обмен идёт и у меня просто в модуле 2 не правильно работает функция receivePayload?
- Вложения
-
- Atmega 8a 2755 ms подтверждение.jpg
- (225.1 КБ) 403 скачивания
-
- Atmega 8a окончание передачи.jpg
- (230.51 КБ) 362 скачивания
-
- Atmega8a начало передачи.jpg
- (240.34 КБ) 607 скачиваний
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
Похоже что пакеты передаются по воздуху. А у приемника обмен есть между mega и rfm?
Не обязательно IRQ будет падать в 0 при получении ответа. Вы используете функцию для передачи пакета. В ней третий входной аргумент (toAck) отвечает за то, чтобы ожидать ответа от приемника или нет. Если toAck = 0 (как у вас), то ответа передатчик не ждет (пакет посылается, а примут его или нет никого не волнует). Если toAck = -1, то переключаемся на прием и ожидаем подтверждения получения. Если toAck = 1, то еще какой-то режим, уже не помню точно.
Не обязательно IRQ будет падать в 0 при получении ответа. Вы используете функцию
Код: Выделить всё
uint8_t sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck)Re: HOPERF RFM70, особенности работы
У меня была мысль поставить toAck = -1 или попробовать выключить модуль с приёмником и посмотреть будет ли падать IRQ, но уже было поздно (час ночи). Вечером попробую, а также подключу лог. анализатор на 2 модуль к приёмнику и посмотрю что там происходит.
Я вчера ещё смотрел что происходит далее.. запустил лог анализатор чтобы он записал более длинный период и там видно что каждые 1310 ms происходит обмен по SPI, но уровни IRQ(низкий) и CE (высокий) не меняются, такое впечатление что радиомодуль или МК периодически опрашивает шину.
Я вчера ещё смотрел что происходит далее.. запустил лог анализатор чтобы он записал более длинный период и там видно что каждые 1310 ms происходит обмен по SPI, но уровни IRQ(низкий) и CE (высокий) не меняются, такое впечатление что радиомодуль или МК периодически опрашивает шину.
- Вложения
-
- Посылки с периодом 1310 ms.jpg
- (224.34 КБ) 631 скачивание
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: HOPERF RFM70, особенности работы
На самом деле писал вам и заметил, что там ошибка: toAck имеет тип uint8_t, как входное значение функции. Соответственно -1 он не будет равен никогда. Исправьте на int8_t. Вывод CE отвечает за перевод RFM73 в режим Standby-I. Если короче, то в режим бездействия. Если CE 1, то кристалл в режиме Standby-I, если 0 -то работает. При поднятой ноге CE не будет ни передачи, ни приема (было дело убедился лично). Опрашивать периодически контроллер не может, т.к. в библиотеке не содержатся таймеры и бесконечные циклы. Смотрите по своему основному коду.
Re: HOPERF RFM70, особенности работы
Спасибо за подсказку, учтём.
Re: HOPERF RFM70, особенности работы
Подключил логический анализатор к модулю 2 на Atmega 32a, и получается что после включения на шине SPI видны 2 посылки, первая начинается с 3980 ms по 3999 ms, вторая с 4099 ms по 4102 ms, далее на шине после 4112 ms каждые 12 ms идут короткие посылки.
Т.е. получается (если посмотреть предыдущие посылки от модуля 1) что первый модуль начинает передавать данные с 1429 ms по 1432,5 ms, далее периодически в 1300 ms на шине SPI короткие посылки
если бы 2 модуль принимал данные с первого то примерно в этот период 1429 ms по 1432,5 ms у него тоже должны были быть пакеты на шине, а их нет.
Значит 2 модуля не видят друг друга?
P.S. Скорей всего посылки на шине SPI для 1 и 2 модуля идущие после включения, это инициализация этих радиомодулей, а далее периодические короткие посылки - опрос модулей, или я ошибаюсь?
Т.е. получается (если посмотреть предыдущие посылки от модуля 1) что первый модуль начинает передавать данные с 1429 ms по 1432,5 ms, далее периодически в 1300 ms на шине SPI короткие посылки
если бы 2 модуль принимал данные с первого то примерно в этот период 1429 ms по 1432,5 ms у него тоже должны были быть пакеты на шине, а их нет.
Значит 2 модуля не видят друг друга?
P.S. Скорей всего посылки на шине SPI для 1 и 2 модуля идущие после включения, это инициализация этих радиомодулей, а далее периодические короткие посылки - опрос модулей, или я ошибаюсь?
- Вложения
-
- Модуль 2 Atmega 32a приёмник 4102,5 ms окончание 2 пакета.jpg
- (209.74 КБ) 462 скачивания
-
- Модуль 2 Atmega 32a приёмник после 4112 ms повторяющиеся каждые 12 ms короткие посылки .jpg
- (196.87 КБ) 571 скачивание
-
- Модуль 2 Atmega 32a приёмник 4099 ms начало 2 пакета.jpg
- (212.92 КБ) 598 скачиваний
-
- Модуль 2 Atmega 32a приёмник 3999 ms окончание пакета.jpg
- (219.03 КБ) 579 скачиваний
-
- Модуль 2 Atmega 32a приёмник 3980 ms начало пакета.jpg
- (242.58 КБ) 560 скачиваний