ايران ويج

نسخه‌ی کامل: چت باکس علمی ایران ویج
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
برداشتی که من کردم اینه آیا درسته مرتضی جان؟ یعنی وقتی که کلکتور + باشه خروجی میوفته روی امیتر و وقتی که امیتر منفی باشه خروجی میوفته روی کلکتور.
با این وجود نه دیگه حلقه نداریم :-)

در کل از این زوج دارلینگتون کجاها و چه وقتایی استفاده میشه ؟

@هادی جان
من یه بار توتابلو به این مشکل برخوردم، میخواست قسمتی از یک حرف رو روشن کنم کلش روشن میشد، آخرش امدم کل حرف رو روشن کردم تا خرابیش به چشم نیاد، اما خب مشکل از ال ای دی نمیتونه باشه چون با همون ال ای دی ها یه تابلو دیگه بستم مشکلی نداشت. من میگم نمیشه از زیادی داغ شدن ال ای دی ها باشه؟
(۰۶-شهریور-۱۳۹۲, ۱۶:۴۱:۰۸)hadikh73 نوشته است: [ -> ]الان این سگمنت باید 1 رو نشون بده ولی می بینین که بقیه قطعه های سگمنت هم روشن می شن(خیلی کم نور) به نظرتون مشکل از چی میتونه باشه؟

(۰۶-شهریور-۱۳۹۲, ۱۷:۳۱:۵۶)sharin نوشته است: [ -> ]@هادی:
قبلا به چشم خورده بود این موضوع ، اما چون خودم کار نکردم به ذهن ندارم.
شاید اگر برای همه ی پایه ها یه مقاومت pull down بذاری مشکل حل بشه. تو نت هم یه سرچی بزن. موفق باشی.

با پول دان به احتمال بالا درست میشه
نشد مدارش و بذار بررسی کنیم

@مسلم جان
نه از داغ شدن نمیتونه باشه

@هادی
با ترانزیستور هم میتونی طبقات (هر 7تا قسمت) و از هم جدا کنی
(۰۶-شهریور-۱۳۹۲, ۱۶:۴۱:۰۸)hadikh73 نوشته است: [ -> ]بچه ها من تاحالا دوتا ساعت با ال ای دی ساختم هر دوتا اینطوری بود

