ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 19
  1. #1
    2007/07/07
    تهران
    268
    2

    RFM12 (فرستنده و گیرنده مخابراتی)

    سلام بچه هاو کسی با این ماژول کار کرده؟
  2. #2
    2005/12/04
    شیراز
    69
    0

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    من با rfm01 و rfm02 كار كردم .ماژول هاي خيلي خوبي هستند ولي عيب بزرگ آنها اينست كه توان خروجي آنها خيلي كم است و بدون تقويت و به تنهايي كاربردي ندارند .rfm12 چون فرستنده و گيرنده است و در داخل آن يك سوييچ rx/tx وجود داره تقويت كردن آن دردسر بيشتري داره به همين خاطر توصيه مي كنم كه به جاي آن از فرستنده و گيرنده جدا استفاده كنيد.
    ر کسي را بهر کاري در جهان آورده اند
    کار ما عشق است و ما را بهر آن آورده اند
  3. #3
    2006/09/16
    186
    0

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام
    تو datasheet این ماژول نوشته خروجیش سریال آیا درسته؟ چه نوع سریالی؟ RS232؟ کسی راش انداخته؟
    ممنون
    اللهمَ اغفرلیَ الذنوبَ التی تحبسُ الدعاء
  4. #4
    2005/12/04
    شیراز
    69
    0

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    بله rs232 است.
    ر کسي را بهر کاري در جهان آورده اند
    کار ما عشق است و ما را بهر آن آورده اند
  5. #5
    2007/07/04
    رشت
    193
    2

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام به همه دوستان عزیز من با این ماژول کار کردم ماژول فوق العاده خوبی هست و میشه به کمک اون خیلی از کار ها رو انجام داد و زحمت سیم کشی های طولانی رو رفع کرد من با زبان c این ماژول رو راه انداختم برنامه ای که میذارم به این صورت هست که یه مگا هشت دما و گاز رو از adc1 & adc0 میخونه و از طریق این ماژول میفرسته برای یه مگا 8 دیگه ، هم برنامه فرستنده رو میذارم هم برنامه گیرنده رو
    اینم برنامه فرستنده:

    /*


    Connections

    ATMEGA8 SIDE RF12 SIDE
    SCK--------------->SCK
    MISO--------------->SDO
    MOSI--------------->SDI
    SS--------------->nSEL
    INT0<---------------nIRQ

    PD6: LED GREEN
    PD7: LED RED

    */
    #include <mega8.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <delay.h>

    #define DDR_IN 0
    #define DDR_OUT 1

    #define PORT_SEL PORTB
    #define PIN_SEL PINB
    #define DDR_SEL DDRB

    #define PORT_SDI PORTB
    #define PIN_SDI PINB
    #define DDR_SDI DDRB

    #define PORT_SCK PORTB
    #define PIN_SCK PINB
    #define DDR_SCK DDRB

    #define PORT_SDO PORTB
    #define PIN_SDO PINB
    #define DDR_SDO DDRB

    #define PORT_IRQ PORTD
    #define PIN_IRQ PIND
    #define DDR_IRQ DDRD

    #define PORT_DATA PORTD
    #define PIN_DATA PIND
    #define DDR_DATA DDRD

    #define PB7 7//--\
    #define PB6 6// |
    #define RFXX_SCK 5// |
    #define RFXX_SDO 4// |RF_PORT
    #define RFXX_SDI 3// |
    #define RFXX_SEL 2// |
    #define NC 1// |
    #define PB0 0//--/

    #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 LOW_SDO() PORT_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 RF12_IRQ 2
    #define IRQ_IN() DDR_IRQ &=~(1<<RF12_IRQ)
    #define WAIT_IRQ_LOW() while(PIND&(1<<RF12_IRQ))
    //////////////////////////////

    #define RF12_DATA 4//PD4
    #define DATA_OUT() DDR_DATA|=1<<RF12_DATA
    #define HI_DATA() PORT_DATA|=1<<RF12_DATA

    #define LEDG_OUTPUT() DDRD|=~(1<<6)
    #define LEDR_OUTPUT() DDRD|=~(1<<7)

    #define LEDG_ON() PORTD&=~(1<<6)
    #define LEDG_OFF() PORTD|= (1<<6)
    #define LEDR_ON() PORTD&=~(1<<7)
    #define LEDR_OFF() PORTD|= (1<<7)


    #define RFM12_Reset PORTB.0
    #define ON 0
    #define OFF 1

    float T1,T2;
    float FltCurrentGas=0;
    bit edge=0;

    unsigned char uChCurrentTemp,i,uChCurrentGasPercent;

    eeprom int eepIntTemp=0,eepIntTol=0,eepIntGasHigh=500,eepIntG asPercent=0;
    eeprom float eepFltGasMedium=0,eepFltGasLow=0,eepFltGasPercent= 0;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    // Place your code here

    if (edge)
    {
    T2=TCNT1;
    TCNT1=0;
    // INT0 Mode: Falling Edge
    MCUCR=0x02;
    edge=0;
    }else
    {
    T1=TCNT1;
    TCNT1=0;
    // INT0 Mode: Rising Edge
    MCUCR=0x03;
    edge=1;
    }
    }


    #define ADC_VREF_TYPE 0x40

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    /////////////////////////////////////////////////////////////////////
    void Temperature(void)
    {
    char strTemp[]="000";
    float tf;

    tf=read_adc(0); // LM35 Sensor is connected to PORTA.0(PIN 23)
    tf=(tf*500/1023);
    ftoa(tf,0,strTemp);

    uChCurrentTemp=atoi(strTemp); // Convert String To Integer */
    }
    /////////////////////////////////////////////////////////////////////

    void Gas_Sensor(void)
    {
    char strGas[]="0000000",StrGasPercent[]="0000000";
    float tf;

    tf=read_adc(5); //lm35 is connected to PORTA.0(pin 40)
    tf=(tf*500/1023);
    ftoa(tf,2,strGas);

    FltCurrentGas=atoi(strGas);

    eepFltGasMedium=(eepIntGasHigh-eepFltGasLow)/100;
    eepFltGasPercent=(FltCurrentGas-eepFltGasLow)/eepFltGasMedium;

    if (eepFltGasPercent<0)
    eepFltGasPercent=0;

    itoa(eepFltGasPercent,StrGasPercent); // Convert int To String

    uChCurrentGasPercent=atoi(StrGasPercent); // Convert String To Integer
    }

    /////////////////////////////////////////////////////////////////////
    // send //
    //__________________________________________________ _______________//
    void RFsend_PORT_INIT(void){
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SDO_INPUT();
    SCK_OUTPUT();
    }
    unsigned int RFsend_WRT_CMD(unsigned int aCmd){
    unsigned char i;
    unsigned int temp;
    LOW_SCK();
    LOW_SEL();
    for(i=0;i<16;i++){
    temp<<=1;
    if(SDO_HI()){
    temp|=0x0001;
    }
    LOW_SCK();
    if(aCmd&0x8000){
    HI_SDI();

    }else{
    LOW_SDI();
    }
    HI_SCK();
    aCmd<<=1;
    };
    LOW_SCK();
    HI_SEL();
    return(temp);
    }
    void RF12send_INIT(void){
    RFsend_WRT_CMD(0x80D7);//EL,EF,433band,12.0pF
    RFsend_WRT_CMD(0x8239);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    RFsend_WRT_CMD(0xA640);//A140=430.8MHz
    RFsend_WRT_CMD(0xC647);//19.2kbps
    RFsend_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
    RFsend_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
    RFsend_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
    RFsend_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
    RFsend_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
    RFsend_WRT_CMD(0xE000);//NOT USE
    RFsend_WRT_CMD(0xC800);//NOT USE
    RFsend_WRT_CMD(0xC400);//1.66MHz,2.2V
    }
    void RF12_SEND(unsigned char aByte){
    while(PIND&(1<<2));//wait for previously TX over
    RFsend_WRT_CMD(0xB800+aByte);
    }


    //__________________________________________________ _______________//
    // send //
    /////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    // Recieve //
    //__________________________________________________ _______________//

    void RFrecieve_PORT_INIT(void){
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    //SET nFFS pin HI when using FIFO
    HI_DATA();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SDO_INPUT();
    SCK_OUTPUT();
    IRQ_IN();
    DATA_OUT();
    }
    unsigned int RFrecieve_WRT_CMD(unsigned int aCmd){
    unsigned char i;
    unsigned int temp;
    temp=0;
    LOW_SCK();
    LOW_SEL();
    for(i=0;i<16;i++){
    if(aCmd&0x8000){
    HI_SDI();
    }else{
    LOW_SDI();
    }
    HI_SCK();
    temp<<=1;
    if(SDO_HI()){
    temp|=0x0001;
    }
    LOW_SCK();

    aCmd<<=1;
    };
    HI_SEL();
    return(temp);
    }
    void RF12recieve_INIT(void){
    RFrecieve_WRT_CMD(0x80D7);//EL,EF,433band,11.5pF
    RFrecieve_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    RFrecieve_WRT_CMD(0xA640);//434MHz
    RFrecieve_WRT_CMD(0xC647);//4.8kbps
    RFrecieve_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
    RFrecieve_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
    RFrecieve_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
    RFrecieve_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
    RFrecieve_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
    RFrecieve_WRT_CMD(0xE000);//NOT USE
    RFrecieve_WRT_CMD(0xC800);//NOT USE
    RFrecieve_WRT_CMD(0xC400);//1.66MHz,2.2V
    }
    unsigned char RF12_RECV(void){
    unsigned int FIFO_data;
    WAIT_IRQ_LOW();
    RFrecieve_WRT_CMD(0x0000);
    FIFO_data=RFrecieve_WRT_CMD(0xB000);
    return(FIFO_data&0x00FF);
    }

    //__________________________________________________ _______________//
    // Recieve //
    /////////////////////////////////////////////////////////////////////

    void DataSend(char Sensor)
    {

    RFsend_PORT_INIT();

    RF12send_INIT();

    DDRD|=(1<<RF12_DATA);
    PORTD|=(1<<RF12_DATA);// SET nFFS pin HI when using TX register
    DDRD&=~(1<<2); //PD2(INT0)

    LEDR_ON();
    RFsend_WRT_CMD(0x0000);//read status register
    RFsend_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(0x30);//DATA BYTE 0
    ChkSum+=0x30;
    RF12_SEND(0x31);//DATA BYTE 1
    ChkSum+=0x31;
    RF12_SEND(0x32);
    ChkSum+=0x32;
    RF12_SEND(0x33);
    ChkSum+=0x33;
    RF12_SEND(0x34);
    ChkSum+=0x34;
    RF12_SEND(0x35);
    ChkSum+=0x35;
    RF12_SEND(0x36);
    ChkSum+=0x36;
    RF12_SEND(0x37);
    ChkSum+=0x37;
    RF12_SEND(0x38);
    ChkSum+=0x38;
    RF12_SEND(0x39);
    ChkSum+=0x39;
    RF12_SEND(0x3A);
    ChkSum+=0x3A;
    RF12_SEND(0x3B);
    ChkSum+=0x3B;
    RF12_SEND(0x3C);
    ChkSum+=0x3C;
    RF12_SEND(0x3D);
    ChkSum+=0x3D;
    RF12_SEND(0x3E);
    ChkSum+=0x3E;
    RF12_SEND(0x3F); //DATA BYTE 15
    ChkSum+=0x3F; */

    RF12_SEND(Sensor); //send chek sum

    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE

    RFsend_WRT_CMD(0x8201);
    // LEDR_OFF();

    LEDR_OFF();
    // delay_ms(1000);

    // for(i=0;i<10000;i++)for(j=0;j<123;j++);//sleep 1 second appr.
    }

    //////////////////////////////////////////////////////////////

    void DataRecieve(void)
    {
    //Initialize command port
    RFrecieve_PORT_INIT();

    //Initialize RF12 chip
    RF12recieve_INIT();

    //Init FIFO
    RFrecieve_WRT_CMD(0xCA81);

    // LCD module initialization

    //Enable FIFO
    RFrecieve_WRT_CMD(0xCA83);

    //Receive payload data
    // for(i=0;i<16;i++)
    // {
    // ChkSum+=RF12_RECV();
    // }

    //Receive Check sum

    i=RF12_RECV();

    //Disable FIFO
    RFrecieve_WRT_CMD(0xCA81);


    //Package chkeck

    if(i=='R&#039
    {
    RFM12_Reset=ON; // reset rfm12
    delay_ms(100);
    RFM12_Reset=OFF;

    for(i=0;i<2;i++)
    {
    delay_ms(250);
    LEDG_ON();
    LEDR_OFF();
    delay_ms(250);
    LEDG_OFF();
    LEDR_ON();
    }
    LEDR_OFF();
    }

    if(i=='*&#039
    {
    eepFltGasLow=FltCurrentGas; // Calibration

    for (i=1;i<10;i++)
    {
    LEDG_ON();
    LEDR_ON();
    delay_ms(100);
    LEDR_OFF();
    LEDG_OFF();
    delay_ms(100);
    }
    }

    if(i=='A&#039
    {
    delay_ms(30);
    DataSend(uChCurrentTemp);
    LEDG_ON();
    delay_ms(10);
    LEDG_OFF();
    }

    if(i=='a&#039
    {
    delay_ms(30);
    DataSend(uChCurrentGasPercent);
    LEDG_ON();
    delay_ms(10);
    LEDG_OFF();
    }
    }

    /////////////////////////////////////////////////////////

    void main(void)
    {
    unsigned char i=0;
    // Global enable interrupts
    #asm("cli"

    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1
    PORTB=0x01;
    DDRB=0x01;

    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Falling Edge
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x02;
    MCUCSR=0x00;
    GIFR=0x40;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 1200
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x02;
    UBRRL=0x08;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 78.125 kHz
    // ADC Voltage Reference: AVCC pin
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x87;


    // Watchdog Timer initialization
    // Watchdog Timer Prescaler: OSC/2048k
    #pragma optsize-
    WDTCR=0x1F;
    WDTCR=0x0F;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    //POWER ON indication: both LEDR and LEDG blink 3 times

    LEDG_OFF();
    LEDR_OFF();
    LEDG_OUTPUT();
    LEDR_OUTPUT();

    for(i=0;i<3;i++)
    {
    delay_ms(200);
    LEDG_ON();
    LEDR_ON();
    delay_ms(200);
    LEDG_OFF();
    LEDR_OFF();
    }

    LEDG_OFF();
    LEDR_OFF();

    RFM12_Reset=ON; // reset rfm12
    delay_ms(100);
    RFM12_Reset=OFF;

    for(i=0;i<2;i++)
    {
    delay_ms(250);
    LEDG_ON();
    LEDR_OFF();
    delay_ms(250);
    LEDG_OFF();
    LEDR_ON();
    }
    LEDR_OFF();

    while(1)
    {
    #asm ("wdr"
    Gas_Sensor();
    Temperature();
    DataRecieve();
    };
    }

    سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
    یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
    حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
    دوم پرده بر بی حیائی متن که خود میآ*درد پرده بر خویشتن
    ز حوضش مدار ای برادر نگاه که او میآ*درافتد به گردن به چاه
    سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی
  6. #6
    2006/09/16
    186
    0

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام
    بردش تا چقد جواب میده؟
    ممنون
    اللهمَ اغفرلیَ الذنوبَ التی تحبسُ الدعاء
  7. #7
    2007/07/04
    رشت
    193
    2

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    اینم سورس گیرنده :

    /*





    ATMEGA8 SIDE RF12 SIDE
    SCK--------------->SCK
    MISO--------------->SDO
    MOSI--------------->SDI
    SS--------------->nSEL
    INT0<---------------nIRQ

    PD6: LED GREEN
    PD7: LED RED

    */
    #include <mega8.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <delay.h>

    #define DDR_IN 0
    #define DDR_OUT 1

    #define PORT_SEL PORTB
    #define PIN_SEL PINB
    #define DDR_SEL DDRB

    #define PORT_SDI PORTB
    #define PIN_SDI PINB
    #define DDR_SDI DDRB

    #define PORT_SCK PORTB
    #define PIN_SCK PINB
    #define DDR_SCK DDRB

    #define PORT_SDO PORTB
    #define PIN_SDO PINB
    #define DDR_SDO DDRB

    #define PORT_IRQ PORTD
    #define PIN_IRQ PIND
    #define DDR_IRQ DDRD

    #define PORT_DATA PORTD
    #define PIN_DATA PIND
    #define DDR_DATA DDRD

    #define PB7 7//--\
    #define PB6 6// |
    #define RFXX_SCK 5// |
    #define RFXX_SDO 4// |RF_PORT
    #define RFXX_SDI 3// |
    #define RFXX_SEL 2// |
    #define NC 1// |
    #define PB0 0//--/

    #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 LOW_SDO() PORT_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 RF12_IRQ 2
    #define IRQ_IN() DDR_IRQ &=~(1<<RF12_IRQ)
    #define WAIT_IRQ_LOW() while(PIND&(1<<RF12_IRQ))
    //////////////////////////////

    #define RF12_DATA 4//PD4
    #define DATA_OUT() DDR_DATA|=1<<RF12_DATA
    #define HI_DATA() PORT_DATA|=1<<RF12_DATA

    #define LEDG_OUTPUT() DDRD|=~(1<<6)
    #define LEDR_OUTPUT() DDRD|=~(1<<7)

    #define LEDG_ON() PORTD&=~(1<<6)
    #define LEDG_OFF() PORTD|= (1<<6)
    #define LEDR_ON() PORTD&=~(1<<7)
    #define LEDR_OFF() PORTD|= (1<<7)

    #define RFM12_Reset PORTB.0
    #define ON 0
    #define OFF 1


    unsigned char uChRecieve;


    /////////////////////////////////////////////////////////////////////
    // send //
    //__________________________________________________ _______________//
    void RFsend_PORT_INIT(void){
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SDO_INPUT();
    SCK_OUTPUT();
    }
    unsigned int RFsend_WRT_CMD(unsigned int aCmd){
    unsigned char i;
    unsigned int temp;
    LOW_SCK();
    LOW_SEL();
    for(i=0;i<16;i++){
    temp<<=1;
    if(SDO_HI()){
    temp|=0x0001;
    }
    LOW_SCK();
    if(aCmd&0x8000){
    HI_SDI();

    }else{
    LOW_SDI();
    }
    HI_SCK();
    aCmd<<=1;
    };
    LOW_SCK();
    HI_SEL();
    return(temp);
    }
    void RF12send_INIT(void){
    RFsend_WRT_CMD(0x80D7);//EL,EF,433band,12.0pF
    RFsend_WRT_CMD(0x8239);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    RFsend_WRT_CMD(0xA640);//A140=430.8MHz
    RFsend_WRT_CMD(0xC647);//19.2kbps
    RFsend_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
    RFsend_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
    RFsend_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
    RFsend_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
    RFsend_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
    RFsend_WRT_CMD(0xE000);//NOT USE
    RFsend_WRT_CMD(0xC800);//NOT USE
    RFsend_WRT_CMD(0xC400);//1.66MHz,2.2V
    }
    void RF12_SEND(unsigned char aByte){
    while(PIND&(1<<2));//wait for previously TX over
    RFsend_WRT_CMD(0xB800+aByte);
    }


    //__________________________________________________ _______________//
    // send //
    /////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    // Recieve //
    //__________________________________________________ _______________//

    void RFrecieve_PORT_INIT(void){
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    //SET nFFS pin HI when using FIFO
    HI_DATA();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SDO_INPUT();
    SCK_OUTPUT();
    IRQ_IN();
    DATA_OUT();
    }
    unsigned int RFrecieve_WRT_CMD(unsigned int aCmd){
    unsigned char i;
    unsigned int temp;
    temp=0;
    LOW_SCK();
    LOW_SEL();
    for(i=0;i<16;i++){
    if(aCmd&0x8000){
    HI_SDI();
    }else{
    LOW_SDI();
    }
    HI_SCK();
    temp<<=1;
    if(SDO_HI()){
    temp|=0x0001;
    }
    LOW_SCK();

    aCmd<<=1;
    };
    HI_SEL();
    return(temp);
    }
    void RF12recieve_INIT(void){
    RFrecieve_WRT_CMD(0x80D7);//EL,EF,433band,11.5pF
    RFrecieve_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    RFrecieve_WRT_CMD(0xA640);//434MHz
    RFrecieve_WRT_CMD(0xC647);//4.8kbps
    RFrecieve_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
    RFrecieve_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
    RFrecieve_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
    RFrecieve_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
    RFrecieve_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
    RFrecieve_WRT_CMD(0xE000);//NOT USE
    RFrecieve_WRT_CMD(0xC800);//NOT USE
    RFrecieve_WRT_CMD(0xC400);//1.66MHz,2.2V
    }
    unsigned char RF12_RECV(void){
    unsigned int FIFO_data;
    WAIT_IRQ_LOW();
    RFrecieve_WRT_CMD(0x0000);
    FIFO_data=RFrecieve_WRT_CMD(0xB000);
    return(FIFO_data&0x00FF);
    }

    //__________________________________________________ _______________//
    // Recieve //
    /////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////
    void DataRecieve(void)
    {
    //Initialize command port
    RFrecieve_PORT_INIT();

    //Initialize RF12 chip
    RF12recieve_INIT();

    //Init FIFO
    RFrecieve_WRT_CMD(0xCA81);

    // LCD module initialization

    //Enable FIFO
    RFrecieve_WRT_CMD(0xCA83);

    //Receive payload data
    //for(i=0;i<16;i++){
    // ChkSum+=RF12_RECV();
    // }

    //Receive Check sum

    uChRecieve=RF12_RECV();

    LEDG_ON();

    //Disable FIFO
    RFrecieve_WRT_CMD(0xCA81);

    putchar(uChRecieve);

    delay_ms(250);

    LEDG_OFF();
    }

    /////////////////////////////////////////////////////////


    void DataSend(unsigned char Device)
    {
    RFsend_PORT_INIT();

    RF12send_INIT();

    DDRD|=(1<<RF12_DATA);
    PORTD|=(1<<RF12_DATA);// SET nFFS pin HI when using TX register
    DDRD&=~(1<<2); //PD2(INT0)

    LEDR_ON();
    RFsend_WRT_CMD(0x0000);//read status register
    RFsend_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(0x30);//DATA BYTE 0
    ChkSum+=0x30;
    RF12_SEND(0x31);//DATA BYTE 1
    ChkSum+=0x31;
    RF12_SEND(0x32);
    ChkSum+=0x32;
    RF12_SEND(0x33);
    ChkSum+=0x33;
    RF12_SEND(0x34);
    ChkSum+=0x34;
    RF12_SEND(0x35);
    ChkSum+=0x35;
    RF12_SEND(0x36);
    ChkSum+=0x36;
    RF12_SEND(0x37);
    ChkSum+=0x37;
    RF12_SEND(0x38);
    ChkSum+=0x38;
    RF12_SEND(0x39);
    ChkSum+=0x39;
    RF12_SEND(0x3A);
    ChkSum+=0x3A;
    RF12_SEND(0x3B);
    ChkSum+=0x3B;
    RF12_SEND(0x3C);
    ChkSum+=0x3C;
    RF12_SEND(0x3D);
    ChkSum+=0x3D;
    RF12_SEND(0x3E);
    ChkSum+=0x3E;
    RF12_SEND(0x3F); //DATA BYTE 15
    ChkSum+=0x3F; */

    RF12_SEND(Device);

    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE

    RFsend_WRT_CMD(0x8201);

    delay_ms(20);
    LEDR_OFF();

    if (Device=='*&#039
    delay_ms(2500);
    else
    if (Device=='R&#039
    return;
    else
    DataRecieve();

    }

    //////////////////////////////////////////////////////////////

    eeprom unsigned char Da_Status=0,Db_Status=0,Dc_Status=0,Dd_Status=0,De _Status=0;

    void main(void)
    {
    unsigned char i=0,Calibration='*',uChReset='R&#03 9;;
    unsigned char Device_A='A',Device_a='a',Devi ce_B='B',Device_b='b',Device_C ='C',Device_c='c';
    unsigned char Device_D='D',Device_d='d',Devi ce_E='E',Device_e='e';

    // Global enable interrupts
    #asm("cli"

    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=P State0=1
    PORTB=0x03;
    DDRB=0x01;

    // Port C initialization
    // Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
    // State6=T State5=1 State4=T State3=T State2=T State1=T State0=T
    PORTC=0x20;
    DDRC=0x20;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization


    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: Off
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x40;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;

    // Watchdog Timer initialization
    // Watchdog Timer Prescaler: OSC/2048k
    #pragma optsize-
    WDTCR=0x1F;
    WDTCR=0x0F;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    LEDG_OFF();
    LEDR_OFF();
    LEDG_OUTPUT();
    LEDR_OUTPUT();

    #asm ("wdr"

    for(i=0;i<3;i++)
    {
    delay_ms(200);
    LEDG_ON();
    LEDR_ON();
    delay_ms(200);
    LEDG_OFF();
    LEDR_OFF();
    }
    #asm ("wdr"

    LEDG_OFF();
    LEDR_OFF();

    // Start:

    #asm ("wdr"

    RFM12_Reset=ON; // reset rfm12
    delay_ms(100);
    RFM12_Reset=OFF;

    #asm ("wdr"

    DataSend(uChReset);

    for(i=0;i<2;i++)
    {
    delay_ms(250);
    LEDG_ON();
    LEDR_OFF();
    delay_ms(250);
    LEDG_OFF();
    LEDR_ON();
    }
    LEDR_OFF();
    #asm ("wdr"
    delay_ms(1000);
    #asm ("wdr"

    /* if (Da_Status==1 && Db_Status==1 && Dc_Status==1 && Dd_Status==1 && De_Status==1)
    goto lbl_De;
    else
    if (Da_Status==1 && Db_Status==1 && Dc_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Da_Status==1 && Db_Status==1 && Dc_Status==1 && De_Status==1)
    goto lbl_De;
    else
    if (Da_Status==1 && Db_Status==1 && Dd_Status==1 && De_Status==1)
    goto lbl_Dd;
    else
    if (Db_Status==1 && Dc_Status==1 && Dd_Status==1 && De_Status==1)
    goto lbl_De;
    else
    if (Da_Status==1 && Db_Status==1 && Dc_Status==1)
    goto lbl_Dc;
    else
    if (Da_Status==1 && Db_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Da_Status==1 && Db_Status==1 && De_Status==1)
    goto lbl_De;
    else
    if (Da_Status==1 && Dc_Status==1 && De_Status==1)
    goto lbl_De;
    else
    if (Da_Status==1 && Dc_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Db_Status==1 && Dc_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Da_Status==1 && Db_Status==1)
    goto lbl_Db;
    else
    if (Da_Status==1 && Dc_Status==1)
    goto lbl_Dc;
    else
    if (Da_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Db_Status==1 && Dc_Status==1)
    goto lbl_Dc;
    else
    if (Db_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Dc_Status==1 && Dd_Status==1)
    goto lbl_Dd;
    else
    if (Dc_Status==1 && De_Status==1)
    goto lbl_Dd;
    else */
    if (Da_Status==1)
    goto lbl_Da;
    else
    if (Db_Status==1)
    goto lbl_Db;
    else
    if (Dc_Status==1)
    goto lbl_Dc;
    else
    if (Dd_Status==1)
    goto lbl_Dd;
    else
    if (De_Status==1)
    goto lbl_De;

    while(1)
    {
    ///////////////////////////////
    #asm ("wdr"
    Da_Status=1;/////////
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_A);
    DataSend(Device_A);
    delay_ms(250);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_a);
    DataSend(Device_a);
    Da_Status=0;//////////
    delay_ms(1000);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);
    lbl_Da:
    ////////////////////////////////////
    Db_Status=1;////////////
    putchar(Device_B);
    DataSend(Device_B);
    delay_ms(250);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_b);
    DataSend(Device_b);
    Db_Status=0;///////////
    delay_ms(1000);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);
    lbl_Db:
    //////////////////////////////////
    Dc_Status=1;
    putchar(Device_C);
    DataSend(Device_C);
    delay_ms(250);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_c);
    DataSend(Device_c);
    Dc_Status=0;
    delay_ms(1000);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);
    lbl_Dc:
    /////////////////////////////////
    Dd_Status=1;///////////
    putchar(Device_D);
    DataSend(Device_D);
    delay_ms(250);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_d);
    DataSend(Device_d);
    Dd_Status=0;/////////////
    delay_ms(1000);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);
    lbl_Dd:
    /////////////////////////////////
    De_Status=1;//////////
    putchar(Device_E);
    DataSend(Device_E);
    delay_ms(250);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);

    putchar(Device_e);
    DataSend(Device_e);
    De_Status=0;////////////
    delay_ms(1000);
    #asm ("wdr"
    if (PINB.1==0)
    DataSend(Calibration);
    lbl_De:
    };
    }

    سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
    یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
    حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
    دوم پرده بر بی حیائی متن که خود میآ*درد پرده بر خویشتن
    ز حوضش مدار ای برادر نگاه که او میآ*درافتد به گردن به چاه
    سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی
  8. #8
    2006/03/21
    1,034
    4

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام
    توی این صفحه دیتاشیت و اطلاعات راه اندازی هست:
    http://www.hoperf.com/pro/RFM12.html
    اینجا هم شماتیک و برنامه(فکر میکنم با برنامه دوستمون یکی باشه)
    http://www.hoperf.com/pdf/RF12_code.pdf
    در دیر مغان آمد یارم قدحی در دست
    مست از می می خواران از نرگس مستش مست
  9. #9
    2007/07/07
    تهران
    268
    2

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام آقای با وفا.... من برنامه شما رو دیدم واقا ممنون.. ولی چند تا سوال داشتم... یکی اینکه تو برنامه شما تنظیمات spi نبود یعنی نیازی نیست.... ؟ بعدش اینکه میشه برنامتون رو یه جوری تغییر بدین که یکم ساده تر بشه مثلا فقط یه چیزه ساده رو بفرسته مثله یه کاراکتر و بتونم با atmega 32 اینکارو انجام بدم... واقعا ممنون میشم اگه این لطف رو بکنین....
  10. #10
    2008/01/04
    4
    0

    پاسخ : RFM12 (فرستنده و گیرنده مخابراتی)

    سلام.ممکنه بگید با bascom چطوری میشه این ماژول ها رو راه انداخت؟

    خیلی ممنون
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 19

موضوعات مشابه

  1. راه اندازی چیپ مخابراتی فرستنده گیرنده ( +Wireless NRF24L01 ) { رقیب HMTR }
    توسط مهران چمنی در انجمن ماژول های RF - ISM Band و بلوتوث
    پاسخ: 170
    آخرين نوشته: 2016/07/26, 13:48
  2. ساخت فرستنده و گیرنده با ماژول فرستنده ASK DX-RF 315 ,
    توسط mdfarahani71 در انجمن مدارهاي مخابراتي
    پاسخ: 1
    آخرين نوشته: 2016/03/26, 21:16
  3. تفکیک گیرنده در ماژول فرستنده گیرنده
    توسط احسان128 در انجمن مدارهاي مخابراتي
    پاسخ: 6
    آخرين نوشته: 2013/02/05, 20:20
  4. 30 فرستنده 1 گیرنده ؟!!
    توسط حامد رحیمی در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 12
    آخرين نوشته: 2011/10/13, 14:28
  5. RFM12(فرستنده و گیرنده رادیویی)
    توسط eagle shadow در انجمن ماژول های RF - ISM Band و بلوتوث
    پاسخ: 4
    آخرين نوشته: 2007/11/03, 17:04

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •