RF модули от HOPERF RFM01 & RFM02

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение РадиоЛоматель »

AI_Disable писал(а): Сам недавно приобрёл пару RFM12 и по одному RFM01 и RFM02. До последних пока не добрался, а с RFM12 разобрался - работают "на ура" :)) 50 метров тянут, более не проверял. Пишу на си, если нужно, кодом поделюсь :)
Я был бы вам очень признателен за исходники. Сам бьюсь с этими модулями. Пробовал все, что предлагает хопэрэф но не работает.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Реклама
shtalker
Родился
Сообщения: 5
Зарегистрирован: Сб май 01, 2010 12:36:21

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение shtalker »

Доброго времени суток!
Я, вот, тоже недавно приобрел 01 и 02 модули.
По радии слышны щелчки, но на IRQ лапе приемника всегда 1.
Пробовал несколько вариантов исходников и прочитать статус регистр.
никакого результата :(
работаю с ат2313.
p.s. "Здесь пример работы с модулями на CV AVR http://www.obersomer.com/furios-powe...d=77&Itemid=69" - ссылка бита
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение AI_Disable »

Код для работы с RFM12. Проверено с мегой32, тини24, тини2313.
Приём:

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

#define DDR_SS DDRD
#define DDR_SCK DDRC
#define DDR_MOSI DDRD
#define PORT_SS PORTD
#define PORT_SCK PORTC
#define PORT_MOSI PORTD
#define PIN_MISO PINC
#define PIN_IRQ PIND
#define SS 6
#define SCK 0
#define MOSI 7
#define MISO 1
#define IRQ 2

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

unsigned int RFXX_WRT_CMD(unsigned int aCmd) //Отправить команду
{
unsigned char i;
unsigned int temp=0;
PORT_SCK&=~(1<<SCK);
PORT_SS&=~(1<<SS);
for(i=0;i<16;i++)
	{
	if(aCmd&0x8000) PORT_MOSI|=(1<<MOSI);
	else PORT_MOSI&=~(1<<MOSI);
	PORT_SCK|=(1<<SCK);
	temp<<=1;
	if(PIN_MISO&(1<<MISO)) temp|=0x0001;
	PORT_SCK&=~(1<<SCK);
	aCmd<<=1;
	}
PORT_SS|=(1<<SS);
return(temp);
}

void RF12_INIT(void) //Инициализация
{
DDR_SS|=(1<<SS);
DDR_SCK|=(1<<SCK);
DDR_MOSI|=(1<<MOSI);
PORT_SS|=(1<<SS);
RFXX_WRT_CMD(0x80D8);//EL,EF,433band,12.5pF
RFXX_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
RFXX_WRT_CMD(0xA640);//A140=430.8MHz
RFXX_WRT_CMD(0xC647);//4.8kbps
RFXX_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
RFXX_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
RFXX_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
RFXX_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
RFXX_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
RFXX_WRT_CMD(0xE000);//NOT USE
RFXX_WRT_CMD(0xC800);//NOT USE
RFXX_WRT_CMD(0xC040);//1.66MHz,2.2V
}

int main ()
{
//Внешнее прерывание от INT0, к которому цепляем nIRQ
MCUCR|=(1<<ISC01);
GICR|=(1<<INT0);
sei();

//Инициализация FRM12
RF12_INIT();

//Включаем fifo буфер и читаем статус регистр
RFXX_WRT_CMD(0xCA83);
RFXX_WRT_CMD(0x0000);
}

ISR(INT0_vect)	//обработчик внешнего прерывания
{
//тут хаваем данные с RFM12
data=((RFXX_WRT_CMD(0xB000))&0x00FF);
}
Передача:

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

void RF12_SEND(unsigned char aByte)
{
while(!(RFXX_WRT_CMD(0x0000)&0x8000));
RFXX_WRT_CMD(0xB800+aByte);
}

int main ()
{
//Инициализация FRM12
RF12_INIT();
RFXX_WRT_CMD(0xCA81);
RFXX_WRT_CMD(0x0000);//read status register
RFXX_WRT_CMD(0x8239);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
RF12_SEND(0xAA);//PREAMBLE
RF12_SEND(0xAA);//PREAMBLE
RF12_SEND(0xAA);//PREAMBLE
RF12_SEND(0x2D);//SYNC HI BYTE
RF12_SEND(0xD4);//SYNC LOW BYTE

RF12_SEND(data); //тут передаём что хотим

RF12_SEND(0xAA);//DUMMY BYTE
RF12_SEND(0xAA);//DUMMY BYTE
RF12_SEND(0xAA);//DUMMY BYTE
}
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение РадиоЛоматель »

Спасибо. Попробую на днях
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Реклама
Эиком - электронные компоненты и радиодетали
shtalker
Родился
Сообщения: 5
Зарегистрирован: Сб май 01, 2010 12:36:21

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение shtalker »

Короче говоря, уже ничо не понимаю :)
Научился выводить на дисплей отклонение центральной частоты сигнала и пользоваться детектором напряжения питания, а банально передать что-то - никак :(
Использую заполнение буфера по DRRSI - идут FF.
Если ставить фильтр по синхрослову - ничего не выходит.
Что можно попробовать предпринять?
Реклама
shtalker
Родился
Сообщения: 5
Зарегистрирован: Сб май 01, 2010 12:36:21

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение shtalker »

разобрался - неправильно читал.
теперь передаются 8 байт, на выходе приемника получаю пару рандомных :(
Реклама
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение AI_Disable »

shtalker, очень сложно понять, что вы имеете виду и ещё сложнее, в чём проблема. Порой код говорит гораздо больше, чем его хозяин...
shtalker
Родился
Сообщения: 5
Зарегистрирован: Сб май 01, 2010 12:36:21

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение shtalker »

Общее:

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

unsigned int RFXX_WRT_CMD(unsigned int aCmd)
{ 
  unsigned char i; 
  unsigned int temp; 
  LOW_SEL(); 
  temp = 0;
  for(i=0;i<16;i++)
  { 
    LOW_SCK(); 
    _delay(16);
    temp<<=1; 
    if(SDO_HI()) temp|=0x0001; 
    if(aCmd&0x8000)
      HI_SDI(); 
    else
      LOW_SDI(); 
    HI_SCK(); 
    aCmd<<=1; 
    _delay(16);
  }
  LOW_SCK(); 
  HI_SEL(); 
  return(temp); 
}    
Передача:

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

void RF02B_SEND(unsigned char aByte)
{ 
  unsigned char i; 
  for(i=0;i<8;i++)
  { 
    while(SDO_HI());//Polling nIRQ 
    while(!SDO_HI()); 
    if(aByte&0x80)
      HI_DATA(); 
    else
      LOW_DATA(); 
    aByte<<=1; 
  }
}  

void RFXX_PORT_INIT(void)
{ 
  HI_SEL();
  HI_SDI();
  HI_SDO();
  LOW_SCK(); 
  SEL_OUTPUT(); 
  SDI_OUTPUT();
  SDO_INPUT();
  SCK_OUTPUT(); 
  HI_DATA();
  DATA_OUTPUT();  
  
  RFXX_WRT_CMD(0xCC00);//Status register read 
  RFXX_WRT_CMD(0x8F61);//band=433MHz, CLK = 10MHz, frequency deviation = 60kHz 
  RFXX_WRT_CMD(0xA640);//f=434MHz
  RFXX_WRT_CMD(0xC847);//BR = 4789bps
  RFXX_WRT_CMD(0xC220);//enable TX bit sinchronization, no Low Battary Detector
  RFXX_WRT_CMD(0xC001);//disable CLK pin
  RFXX_WRT_CMD(0xCC00);//Status register read 
}

void main(void) 
{  
  
  _delay(65000);

  RFXX_PORT_INIT();
  RFXX_WRT_CMD(0xC039);//START TX  
  RF02B_SEND(0xAA);//PREAMBLE 
  RF02B_SEND(0xAA);//PREAMBLE 
  RF02B_SEND(0xAA);//PREAMBLE 
  RF02B_SEND(0x2D);//HEAD HI BYTE 
  RF02B_SEND(0xD4);//HEAD LOW BYTE 
  RF02B_SEND(0x88);
  RF02B_SEND(0x77);
  RF02B_SEND(0xAA);//DUMMY BYTE 
  RF02B_SEND(0xAA);//DUMMY BYTE 
  RF02B_SEND(0xAA);//DUMMY BYTE 
  RFXX_WRT_CMD(0xC001);//CLOSE TX   
  while(1);
}
Прием:

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

void RFXX_PORT_INIT(void)
{ 
  HI_SEL(); 
  HI_SDI(); 
  LOW_SCK();
   
  SEL_OUTPUT(); 
  SDI_OUTPUT(); 
  SDO_INPUT(); 
  SCK_OUTPUT(); 
  nIRQ_INPUT();
  
  _delay(65000);
  
  RFXX_WRT_CMD(0x0000); 
  RFXX_WRT_CMD(0x8D8A);//433BAND,134kHz 
  RFXX_WRT_CMD(0xA640);//434MHz 
  RFXX_WRT_CMD(0xC847);//4.8kbps 
  RFXX_WRT_CMD(0xC2FF);			// AVR CLK: 10MHz
  RFXX_WRT_CMD(0xC42B);			// Data Filter: internal
  RFXX_WRT_CMD(0xC6F7);			// AFC settings: autotuning: -10kHz...+7,5kHz
  RFXX_WRT_CMD(0xE000);			// disable wakeuptimer
  RFXX_WRT_CMD(0xCC00);			// disable low duty cycle        
  RFXX_WRT_CMD(0x0000);

  RFXX_WRT_CMD(0xCE82);//use FIFO 
  RFXX_WRT_CMD(0xCE82 + 1); 
  RFXX_WRT_CMD(0xC009);//OPEN RX 
  RFXX_WRT_CMD(0x0000);
}

unsigned char RF01_RDFIFO(void)
{ 
  unsigned char i,Result; 
  LOW_SCK(); 
  LOW_SDI(); 
  LOW_SEL(); 
  for(i=0;i<16;i++)
  {//skip status bits 
    HI_SCK(); 
    HI_SCK(); 
    LOW_SCK(); 
    LOW_SCK(); 
  } 
  Result=0; 
  for(i=0;i<8;i++)
  {//read fifo data byte 
    Result<<=1; 
    if(SDO_HI())
    { 
      Result|=1; 
    } 
    HI_SCK(); 
    HI_SCK(); 
    LOW_SCK(); 
    LOW_SCK(); 
  }; 
  HI_SEL(); 
  return(Result); 
}

void main(void)
{ 
  unsigned int i;
  for (i = 0; i < 65000; ++i);
  
  lcd_init(16);    
  RFXX_PORT_INIT();
  lcd_gotoxy(0,0);
  lcd_putsf("CPU STARTED");
  for (i = 0; i < 65000; ++i);
  while (1)
  {
    if (RFXX_WRT_CMD(0x0000)&0x8000))
    {//polling the nIRQ data
      i = RF01_RDFIFO();
      RFXX_WRT_CMD(0xCE82);
      RFXX_WRT_CMD(0xCE82 + 1); // очищаем фифо
      to_print(i);
    } 
  }
}
shtalker
Родился
Сообщения: 5
Зарегистрирован: Сб май 01, 2010 12:36:21

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение shtalker »

Короче говоря, я смог реализовать передачу RFM12 -> RFM01.
Скорость 2400, модуляция 90кГц, 8 байт данных.
Пробовал два разных RFM02 - ни с одним не получилось.
В рации слышится шум, в приемнике псевдослучайная последовательность битов...
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Maxxon »

В тему:

тут проскакивала битая ссылка на пример с RFM12, вот правильный URL http://www.obersomer.com/furios-power/i ... &Itemid=69

Сам вот только что запаял RFM01 на мегу32 и RFM02 на тини2313 и начал разбираться...
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re:

Сообщение Maxxon »

_noise писал(а): 2.4. Читаем статус, видим в первых четырёх битах причину прерывания: IT, FFOV, WK-UP или LBD. После чтения статуса флаг прерывания автоматически сбрасывается. См. RF01.pdf, стр. 17.
Не совсем понимаю как прочитать статус, куда записывается значение после отсылки команды запроса статуса?

Передатчик передает преамбулу, синхру, пяток байт данных и несколько dummy байт, коннект с приемником есть, передача-прием идет, но в fifo одни нули, срабатывает прерывание. Очень хочется понять причину...

Железо - mega32+RFM01 и tiny2313+RFM02.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение AI_Disable »

Для чтения статус регистра делаем CS активным, отправляем старший байт 0x00, затем, отправляем произвольный байт и одновременно ловим содержимое статус регистра, вырубаем CS.
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Maxxon »

Прошу прощения, нельзя ли чуточку поподробнее? Или рабочий пример на си если есть...

Что означает аббревиатура CS в данном контексте? То, что надо отправить нули для чтения статуса - понятно из даташита, но зачем отправлять произвольный байт после этого? И где все-таки ловим содержимое статус регистра, в неком регистре контроллера или на какой-то из ног RFM, например как fifo?

Кстати, было бы очень интересно узнать как можно промониторить передачу-прием. Облазил русские, английские, немецкие сайты, где встречались комбинации RFM01 или RFM12, народ везде пишет что как-то читают что и куда передается, но никто не описал последовательность действий. Предполагаю, что включают УАРТ и смотрят на посл. порту компа что туда сыпется. Это так?
В моем случае, я выкидываю полученное на LCD, но это весьма неудобно...

Было бы очень интересно понаблюдать за наполнением данных очереди по каждому пойманному фрейму...
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение AI_Disable »

Я тоже вывожу на ЖКИ, имхо всё удобно. Рабочий пример выкладывал на предыдущей странице. CS (SS) - это название одного из проводов SPI. Произвольный байт передаём, чтоб мучить клок и тем временем принимать содержимое статус регистра с провода MISO.
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Maxxon »

Теперь все проясняется. Спасибо!

Отпишусь как попробую.
Аватара пользователя
MiklSh
Потрогал лапой паяльник
Сообщения: 361
Зарегистрирован: Чт дек 28, 2006 12:46:58
Откуда: Хлынов
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение MiklSh »

Может у меня конечно гугля не такая как у всех, но как же задолбалось искать рабочий пример связки RFM01+RFM02 ... не нашел. >:-\
Притом, что по варианту из даташита эта пара ну ни как не хотела работать.
"Мы в город изумрудный идем дорогой трудной....". Путем проб и ошибок, бессонной ночи и жестоким надругательством над ATtiny2313 ... родилось, блин.
Вообщем для потомков,так сказать, рабочий вариант, с каментами в исходнике.
Вложения
RFM01+RFM02.ZIP
(255 КБ) 876 скачиваний
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Maxxon »

РЕСПЕКТИЩЕ! :beer:

Я тоже рабочих примеров не видел, колупал даташиты, да сравнивал с RFM12. Пока что долбит нулями и дергает прерывание. Попробую прогнать этот пример на досуге.

Насколько я понимаю, примеры с даташитов рабочие, но есть загвоздка с FIFO. Тут есть недомолвки в документации: в примерах используется CE88 для инициализации и CE8B для очистки (разница - 9). Почему именно CE8B - не совсем очевидно. На предыдущей странице - CE82 и (CE82 + 1) для очистки (разница 1).
Объясните мне, пожалуйста, как правильно очищать очередь... :oops:

P.S.: CE82 & CE82+1 <-- с этой инициализацией примеры из даташита что-то передают/принимают, срабатывает прерывание по переполнению, с другой - нет.
Аватара пользователя
MiklSh
Потрогал лапой паяльник
Сообщения: 361
Зарегистрирован: Чт дек 28, 2006 12:46:58
Откуда: Хлынов
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение MiklSh »

У меня заработало только после того как помимо очистки FIFO начал сбрасывать-выставлять бит Sync Word в том же регистре CExx - иначе образовывалась псевдо случайная каша. Смотрите мой исходник, там это есть.
. . .
Добавлено позже:
0xCE84 / 0xCE87, и еще, то над чем долго думал - если после подключения питания перед инициализацией не скомандовать 0xC0D8 - "выкл. приемника", то RFM01 прикидывалась шлангом и эфир слушать ну ни как не хотела.
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Zheleznjakov »

Всем, привет!
Не много не в тему, но кто будет пробовать RFM22-433 обратите внимание не работают при температуре окружающей среды меньше -25 градусов.
Производитель эо подтверждает, в еррате правда написанно что можно устранить но в реале не получилось, написал произведителю сейчас жду замену новые модули без этой проблемы RF22B-433.
Внешний вид макетки можно глянуть у меня на сайте :)
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
Maxxon
Открыл глаза
Сообщения: 43
Зарегистрирован: Пт апр 09, 2010 12:54:00
Откуда: Санкт-Петербург