الان این سگمنت باید 1 رو نشون بده ولی می بینین که بقیه قطعه های سگمنت هم روشن می شن(خیلی کم نور) به نظرتون مشکل از چی میتونه باشه؟
مشکل از اینه که کد برنامه رو نمی زاریBiggrin
-
کلا منم این مشکل رو داشتم چون سرعت بالا هست مثل اینکه LED خاموش نمی شهBiggrin(اگه مدار درایو هم گذاشتی بین میکرو و LED ها اونم ممکنه خاموش نشه)
کلا من چون مدارم رو ساخته بودم و پول دون نمی شد بزارم قبلا تغییر LED های روشن اول کل پایه هارو صفر می کردم (همه خاموش برن لالا) بعد یه وقفه خیلی کم (مثلا نصف اون مقداری که الان بین سویچ LED ها گذاشتی) بعد دوباره LED ها رو روشن می کردم ...
خیلی ممنون دوستان
(۰۶-شهریور-۱۳۹۲, ۱۷:۳۱:۵۶)sharin نوشته است: [ -> ]@هادی:
قبلا به چشم خورده بود این موضوع ، اما چون خودم کار نکردم به ذهن ندارم.
شاید اگر برای همه ی پایه ها یه مقاومت pull down بذاری مشکل حل بشه. تو نت هم یه سرچی بزن. موفق باشی.
پول دون گذاشتم ولی تاثیری نداشت
هر چی گشتم هیچی ندیدم
چی سرچ کنم؟
(۰۶-شهریور-۱۳۹۲, ۲۱:۱۴:۴۸)Ambassador نوشته است: [ -> ]@هادی جان
من یه بار توتابلو به این مشکل برخوردم، میخواست قسمتی از یک حرف رو روشن کنم کلش روشن میشد، آخرش امدم کل حرف رو روشن کردم تا خرابیش به چشم نیاد، اما خب مشکل از ال ای دی نمیتونه باشه چون با همون ال ای دی ها یه تابلو دیگه بستم مشکلی نداشت. من میگم نمیشه از زیادی داغ شدن ال ای دی ها باشه؟
اصلا ال ای دی ها داغ نمی کنن
این خیلی کمه توی اون ساعت کلا بیخیالش شدیم ولی می خوام بفهمم دقیقا چشه چون هرچی نور ال ای دی ها رو بیشتر میکنم ضایعتر میشه می خوام کلا حذفشون کنم
(۰۶-شهریور-۱۳۹۲, ۲۲:۵۸:۴۷)r0b0 نوشته است: [ -> ]با پول دان به احتمال بالا درست میشه
نشد مدارش و بذار بررسی کنیم
++
با ترانزیستور هم میتونی طبقات (هر 7تا قسمت) و از هم جدا کنی
با کوپلر کلا جداشون کردم و همون طور که آقا مرتضی گفتن با ترانزیستور تقویتشون کردم
شماتیک پیوست شد فقط بین سگمنت ها و میکرو کوپلر و ترانزیستور گذاشتم بقیش همینه
(۰۷-شهریور-۱۳۹۲, ۰۰:۲۷:۴۶)behzady نوشته است: [ -> ]مشکل از اینه که کد برنامه رو نمی زاریBiggrin
-
کلا منم این مشکل رو داشتم چون سرعت بالا هست مثل اینکه LED خاموش نمی شهBiggrin(اگه مدار درایو هم گذاشتی بین میکرو و LED ها اونم ممکنه خاموش نشه)
کلا من چون مدارم رو ساخته بودم و پول دون نمی شد بزارم قبلا تغییر LED های روشن اول کل پایه هارو صفر می کردم (همه خاموش برن لالا) بعد یه وقفه خیلی کم (مثلا نصف اون مقداری که الان بین سویچ LED ها گذاشتی) بعد دوباره LED ها رو روشن می کردم ...
من فرکانس متر ندارم ولی تو پروتئوس چک کردم فرکانس هر پایه از 40 هرتز بیشتر نمیشه و کوپلر هم تا 80 کیلو جواب میده مشکل از این نمی تونه باشه
کلا سخت افزارم سالمه خیلی چکش کردم
این سورس برنامه به زبان سی
کد:
#include <mega16.h>
#include <delay.h>
#asm
   .equ __i2c_port=0x15 ;PORTC
   .equ __sda_bit=4
   .equ __scl_bit=5
