Я был бы вам очень признателен за исходники. Сам бьюсь с этими модулями. Пробовал все, что предлагает хопэрэф но не работает.AI_Disable писал(а): Сам недавно приобрёл пару RFM12 и по одному RFM01 и RFM02. До последних пока не добрался, а с RFM12 разобрался - работают "на ура"50 метров тянут, более не проверял. Пишу на си, если нужно, кодом поделюсь
RF модули от HOPERF RFM01 & RFM02
- РадиоЛоматель
- Мудрый кот
- Сообщения: 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) );
Люблю Си...
Люблю Си...
- Реклама
Re: RF модули от HOPERF RFM01 & RFM02
Доброго времени суток!
Я, вот, тоже недавно приобрел 01 и 02 модули.
По радии слышны щелчки, но на IRQ лапе приемника всегда 1.
Пробовал несколько вариантов исходников и прочитать статус регистр.
никакого результата
работаю с ат2313.
p.s. "Здесь пример работы с модулями на CV AVR http://www.obersomer.com/furios-powe...d=77&Itemid=69" - ссылка бита
Я, вот, тоже недавно приобрел 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
Код для работы с 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) );
Люблю Си...
Люблю Си...
Re: RF модули от HOPERF RFM01 & RFM02
Короче говоря, уже ничо не понимаю 
Научился выводить на дисплей отклонение центральной частоты сигнала и пользоваться детектором напряжения питания, а банально передать что-то - никак
Использую заполнение буфера по DRRSI - идут FF.
Если ставить фильтр по синхрослову - ничего не выходит.
Что можно попробовать предпринять?
Научился выводить на дисплей отклонение центральной частоты сигнала и пользоваться детектором напряжения питания, а банально передать что-то - никак
Использую заполнение буфера по DRRSI - идут FF.
Если ставить фильтр по синхрослову - ничего не выходит.
Что можно попробовать предпринять?
- Реклама
Re: RF модули от HOPERF RFM01 & RFM02
разобрался - неправильно читал.
теперь передаются 8 байт, на выходе приемника получаю пару рандомных
теперь передаются 8 байт, на выходе приемника получаю пару рандомных
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: RF модули от HOPERF RFM01 & RFM02
shtalker, очень сложно понять, что вы имеете виду и ещё сложнее, в чём проблема. Порой код говорит гораздо больше, чем его хозяин...
Re: RF модули от HOPERF RFM01 & RFM02
Общее:
Передача:
Прием:
Код: Выделить всё
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);
}
}
}
Re: RF модули от HOPERF RFM01 & RFM02
Короче говоря, я смог реализовать передачу RFM12 -> RFM01.
Скорость 2400, модуляция 90кГц, 8 байт данных.
Пробовал два разных RFM02 - ни с одним не получилось.
В рации слышится шум, в приемнике псевдослучайная последовательность битов...
Скорость 2400, модуляция 90кГц, 8 байт данных.
Пробовал два разных RFM02 - ни с одним не получилось.
В рации слышится шум, в приемнике псевдослучайная последовательность битов...
Re: RF модули от HOPERF RFM01 & RFM02
В тему:
тут проскакивала битая ссылка на пример с RFM12, вот правильный URL http://www.obersomer.com/furios-power/i ... &Itemid=69
Сам вот только что запаял RFM01 на мегу32 и RFM02 на тини2313 и начал разбираться...
тут проскакивала битая ссылка на пример с RFM12, вот правильный URL http://www.obersomer.com/furios-power/i ... &Itemid=69
Сам вот только что запаял RFM01 на мегу32 и RFM02 на тини2313 и начал разбираться...
Re:
Не совсем понимаю как прочитать статус, куда записывается значение после отсылки команды запроса статуса?_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
Для чтения статус регистра делаем CS активным, отправляем старший байт 0x00, затем, отправляем произвольный байт и одновременно ловим содержимое статус регистра, вырубаем CS.
Re: RF модули от HOPERF RFM01 & RFM02
Прошу прощения, нельзя ли чуточку поподробнее? Или рабочий пример на си если есть...
Что означает аббревиатура CS в данном контексте? То, что надо отправить нули для чтения статуса - понятно из даташита, но зачем отправлять произвольный байт после этого? И где все-таки ловим содержимое статус регистра, в неком регистре контроллера или на какой-то из ног RFM, например как fifo?
Кстати, было бы очень интересно узнать как можно промониторить передачу-прием. Облазил русские, английские, немецкие сайты, где встречались комбинации RFM01 или RFM12, народ везде пишет что как-то читают что и куда передается, но никто не описал последовательность действий. Предполагаю, что включают УАРТ и смотрят на посл. порту компа что туда сыпется. Это так?
В моем случае, я выкидываю полученное на LCD, но это весьма неудобно...
Было бы очень интересно понаблюдать за наполнением данных очереди по каждому пойманному фрейму...
Что означает аббревиатура CS в данном контексте? То, что надо отправить нули для чтения статуса - понятно из даташита, но зачем отправлять произвольный байт после этого? И где все-таки ловим содержимое статус регистра, в неком регистре контроллера или на какой-то из ног RFM, например как fifo?
Кстати, было бы очень интересно узнать как можно промониторить передачу-прием. Облазил русские, английские, немецкие сайты, где встречались комбинации RFM01 или RFM12, народ везде пишет что как-то читают что и куда передается, но никто не описал последовательность действий. Предполагаю, что включают УАРТ и смотрят на посл. порту компа что туда сыпется. Это так?
В моем случае, я выкидываю полученное на LCD, но это весьма неудобно...
Было бы очень интересно понаблюдать за наполнением данных очереди по каждому пойманному фрейму...
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: RF модули от HOPERF RFM01 & RFM02
Я тоже вывожу на ЖКИ, имхо всё удобно. Рабочий пример выкладывал на предыдущей странице. CS (SS) - это название одного из проводов SPI. Произвольный байт передаём, чтоб мучить клок и тем временем принимать содержимое статус регистра с провода MISO.
Re: RF модули от HOPERF RFM01 & RFM02
Теперь все проясняется. Спасибо!
Отпишусь как попробую.
Отпишусь как попробую.
- MiklSh
- Потрогал лапой паяльник
- Сообщения: 361
- Зарегистрирован: Чт дек 28, 2006 12:46:58
- Откуда: Хлынов
- Контактная информация:
Re: RF модули от HOPERF RFM01 & RFM02
Может у меня конечно гугля не такая как у всех, но как же задолбалось искать рабочий пример связки RFM01+RFM02 ... не нашел. >:-\
Притом, что по варианту из даташита эта пара ну ни как не хотела работать.
"Мы в город изумрудный идем дорогой трудной....". Путем проб и ошибок, бессонной ночи и жестоким надругательством над ATtiny2313 ... родилось, блин.
Вообщем для потомков,так сказать, рабочий вариант, с каментами в исходнике.
Притом, что по варианту из даташита эта пара ну ни как не хотела работать.
"Мы в город изумрудный идем дорогой трудной....". Путем проб и ошибок, бессонной ночи и жестоким надругательством над ATtiny2313 ... родилось, блин.
Вообщем для потомков,так сказать, рабочий вариант, с каментами в исходнике.
- Вложения
-
- RFM01+RFM02.ZIP
- (255 КБ) 876 скачиваний
Re: RF модули от HOPERF RFM01 & RFM02
РЕСПЕКТИЩЕ!
Я тоже рабочих примеров не видел, колупал даташиты, да сравнивал с RFM12. Пока что долбит нулями и дергает прерывание. Попробую прогнать этот пример на досуге.
Насколько я понимаю, примеры с даташитов рабочие, но есть загвоздка с FIFO. Тут есть недомолвки в документации: в примерах используется CE88 для инициализации и CE8B для очистки (разница - 9). Почему именно CE8B - не совсем очевидно. На предыдущей странице - CE82 и (CE82 + 1) для очистки (разница 1).
Объясните мне, пожалуйста, как правильно очищать очередь...
P.S.: CE82 & CE82+1 <-- с этой инициализацией примеры из даташита что-то передают/принимают, срабатывает прерывание по переполнению, с другой - нет.
Я тоже рабочих примеров не видел, колупал даташиты, да сравнивал с RFM12. Пока что долбит нулями и дергает прерывание. Попробую прогнать этот пример на досуге.
Насколько я понимаю, примеры с даташитов рабочие, но есть загвоздка с FIFO. Тут есть недомолвки в документации: в примерах используется CE88 для инициализации и CE8B для очистки (разница - 9). Почему именно CE8B - не совсем очевидно. На предыдущей странице - CE82 и (CE82 + 1) для очистки (разница 1).
Объясните мне, пожалуйста, как правильно очищать очередь...
P.S.: CE82 & CE82+1 <-- с этой инициализацией примеры из даташита что-то передают/принимают, срабатывает прерывание по переполнению, с другой - нет.
- MiklSh
- Потрогал лапой паяльник
- Сообщения: 361
- Зарегистрирован: Чт дек 28, 2006 12:46:58
- Откуда: Хлынов
- Контактная информация:
Re: RF модули от HOPERF RFM01 & RFM02
У меня заработало только после того как помимо очистки FIFO начал сбрасывать-выставлять бит Sync Word в том же регистре CExx - иначе образовывалась псевдо случайная каша. Смотрите мой исходник, там это есть.
. . .
Добавлено позже:
0xCE84 / 0xCE87, и еще, то над чем долго думал - если после подключения питания перед инициализацией не скомандовать 0xC0D8 - "выкл. приемника", то RFM01 прикидывалась шлангом и эфир слушать ну ни как не хотела.
. . .
Добавлено позже:
0xCE84 / 0xCE87, и еще, то над чем долго думал - если после подключения питания перед инициализацией не скомандовать 0xC0D8 - "выкл. приемника", то RFM01 прикидывалась шлангом и эфир слушать ну ни как не хотела.
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: RF модули от HOPERF RFM01 & RFM02
Всем, привет!
Не много не в тему, но кто будет пробовать RFM22-433 обратите внимание не работают при температуре окружающей среды меньше -25 градусов.
Производитель эо подтверждает, в еррате правда написанно что можно устранить но в реале не получилось, написал произведителю сейчас жду замену новые модули без этой проблемы RF22B-433.
Внешний вид макетки можно глянуть у меня на сайте
Не много не в тему, но кто будет пробовать RFM22-433 обратите внимание не работают при температуре окружающей среды меньше -25 градусов.
Производитель эо подтверждает, в еррате правда написанно что можно устранить но в реале не получилось, написал произведителю сейчас жду замену новые модули без этой проблемы RF22B-433.
Внешний вид макетки можно глянуть у меня на сайте
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
Re: RF модули от HOPERF RFM01 & RFM02
Господа, боюсь, без вашей помощи не обойтись. Бьюсь уже 4-5 суток (суммарно), но эффекта почти никакого 
В аттаче лежат схемы и код для обеих сторон. Коннект между модулями в данный момент есть, передатчик передает последовательность из преамбулы, синхрослова, 16 байт и пустого байта по окончании. Приемник видит сигнал, дергает прерывание по заполнению буфера (правда, в данный момент почему-то один раз за две передачи), однако в полученном массиве вижу мусор (правда, попадаются "нужные" байты) или нули (если разнести приемник и передатчик на расстояние). На видео по этой ссылке видно как это происходит: http://www.youtube.com/watch?v=ywUR5jCCt6U
Перелопатил И перепробовал кучу примеров, включая те, что были в этой теме. Код передатчика в CVAVR, код приемника в AVR Studio, под конец уже методом "тыка"...
Кстати, в таком виде работает тоже до какой-то поры, а затем перестает принимать что либо...
Инициализация передатчика:
Затем включаю синтезатор и усилитель для передачи
И по окончании передачи выключаю командой C001.
Приемник у меня пуллит данные с ноги nIRQ. Инициализация:
После получения массива внутри цикла далее идет очистка очереди таким же способом (CE80, CE83) - насколько я понял, для того, чтобы очистить очередь, надо снять два младших бита, а затем их выставить снова.
Примеры из предыдущих сообщений почему-то не работают у меня. Инит очереди CE84/CE87 у меня проходит, но буфер, очевидно, не заполняется, так как прерывание не происходит. Нашел зависимость состояния регистра "Receiver Setting" и регистра "FIFO". Если ставлю CE84/CE87 и инит ресивера по POR (COC1), нога nIRQ дрыгается как бешеная и в массив сыпятся рандомные байты (вряд ли у меня счетчик или холодильник фонит на этой частоте
). Причем, даже при выключенном передатчике.
В общем, я зашел в тупик. Не судите строго, контроллерами я заинтересовался пару-тройку месяцев назад, до этого как бы не сталкивался с ними с паяльником в руке. Передатчики-приемники - только аналоговые. По роду деятельности, я сисадмин/программист (в основном скриптинг и джава, но в универе когда-то си++ преподавали, что-то помню).
Документацию по модулям перечитал не один раз, мог что-то упустить, а что-то не понять. Может оказаться что я неправильно запаял модули на контроллеры или данные надо сливать с других ног. Поэтому приложил схемки.
Частота контроллера mega32 с приемником - 16 Мгц (после удачного спаривания с передатчиком планируется также сливать инфу по USB), стабилизация - кварц.
Частота контроллера tiny2313v с передатчиком - 8 Мгц (заводская установка, снят фьюз деления на 8 ), стабилизация - внутренняя цепочка.
Буду очень признателен, если кто-нибудь сможет прокомментировать мои ошибки и недочеты. В профиле, в графе "Род занятий" указан мой скайп, на связи почти круглые сутки - велкам!
В аттаче лежат схемы и код для обеих сторон. Коннект между модулями в данный момент есть, передатчик передает последовательность из преамбулы, синхрослова, 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
Приемник у меня пуллит данные с ноги 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
Примеры из предыдущих сообщений почему-то не работают у меня. Инит очереди CE84/CE87 у меня проходит, но буфер, очевидно, не заполняется, так как прерывание не происходит. Нашел зависимость состояния регистра "Receiver Setting" и регистра "FIFO". Если ставлю CE84/CE87 и инит ресивера по POR (COC1), нога nIRQ дрыгается как бешеная и в массив сыпятся рандомные байты (вряд ли у меня счетчик или холодильник фонит на этой частоте
В общем, я зашел в тупик. Не судите строго, контроллерами я заинтересовался пару-тройку месяцев назад, до этого как бы не сталкивался с ними с паяльником в руке. Передатчики-приемники - только аналоговые. По роду деятельности, я сисадмин/программист (в основном скриптинг и джава, но в универе когда-то си++ преподавали, что-то помню).
Документацию по модулям перечитал не один раз, мог что-то упустить, а что-то не понять. Может оказаться что я неправильно запаял модули на контроллеры или данные надо сливать с других ног. Поэтому приложил схемки.
Частота контроллера mega32 с приемником - 16 Мгц (после удачного спаривания с передатчиком планируется также сливать инфу по USB), стабилизация - кварц.
Частота контроллера tiny2313v с передатчиком - 8 Мгц (заводская установка, снят фьюз деления на 8 ), стабилизация - внутренняя цепочка.
Буду очень признателен, если кто-нибудь сможет прокомментировать мои ошибки и недочеты. В профиле, в графе "Род занятий" указан мой скайп, на связи почти круглые сутки - велкам!
- Вложения
-
- rfm01_02_bad.zip
- Схемы и код (си)
- (21.79 КБ) 422 скачивания


