You are here

RFM22B transceiver modul és PIC mikrokontroller

3 posts / 0 new
Last post
Lengyel József
Lengyel József picture

Sziasztok !
Adott két darab RFM22B transceiver modul és két PIC18F67J50-IPT. Az egyik PIC és RFM22B lenne az adó a másik egység PIC és RFM22B lenne a vevő egység.A frekvencia amivel működne 434MHz lenne.

Le töltöttem az Internetről egy RFM22B SI443x regiszter kalkulátor.

Ahogy szeretném a rendszert használni ,azaz úgynevezett "FIFO mode". A feladat az lenne ,hogy az adó elküldi az "0xAA" üzenetet ,a vevő veszi eszt és egy LED világítana. 
Régebben dolgoztam már ezzel a rádió típussal jó pár éve ,de már elfelejtettem ,hogy kell inicializálni . És nem tudom ,hogy jól használom a regiszter kalkulátort.
Amit készítettem saját függvényeket és eljárásokat :
Radio_init() // vevő inicializálás
{
  Radio_Write(address,data);
 ....;

}

Transmitter_init() // adó inicializálás
{
 Radio_Write(address,data);

}

Ezek a gyakorlatban :
// Az adó forráskódjában

unsigned short SPI_Transfer(unsigned short DataOut) // SPI kommunikáció ez jó
{
    unsigned short DataIn;
    unsigned short i = 0;
    for( i = 0; i < 8; i++)
    {
        if(DataOut & 0x80) LATE.RE3 = 1; else LATE.RE3 = 0;  // Data Out SPI_SDO from controler
        DataOut <<= 1;
        LATE.RE4 = 1;    // SPI_SCLK
        DataIn <<= 1;
        if(PORTE.RE2 == 1) DataIn |= 0x01; // SPI_SDI to controller
        LATE.RE4 = 0;
    }
    return DataIn;
}

unsigned short Radio_Read(unsigned short cim_R ) // RFM regiszter kiolvasás ez jó
{

    unsigned short regiszter;
    //PORTA.RA2 = 1 ;
    //PORTC.RC1 = 1;

    Delay_ms(1);
    LATE.RE5 = 0;    // Csak RF_CS engedélyezve
    Delay_ms(1);

    SPI_Transfer(cim_R);
    regiszter = SPI_Transfer(0);

    Delay_ms(1);
    LATE.RE5 = 1;
    Delay_ms(1);
    return regiszter ;
}

void Radio_Write( unsigned short cim ,unsigned short  adat)  // RFM regiszter beállítás ez jó
{
   unsigned short cim_W;
   cim_W = cim | 0x80 ;

   //PORTA.RA2 = 1 ;
   //PORTC.RC1 = 1;

   Delay_ms(1);
   LATE.RE5 = 0 ; // Az RF_CS funkció lába   csak engedélyezve

   Delay_ms(1);
   SPI_Transfer(cim_W );
   SPI_Transfer(adat);

   Delay_ms(1);
   LATE.RE5 = 1 ;
   Delay_ms(1);

}

void Transmitter_init()  // nem tudom ,hogy jók-e a benne lévő beállítások
{                   // TRANSMITTER MODE

 Radio_Write(0x6E , 0x19);
 Radio_Write(0x6F , 0x9A);
 Radio_Write(0x70 , 0x04);
 Radio_Write(0x71 , 0x23);
 Radio_Write(0x72 , 0x50);
 Radio_Write(0x75 , 0x77);
 Radio_Write(0x76 , 0x89);
 Radio_Write(0x77 , 0x80);
}
//*********************Most a vevő oldal következik***************************

