اطلاعیه

Collapse
No announcement yet.

کمک در مورد رفع اشکال برنامه آشکارساز کد ریموتهای لرن

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

    کمک در مورد رفع اشکال برنامه آشکارساز کد ریموتهای لرن

    سلام دوستان . :applause:
    من برای ره اندازی ریموت لرن فرکانس 433 ماژولهای ask استفاده کردم.
    برنامه توسط تایمر 1 ای وی ار 32 آ.ابتدا بیتهای premble رو چک میکنه در صورت درست بودن نسبت صفر به یک وارد مد دیگه میشه که تو اون مد یک و صفر ریموت رو چک میکنه.و 24 بیت بعد که شامل کد مخصوص ریموت و دیتای مربوطه هست رو بدست می آره و میریزه توی متغیر code.
    من برنامه رو برای 16 بیت اول جهت رفع اشکال گذاشتم براتون. این برنامه رو بستم و کار میکنه در عمل .مشکل اینه که وقتی ریموت رو فشار میدم و بعد ولتاژ مدار رو وصل میکنم برنامه تشخیص میده که اون دیتای مورد نظر من رسیده(متغیر Ref 16 بیت اول ریموت منه که تعریف کردم) یعنی بار اول که میکرو روشن میشه ریموت رو میشناسه و روی ال سی دی نشون میده که ریموت رو تشخیص داده اما بعد که دستم رو از روی ریموت بر میدارم.و برای بار بعد فشار میدم دیگه مثل همون بار اول تازه میکرو روشن شده بود تشخیص نمیده.
    و مثلا بین 5 تا 9 بار باس فشار بدی ریموت رو و نگه داری تا بخونه و تشخیص بده.
    به نظرتون مشکل کجاس؟
    {
    ال سی دی کاراکتری به پورت A طبق تنظیمات کد ویزارد
    دیتای ماژول گیرنده با مقاومت پول پ به اینتراپت 0.
    و یک کلید همینجوری با :biggrin: پول پ به پورت b.0 با فشار دادن این پایه صفر میشه.
    فرکانس کاری میکرو 8 مگاهرتز و کلاک تایمر 1مگاهرتز.
    }
    [hr]
    [code=c][code=c][/][/#include <mega32a.h>
    #include <stdio.h>
    #include <delay.h>
    // Alphanumeric LCD functions
    #include <alcd.h>
    // Declare your global variables here
    unsigned int H1=0,L1=0xFFFE,H2=0,L2=0xFFFE;
    bit m=0,read=0,mode=0,r=0;
    unsigned short code[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    unsigned short ref[16]={1,0,0,0,0,0,1,0,1,0,0,0,1,0,0};
    unsigned short i=0,j=0;

    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    if(m==0){
    if(mode==0){
    L1=TCNT1-H1;}
    else if(mode==1){
    L2=TCNT1-H2;
    read=1;}
    TCNT1=0;
    MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
    m=1;}
    else if(m==1){
    if(mode==0){
    H1=TCNT1;}
    else if(mode==1){
    H2=TCNT1;
    read=0;}
    MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
    m=0;}
    if(read==1){
    if(((H2/L2)<=5)&&((H2/L2)>=2)){r=1;}
    else if(((L2/H2)<=5)&&((L2/H2)>=2)){r=0;}
    if(i<16){
    code[i]=r;
    i++;}}
    }



    // Timer1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
    TCNT1=0;
    }

    void main(void)
    {
    // Declare your local variables here
    char number[];
    unsigned short tru=0;
    // Input/Output Ports initialization
    // Port A initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

    // Port C initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(1<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000.000 kHz
    // Mode: Normal top=0xFFFF
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 65.536 ms
    // Timer1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Low level
    // INT1: Off
    // INT2: Off
    GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);

    // USART initialization
    // USART disabled
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);

    // ADC initialization
    // ADC disabled
    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);

    // Global enable interrupts
    #asm("sei&quot

    while (1)
    {
    // Place your code here
    if(((L1/H1)<=36)&&((L1/H1)>=27) && mode==0){
    mode=1;
    i=0;
    }
    if(i==16){
    tru=0;
    #asm("cli&quot
    for(j=0;j<16;j++)
    {
    if(code[j]==ref[j]){tru++;}
    lcd_gotoxy(j,0);
    sprintf(number,"%d",code[j]);
    lcd_puts(number);
    }
    if(tru==15){lcd_gotoxy(0,1);
    lcd_putsf("ok"
    PORTD.6=1;
    }
    i=0;
    mode=0;
    delay_ms(2000);
    PORTD.6=0;
    lcd_clear();
    m=0;
    H1=0;
    L1=0xFFFE;
    H2=0;
    L2=0xFFFE;

    #asm("sei&quot}
    if(PINB.0==0){
    lcd_clear();
    H1=0;
    L1=0xFFFE;
    H2=0;
    L2=0xFFFE;
    mode=0;
    for(i=1;i<16;i++){code[i]=0;
    }i=0;
    //#asm("sei&quot
    }

    }}][/code]
    :job:
لطفا صبر کنید...
X