#endasm
#include <i2c.h>
#include <ds1307.h>
char sega[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
int d=5,e;
unsigned char ym,mmo,dm,h,m,s;
unsigned long int ys1,ym1;
int ym2,ys2,ys,mso,ds,mmo1,mso1,k,del=1;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
   e++;
   if(e==2){
   e=0;
   s++;
   d++;
   }    
        if (e==0) {
        PORTD.4=1;
        PORTB.7=1;
        }
        else{
        PORTD.4=0;
        PORTB.7=0;
        }
              if (s==0) {
              PORTB.3=1;
              }
               else{
              PORTB.3=0;
              }
}
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a15,a16;
int dama,me,me1,incr,decr,chm;
PORTA=0x00;
DDRA=0xFE;
PORTB=0x00;
DDRB=0x8F;
PORTC=0x00;
DDRC=0x0F;
PORTD=0x00;
DDRD=0xFF;
ASSR=0x08;
TCCR2=0x04;
TCNT2=0x00;
TIMSK=0x40;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x82;
#asm("sei")
i2c_init();
rtc_init(0,0,0);
rtc_get_time(&h,&m,&s);
rtc_get_date(&dm,&mmo,&ym);
//***************************************
ym1=ym+2000;
k=ym1%4;
ym1=ym1-1;ym1=ym1*365;
if(mmo==1){mmo1=0;}
if(mmo==2){mmo1=31;}
if(mmo==3){mmo1=59;}
if(mmo==4){mmo1=90;}
if(mmo==5){mmo1=120;}
if(mmo==6){mmo1=151;}
if(mmo==7){mmo1=181;}
if(mmo==8){mmo1=212;}
if(mmo==9){mmo1=243;}
if(mmo==10){mmo1=273;}
if(mmo==11){mmo1=304;}
if(mmo==12){mmo1=334;}
if(k==0){mmo1++;}
ym1=ym1+mmo1;
ym1=ym1+dm;
ym2=ym+2000;
ym2--;
ym2=ym2/4;
ym1=ym1+ym2;
ym1=ym1-226899;
ys2=ym2-155;
ys1=ym1-ys2;
ys=ys1/365;
ys=ys+1;
mso1=ys1%365;
mso=1;
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>31){mso++;mso1=mso1-31;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
if(mso1>30){mso++;mso1=mso1-30;}
ds=mso1;
if(ds==0){ds=31;mso--;}
if(mso==0){ds=30;mso=12;}
//*****************************  
while (1)
      {
      if(TCNT2<128){PORTC.3=1;chm=1;}else{PORTC.3=0;chm=0;}
      if (dm==0){dm--;mmo--;}
      if(dm>31){
      if(mmo==1){dm=31;}
      if(mmo==2){if(k==0){dm=29;}else{dm=28;}}
      if(mmo==3){dm=31;}
      if(mmo==4){dm=30;}
      if(mmo==5){dm=31;}
      if(mmo==6){dm=30;}
      if(mmo==7){dm=31;}
      if(mmo==8){dm=31;}
      if(mmo==9){dm=30;}
      if(mmo==10){dm=31;}
      if(mmo==11){dm=30;}
      if(mmo==12){dm=31;}
      }
      //***********************************************************************
      if((PINB.6==1) && (me1==0)) {me++;me1=1;}
      if((PINB.6==0) && (me1==1)) {me1=0;}
      if(me==7) {
      me=0;
      rtc_set_time(h,m,s);
      rtc_set_date(dm,mmo,ym);
      }
      if(me==0){
        if(s>59){s=0;m++;}
        if(m>59){m=0;h++;}
        if(h>23){h=0;ds++;dm++;}
        if(mso>6){if(ds>31){ds=0;dm=0;mso++;mmo++;}}else{if(ds>30){ds=0;dm=0;mso++;mmo++;}}
        if (mso>12){mso=0;mmo=0;ys++;ym++;}}
      else{
        if(s>59){s=0;}
        if(m>59){m=0;}
        if(h>23){h=0;}
        if(mso>6){if(ds>31){ds=1;dm=1;}}else{if(ds>30){ds=1;dm=1;}}
        if(mso>12){mso=0;mmo=0;}
      }
      //***************************
      a1=s%10;a2=s/10;
      //**********
      a3=m%10;a4=m/10;
      //**********
      a5=h%10;a6=h/10;
      //**********
      a7=ds%10;a8=ds/10;
      //**********
      a9=mso%10;a10=mso/10;
      //**********
      a11=ys%10;
      //**********
      a12=ys%100;a12=a12/10;
      //**********
      a13=ys%1000;a13=a13/100;
      //**********
      a15=dama%10;a16=dama/10;
       //***************************

      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;
      PORTA.1=1;PORTD=sega[a1];delay_ms(del);//PORTA.1=0;
      
      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
            
      PORTA.2=1;PORTD=sega[a2];delay_ms(del);//PORTA.2=0;

      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
      PORTA.3=1;PORTD=sega[a3];delay_ms(del);//PORTA.3=0;
                                                                            
      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
      PORTA.4=1;PORTD=sega[a4];delay_ms(del);//PORTA.4=0;
                                                                            
      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
      PORTA.5=1;PORTD=sega[a5];delay_ms(del);//PORTA.5=0;
                                                                            
      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
      PORTA.6=1;PORTD=sega[a6];delay_ms(del);//PORTA.6=0;
                                                                            
      PORTA.1=0;PORTA.2=0;PORTA.3=0;PORTA.4=0;PORTA.5=0;PORTA.6=0;PORTA.7=0;delay_ms(del);
      PORTA.7=1;PORTD=sega[a7];delay_ms(del);//PORTA.7=0;
                                                                            
      PORTB.0=0;PORTB.1=1;PORTB.2=1;PORTB.3=1;PORTB.7=1;delay_ms(del);
      PORTB.0=1;PORTD=sega[a8];delay_ms(del);//PORTB.0=0;
                                                        
      PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
      PORTB.1=1;PORTD=sega[a9];delay_ms(del);//PORTB.1=0;
                                                        
      PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
      PORTB.2=1;PORTD=sega[a10];delay_ms(del);//PORTB.2=0;
                                                        
      PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
      PORTB.3=1;PORTD=sega[a11];delay_ms(del);//PORTB.3=0;
                                                        
      PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.7=0;delay_ms(del);
      PORTB.7=1;PORTD=sega[a12];delay_ms(del);//PORTB.7=0;
      
      PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
      PORTC.0=1;PORTD=sega[a13];delay_ms(del);//PORTC.0=0;
        
      PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
      PORTC.1=1;PORTD=sega[a15];delay_ms(del);//PORTC.1=0;
                                      
      PORTC.0=0;PORTC.1=0;PORTC.2=0;delay_ms(del);
      PORTC.2=1;PORTD=sega[a16];delay_ms(del);//PORTC.2=0;
      //***********************************************************************
     if(d==5){d=0;ADCSRA|=0x40;dama=read_adc(0);dama=dama/2;}
      //***********************************************************************
       if((PINB.4==1)&&(incr==0)){incr=1;
        if(me==1){s=0;}
        if(me==2){m++;}
        if(me==3){h++;}
        if(me==4){ds++;dm++;}
        if(me==5){mso++;mmo++;}
        if(me==6){ys++;ym++;}
       }
       if((PINB.4==0)&&(incr==1)){incr=0;}
       //'***********************************************************************
      if((PINB.5==1)&&(decr==0)){decr=1;
        if(me==1){s=0;}
        if(me==2){m--;}
        if(me==3){h--;}
        if(me==4){ds--;dm--;}
        if(me==5){mso--;mmo--;}
        if(me==6){ys--;ym--;}
      }
      if((PINB.5==0)&&(decr==1)){decr=0;}
       //'***********************************************************************
       };
}

