Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RFM01-RFM02 от Hope Microelectronics Есть несколько вопросов...
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
Григорий2000
Включил передатчик, заставил передавать периодически пакет. Пакет передается(TV -Tuner принимает что-то). С приемника снимаю сигнал RSSI в нужном виде(огибающая длительности пакета) - то есть уже близко))).
Но не могу заставить принять именно данные - не формирует сигнал прерывания по заполнению буфера. Возможно неправильно настроил параметры передатчика/приемника. Делал как в примере за исключением команд передатчика 0xD040 (так как ненашел на нее описания ) вместо нее 0xD240, и скорость взял еще ниже(0xC88F). и соответственно только скорость в приемнике.
итак RX
SendWordRF(0x0000);
SendWordRF(0x898A);//433BAND,134kHz
SendWordRF(0xA640);//434MHz
SendWordRF(0xC8С7);//2.4kbps
SendWordRF(0xC69B);//AFC setting
SendWordRF(0xC42A);//Clock recovery manual control,Digital filter,DQD=4
SendWordRF(0xC260);//output 2MHz
SendWordRF(0xC080);
SendWordRF(0xCE84);//use FIFO
SendWordRF(0xCE87);
SendWordRF(0xC081);//OPEN RX


TX
SendWordRF(0xCC00);//Status Register read command - clear last service interrupt...
SendWordRF(0x8B61);//433BAND,+-60kHz, 2MHzOut
SendWordRF(0xA640);//434MHz
SendWordRF(0xD240);//(DRate/2)-было0xD040 - max DataRate 19.2
SendWordRF(0xC88F);//2.4kbps
SendWordRF(0xC220);//enable bit sync //
SendWordRF(0xC001);//CLOSE ALL
Григорий2000
Вопрос снят))
Дело было не в бобине...
Qwertty
Цитата(Григорий2000 @ Feb 24 2009, 14:36) *
Вопрос снят))
Дело было не в бобине...

А в чем было дело? Мне запустить так и не удалось. Передатчик вроде работает, но не так как хотелось бы - никак не усыпить его полностью. Если остановить кварцевый генератор, то модуль засыпает навсегда. sad.gif
А приемник вообще не реагирует на передачу. Как раз нет прерывания по заполнению FIFO. А может и совсем не работает. Примеры какие то кривые. Повторять один в один их не хочется - постоянный поллинг сводит полезность FIFO к 0. А прерывания нет. Я уж решил что приемник умер в результате экспериментов, но сегодня заменил с тем же результатом. Все что удается добиться - изменить частоту такта. У Вас работает именно с той инициализацией, что Вы в первом посте привели?

Пошел к производителю, скачал RF01 programming guide. Чудеса, он уже другой. nIRQ теперь вообще не используется. А я с него прерывание жду. И зачем он тогда вообще? Сейчас попробую переделаться в соответствии с новой политикой партии. Эх, китайцы....
Григорий2000
У меня по невнимательности осталось две подпрограммы в основной функции. Одна с поллингом, вторая по инту... приемник 2 байта ловил и его та что с поллингом опрашивала и заново заряжала на прием...
Сейчас уже не скажу та-ли инициализация или нет.. щас минут через 10 кину последнюю рабочую иициализацию для обоих модулей.
и инты работают(вы точно на той что нужно ноге смотрите??)))
При работе с интом я (как и всегда) поставил срабатывание по срезу,но иногда (не понял почему) возникала ситуация когда в обработчике возникал еще один запрос, который ес-но я неловил уже и линия инта ложилась в ноль...
я кварцевый генератор не останавливал(кажется) только усилитель мощности.
я так понял кварц нужно тормозить в случае пользования wakeup (кажется так пишется), тогда он и проснется и проз может разбудить

