اطلاعیه

Collapse
No announcement yet.

مشکل در فعال کردن دو اینتراپت در ATMEGA32

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

    مشکل در فعال کردن دو اینتراپت در ATMEGA32

    سلام.
    من یه سنسور شتاب (ADXL202) دارم که می خوام خروجی های X و Y اون رو که به صورت PWM است،(خروجی ها موج های هم دوره ای دارند) بوسیله ی ATMEGA32 دیوتی سایکلشون رو اندازه بگیرم.
    وقتی که میخوام دیوتی سایکل یکی از خروجی ها رو به تنهایی اندازه بگیرم، مشکلی ندارم (فعال کردن اینتراپت صفر و حساس کردن اون به لبه بالا رونده و پائین رونده) .
    ولی وقتی که میخوام دیوتی سایکل دو محور رو به صورت همزمان اندازه بگیرم (بوسیله ی اینتراپت صفر برای محور X و اینتراپت یک برای محور Y)، برنامه ای که مینویسم، جواب درستی نمیده (نمیدونم مشکل از نحوه فعال کردن اینتراپت یک در داخل ISR اینتراپت صفره یا چیز دیگه). چون در این میکرو یه تایمر 16 بیتی بیشتر نداریم، مجبور شدم که در هر زمان یکی از اینتراپت ها رو فعال و دیگری رو غیر فعال کنم.
    من برنامه ای که نوشتم رو اینجا میذارم، ممنون میشم اگه دوستان برای تصحیحش بهم کمک کنن.
    اینم فایل برنامه اگه اینجا نتونستین بخونینش.
    http://www.mediafire.com/?o4x1956luzaelog
    خدا یک در دنیا و صد در آخرت بهتون عطا کنه!

    کد:
    #include <mega32.h>
    #include <stdio.h>
    #include <delay.h>
    #include <lcd.h>
    unsigned int T1x,T2xs,T2ys,T1y;
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
     if (MCUCR==0x02)
     {
     T1x=TCNT1;
     TCNT1=0;
     MCUCR=0x03;
     }else
     { 
     T2xs=TCNT1;
     TCNT1=0;
     GICR|=0x80;
     MCUCR=0x08;
     GIFR=0x80; 
    
     } 
    }  
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    if(MCUCR==0x08)
     {
     T1y=TCNT1;
     TCNT1=0;
     MCUCR=0x0c;
     }else
     {
     T2ys=TCNT1;
     TCCR1B=0;
     GICR|=0x40;
     MCUCR=0x02;
     GIFR=0x40;
    
     }
    }
    
    void main(void)
    {
    
    TCCR1B=0x01;
    GICR|=0xc0;
    MCUCR=0x0A;
    GIFR=0xc0;
    lcd_init(16);
    
    #asm 
    .equ __lcd_port=0x18;
    #endasm
    #asm("sei")
    
    while (1)
       { 
       unsigned int c,d;
       char str[16],str2[16],str3[16],str4[16];
        delay_ms(200); 
        lcd_clear();
        sprintf(str,"Tx=%u",T1x);
        lcd_puts(str);
        delay_ms(100);
        lcd_gotoxy(0,1);
        c=T1x+T2xs;
        sprintf(str2,"Zx=%u",c);
        lcd_puts(str2);
        delay_ms(100);
        lcd_gotoxy(8,0);
        sprintf(str3,"Ty=%u",T1y);
        lcd_puts(str3);
        delay_ms(100);
        lcd_gotoxy(8,1);
        d=T1y+T2ys;
        sprintf(str4,"Zy=%u",d);
        lcd_puts(str4);
                          
       } 
     }

    #2
    پاسخ : مشکل در فعال کردن دو اینتراپت در ATMEGA32

    واقعا کسی نیست که چیزی از مشکل من بدونه؟؟؟

    دیدگاه

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