خوب یه سوال دیگه
بهزاد جان منظورت از پایه ها کدوما هستن؟پایه های a-g یا پایه های مشترک؟
(۰۷-شهریور-۱۳۹۲, ۰۰:۴۲:۴۰)hadikh73 نوشته است: [ -> ]خوب یه سوال دیگه
بهزاد جان منظورت از پایه ها کدوما هستن؟پایه های a-g یا پایه های مشترک؟
راستیاتش نخوندم ببینم چه کردیBiggrin
-
اگه همه ی پایه ها به میکرو وصله که همه رو خاموش کن ولی احتمالا a-g فقط به میکرو وصله که من خودم همین هارو خاموش کردم
-
فقط حواست به آنود مشترک و کاتد مشترک باشه ها من میگم خاموش لذوما صفر منظورم نیست نزنی تازه LED ها روشن بشنBiggrin
بعد از کلی تحقیق به این نتیجه رسیدم که این برنامه هیچ خطایی نداره
کد:
#include <mega32.h>
#include <delay.h>
char sega[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
int a;
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
a++;
if (a==2){a=0;}
}
void main(void)
{
PORTA=0x00;
DDRA=0x03;
PORTD=0x00;
DDRD=0xFF;

ASSR=0x08;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x40;
#asm("sei")

while (1)
      {                            
      if(a==1){PORTA.1=0;PORTA.2=1;PORTD=sega[1];}
      if(a==2){PORTA.2=0;PORTA.1=1;PORTD=sega[2];}
      };
}
تایمر 2 هر 1/128 ثانیه عمل می کنه و مقدار متغیر a رو یکی اضافه می کنه
وقتی a یک باشه
پایه ی PORTA.2 روشن میشه
مقدار نمایش داده میشه
و وقتی a دو بشه
پایه قبلی صفر میشه
اون یکی پایه یک میشه
و مقدار جدید نشون داده میشه
این روش اصلا خطا ندارهQuestionبه نظرتون روش نمایش روی سگمنتا اشتباهه؟
سلام
به نظرتون اگر هم زمان دوتا تایمر روشن باشن میکرو قاطی نمی کنه
هر دوتا از وقفه استفاده می کنن
(۰۹-شهریور-۱۳۹۲, ۱۳:۳۵:۲۹)hadikh73 نوشته است: [ -> ]سلام
به نظرتون اگر هم زمان دوتا تایمر روشن باشن میکرو قاطی نمی کنه
هر دوتا از وقفه استفاده می کنن
نه چرا قاطی کنه من سه تاش رو هم راه انداختمBiggrin
فقط اگه هم زمان اتفاق بیوفته اونی که بردار وقفه بالا تری در حافظه داره اولویت رو می گیره
بعد بستگی به برنامه داره اگه توی بردار وقفه بیاد و وقفه رو قطع کنه که تمامی وقفه ها از دست میرن اگه قطع نکنه که وسط برنامه وقفه یکی ممکن هست دیگری عمل کنه
(۰۹-شهریور-۱۳۹۲, ۱۵:۰۷:۳۴)behzady نوشته است: [ -> ]
(۰۹-شهریور-۱۳۹۲, ۱۳:۳۵:۲۹)hadikh73 نوشته است: [ -> ]سلام
به نظرتون اگر هم زمان دوتا تایمر روشن باشن میکرو قاطی نمی کنه
هر دوتا از وقفه استفاده می کنن
نه چرا قاطی کنه من سه تاش رو هم راه انداختمBiggrin
فقط اگه هم زمان اتفاق بیوفته اونی که بردار وقفه بالا تری در حافظه داره اولویت رو می گیره
بعد بستگی به برنامه داره اگه توی بردار وقفه بیاد و وقفه رو قطع کنه که تمامی وقفه ها از دست میرن اگه قطع نکنه که وسط برنامه وقفه یکی ممکن هست دیگری عمل کنه

