Jump to content

    
Sign in to follow this  
adc

Радиомодули RFM12

Recommended Posts

Приветствую всех,

безуспешно пытаюсь наладить связь между модулями RFM12B на 433МГц, мучаюсь больше недели и всё-таки решил обратиться за помощью.

Перечитал форумы по этому вопросу, изучил примеры.

Имеются две пары RFM12B+ATmega8L, питание +3,3V, модули подключены к аппаратному SPI, на приёмном конце принятый байт(ы) передаю по RS232 на компьютер для контроля.

Судя по всему инициализация происходит корректно, у передающего модуля могу управлять частотой на выходе CLK, специально ходил к людям, у них на хорошем осциллографе видны пачки ВЧ импульсов, когда передатчик включен.

В приёмнике тоже управляется частота CLK. Прочитал что на конденсаторе в углу модуля можно смотреть аналоговый сигнал, показывающий силу принимаемого сигнала, так вот когда передатчик включен на нём есть импульсы амплитудой 0,6 Вольт примерно, в такт с включением передатчика. Если меняю частоту настройки приёмника, то при расстройке импульсы уменьшаются и потом совсем пропадают.

Инициализацию приёмника и передатчика делаю как тут было описано, однако приёма нет, тоесть в приёмнике вывод SDO всегда ноль.

Пробовал всякие варианты инициализации, скорость, частоту и т. д. ничего не помогает. Позволю себе привести отрывки из моего кода, как уже говорил многое позаимствовал с этого форума.

Пишу в CodeVisionAVR.

Буду очень благодарен за указание на ошибку.

 

функции ввода-вывода:

unsigned int transf_reg16(unsigned  int d){
unsigned int read=0;
CS=0;
delay_us (1); 
read=read|((spi(d>>8))>>8); //читаем и пишем старший байт
delay_us (1); 
read=read|spi(d);//читаем и пишем младший байт
delay_us (1); 
CS=1;
return read;
} 


void alpha_ready(void)
{	
while (!(MISO)); // wait until FIFO ready
}

 

 

//-----  инициализация  передатчика   -------

transf_reg16(0x80D7);
transf_reg16(0x8239); // передатчик
transf_reg16(0xA640);  
transf_reg16(0xC647);
transf_reg16(0x94A0);
transf_reg16(0xC2AC);
transf_reg16(0xCA81); 
transf_reg16(0xCEAB);                        
transf_reg16(0xC483);
transf_reg16(0x9850);
transf_reg16(0xCC77);
transf_reg16(0xE000);
transf_reg16(0xC800);
transf_reg16(0xC040);



//-----  инициализация  приёмника   -------

transf_reg16(0x80D7);
transf_reg16(0x8299); // приёмник
transf_reg16(0xA640);  
transf_reg16(0xC647); 
transf_reg16(0x94A0); 
transf_reg16(0xC2AC);
transf_reg16(0xCA81); 
transf_reg16(0xCEAB);                        
transf_reg16(0xC483);
transf_reg16(0x9850);
transf_reg16(0xCC77); 
transf_reg16(0xE000);
transf_reg16(0xC800);
transf_reg16(0xC040);


 

 

попытка передачи и приёма


// ----- передача  ----- 
void RF12_TXDATA(unsigned char *data, unsigned char number)
{	unsigned char i;
transf_reg16(0x8238);	// TX on
delay_ms(1);
transf_reg16(0xB8AA);
alpha_ready();
transf_reg16(0xB8AA);
alpha_ready();
transf_reg16(0xB8AA);
alpha_ready();
transf_reg16(0xB82D);
alpha_ready();
transf_reg16(0xB8D4);
for (i=0; i<number; i++)
{		alpha_ready();
	transf_reg16(0xB800|(*data++));
}
alpha_ready();
transf_reg16(0xB8AA);
alpha_ready();
transf_reg16(0xB8AA);
alpha_ready();
transf_reg16(0xB8AA);
delay_ms(1);	
   transf_reg16(0x8208);	// TX off
}


// ----- приём  ----- 
unsigned char RF12_RECV_(void) {
   unsigned int data;  
   unsigned int i; 
   i=0;
   transf_reg16(0xCA81); // FIFO Reset
   transf_reg16(0xCA83);
 while(1) {    
       data = transf_reg16(0x0000);
       i++;  
       if ( (data&0x8000) ) {
           data = transf_reg16(0xB000);
           return  data;  // возвращается байт
           }
       else if (i==0x1FFF) return 0;  // timeout
       }
   }

спасибо заранее

Share this post


Link to post
Share on other sites

Тож задам вопросик. При опросе статус регистра при включении выдавал 0x4000, т.е. все ок. Далее начинал выдавать все время 01A0 или 0180 например. Прочитал что 1единичка это превышен уровень приходящего сигнала. Укоротил антенну примерно сантиметров до 14 и MSB стал показывать 00. Насколько я понимаю это правильно. Включаю передатчик тут же опять появляется единичка и в LSB появляется множество разных значений. Вроде как изменения lsb логичны, но непонятен смысл постоянного включения RSSI . При этом nirq никогда не опускается и B0 всегда выдает нули. В статус регистре так же никогда не поднимается бит о заполнение FIFO. Есть идеи?

