اطلاعیه

Collapse
No announcement yet.

اشکال در وقفه میکرو

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

    اشکال در وقفه میکرو

    باسلام خدمت اساتید :smile:
    من توی 1 پروژه از میکرو مگا32 استفاده کردم. زمانی برنامه به وقفه حارجی میره. زیر روال وقفه 2 بار اجرا میشه. اشکال از کجاست بنظرتون :cry: :cry:
    تنظیمات وقفه:
    لبه بالا رونده
    دستور اسمبلی reti رو هم آخر زیر روال وقفه نوشتم :sad:
    هر سری یه فکری داره! :read:
    ///////////////////////////////////////////////////////////

    #2
    پاسخ : اشکال در وقفه میکرو

    نوشته اصلی توسط EJG
    باسلام خدمت اساتید :smile:
    من توی 1 پروژه از میکرو مگا32 استفاده کردم. زمانی برنامه به وقفه حارجی میره. زیر روال وقفه 2 بار اجرا میشه. اشکال از کجاست بنظرتون :cry: :cry:
    تنظیمات وقفه:
    لبه بالا رونده
    دستور اسمبلی reti رو هم آخر زیر روال وقفه نوشتم :sad:
    با چه زبونی با میکرو حرف میزنی؟
    برنامه رو بذار تا اونوقت همه بهتون کمک کنن.
    ?Why not

    دیدگاه


      #3
      پاسخ : اشکال در وقفه میکرو

      اولا Capture Edge رو باید درست تعریف کنی
      دوما مقامت Pullup یادت نره
      ولی اگر با اسمبلی مینوسی ، اشکال از برنامست
      دلا خو کن به تنهایی که از تنها بلا خیزد

      دیدگاه


        #4
        پاسخ : اشکال در وقفه میکرو

        نوشته اصلی توسط Navid_Micro
        اولا Capture Edge رو باید درست تعریف کنی
        دوما مقامت Pullup یادت نره
        ولی اگر با اسمبلی مینوسی ، اشکال از برنامست
        منظور از Capture Edge چیه و چطور باید تعریفش کنم که درست باشه؟؟؟
        متشکرم :smile:
        هر سری یه فکری داره! :read:
        ///////////////////////////////////////////////////////////

        دیدگاه


          #5
          پاسخ : پاسخ : اشکال در وقفه میکرو

          نوشته اصلی توسط QUARK
          با چه زبونی با میکرو حرف میزنی؟
          برنامه رو بذار تا اونوقت همه بهتون کمک کنن.
          با زبان C و برنامه کدویژن
          اینم برنامه:
          کد:
          #include <mega32.h>
          #include <stdio.h>
          #include <delay.h>
          #include <alcd.h>
          #include <glcd.h>
          #include <font5x7.h>
          #include "courier_bold14.h"
          #include "courier_bold14.c" 
          
          #define GLCD1_on PORTD.0=1;
          #define GLCD2_on PORTD.7=1;
          #define GLCD1_off PORTD.0=0;
          #define GLCD1_off PORTD.7=0;
          
          eeprom char maxgoal,maxm;
          char start,end,cash,s,m,goal,p1,p2,set;
          char sf[3],mf[3],gf[3],maxmf[3],p1f[3],p2f[3],cashf[3];
          
          
          // Function used for reading image
          // data from external memory
          unsigned char read_ext_memory(GLCDMEMADDR_t addr)
          {
          unsigned char data;
          // Place your code here
          
          return data;
          }
          
          // Function used for writing image
          // data to external memory
          void write_ext_memory(GLCDMEMADDR_t addr, unsigned char data)
          {
          // Place your code here
          
          }
          
          // External Interrupt 0 service routine
          interrupt [EXT_INT0] void ext_int0_isr(void)
          {
          p1++;
          //goal++;
          putchar (2);
          sprintf(p1f,"%2u",p1);
          if (p1==cash&&maxm==0) 
            {
            start=0;
            end=1;
            }
          delay_ms(1000);
          #asm("reti");
          
          }
          
          // External Interrupt 1 service routine
          interrupt [EXT_INT1] void ext_int1_isr(void)
          {
          p2++;
          //goal++;
          putchar (2);
          sprintf(p2f,"%2u",p2);
          if (p2==cash&&maxm==0) 
            {
            start=0;
            end=1;
            }
          delay_ms(1000);
          #asm("reti");
          
          }
          
          // External Interrupt 2 service routine
          interrupt [EXT_INT2] void ext_int2_isr(void)
          {
          if (maxgoal==0) cash=maxm;
          if (maxm==0) cash=maxgoal;
          
          if (start==1) 
            {
            if (maxgoal==0) cash=cash+maxm;
            if (maxm==0) cash=cash+maxgoal;
            glcd_outtextxyf(5,110,"Cash Charged!");
            putchar(4);
            delay_ms(1000);
            glcd_clear();
            }
          if (start==0&&set==0)
          {
          s=0;
          m=0;
          p1=0;
          p2=0;
          goal=0;
          sprintf(p1f,"%2u",p1);
          sprintf(p2f,"%2u",p2);
          glcd_clear();
          putchar(1);
          glcd_rectangle(0,0,240,127);
          glcd_line(0,20,240,20);
          glcd_outtextxyf(70,30,"Starting Game...");
          glcd_outtextxyf(120,60,"3");
          delay_ms(500);
          glcd_outtextxyf(120,60,"2");
          delay_ms(500);
          glcd_outtextxyf(120,60,"1");
          delay_ms(500);
          end=0;
          start=1;
          PORTC.5=1;
          glcd_clear();
          }
          sprintf (cashf,"%2u",cash);
          delay_ms(1000);
          #asm("reti");
          
          }
          
          // Standard Input/Output functions
          
          
          // Timer2 overflow interrupt service routine
          interrupt [TIM2_OVF] void timer2_ovf_isr(void)
          {
          s=s+1;
          if (s==60)
            {
            s=0;
            m=m+1;
            if (m==60) m=0;
            }
          sprintf(sf,"%2u",s);
          sprintf(mf,"%2u",m);
          if (m==cash&&maxgoal==0)
          {
          start=0;
          end=1;
          } 
          
          }
          
          // Declare your global variables here
          
          void main(void)
          {
          
          // Declare your local variables here
          // Graphic LCD initialization data
          GLCDINIT_t glcd_init_data;
          
          // Input/Output Ports initialization
          // Port A initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
          PORTA=0x00;
          DDRA=0xFF;
          
          // Port B initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=Out Func0=Out 
          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=P State1=0 State0=0 
          PORTB=0x04;
          DDRB=0xFB;
          
          // Port C initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
          PORTC=0x00;
          DDRC=0xFF;
          
          // Port D initialization
          // Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
          // State7=0 State6=P State5=P State4=P State3=P State2=P State1=P State0=0 
          PORTD=0x7C;
          DDRD=0x83;
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          // Mode: Normal top=0xFF
          // OC0 output: Disconnected
          TCCR0=0x00;
          TCNT0=0x00;
          OCR0=0x00;
          
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
          
          // Timer/Counter 2 initialization
          // Clock source: TOSC1 pin
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0x08;
          TCCR2=0x05;
          TCNT2=0x00;
          OCR2=0x00;
          
          // External Interrupt(s) initialization
          // INT0: On
          // INT0 Mode: Rising Edge
          // INT1: On
          // INT1 Mode: Rising Edge
          // INT2: On
          // INT2 Mode: Rising Edge
          GICR|=0xE0;
          MCUCR=0x0F;
          MCUCSR=0x40;
          GIFR=0xE0;
          
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x40;
          
          // 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=0x67;
          
          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;
          
          // ADC initialization
          // ADC disabled
          ADCSRA=0x00;
          
          // SPI initialization
          // SPI disabled
          SPCR=0x00;
          
          // TWI initialization
          // TWI disabled
          TWCR=0x00;
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 3
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          // Graphic LCD initialization
          // The T6963C connections are specified in the
          // Project|Configure|C Compiler|Libraries|Graphic LCD menu:
          // DB0 - PORTA Bit 0
          // DB1 - PORTA Bit 1
          // DB2 - PORTA Bit 2
          // DB3 - PORTA Bit 3
          // DB4 - PORTA Bit 4
          // DB5 - PORTA Bit 5
          // DB6 - PORTA Bit 6
          // DB7 - PORTA Bit 7
          // C /D - PORTC Bit 0
          // /CE - PORTC Bit 1
          // /RD - PORTC Bit 2
          // /WR - PORTC Bit 3
          // /RESET - PORTC Bit 4
          
          // Specify the current font for displaying text
          glcd_init_data.font=font5x7;
          // No function is used for reading
          // image data from external memory
          glcd_init_data.readxmem=NULL;
          // No function is used for writing
          // image data to external memory
          glcd_init_data.writexmem=NULL;
          
          glcd_init(&glcd_init_data);
          
          // Global enable interrupts
          #asm("sei")
          lcd_clear();
          glcd_clear();
          lcd_puts("Starting System");
          glcd_outtextxyf(0,30,"Starting System");
          sprintf(p1f,"%2u",p1);
          sprintf(p2f,"%2u",p2);
          s=0;
          m=0;
          p1=0;
          p2=0;
          end=1;
          start=0;
          delay_ms(500);
          lcd_clear();  
          lcd_putsf("RUNING...");
          glcd_clear();
          glcd_init(&glcd_init_data);
          glcd_rectangle(0,0,240,127);
          glcd_setfont(courier_bold14);
          glcd_outtextxyf(80,30,"WELCOME...");
          delay_ms(1000);
          glcd_line(0,20,240,20);
          glcd_outtextxyf(45,30,"Please Insert Coin!");
          while (1)
             {
             if (end==1&&p1>p2)
              {
              delay_ms(5000);
              PORTC.5=0;
              glcd_outtextxyf(20,100,"Winner!");
              glcd_outtextxyf(140,100,"ANANASS!");
              putchar(3);
              p1=0;
              p2=0;
              }
            if (end==1&&p1<p2)
              {
              delay_ms(5000);
              PORTC.5=0;                
              glcd_outtextxyf(20,100,"ANANASS!");
              glcd_outtextxyf(140,100,"Winner!");
              putchar(3);
              p1=0;
              p2=0;
              }
             if (PIND.4==0)
              {
              set=1;
              lcd_clear();
              lcd_putsf("SETTING");
              glcd_clear();
              glcd_rectangle(0,0,240,127);
              glcd_outtextxyf(70,30,"Wait For Setting...");
              delay_ms(1000); 
              while (1)
               {
               if (PIND.5==0)
                {
                maxm++;
                if (maxm==30) maxm=0;
                delay_ms(50);
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_putsf("Time:");
                sprintf (maxmf,"%2u",maxm);
                lcd_gotoxy(6,0);
                lcd_puts(maxmf);
                delay_ms(50);
                maxgoal=0;
                }
               if (PIND.6==0)
                {
                maxgoal++;
                if (maxgoal==20) maxgoal=0;
                delay_ms(50);
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_putsf("Goal:");
                sprintf (gf,"%2u",maxgoal);
                lcd_gotoxy(6,0);
                lcd_puts(gf);
                delay_ms(50);
                maxm=0;
                }
               if (PIND.4==0) 
               {
               glcd_init(&glcd_init_data);
               lcd_clear();
               lcd_putsf("RUNING...");
               glcd_clear();
               glcd_rectangle(0,0,240,127);
               glcd_line(0,20,240,20);
               glcd_outtextxyf(45,30,"Please Insert Coin!");
               set=0;
               break;
               
               }
               
               delay_ms(100);
               }
              }
             
            
             for (;start==1;)
              {
              glcd_rectangle(0,0,240,127);
              glcd_line(0,20,240,20);
              glcd_line(120,20,120,128);
              glcd_outtextxyf(2,2,"TIME=");
              glcd_outtextxyf(20,30,"Player 1");
              glcd_outtextxyf(140,30,"Player 2");
              glcd_outtextxy(50,60,p1f);
              glcd_outtextxy(170,60,p2f);
              glcd_outtextxy(50,2,mf);
              glcd_outtextxyf(70,2,":");
              glcd_outtextxy(80,2,sf);
              if (maxgoal==0) 
                {
                glcd_outtextxyf(110,2,"END Game=");
                glcd_outtextxyf(200,2,"Min");
                glcd_outtextxy(180,2,cashf);
                }
              if (maxm==0) 
                {
                glcd_outtextxyf(110,2,"END Game=");
                glcd_outtextxyf(200,2,"Goal");
                glcd_outtextxy(180,2,cashf);
                }
              if (start==0) break;
              }
          
             }
          }
          هر سری یه فکری داره! :read:
          ///////////////////////////////////////////////////////////

          دیدگاه


            #6
            پاسخ : اشکال در وقفه میکرو

            اگر از External Intrrupts استفاده میکنی
            باید یکی از این 4 مد رو انتخاب کنی
            Rising
            Falling
            change
            low level
            واسه مقداری که باید تو رجیسترش بریزی به دیتاشیت IC مراجعه کن
            دلا خو کن به تنهایی که از تنها بلا خیزد

            دیدگاه


              #7
              پاسخ : اشکال در وقفه میکرو

              نوشته اصلی توسط جابر گرجی
              باسلام خدمت اساتید :smile:
              من توی 1 پروژه از میکرو مگا32 استفاده کردم. زمانی برنامه به وقفه حارجی میره. زیر روال وقفه 2 بار اجرا میشه. اشکال از کجاست بنظرتون :cry: :cry:
              تنظیمات وقفه:
              لبه بالا رونده
              دستور اسمبلی reti رو هم آخر زیر روال وقفه نوشتم :sad:
              دوست عزیز من وقت نکردم برنامه شما رو نگاه کنم ولی حدس میزنم بخاطر لغزش کلید باشه
              یه نگاه به تاپیک پایین بندازید:
              http://www.eca.ir/forum2/index.php?topic=61056.0
              افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

              دیدگاه


                #8
                پاسخ : اشکال در وقفه میکرو

                با سلام،

                برای اطمینان و همینطور تست، به محض وقوع وقفه و در ابتدای روتین وقفه، وقفه رو غیر فعال کن ( با رجیستر GICR و یا مشابه اش در میکروی مورد استفاده نه با sei ) و وقتی که میخوای از روتین وقفه بری بیرون، مجددا فعالش کن.....
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : اشکال در وقفه میکرو

                  نوشته اصلی توسط aivhl
                  با سلام،

                  برای اطمینان و همینطور تست، به محض وقوع وقفه و در ابتدای روتین وقفه، وقفه رو غیر فعال کن ( با رجیستر GICR و یا مشابه اش در میکروی مورد استفاده نه با sei ) و وقتی که میخوای از روتین وقفه بری بیرون، مجددا فعالش کن.....
                  آقا این کارم کردم ولی فایده نداشت که نداشت :cry: :cry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
                  بازم وقفه دوبار انجام می شه
                  هر سری یه فکری داره! :read:
                  ///////////////////////////////////////////////////////////

                  دیدگاه


                    #10
                    پاسخ : اشکال در وقفه میکرو

                    خوبی دادا جابر چه خبر (راستی دانشگاه مهاجر تموم شد :nerd
                    شماتیک مدار را قرار بده تا بتونیم کمک کنیم همیشه مشکل از نرم افزار نیست گاهی سخت افزار هم مشکل سازه

                    دیدگاه


                      #11
                      پاسخ : اشکال در وقفه میکرو

                      نوشته اصلی توسط جابر گرجی
                      آقا این کارم کردم ولی فایده نداشت که نداشت :cry: :cry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
                      بازم وقفه دوبار انجام می شه
                      quark اشکاتو نبینه جیگر. :mrgreen:
                      یه سوالی:
                      هر سه تا وقفت اینجوریه؟
                      ?Why not

                      دیدگاه


                        #12
                        پاسخ : اشکال در وقفه میکرو

                        نوشته اصلی توسط QUARK
                        quark اشکاتو نبینه جیگر. :mrgreen:
                        یه سوالی:
                        هر سه تا وقفت اینجوریه؟
                        خیلی مخلصسیم. لطططططف داری
                        آره هر سه تا بود. اما حل شد. مشکل از اینجا بود که واسه تست دسی با 1 سیم پین وقفه رو به زمین وصل میکردم و قطعش میکردم که خطا میداد. وقتی سنسور رو بهش وصل کردم درست شد :wow: :wow: :wow:
                        هر سری یه فکری داره! :read:
                        ///////////////////////////////////////////////////////////

                        دیدگاه

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