سلام بهزاد جان

منم چندوقت پیش می خواستم دوتا تایمر رو اسفاده کنم منتهی دوستان گفتن احتمالاً میکرو هنگ می کنه، اگه میشه در مودر بردار وقفه بیشتر بگین...
سپاس
(۰۹-شهریور-۱۳۹۲, ۱۵:۱۴:۱۳)Ambassador نوشته است: [ -> ]
(۰۹-شهریور-۱۳۹۲, ۱۵:۰۷:۳۴)behzady نوشته است: [ -> ]
(۰۹-شهریور-۱۳۹۲, ۱۳:۳۵:۲۹)hadikh73 نوشته است: [ -> ]سلام
به نظرتون اگر هم زمان دوتا تایمر روشن باشن میکرو قاطی نمی کنه
هر دوتا از وقفه استفاده می کنن
نه چرا قاطی کنه من سه تاش رو هم راه انداختمBiggrin
فقط اگه هم زمان اتفاق بیوفته اونی که بردار وقفه بالا تری در حافظه داره اولویت رو می گیره
بعد بستگی به برنامه داره اگه توی بردار وقفه بیاد و وقفه رو قطع کنه که تمامی وقفه ها از دست میرن اگه قطع نکنه که وسط برنامه وقفه یکی ممکن هست دیگری عمل کنه

