اطلاعیه

Collapse
No announcement yet.

مشکل با rfm12

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل با rfm12

    سلام به دوستان عزیز من یه مشکل کوچولو یا بهتر بگم یه مشکل خیلی بزرگ دارم که مطمئنم دوستان می تونند کمک کنند به ما مشکل اینه که من یه برنامه که با rfm12 توش دیتا ارسال شده دارم در زمانی که rfm12 تو حالت دریافت قرار میگیره تا بافرش پر نشه از اون حالت بیرون نمیاد این برنامه rfm رو از سایت خودش برداشتم و با کمی تغییر تو codevision استفاده کردم و خیلی هم خوب کار میکنه اتفاقا 2 سال پیش تو همین سایت گذاشتم تا دوستان استفاده کنند میخواستم سوال کنم که آیا دوستان کسی برای RFM12 خودش کامل با codevision برنامه ای نوشته که از جایی بر نداشته باشه تا بتونیم دقیقا بفهمیم چیه ماجرا مشکل کار من اینجاست که وقتی توی برنامه watchdog رو فعال میکنم اگه همیشه دریافت بشه مشکلی پیش نمیاد اما اگه بیشتر از 2 پانیه دریافت نشه میکرو ریست میشه و منو کلافه کرده و این خیلی مشکل بزرگیه از طرفی یا باید واچداگو حذف کنیم یا باید راهی پیدا کنیم که قبل از 2 ثانیه اگه دریافت نکرد از وقفه بیرون بیاد کسی میتونه کمک کنه ؟ لطفا دوستان یه لطفی بکنند
    سه کس را شنیدم که غیبت رواست وز این درگذشتی چهارم خطاست
    یکی پادشاهی ملامت پسند کز او بر دل خلق بینی گزند
    حلال است از او نقل کردن خبر مگر خلق باشند از او بر حذر
    دوم پرده بر بی حیائی متن که خود میآ‌درد پرده بر خویشتن
    ز حوضش مدار ای برادر نگاه که او میآ‌درافتد به گردن به چاه
    سوم کژ ترازوی ناراست خوی ز فعل بدش هرچه دانی بگوی

    #2
    پاسخ : مشکل با rfm12

    سلام
    دوست من
    اشکال این برنامه رو میتونی بگی؟؟ داره اذیتم میکنه...ممنون

    reciver
    //--------------------------------------

    #include <mega16.h>
    #include <delay.h>
    #include <stdio.h>
    #asm
    .equ __lcd_port=0x1B
    #endasm
    #include <lcd.h>



    //-------------------------------------------------------
    #define RF_PORT PORTB
    #define RF_DDR DDRB
    #define RF_PIN PINB

    #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_INT PORTD
    #define PIN_INT PIND
    #define DDR_INT DDRD

    #define PORT_LED PORTB
    #define PIN_LED PINB
    #define DDR_LED DDRB

    #define SCK 7
    #define SDO 6
    #define SDI 5
    #define SEL 4
    #define INT 2
    #define LED 1

    #define LED_OUTPUT() DDR_LED |= (1<<LED)
    #define HI_LED() PORT_LED |= (1<<LED)
    #define LOW_LED() PORT_LED &=~(1<<LED)

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

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

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

    #define INT_INPUT() DDR_INT &=~(1<<INT)
    #define INT_HI() PIN_INT&(1<<INT)

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

    #define BAUD 38400 // F_CPU is 8000000 Hz
    #define UBRR_VALUE ( ((F_CPU) + 8UL*(BAUD)) / (16UL*(BAUD)) - 1UL )

    unsigned int status;

    void portInit() {
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    INT_INPUT();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SCK_OUTPUT();
    LED_OUTPUT();
    }

    unsigned int writeCmd(unsigned int cmd) {
    unsigned char i;
    unsigned int recv;
    recv = 0;
    LOW_SCK();
    LOW_SEL();
    for(i=0; i<16; i++) {
    if(cmd&0x8000)
    HI_SDI();
    else LOW_SDI();
    HI_SCK();
    recv<<=1;
    if( PINB&(1<<SDO) ) {
    recv|=0x0001;
    }
    LOW_SCK();
    cmd<<=1;
    }
    HI_SEL();
    return recv;
    }


    void rfInit() {
    writeCmd(0x80D7); //EL,EF,434band,12.0pF
    writeCmd(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,D
    writeCmd(0xA640); //frequency select
    writeCmd(0xC647); //4.8kbps
    writeCmd(0x94D0); //VDI,FAST,67kHz,0dBm,-103dBm
    writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
    writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
    writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    writeCmd(0x9820); //!mp,45kHz,MAX OUT
    writeCmd(0xE000); //NOT USED
    writeCmd(0xC800); //NOT USED
    writeCmd(0xC040); //1.66MHz,2.2V
    }

    void FIFOReset()
    {
    writeCmd(0xCA81);
    writeCmd(0xCA83);
    }


    unsigned char rfRecv()
    {
    unsigned int data=0;
    while(PIND&(1<<INT)); // wait until nIRQ is low
    status = writeCmd(0x0000); // read the status register
    //if ( (status&0x8000) ) { // if the status has the right register value
    data = writeCmd(0xB000); // copy data from FIFO register into data variable
    //}
    return (data&0x00FF);
    }

















    // Declare your global variables here

    void main(void)
    {
    unsigned char data=1, i;
    unsigned char lcd[6];
    delay_ms(50);

    PORTA=0x00;
    DDRA=0x00;

    PORTB=0x00;
    DDRB=0x00;

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0x00;
    DDRD=0x00;

    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x00;

    ACSR=0x80;
    SFIOR=0x00;
    portInit();
    lcd_init(16);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf("-hi-"
    rfInit();
    delay_ms(50);
    FIFOReset();
    delay_ms(500);
    lcd_clear();

    while (1)
    {



    for (i=0; i<16; i++)
    {
    HI_LED();
    data = rfRecv(); // copy received data to variable
    LOW_LED();
    sprintf(lcd,"%d",data);
    //
    lcd_gotoxy(0,0);
    lcd_puts(lcd);
    //PORTA=~status; // PORTA is used to check the data
    }
    FIFOReset(); // reset the FIFO for next data package

    }


    }
    //--------------------------------------------------------------------------------

    transmitter




    #include <mega16.h>
    #include <delay.h>
    //----------------------------------------------
    #define RF_PORT PORTB
    #define RF_DDR DDRB
    #define RF_PIN PINB

    #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_INT PORTD
    #define PIN_INT PIND
    #define DDR_INT DDRD

    #define PORT_LED PORTB
    #define PIN_LED PINB
    #define DDR_LED DDRB

    #define SCK 7
    #define SDO 6
    #define SDI 5
    #define SEL 4
    #define INT 2
    #define LED 1

    #define LED_OUTPUT() DDR_LED |= (1<<LED)
    #define HI_LED() PORT_LED |= (1<<LED)
    #define LOW_LED() PORT_LED &=~(1<<LED)

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

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

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

    #define INT_INPUT() DDR_INT &=~(1<<INT)
    #define INT_HI() PIN_INT&(1<<INT)

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

    //----------------------------------------------
    void portInit()
    {
    HI_SEL();
    HI_SDI();
    LOW_SCK();
    INT_INPUT();
    SEL_OUTPUT();
    SDI_OUTPUT();
    SCK_OUTPUT();
    LED_OUTPUT();
    }

    unsigned int writeCmd(unsigned int cmd)
    { //works perfect
    unsigned char i;
    unsigned int recv;
    recv = 0;
    LOW_SCK();
    LOW_SEL();
    // delay_us(5);
    for(i=0; i<16; i++)
    {
    if(cmd&0x8000)
    HI_SDI();
    else
    LOW_SDI();
    // delay_us(5);
    HI_SCK();
    recv<<=1;
    if( PINB&(1<<SDO) )
    {
    recv|=0x0001;
    }
    LOW_SCK();
    cmd<<=1;
    }
    HI_SEL();
    return recv;
    }



    void rfInit()
    {
    writeCmd(0x80D7); //EL,EF,434band,12.0pF
    writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
    writeCmd(0xA640); //frequency select
    writeCmd(0xC647); //4.8kbps
    writeCmd(0x94D0); //VDI,FAST,67kHz,0dBm,-103dBm
    writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
    writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
    writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
    writeCmd(0x9820); //!mp,45kHz,MAX OUT
    writeCmd(0xE000); //NOT USED
    writeCmd(0xC800); //NOT USED
    writeCmd(0xC040); //1.66MHz,2.2V
    }

    void rfSend(unsigned char data)
    {
    while(PIND&(1<<INT)); // wait until nIRQ is low
    writeCmd(0xB800 + data); // write the next data to B800 register
    }


    //----------------------------------------------
    // Declare your global variables here

    void main(void)
    {
    // VARIABLES//*************************
    volatile unsigned int i;
    //*************************************



    PORTA=0x00;
    DDRA=0x00;
    PORTB=0x00;
    DDRB=0x00;
    PORTC=0x00;
    DDRC=0x00;
    PORTD=0x00;
    DDRD=0x00;

    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x00;
    ACSR=0x80;
    SFIOR=0x00;
    portInit();

    HI_LED();
    delay_ms(100); // iniating
    rfInit();
    LOW_LED();
    delay_ms(100);

    while (1)
    {
    HI_LED();
    writeCmd(0x0000);
    rfSend(0xAA); // PREAMBLE
    rfSend(0xAA);
    rfSend(0xAA);
    rfSend(0x2D); // SYNC
    rfSend(0xD4); // SYNC
    for(i=0; i<16; i++) {
    rfSend(i); // send the data
    }
    rfSend(0xAA); // DUMMY BYTES
    rfSend(0xAA);
    rfSend(0xAA);

    //delay_ms(100);
    LOW_LED();
    //delay_ms(100);
    };
    }
    //-------------------------------------------------------------------- :angry:

    دیدگاه

    لطفا صبر کنید...
    X