передатчик:
Код
SendWordRF(0x0000);
    SendWordRF(0xC0E0);
    SendWordRF(0x8B83);//(0x8B61) 433BAND,+-90(ïî ìîåìó 60)kHz, 2MHzOut 0x8B67 dF=210kHz
    SendWordRF(0xC2A0);//enable bit sync //    
    SendWordRF(0xA640);//434MHz    
    SendWordRF(0xB000);
    SendWordRF(0x8B83);//(0x8B61) 433BAND,+-90(ïî ìîåìó 60)kHz, 2MHzOut 0x8B67 dF=210kHz

    SendWordRF(0xCC00);//Status Register read command - clear last service interrupt...

    SendWordRF(0xD2C0);//max DataRate 19.2
    SendWordRF(0xC800|((344828UL/19200)-1));//4.8kbps
    

    //SendWordRF(0xC001);//CLOSE ALL
    
    MCUCR &= 0xF0;
    MCUCR |= (1<<ISC01)|(0<<ISC00);
    GICR = (1<<INT0);

сами расшифруйте по даташиту(коментарии могут быть неверными)

приемник:
    SendWordRF(0x0000);
    SendWordRF(0xA000 | (unsigned int)(((434-430)/0.0025)));//434MHz
    SendWordRF(0x8978);//898A - 433BAND,167kHz; 898C - 67kHz 0x8978-200kHz

    SendWordRF(0xC800|((344828UL/19200)-1));//19200
    SendWordRF(0xC6F7);//AFC setting  
    SendWordRF(0xC42A);//autolock-off, slowmode,,Digital filter,DQD=3
    SendWordRF(0xC260);//output 2MHz
    SendWordRF(0xC008);
    SendWordRF(0xCE88);//use FIFO
    SendWordRF(0xCE8B);
    SendWordRF(0xC009);//OPEN RX
    
    
    MCUCR &= 0xF0;
    MCUCR |= (1<<ISC01)|(0<<ISC00);
    GICR = (1<<INT0);


тестовый инт передатчика
    if (BufferTX.FlagTX == 0)return;        

    if (BufferTX.BitPoint == 0)
    {
        if (BufferTX.BytePoint != 0)
        {
            BufferTX.BytePoint--;
            BufferTX.BitPoint = 7;
            if ((BufferTX.DataBufer[BufferTX.BytePoint]) & (1<<(BufferTX.BitPoint)))
                PORT_FSK = 1;
            else
                PORT_FSK = 0;
        }
        else
        {//Stop transmit
            SendWordRF(0xC001);
            BufferTX.FlagTX = 0;        
        }
    }
    else
    {
        BufferTX.BitPoint--;
        if ((BufferTX.DataBufer[BufferTX.BytePoint]) & (1<<(BufferTX.BitPoint)))
            PORT_FSK = 1;
        else
            PORT_FSK = 0;
        
    }

тестовый инт приемника:
    static unsigned char OldNumber=0;
    unsigned char Byte = ReadFIFO();
    if ( BufferTX.BytePoint == 0)
    {
        if (Byte==0x55)
        {
            BufferTX.DataBufer[BufferTX.BytePoint] = Byte;
            BufferTX.BytePoint = 1;
        }
        else
        {
            SendWordRF(0xCE88);//use FIFO
            SendWordRF(0xCE8B);
        }
    }
    else
    {
        BufferTX.DataBufer[BufferTX.BytePoint] = Byte;
        BufferTX.BytePoint= (BufferTX.BytePoint+1)&0x0F;
    
        if ((BufferTX.BytePoint) >=7)
        {
            Byte = BufferTX.DataBufer[1];
            Byte = Byte ^ BufferTX.DataBufer[2];
            Byte = Byte ^ BufferTX.DataBufer[3];
            Byte = Byte ^ BufferTX.DataBufer[4];
            Byte = Byte ^ BufferTX.DataBufer[5];

            if(Byte == BufferTX.DataBufer[6])
            {
                if (OldNumber !=  BufferTX.DataBufer[2])
                {
                    ExecutePacket.Volume= BufferTX.DataBufer[4];
                    ExecutePacket.Song= BufferTX.DataBufer[3];
                    ExecutePacket.Mode= BufferTX.DataBufer[5];
                    ExecutePacket.Flag = 1;
                    
                }
                OldNumber =  BufferTX.DataBufer[2];
            }
                

            BufferTX.BytePoint = 0;
            RFTimer = 0xF001;
            SendWordRF(0xCE88);//use FIFO
            SendWordRF(0xCE8B);
        }
    }    
    
    MCUCR |=((1<<ISC01)|(0<<ISC00));
    PORTC &= ~0x80;