Share this post


Link to post
Share on other sites

А знает ли кто-нибудь, какая ошибка установки частоты передатчика должна быть? У меня на разных модулях несущая при одинаковых установках отличается на 5кГц. Это нормально или ошибку все таки следует учитывать и компенсировать поправкой?

Share this post


Link to post
Share on other sites

здравствуйте! у меня при приеме на rf12bp сначала считывается верный байт данных(тот который посылал), а затем считывается нулевой байт. Это ошибка или так модуль говорит что принят конец пакета?

Share this post


Link to post
Share on other sites

Кто пользовался, какой максимальной скорости вы добивались при передаче? У меня получилось 4 Кбайта/сек, больше никак.

Edited by arsinho

Share this post


Link to post
Share on other sites

Добрый день!

Вот уже неделю пытаюсь соединить между собой RFM12B-433S1. Код передалал из Меги8 на PIC16F873 и PIC16F887, то что под рукой есть. Запускаю передатчик, в COM- порт в цикле выдает "sende..." светодиод мерцает, ток потребления всей штуковины прыгает до 60мА при 5В. Все линии SPI шевелятся.

Запускаю приемник, SPI виснет. Один раз моргает светодиод, в СОМ-порту тишина.

Оба проекта прилагаю в архивчиках. Помогите разобраться, ткните пальцем, все ж я больше железячник нежели программер...

progect1.rar

progect2.rar

Share this post


Link to post
Share on other sites
Добрый день!

Вот уже неделю пытаюсь соединить между собой RFM12B-433S1.

 

На первой странице этого топика есть описание того как я запускал аналогичный модуль. Почитайте, сравните с тем что у Вас

Приведённый код работоспособен и используется в серийных проектах.

Share this post


Link to post
Share on other sites
На первой странице этого топика есть описание того как я запускал аналогичный модуль. Почитайте, сравните с тем что у Вас

Приведённый код работоспособен и используется в серийных проектах.

Спасибо!! Я уже перепробовал многие коды, различные инициализации, но толк пока один...Попробую ваш код, может с ним повезет!! А может пора идти покупать новые модули :)

Share this post


Link to post
Share on other sites
Спасибо!! Я уже перепробовал многие коды, различные инициализации, но толк пока один...Попробую ваш код, может с ним повезет!! А может пора идти покупать новые модули :)

Немного повозившись, понял, что один модуль все ж мертв! Или мои старания или сразу был из "морга"...Заказал новый, посмотрим, что будет дальше.. :)

Share this post


Link to post
Share on other sites
На первой странице этого топика есть описание того как я запускал аналогичный модуль. Почитайте, сравните с тем что у Вас

Приведённый код работоспособен и используется в серийных проектах.

Все получилось! Использовал ваш код, немного подпилив под себя набросал его в CCS PIC и вуаля, все работает!!! 15 символов и возврат каретки вижу на второй машине в терминалке. Огромное спасибо!!

Жаль правда, что скачали проекты многие, а откликнулись лишь вы...

Share this post


Link to post
Share on other sites

Всем добрый день!

Недавно начал использовать RFM12B-433.

Вроде все получилось пара устройства нормально связываются, обмен идет.

Но в поставленной задаче подразумевалось, что на одном объекте (склад, цех, завод, ...) может одновременно работать несколько независимых пар таких устройств. В принципе можно задать некоторое количество каналов, вот тут и возник вопрос: Как правильно рассчитать (подобрать) сетку частот для диапазона 433 MHz?

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

Помогите, буду очень признателен.

 

Заранее спасибо за помощь!

Share this post


Link to post
Share on other sites
Всем добрый день!

Недавно начал использовать RFM12B-433.

Вроде все получилось пара устройства нормально связываются, обмен идет.

Но в поставленной задаче подразумевалось, что на одном объекте (склад, цех, завод, ...) может одновременно работать несколько независимых пар таких устройств. В принципе можно задать некоторое количество каналов, вот тут и возник вопрос: Как правильно рассчитать (подобрать) сетку частот для диапазона 433 MHz?

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

Помогите, буду очень признателен.

 

Заранее спасибо за помощь!

Не знаю пригодиться ли, но мне очень помогла схемка, зарубежного коллеги по этим модулям и его ПО, в частности настройки регистров да и вообще сам сканер, собирал на этом контроллере, все работает!

Посмотрите здесь: http://www.controller-designs.de/index.php...canner&sub=

 

Share this post


Link to post
Share on other sites
Не знаю пригодиться ли, но мне очень помогла схемка, зарубежного коллеги по этим модулям и его ПО, в частности настройки регистров да и вообще сам сканер, собирал на этом контроллере, все работает!

Посмотрите здесь: http://www.controller-designs.de/index.php...canner&sub=

Не совсем понятно, как вам помогло ПО, если учесть , что на этой странице нет ни одного доступного файла.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this