سلام بهزاد جان

منم چندوقت پیش می خواستم دوتا تایمر رو اسفاده کنم منتهی دوستان گفتن احتمالاً میکرو هنگ می کنه، اگه میشه در مودر بردار وقفه بیشتر بگین...
سپاس

توی دیتاشیت می تونید مشاهده کنید آدرس های مشخصی هست که هر کدوم مربوط به یکی از وقفه های میکرو میشه و اون جا فقط یک آدرس ذخیره میشه که مشخص می کنه زمانی که وقفه روی میده به کدوم قسمت حافظه باید پرش داشت
اینجا آدرس های MEGA32 رو می بینید
[attachment=10195]
و در عمل هم این دستور ها توی میکرو ریخته میشه
[attachment=10196]
و مثلا می بینید که توی ریست به کجا پرش میشه.
حالا اگه هم زمان دو تا وقفه اتفاق بیوفته اونی که بردار کوچیک تری داره
(توی عکس اول آدرس کوچیک تری داره)
اولویت داره و اجرا میشه.
-
این مشکل توی XMEGA حل شده و شما می تونید مشخص کنید که اولویت با چه میکرویی هست
-
از همین جا هم میشه فهمید (اگه با GCC برنامه می زنید) چقدر مهم هست که به بردار های وقفه حتما مقدار داده بشه وگرنه نتیجه غیر قابل پیش بینی خواهد بود (میکرو مثلا میره بردار INT0 رو می خونه چیزی توش نیست میاد پایین ... و اگه هیچ برداری در این بین تعریف نشده باشه میکرو میره به قسمت برنامه اولیه که در اصطلاح میشه گفت ریست می شه
-
می بینید که برای ریست نرم افزاری می تونید دستی به بردار ریست "000" برید
-
و این که دیگه دفعه بعدی جواب آماده داشته باشید که دوستانتون رو راهنمایی کنید مشکلی در استفاده تایمر ها نیستBiggrin
---
فقط یه نکته ای هست و اونم اینه که اگه وقفه ای که اولویت داره اجرا شد آیا وقفه دیگه از بین میره؟ جواب من نه هست مگر اینکه کامپایلر ریجیستر وقفه ها رو پاک کنه (که معمولا می کنه) ولی در کل یه جوون مرد دیتاشیت کامل MEGA32 رو در بخش INT بخونه و بگه دقیقا چی ذکر شده که من فکر می کنم از بین میرهBiggrin

این بردار وقفه همون "Vector No." هستBiggrin
قاعدتا همینه که بهزاد خان می گه.
اما اگر دقت کنید اول ورود به وقفه وقفه سراسری رو غیر فعال می کنیم cli
در خط آخر روتین وقفه هم دوباره فعالش می کنیم sei
چرا؟
که وسط وقفه ی ما ، وقفه ی دیگه ای رخ ندهه :)
بحث من برای AVR هست ، با اینکه می دونم هر کدوم از بردارهای وقفه الویتشون مشخص شده ( البته نمی دونم الویت برابر هم دارن یا نه ) خودم تا الان کاری نکردم که به مشکل بخورم ، اما یا کامپایلر یا خود معماری AVR مشکلی دارهه که در روتین وقفه ، اول وقفه سراسری رو غیر فعال می کنیم و در خط آخر روتین فعالش می کنیم.
قاعدتا بایستی وقفه ها بتونن تو در تو اجرا بشن ، اما باز در مورد AVR نظری ندارم که تا چه حد می تونه تحمل کنه.
همونطور که گفتید در XMEGA و ARM یه واحد اضافه شدهه که کارش مدیریت و الویت دهی به وقفه هاست ، تا می خوای می تونی از وقفه تو وقفه بری و هیچ مشکلی هم پیش نمی یاد.

همون پاراگراف بو دار از دیتاشیت رو بذار تا ببینیم چقدر بودارهه :)