Qwertty
Спасибо! У меня правда уже задышало. Обновил пример, сделал на его основе и коннект установился. Хотя ошибка моя была в другом - я пытался запустить передачу в другом режиме, в том где данные берутся с SDI. А данные гнал по FSK. Т.е. старт передачи не 0xC039, а 0xC6 - Data Transmit Command. В результате передатчик слал непонятно что. Признака начала пакета в посылке ес-но не было. Ну и инта на приемнике соответственно ждать можно было вечно. sad.gif Может теперь и разбудить передатчик получится. Хотя еще не попробовал. В описании к Power Management Command есть бит а1 - Crystal oscillator and synthesizer are enabled by Data transmit Command and disable by Sleep command. Если генератор работает, то передатчик прилично кушает, гораздо больше спящей 48-ой меги. В сон модуль уходил, но Data Transmit Command его разбудить почему то не могла. Буду мучать зверушку дальше. Надо будет первый модуль обратно запаять smile.gif
Кстати еще вопрос - Вы на дальность связку не проверяли? И какую антенну используете?
Григорий2000
Нет непроверял еще, а антенна - кусок провода(около 17 см ). Как собрал пришлось растаться - демо версия.
А кристалл останавливал конечно( в interrupt прередатчика //Stop transmit : SendWordRF(0xC001)wink.gif
Qwertty
Четвертьволновой штырь имеет куда большую эффективность, чем печатные/чип антенны. Я так на чипконе связь запустил со штырем - все отлично было. Поставил чип антенну и дальность упала больше чем в два раза. sad.gif
Кстати в приемнике лучше использовать прерывание по низкому уровню - тогда никаких пропусков не будет. Кроме того это прерывание не требует включенного генератора в контроллере.
Действительно, генератором передатчика можно управлять через Power Management Command. И выключить и включить. Интересно, зачем тогда команда Sleep Command? smile.gif
Mad-man
Всем привет,

инициализирую чип RFM01 как китайском в примере (на прием), и нифига не приходит, не выставляется бит фифо, не приходит прерывание. (уже перепробовал несколько вариантов - из документации и 2 примера отсюда)

статус в цикле вычитывается одно из следущего
(описания битов статуса я взял от другого чипа, тк в даташите нету описания статуса!! они скорее неправильные)

0x4104 (LB CRLCK 01)
0x4105 (LB RSSI_AT CRLCK 01)
0xC104 (LB GDQD CRLCK 01)
0xC105 (LB RSSI_AT GDQD CRLCK 01)


Если пробовать читать фифо в цикле - там всегда все по нулям.

помогите cranky.gif

Антенка керамическая RainSun я вот думаю может мне ее на 868Мгц подсунули вместь 433


void RFXX_PORT_INIT(void)
{
PORTC = 0b00000000;
DDRC = 0b00000000;

PORTD = 0b00000000;
DDRD = 0b00000000;

HI_SEL();
HI_SDI();
LOW_SCK();

SEL_OUTPUT();
SDI_OUTPUT();
SDO_INPUT();
SCK_OUTPUT();
}


void RF01_ChipInit()
{
SendWordRF(0x0000);
SendWordRF(0xA000 | (unsigned int)(((434-430)/0.0025)));//434MHz
SendWordRF(0x8978);//898A - 433BAND,167kHz; 898C - 67kHz 0x8978-200kHz

SendWordRF(0xC800|((344828UL/19200)-1));//19200
SendWordRF(0xC6F7);//AFC setting
SendWordRF(0xC42A);//autolock-off, slowmode,,Digital filter,DQD=3
SendWordRF(0xC260);//output 2MHz
SendWordRF(0xC008);
SendWordRF(0xCE88);//use FIFO
SendWordRF(0xCE8B);
SendWordRF(0xC009);//OPEN RX

}

unsigned int RFXX_WRT_CMD(unsigned int aCmd)
{
unsigned char i;
unsigned int temp = 0;

LOW_SCK();
LOW_SEL(); // chip select
for (i=0; i<16; i++)
{
temp<<=1;
if (SDO_HI())
temp |= 0x0001;


LOW_SCK2();

if (aCmd & 0x8000)
HI_SDI();
else
LOW_SDI();

HI_SCK2();

aCmd <<= 1;
}
LOW_SCK();
HI_SEL();
return temp;
}



void RFXX_TEST()
{
_delay_ms(500);

RFXX_PORT_INIT();
RF01_ChipInit();
INT_INPUT();
MCUCR |= (1<<ISC01)|(0<<ISC00);
GICR |= (1<<INT0); // INT0 enabled



while (1)
{
if (INT_LOW())
{
Togle_LED_on();
}


Ret = RFXX_WRT_CMD(0b00000000);

if (Ret) // & 0b1000000000000000)
{
Print_Word(Ret); Send_UART(" "); PrintStatus(Ret);
}

}
}





тут дефинишины для полноты картины


#define PORT_SEL PORTC
#define PIN_SEL PINC
#define DDR_SEL DDRC

#define PORT_SDI PORTC
#define PIN_SDI PINC
#define DDR_SDI DDRC

#define PORT_SCK PORTC
#define PIN_SCK PINC
#define DDR_SCK DDRC

#define PORT_SDO PORTC
#define PIN_SDO PINC
#define DDR_SDO DDRC

#define PORT_INT PORTD
#define PIN_INT PIND
#define DDR_INT DDRD


#define RFXX_SCK 4 // PC4
#define RFXX_SDI 5 // PC5
#define RFXX_SEL 6 // PC6
#define RFXX_SDO 7 // PC7
#define RFXX_INT 2 // PD2

#define SEL_OUTPUT() DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL() PORT_SEL |= (1<<RFXX_SEL)
#define LOW_SEL() PORT_SEL &= ~(1<<RFXX_SEL)

#define SDI_OUTPUT() DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI() PORT_SDI |= (1<<RFXX_SDI)
#define LOW_SDI() PORT_SDI &= ~(1<<RFXX_SDI)

#define SDO_INPUT() DDR_SDO &= ~(1<<RFXX_SDO)
#define SDO_HI() PIN_SDO & (1<<RFXX_SDO)

#define SCK_OUTPUT() DDR_SCK |= (1<<RFXX_SCK)
#define HI_SCK() PORT_SCK |= (1<<RFXX_SCK)
#define LOW_SCK() PORT_SCK &= ~(1<<RFXX_SCK)

#define INT_INPUT() DDR_INT &= ~(1<<RFXX_INT)
#define INT_HI() (PIN_INT & (1<<RFXX_INT))
#define INT_LOW() (!INT_HI())
Mad-man
Блин, пропали все ((( Зат**ся с этим RF01 ничего не выходит, перепаял антенку,

теперь командой SendWordRF(0x0000);
вычитываются нолики (( молчит, гадюка, как партизан...
похоже что даже инициализация не проходит..

У меня еще 2 вороса

1. Обязательно ли использовать кристал на 10Мгц на avr? У мня кристал на 3.57Мгц. Как я понял чип работает в слейв режиме и ему должно быть фиолетово с какой частотой приходит SCK?
2. Нужно ли использовать ногу DATA? Она на схеме подтянута к VCC, а в коде поднимается
командой DDRB |=(1<<RFXX_DATA); сразу после инициализации чипа!
Qwertty
Цитата(Mad-man @ Jun 27 2010, 15:43) *
Блин, пропали все ((( Зат**ся с этим RF01 ничего не выходит, перепаял антенку,

Не расстраивайтесь раньше времени, сейчас разберемся.

Цитата(Mad-man @ Jun 27 2010, 15:43) *
1. Обязательно ли использовать кристал на 10Мгц на avr?

Нет конечно. Я вообще с внутренними RC использовал.

Цитата(Mad-man @ Jun 27 2010, 15:43) *
2. Нужно ли использовать ногу DATA? Она на схеме подтянута к VCC, а в коде поднимается
командой DDRB |=(1<<RFXX_DATA); сразу после инициализации чипа!

Нет, если используется FIFO. В этом режиме все управление/обмен данными идет через SPI.
В коде либо не используется FIFO, либо под RFXX_DATA подразумевается MOSI.
Я с RFM01 не закончил, появились более приоритетные дела. Но связь с RFM02 была.
Инициализация RFM01 была такая
Код
#define        RFM01_BAUD_2400        ((uint8_t)((344827.58/2400)+0.5)-1)
#define        RFM01_BAUD_4800        ((uint8_t)((344827.58/4800)+0.5)-1)
#define        RFM01_BAUD_9600        ((uint8_t)((344827.58/9600)+0.5)-1)
#define        RFM01_BAUD_19200    ((uint8_t)((344827.58/19200)+0.5)-1)
#define        RFM01_BAUD_38400    ((uint8_t)((344827.58/38400)+0.5)-1)
#define        RFM01_BAUD_115200    ((uint8_t)((344827.58/115200)+0.5)-1)

#define RFM01FREQ(freq)    ((uint16_t)((freq-430.0)/0.0025))

#define        RFM01_CONFIG        0x8000
    #define    RFM01_BANDWIDTH_400KHZ            (0x01<<1)
    #define    RFM01_BANDWIDTH_340KHZ            (0x02<<1)
    #define    RFM01_BANDWIDTH_270KHZ            (0x03<<1)
    #define    RFM01_BANDWIDTH_200KHZ            (0x04<<1)
    #define    RFM01_BANDWIDTH_134KHZ            (0x05<<1)
    #define    RFM01_BANDWIDTH_67KHZ            (0x06<<1)

    #define    RFM01_BAND_315MHZ                (0x00<<11)
    #define    RFM01_BAND_433MHZ                (0x01<<11)
    #define    RFM01_BAND_868MHZ                (0x02<<11)
    #define    RFM01_BAND_915MHZ                (0x03<<11)

    #define    RFM01_CONFIG_DC                    (0x01<<0)
    #define    RFM01_CONFIG_EX                    (0x01<<8)

#define        RFM01_SET_FREQ        0xA000
#define        RFM01_RX_SETTING    0xC000
#define        RFM01_SET_BAUDRATE    0xC800
#define        RFM01_FIFO_MODE        0xCE00
    
#define        RFM01_DATA_FILTER    0xC400
#define        RFM01_AFC_SETTING    0xC600


Код
RFM01_WrCommand(0x0000);
RFM01_WrCommand(RFM01_CONFIG | RFM01_BAND_433MHZ | RFM01_BANDWIDTH_134KHZ | RFM01_CONFIG_EX);
RFM01_WrCommand(RFM01_SET_FREQ | RFM01FREQ(434.00));    // 434
RFM01_WrCommand(RFM01_SET_BAUDRATE | RFM01_BAUD_4800);                        // 4800
RFM01_WrCommand(RFM01_AFC_SETTING | 0x0097);                        // AFC // 0xC69B
RFM01_WrCommand(RFM01_DATA_FILTER | 0x002A);                        // filter
RFM01_WrCommand(0xC240);                        // 2Мгц, просто для контроля
RFM01_WrCommand(RFM01_RX_SETTING | 0x0080);
RFM01_WrCommand(RFM01_FIFO_MODE | 0x0084);                        //  FIFO Off
RFM01_WrCommand(RFM01_FIFO_MODE | 0x0087);                        //  FIFO On

Потом в коде включение приема
Код
    RFM01_WrCommand(RFM01_RX_SETTING | 0x0081);                        //
    RFM01_WrCommand(RFM01_FIFO_MODE | 0x0088);                        //
    RFM01_WrCommand(RFM01_FIFO_MODE | 0x008B);                        //  

    cli();
    MCUCR  &= ~((1<<ISC11)|(1<<ISC10));    // INT1 - low level interrupt
    GICR |= (1<<INT1);                    // INT1 interrupt enable
    GIFR = (1<<INT1);                    // clear interrupt flag INT1
    sei();

nIRQ подключен к INT1 8-ой меги. Тут есть перекрытие инициализации, но это рабочая версия, не законченная и не причесанная. Так что - как есть smile.gif
Mad-man
Цитата(Qwertty @ Jun 28 2010, 13:12) *
Не расстраивайтесь раньше времени, сейчас разберемся.



Спасибо, я сегодня ночью копался с RF01 3 раза перепроверил все выходы и входы, спаял второй приемник
на каком-то форуме нашел что нужно ожидать POR около 1-2 сек и задержки перед инициализацией

сделал гиганские задержки начали сыпаться данные в режиме полинга rolleyes.gif НУ ХОТЬ УЖЕ ЧТО-ТО!!

кстати оказалось что купленный пульт KEYFOB на 433 (на базе HCS301) вообще не шлет данных! maniac.gif
я его разобрал и если прижимать пальцем землю и клеммы (к которым нужно резисторы/конденсаторв подпаивать что-ли?? в мануале на него написано что серийный номер - программируется или "подпаивается"? rolleyes.gif )
и одновременно жать кнопку - отправляется данные. короче с пультом разбираться нужно

nIRQ пока не дергается но думаю получится - эта тема уже обсуждалась и здесь и на радиокоте.


Кстати нашел библиотечку для RF01 (FR12b даже есть) может кому будет полезна

http://myfablab.wordpress.com/2010/06/22/r...18-version-0-1/


сейчас данные бьются видимо из-за больших задержек - но все равно я доволен как мытый слон biggrin.gif
ZyBEX
Цитата(Mad-man @ Jun 28 2010, 14:38) *
на каком-то форуме нашел что нужно ожидать POR около 1-2 сек и задержки перед инициализацией

Это не только на RFM01/02. Буквально неделю назад точно также обжегся на модулях RFM31/43. По незнанию пренебрег задержками после включения модуля и половина команд инициализации улетало в пустоту.
Mad-man
Цитата(ZyBEX @ Jun 30 2010, 02:56) *
Это не только на RFM01/02. Буквально неделю назад точно также обжегся на модулях RFM31/43. По незнанию пренебрег задержками после включения модуля и половина команд инициализации улетало в пустоту.


Да, засада еще та)) Убрал задержки, сделал POR 500ms, включил прерывания, пока дышит)

Ща только перешил eeprom на брелке с hcs301 (прошился 4в VCC хотя в даташите говорят VCC должно быть 5в +- 10%), завтра буду вечером пробовать их подружить...массив с верификацией сошелся с записываемым rolleyes.gif вроде массив обнулил перед верификацией laughing.gif что-то отдельно вычитать eeprom c hcs301 не выходит...может это для защиты сделано.

смущает только что брелок (hcs301) кажется работает на 5кбод, а баудрейт, который можно выставить на RF01
4,8кбод
RFXX_WRT_CMD(0xC800 | 0b10010000); // BR = 10000000/ ((8+1)*29*(1+cs*7)) = 4,789 kbps

или 5,3кбод
RFXX_WRT_CMD(0xC800 | 0b10010000); // BR = 10000000/ ((9+1)*29*(1+cs*7)) = 5,3ххх kbps

cranky.gif
Qwertty
Цитата(Mad-man @ Jun 30 2010, 03:09) *
Да, засада еще та)) Убрал задержки, сделал POR 500ms, включил прерывания, пока дышит)

У меня 100мС и все работает стабильно. Причем задержку специально не делал, просто индикатор инициализируется первым, вот на время его инициализации задержка и получилась.
Цитата(Mad-man @ Jun 30 2010, 03:09) *
Ща только перешил eeprom на брелке с hcs301 (прошился 4в VCC хотя в даташите говорят VCC должно быть 5в +- 10%), завтра буду вечером пробовать их подружить...

А зачем hcs301? Они с RFM01/RFM02 дружить не будут, так как рассчитаны на амплитудную модуляцию. Да и кодируют посылку не битовым потоком, а импульсами разной ширины. Если в системе есть микроконтроллер, а для инициализации RFM он все равно нужен, то Keeloq можно прямо в нем закодировать, hcs301 это пятое колесо к телеге. Или задача принимать на RFM01 сигнал от брелка с hcs301? Тогда ничего не получится, амплитудная модуляция с частотной не дружат. А в брелке именно амплитудная.
Mad-man
Цитата(Qwertty @ Jun 30 2010, 14:33) *
У меня 100мС и все работает стабильно. Причем задержку специально не делал, просто индикатор инициализируется первым, вот на время его инициализации задержка и получилась.

А зачем hcs301? Они с RFM01/RFM02 дружить не будут, так как рассчитаны на амплитудную модуляцию. Да и кодируют посылку не битовым потоком, а импульсами разной ширины. Если в системе есть микроконтроллер, а для инициализации RFM он все равно нужен, то Keeloq можно прямо в нем закодировать, hcs301 это пятое колесо к телеге. Или задача принимать на RFM01 сигнал от брелка с hcs301? Тогда ничего не получится, амплитудная модуляция с частотной не дружат. А в брелке именно амплитудная.


брелок мне нужен не для контроллера. брелок сам по себе
я хочу принимать от него посылку на RF01 и по этой посылке включать/отключать реле
kelog по сути тоже не нужен - из его пакета мне хватит фиксированной части (где серийный номер)
просто брелков со статическим кодом не удалось купить

а какие брелки можно подружить с RF01?


вот этот подойдет?

http://www.aktivsb.ru/prod-2456.html
Qwertty
Цитата(Mad-man @ Jun 30 2010, 15:45) *
я хочу принимать от него посылку на RF01 и по этой посылке включать/отключать реле

Тогда Вам нужен другой приемник. Сверхрегенератор - по типу как в старых автосигнализациях.

Цитата(Mad-man @ Jun 30 2010, 15:45) *
а какие брелки можно подружить с RF01?
вот этот подойдет?

Скорее всего никакие. Обычно брелок стараются сделать дешевле в ущерб качеству. В таких брелках передатчик - всего один транзистор и хорошо если частота стабилизирована резонатором на ПАВ. Часто вообще LC контур. Ну и модуляция сделана амплитудная 100% - либо излучает либо нет. RFM01 куда более качественная система и возможностей у нее намного больше.
Но Вам это все не надо - берите что то типа RR8-433 - http://www.terraelectronica.ru/pdf/TELC/RR8-433.pdf или http://www.terraelectronica.ru/pdf/TELC/RR3-433.pdf
Они смогут работать с брелком на hcs301 и программировать их не нужно. Там из интерфейса один выход. smile.gif
Можете вообще самостоятельно приемник собрать - http://vrtp.ru/index.php?act=categories&am...mp;article=1129
или - http://vrtp.ru/index.php?act=categories&am...mp;article=1418 , но надо немного перестроить по частоте.
Mad-man
Цитата(Qwertty @ Jun 30 2010, 16:37) *
Тогда Вам нужен другой приемник. Сверхрегенератор - по типу как в старых автосигнализациях.


Скорее всего никакие. Обычно брелок стараются сделать дешевле в ущерб качеству. В таких брелках передатчик - всего один транзистор и хорошо если частота стабилизирована резонатором на ПАВ. Часто вообще LC контур. Ну и модуляция сделана амплитудная 100% - либо излучает либо нет. RFM01 куда более качественная система и возможностей у нее намного больше.
Но Вам это все не надо - берите что то типа RR8-433 - http://www.terraelectronica.ru/pdf/TELC/RR8-433.pdf или http://www.terraelectronica.ru/pdf/TELC/RR3-433.pdf
Они смогут работать с брелком на hcs301 и программировать их не нужно. Там из интерфейса один выход. smile.gif
Можете вообще самостоятельно приемник собрать - http://vrtp.ru/index.php?act=categories&am...mp;article=1129
или - http://vrtp.ru/index.php?act=categories&am...mp;article=1418 , но надо немного перестроить по частоте.



Вы меня расстроили (((

чипы с одним выходом не подходят crying.gif поллить выходы это кощунственно


нашел чип GD-RXV6D, заказал теперь буду пробовать его

http://www.tgdd-gd.com/showproduct.asp?id=93

выход 4 бита - в даташите ни слова про них - китайцы совсем офигели
Qwertty
Цитата(Mad-man @ Jun 30 2010, 17:51) *
чипы с одним выходом не подходят crying.gif поллить выходы это кощунственно

Зачем? Подключите на прерывание и ресурсов много не уйдет. Уж очень низкая скорость.
Цитата(Mad-man @ Jun 30 2010, 17:51) *
нашел чип GD-RXV6D, заказал теперь буду пробовать его
выход 4 бита - в даташите ни слова про них - китайцы совсем офигели

Этот уже с амплитудной модуляцией. Да еще похоже там килог уже внутри, а D0-D3 это выходы кнопок. Только как туда мануфактурный ключ прописать непонятно.
Олежик
Тогда может передатчик тоже самому сделать ?
Сразу много плюсов.
Например, вот эту вещь можно и в корпус от брелока впихнуть, а возможностей уйма: http://ru.farnell.com/quasar/qfm-trx1-24g/...r-fm/dp/1517428
Брелок правда получится немаленький. smile.gif
А вот этот вообще микроскопический (7х5 мм) :http://ru.farnell.com/quasar/qam-tx3/module-transmitter-am-433mhz/dp/1304025
Mad-man
Цитата(Олежик @ Jun 30 2010, 20:23) *
Тогда может передатчик тоже самому сделать ?
Сразу много плюсов.
Например, вот эту вещь можно и в корпус от брелока впихнуть, а возможностей уйма: http://ru.farnell.com/quasar/qfm-trx1-24g/...r-fm/dp/1517428
Брелок правда получится немаленький. smile.gif
А вот этот вообще микроскопический (7х5 мм) :http://ru.farnell.com/quasar/qam-tx3/module-transmitter-am-433mhz/dp/1304025


ну это как-то по бомжовски
вот был бы он в корпусе

Кверти сказал что брелков, совместимых с RF01 нет в природе


ну есть - пульты от всяких Шерханов и MS (у них FSK) - но очень дорого (((
Qwertty
Цитата(Mad-man @ Jun 30 2010, 20:56) *
ну это как-то по бомжовски
вот был бы он в корпусе

Ну корпус можно и отдельно купить. Вот - куча целая. http://www.contractelectronica.ru/service/...plastic/consol/
Начинка - attiny13 + передатчик на 1 транзисторе + литиевая "таблетка". Не спеша за день сделать можно.
А так может Вам готовое купить? Вот например - http://www.masterkit.ru/main/set.php?code_id=131467
Подключите свое реле и готово.
нечитатель
Из восьми приёмников RFM01 один "плохо ловит", остальные семь в комнатных условиях без замечаний (в условиях outdoor пока не очень понял).

CODE
Инициализация (про power-on delay не забыли):

0x0000 ; чтение статуса = сброс флагов
0xC080 ; выкл. приёмник (на всякий случай?)
0xDA01 ; выкл. the highly sensitive RESET mode
0xCC00 ; disable low duty cycle
0xE000 ; wake-up timer period = 0 (не используем, но пусть будет)
0xC2E0 ; 10 МГц clock наружу
0x898A ; 433, выкл LBD и wakeup timer, crystal load capacitance = ... (???), bw = 134 kHz, не запрещаем clock наружу
0xA640 ; center frequency = ...
0xC847 ; data rate = 4789 bit/sec
0xC6C3 ; AFC (???)
0xC4EC ; data filter (???)
0xCE84 ; выкл. FIFO
0xCE87 ; вкл. FIFO, старт по sync word
0xC041 ; 0 dB gain, enable receiver and crystal osc

Приём (по прерыванию от ноги nIRQ):

читаем первые 8 бит статуса
читаем вторые 8 бит статуса
читаем третьи 8 бит статуса = принятый байт

ложим принятый байт в буфер
прибавляем счётчик, который номер ячейки в буфере = номер байта в пакете

если это был конец пакета:
очищаем внутренний буфер приёмника командой 0xCE84,
приёмник начинает ждать следующего sync word после команды 0xCE87

Или с лыжами - или...
... получилось бы весело, когда случайно выбрать для отладки из общей кучи модуль именно тот, который "плохо ловит"?

Как бы опыт для будущих.

(для научного любопытства и эксперимента придумал в "плохо ловящем" модуле заменить кварц на с другого, совсем дохлого его, у которого нога выжжена то ли не помню. лень. когда-нибудь.)

---

И/или вопрос: обычна ли ситуация "не напрягай мозг об ровное место, тупо замени сабж бракованный от рождения либо испорченный в процессе"?
Михаил86
Добрый день!
Вот уже неделю пытаюсь соединить между собой RFM12B-433S1. Код передалал из Меги8 на PIC16F873 и PIC16F887, то что под рукой есть. Запускаю передатчик, в COM- порт в цикле выдает "sende..." светодиод мерцает, ток потребления всей штуковины прыгает до 60мА при 5В. Все линии SPI шевелятся.
Запускаю приемник, SPI виснет. Один раз моргает светодиод, в СОМ-порту тишина.
Оба проекта прилагаю в архивчиках. Помогите разобраться, ткните пальцем, все ж я больше железячник нежели программер...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.