Re: RF модули от HOPERF RFM01 & RFM02

Сообщение Maxxon »

Господа, боюсь, без вашей помощи не обойтись. Бьюсь уже 4-5 суток (суммарно), но эффекта почти никакого :(
В аттаче лежат схемы и код для обеих сторон. Коннект между модулями в данный момент есть, передатчик передает последовательность из преамбулы, синхрослова, 16 байт и пустого байта по окончании. Приемник видит сигнал, дергает прерывание по заполнению буфера (правда, в данный момент почему-то один раз за две передачи), однако в полученном массиве вижу мусор (правда, попадаются "нужные" байты) или нули (если разнести приемник и передатчик на расстояние). На видео по этой ссылке видно как это происходит: http://www.youtube.com/watch?v=ywUR5jCCt6U
Перелопатил И перепробовал кучу примеров, включая те, что были в этой теме. Код передатчика в CVAVR, код приемника в AVR Studio, под конец уже методом "тыка"...
Кстати, в таком виде работает тоже до какой-то поры, а затем перестает принимать что либо...

Инициализация передатчика:

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

8B81  -  433 MHz band, 12.5 pF crystal load capacitor, 2 MHz clock output, df(fsk) = 60 kHz, ms : FSK sign = 0
A640  -  Set center frequency to 434 MHz
C811  -  Set datarate to 19.15708 kbps
C220  -  Vlb = 2.2 V, dwc : Disable wake-up timer calibration = 0, ebs : Enable TX bit synchronization = 1
C001  -  a1 : Automatic control Bit1 = 0, a0 : Automatic control Bit0 = 0, ex : Enable crystal oscillator = 0, es : Enable synthesizer = 0, 
ea : Enable power amplifier = 0, eb : Enable low battery detector = 0, et : Enable wake-up timer = 0, dc : Disable clock output = 1
Затем включаю синтезатор и усилитель для передачи

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

C039 - a1 : Automatic control Bit1 = 0, a0 : Automatic control Bit0 = 0, ex : Enable crystal oscillator = 1, es : Enable synthesizer = 1
ea : Enable power amplifier = 1, eb : Enable low battery detector = 0, et : Enable wake-up timer = 0, dc : Disable clock output = 1
И по окончании передачи выключаю командой C001.

Приемник у меня пуллит данные с ноги nIRQ. Инициализация:

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

0000  -  Flush
C008  -  en : Enable receiver ch. / crystal osc. = 0, VDI output = DRSSI, LNA gain = 0 dB, RSSI threshold = -79 dBm
8D8A  -  eb : Enable low battery detector = 1, et : Enable wake-up timer = 0, ex : Enable crystal osc. during sleep = 1, 
dc : Disable clock output = 0, Select 433 MHz band, Select 12.5 pF crystal load capacitor, Receiver bandwidth = 134 kHz
A640  -  Set center frequency to 434 MHz
C811  -  Set datarate to 19.15708 kbps
C2FF  -  Vlb = 2.2 V, Clock output = 1 MHz
C42B  -  al : Clock recovery auto lock = 0, ml : Clock recovery lock control = 0, Filter type = Digital, DQD threshold = 3
C6F7  -  AFC automatic mode = Offset always, st : Strobe edge = 0, fi : Fine mode = 1, oe : Offset register enable = 1
en : Calculate offset = 1, Range limit = +3fres to -4fres, Max. Deviation = +7.5kHz to -10kHz
E000  -  T wakeup = 0 ms (disabled)
CC00  -  en : Enable low duty-cycle = 0, Duty-cycle = N/A (disabled)
0000  -  Flush
CE80  -  ff : FIFO fill = 0, fe : Enable 16 Bit FIFO = 0, FIFO fill start condition = VDI, FIFO IT level = 8
CE83  -  ff : FIFO fill = 1, fe : Enable 16 Bit FIFO = 1, FIFO fill start condition = VDI, FIFO IT level = 8
C009  -  en : Enable receiver ch. / crystal osc. = 1, VDI output = DRSSI, LNA gain = 0 dB, RSSI threshold = -79 dBm
0000  -  Flush
После получения массива внутри цикла далее идет очистка очереди таким же способом (CE80, CE83) - насколько я понял, для того, чтобы очистить очередь, надо снять два младших бита, а затем их выставить снова.

Примеры из предыдущих сообщений почему-то не работают у меня. Инит очереди CE84/CE87 у меня проходит, но буфер, очевидно, не заполняется, так как прерывание не происходит. Нашел зависимость состояния регистра "Receiver Setting" и регистра "FIFO". Если ставлю CE84/CE87 и инит ресивера по POR (COC1), нога nIRQ дрыгается как бешеная и в массив сыпятся рандомные байты (вряд ли у меня счетчик или холодильник фонит на этой частоте :) ). Причем, даже при выключенном передатчике.

В общем, я зашел в тупик. Не судите строго, контроллерами я заинтересовался пару-тройку месяцев назад, до этого как бы не сталкивался с ними с паяльником в руке. Передатчики-приемники - только аналоговые. По роду деятельности, я сисадмин/программист (в основном скриптинг и джава, но в универе когда-то си++ преподавали, что-то помню).
Документацию по модулям перечитал не один раз, мог что-то упустить, а что-то не понять. Может оказаться что я неправильно запаял модули на контроллеры или данные надо сливать с других ног. Поэтому приложил схемки.

Частота контроллера mega32 с приемником - 16 Мгц (после удачного спаривания с передатчиком планируется также сливать инфу по USB), стабилизация - кварц.
Частота контроллера tiny2313v с передатчиком - 8 Мгц (заводская установка, снят фьюз деления на 8 ), стабилизация - внутренняя цепочка.

Буду очень признателен, если кто-нибудь сможет прокомментировать мои ошибки и недочеты. В профиле, в графе "Род занятий" указан мой скайп, на связи почти круглые сутки - велкам!
Вложения
rfm01_02_bad.zip
Схемы и код (си)
(21.79 КБ) 422 скачивания
Ответить

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