void Radio_init()
{                   // RECEIVE MODE nem tudom ,hogy jók-e a benne lévő beállítások
  Radio_Write(0x05,0x02);   // enable valid packet received ,RX FIFO almost full
  Radio_Write(0x06,0x00); // valid preamble detect ,syncronize word (words)

  Radio_Write(0x09,0x7F);  // cap 12,5pF
  Radio_Write(0x0F,0x70);   // Az ADC konverete nincs használva
  Radio_Write(0x10,0x00);    // Az ADC nincs használva
  Radio_Write(0x12,0x00);    // A hőmérséklet érzékelő szenzor nincs használva
  Radio_Write(0x13,0x00);   // A hőérzékelő szenzor nincs hasdználva

  Radio_Write(0x70,0x24);   // Manchester kodolás : nincs

  Radio_write(0x1C,0x1E);    // KF szűrő sávszélessége
  Radio_Write(0x1D,0x44);     // AFC hurok
  Radio_Write(0x1E,0x0A);    // AFC késleltetés
  Radio_Write(0x1F,0x03);
  Radio_Write(0x20,0xD0);    //  Az órajel helyreállítása
  Radio_Write(0x21,0x00);
  Radio_Write(0x22,0x9D);
  Radio_write(0x23,0x49);
  Radio_Write(0x24,0x00);    // Az órajel visszaállításának időzítése
  Radio_Write(0x25,0x45);  // Az órajel visszaállításának időzítése

  Radio_Write(0x2A ,0x20);            // AFC limiter értéke

  Radio_Write(0x30,0x81);             //Data access control
  Radio_Write(0x32,0x00);          //Header control

  Radio_Write(0x33,0x0A);           // header 3 , 2 , 1 , 0 is used for head length ,fixed packed length ,
                                    // syncronize word length , 3 , 2
  Radio_Write(0x34,0x0A);              // 64 nibble = 32 preamble
  Radio_Write(0x35,0x2A);            // 0x35 need to detect 20 bit preamble

  Radio_Write(0x36,0x2D);          // A szavak szinkronizálása
  Radio_Write(0x37,0xD4);
  Radio_Write(0x38,0x00);
  Radio_Write(0x39,0x00);

  Radio_Write(0x69,0x60);

                                      // Tx power to max ?
  Radio_Write(0x79,0x00);             // No frequency hopping
  Radio_Write(0x7A,0x00);             // No frequency hopping
  Radio_Write(0x71,0x22);            // GFSK no invert for Tx/Rx  FIFO mode                //

  Radio_Write(0x72,0x48);            //Frequency deviation 45KHz

  Radio_Write(0x75,0x53);         //   a frekvencia beállítva 434 MHz-re
  Radio_Write(0x76,0x64);        //   a frekvencia beállítva 434 MHz-re
  Radio_Write(0x77,0x00);        //   a frekvencia beállítva 434 MHZ-re

}

// A többi függvény és eljárás ugyan az mint az adó oldalon
A radio_Write(address,data); // Ezzel tudom beírni a regisztereket az RFM modulban.

A Radio_Read(address) // Ezzel tudok visszaolvasni egy adott regisztertAz SPI busz-on. 

***********************Ami nem működik***************************

Arra kérnék segítséget ,hogy milyen address ,data  beállításokat kell csinálnom ,mint az adó mint a vevő oldalon ahhoz ,hogy amikor az adó elküldi az 0xAA kódot, a vevő veszi a 0xAA kódot és jelzi. Előre is köszönöm a segítséget mindenkinek !

Üdv : Lengyel József

 
 

Comments
imrus101
imrus101 picture

Hali!
Itt találsz példakódot a Si4432-höz:
https://www.silabs.com/documents/public/example-code/AN415_EZRadioPRO_Sa...
Mind az RX_operation, mind a TX_operation FIFO-t használ. Elég sok komment van benne, láthatod, hogy melyik regisztereket kell írni.

imrus101

0

Lengyel József
Lengyel József picture

Szia imrus101 !

Nagyon szépen köszönöm,és bocsánat ,hogy késve válaszolok ! Próbálkoztam eddig vele a rádió modullal ,megnézem a példákat amelyeket csatoltál és referálok mire jutottam  .Pár éve ezelőtt dolgoztam ezzel de már elfelejtettem ,hogyan volt. A projektet meg oda adtam az ügyfélnek és nagy hiba ,hogy nem maradt másolatom.

Köszönöm szépen és referálok !

Üdv : Lengyel József

0