اطلاعیه

Collapse
No announcement yet.

سوال درباره ی وقفه خارجی در حالت LOW

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

    سوال درباره ی وقفه خارجی در حالت LOW

    سلام دوستان من یه میکروی avr atmega8 رو روی وقفه های خارجی در حالت LOW تنظیم کردم
    تو عمل که تست کردم دیدم که برخلاف حالت FALLING زیر روال وقفه تا زمانی که دستم روی دکمه هست دور میخوره و مدام اجرا میشه میخواستم بدونم این منطقیه؟

    فرستاده شده از SM-A305Fِ من با Tapatalk

    #2
    پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

    کاملا منطقی .شما وقتی حساس به سطح باشه (low) باشه تا زمانی ورودی قفه low باشه مداوم زیر روال وقفه اجرا میشه ولی وقتی وقفه حساس به لبه باشه با آمدن لبه بالا یا پایین زیر روال قفه یک اجرا و تا لبه بعدی صبر می کنه
    جدیدترین ویرایش توسط MM320; ۱۴:۱۱ ۱۳۹۸/۰۵/۱۸.

    دیدگاه


      #3
      پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

      نوشته اصلی توسط MM320 نمایش پست ها
      کاملا منطقی .شما وقتی حساس به سطح باشه (low) باشه تا زمانی ورودی قفه low باشه مدتوم زیر روال وقفه اجرا میشه ولی وقتی وقفه حساس به لبه باشه با آمدن لبه بالا یا پایین زیر روال قفه یک اجرا و تا لبه بعدی صبر می کنه
      ممنونم بابت پاسخ سریعتون من هم با هگز کامپایلر کدویژن و هم با هگز کامپایلر آردوینو اینو امتحان کردم و تو عمل تست کردم و درست اجرا شد
      اما...
      تو پروتئوس زیر روال وقفه پس از زدن دکمه فقط و فقط یه بار اجرا میشد تا زمانی که دکمه رو دوباره میزدی انگار در هر شرایطی وقفه ها رو روی FALLING نسخه پروتیوسم ۸.۸ هست گویا کرک به خود برنامه هم آسیب میزنه

      فرستاده شده از SM-A305Fِ من با Tapatalk

      دیدگاه


        #4
        پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

        مقامت pull up یا pull down (بسته به اینکه کلید به زمین با vcc وصل باشه) گذاشید .لطف کنید شماتیک اینجا بزارید تا بهتر بتونم کمکتون کنم

        دیدگاه


          #5
          پاسخ : سوال درباره ی وقفه خارجی در حالت LOW


          بفرمایید

          دیدگاه


            #6
            پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

            نوشته اصلی توسط MM320 نمایش پست ها
            مقامت pull up یا pull down (بسته به اینکه کلید به زمین با vcc وصل باشه) گذاشید .لطف کنید شماتیک اینجا بزارید تا بهتر بتونم کمکتون کنم
            آیا مشکل از شماتیک بود؟

            فرستاده شده از SM-A305Fِ من با Tapatalk

            دیدگاه


              #7
              پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

              شما یه کاری کن .روی میکرو کنترلر کلید راست کن edit انخاب کن بعد صفحه باز میشه احتمالا پکیج روی smd شماانتخاب کردید روی SPDIL28 بزارش .فقط دقت کن که شکل پایه میکرو عوض میشه باید از اول سیم کشی کنی احتمال زیاد از اینه .قبلا همچنین مشکلی داشتم

              دیدگاه


                #8
                پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                الان این کارم کردم بازم نشد اینتراپت تو حالت LOW یه بار اجرا میشه...

                شما از چه نسخه ای از پروتیوس استفاده میکنید

                دیدگاه


                  #9
                  پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                  نوشته اصلی توسط MM320 نمایش پست ها
                  شما یه کاری کن .روی میکرو کنترلر کلید راست کن edit انخاب کن بعد صفحه باز میشه احتمالا پکیج روی smd شماانتخاب کردید روی SPDIL28 بزارش .فقط دقت کن که شکل پایه میکرو عوض میشه باید از اول سیم کشی کنی احتمال زیاد از اینه .قبلا همچنین مشکلی داشتم
                  این کارم انجام دادم اما نشد یه لطفی کنین شما این کدو تو کدویژن کپی کنید هگزو بزنید تو پروتیوس ببینین درست اجرا میشه؟؟؟

                  /*******************************************************
                  This program was created by the
                  CodeWizardAVR V3.12 Advanced
                  Automatic Program Generator
                  © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
                  http://www.hpinfotech.com


                  Project :
                  Version :
                  Date : 09/08/2019
                  Author :
                  Company :
                  Comments:




                  Chip type : ATmega8A
                  Program type : Application
                  AVR Core Clock frequency: 16/000000 MHz
                  Memory model : Small
                  External RAM size : 0
                  Data Stack size : 256
                  *******************************************************/


                  #include <mega8.h>


                  // Declare your global variables here


                  #include <string.h>
                  #include <stdlib.h>
                  #include <stdio.h>
                  #include <delay.h>


                  // External Interrupt 0 service routine
                  volatile int n =0;
                  char adadBuffer[10];


                  interrupt [EXT_INT0] void ext_int0_isr(void)
                  {
                  n++;
                  }


                  void main(void)
                  {




                  DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
                  PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
                  DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);


                  PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


                  DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);


                  PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);


                  GICR|=(0<<INT1) | (1<<INT0);
                  MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                  GIFR=(0<<INTF1) | (1<<INTF0);
                  UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
                  UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
                  UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
                  UBRRH=0x00;
                  UBRRL=0x67;
                  #asm("sei")


                  while (1)
                  {
                  itoa(n, adadBuffer);
                  puts(adadBuffer);
                  delay_ms(1000);
                  }
                  }


                  دیدگاه


                    #10
                    پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                    بخشید دیر جواب می دم اینترنتم قطع بود.پروژه تون کامپایل کردم و توی پروتئوس چک کردم حق با شماست مشکل از پروتئوس 8.8 هستش برای امتحان میکرو مگا 16 کردم باز همو طوری بود بخاطر همین یه پروژه قدیمی داشتم که میکرو کنترلر مگا 16 ورژن های قدیمی توش بود تست کردم برنامه بدون مشکل کار می کرد فقط یه نکته . شما وقتی از وقفه سطح یا low استفاده می کنید تا زمانی پین low هست فقط زیر روال وقفه اجرا میشه مثل یه حلقه میشه بخاطر همین برنامه روی باید بصورت زیر بشه
                    /*******************************************************
                    This program was created by the
                    CodeWizardAVR V3.12 Advanced
                    Automatic Program Generator
                    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
                    http://www.hpinfotech.com


                    Project :
                    Version :
                    Date : 09/08/2019
                    Author :
                    Company :
                    Comments:




                    Chip type : ATmega8A
                    Program type : Application
                    AVR Core Clock frequency: 16/000000 MHz
                    Memory model : Small
                    External RAM size : 0
                    Data Stack size : 256
                    *******************************************************/


                    #include <mega8.h>


                    // Declare your global variables here


                    #include <string.h>
                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <delay.h>


                    // External Interrupt 0 service routine
                    volatile int n =0;
                    char adadBuffer[10];


                    interrupt [EXT_INT0] void ext_int0_isr(void)
                    {
                    n++;
                    itoa(n, adadBuffer);
                    puts(adadBuffer);
                    delay_ms(1000);
                    }


                    void main(void)
                    {




                    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
                    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
                    DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);


                    PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


                    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);


                    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);



                    // External Interrupt(s) initialization
                    // INT0: On
                    // INT0 Mode: Low level
                    // INT1: Off
                    GICR|=(0<<INT1) | (1<<INT0);
                    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                    GIFR=(0<<INTF1) | (1<<INTF0);
                    // USART initialization
                    // Communication Parameters: 8 Data, 1 Stop, No Parity
                    // USART Receiver: On
                    // USART Transmitter: On
                    // USART Mode: Asynchronous
                    // USART Baud Rate: 9600
                    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
                    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
                    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
                    UBRRH=0x00;
                    UBRRL=0x33;
                    #asm("sei")


                    while (1)
                    {

                    }
                    }



                    دلیل: ادغام دو پست برای جلوگیری از اسپم

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

                    دیدگاه


                      #11
                      پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                      نوشته اصلی توسط MM320 نمایش پست ها
                      بخشید دیر جواب می دم اینترنتم قطع بود.پروژه تون کامپایل کردم و توی پروتئوس چک کردم حق با شماست مشکل از پروتئوس 8.8 هستش برای امتحان میکرو مگا 16 کردم باز همو طوری بود بخاطر همین یه پروژه قدیمی داشتم که میکرو کنترلر مگا 16 ورژن های قدیمی توش بود تست کردم برنامه بدون مشکل کار می کرد فقط یه نکته . شما وقتی از وقفه سطح یا low استفاده می کنید تا زمانی پین low هست فقط زیر روال وقفه اجرا میشه مثل یه حلقه میشه بخاطر همین برنامه روی باید بصورت زیر بشه
                      /*******************************************************
                      This program was created by the
                      CodeWizardAVR V3.12 Advanced
                      Automatic Program Generator
                      [emoji2398] Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
                      http://www.hpinfotech.com


                      Project :
                      Version :
                      Date : 09/08/2019
                      Author :
                      Company :
                      Comments:




                      Chip type : ATmega8A
                      Program type : Application
                      AVR Core Clock frequency: 16/000000 MHz
                      Memory model : Small
                      External RAM size : 0
                      Data Stack size : 256
                      *******************************************************/


                      #include <mega16.h>


                      // Declare your global variables here


                      #include <string.h>
                      #include <stdlib.h>
                      #include <stdio.h>
                      #include <delay.h>


                      // External Interrupt 0 service routine
                      volatile int n =0;
                      char adadBuffer[10];


                      interrupt [EXT_INT0] void ext_int0_isr(void)
                      {
                      n++;
                      itoa(n, adadBuffer);
                      puts(adadBuffer);
                      delay_ms(1000);
                      }


                      void main(void)
                      {




                      DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
                      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
                      DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);


                      PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);


                      DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);


                      PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);



                      // External Interrupt(s) initialization
                      // INT0: On
                      // INT0 Mode: Low level
                      // INT1: Off
                      GICR|=(0<<INT1) | (1<<INT0);
                      MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
                      GIFR=(0<<INTF1) | (1<<INTF0);
                      // USART initialization
                      // Communication Parameters: 8 Data, 1 Stop, No Parity
                      // USART Receiver: On
                      // USART Transmitter: On
                      // USART Mode: Asynchronous
                      // USART Baud Rate: 9600
                      UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
                      UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
                      UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
                      UBRRH=0x00;
                      UBRRL=0x33;
                      #asm("sei")


                      while (1)
                      {

                      }
                      }

                      واقعا بابت پاسخگویی تون سپاسگزارم ممنونم دوست من لطف کردی در حق من
                      عجب پس این پوتئوس واقعا فاجعس
                      میشه یه لطف دیگه هم بکنید و لینک اون کتابخونه مگا ۱۶ قدیمی رو قرار بدین ممنون میشم.

                      فرستاده شده از SM-A305Fِ من با Tapatalk

                      دیدگاه


                        #12
                        پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                        خواهش میکنم.اینم برنامه با مگا 16 قدیمی.
                        دانلود کنید.

                        دیدگاه


                          #13
                          پاسخ : سوال درباره ی وقفه خارجی در حالت LOW

                          خب بالاخره مشکل رو به طور کامل برطرف کردم یه مجموعه ی کتابخونه برای پروتیوس پیدا کردم که میکرو هاش این مشکلو نداره لینکو همین جا قرار میدم که دیگران هم بتونن استفاده کنن
                          پیکوفایل

                          یو آپلود


                          رمز فایل :

                          دیدگاه

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