اطلاعیه

Collapse
No announcement yet.

کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

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

    کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

    با سلام دو تا شکل موج در پایین گذاشتم که فرکانس هر دو 650 هرتز است ولی در شکل اول برای نیم ثانیه خروجی دارم و نیم ثانیه کاملا صفر است و برای دومی 1 ثانیه خروجی و 4 ثانیه صفر است چطور این دو موج رو با AVR پردازش کنم و تشخیص بدم
    شکل اول

    شکل دوم

    #2
    پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

    سیگنال به پایه وقفه وصل میشود و دو تا متغیر long int تعریف میشه البته به صورت متغیر خارجی تعریف میشه تا توی همه روتینها شناخته بشه برای اینکار کافیه متغیربالاتر از همه فانکشنها تعریف بشود مثلا
    long int i=0, last_i=0; تقریبا ابتدای برنامه بیرون از همه فانکشنها.
    در یک روتین وقفه تایمر با شمارش ماکزیمم 255، به ازای هر سرریز یک واحد به i افزوده میشه و در وقفه خارجی که روی لبه تنظیم شده مقدار i ابتدا در last_i ذخیزه شده و سپس i صفر میشود. در لوپ اصلی برنامه مقدار i دایما چک میشود اگر صفر شد مقدار last_i را چک میکنیم اگر عدد کوچکی بود که هچ. اگر عدد بزرگی بود سیگنال اول و اگر عدد خیلی بزرگی بود سیگنال دوم خواهد بود.

    دیدگاه


      #3
      پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

      با سلام دست شما درد نکنه شما به زبان C گفتید که من اصلا با هاش کار نکردم اگه در مورد بیسک راهنمایی کنید ممنون میشم

      دیدگاه


        #4
        پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

        اساس کار تولید یک عدد متناسب با فاصله زمانی بین لبه های دو پالس متوالی است و تنها ارتباطی که با زبان c داره یکی متغیر 32بیتی که در بیسیک هم قابل تعریفه ودیگری متغیر خارجی است( برای اینکه در همه جا قابل شناسایی باشه ) در بیسیک فکر کنم همه متغیرها چنین خاصیتی دارند. از کاربرانی که بیسیک بلدن بپرسید.

        دیدگاه


          #5
          پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

          اگه واستون مقدوره و زحمتی نیست کد به زبان C بزارید تا بیشتر متوجه بشم

          دیدگاه


            #6
            پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR


            long int i=0, last_i=0;
            .
            .
            timer interrupt routin
            {
            ..
            i++;
            }

            external interrupt routin
            {
            last_i=i;
            i=0;
            }

            main()
            {
            ..
            while(1)
            {
            if(i==0)
            ...check last_i.....
            }
            }


            دیدگاه


              #7
              پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

              با تشکر من این کد رو نوشتم ببینید درسته
              $regfile = "m32def.dat"
              $crystal = 8000000
              Dim I As Long
              Dim Last_i As Long
              Config Lcd = 16 * 2
              Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
              Config Int0 = Falling
              Config Timer0 = Timer , Prescale = 1
              Cls
              Enable Interrupts
              Enable Ovf0
              Enable Int0
              On Ovf0 Timer0_isr
              On Int0 Int0_isr
              Start Timer0
              Do
              If I = 0 Then
              Cls
              Stop Timer0
              Lcd Last_i
              Wait 1
              Start Timer0
              End If
              Loop

              End

              Int0_isr:
              Last_i = I
              i=0
              Return

              Timer0_isr:
              I = I + 1
              Return

              دیدگاه


                #8
                پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

                بسکام بلد نیستم از کاربران دیگر درخواست کنید در ضمن چون حداکثر زمان مورد اندازه گیری 4 ثانیه است با prescale بزرگتر ، متغییر 16 بیتی هم جواب میده ونیازی به long نیست.

                دیدگاه


                  #9
                  پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

                  با سلام
                  اگه میشه کدتون رو بصورت کامل بزارید ببینم میتونم به بسکام تبدیلش کنم مثل اینکه کسی از دوستان نیست که راهنمایی کنه

                  دیدگاه


                    #10
                    پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

                    int i=0, last_i=0;

                    interrupt [EXT_INT0] void reset_i(void)
                    {
                    last_i=i;
                    i=0;
                    }

                    interrupt[TIM0_OVF] void timer0_ovf_isr(void)
                    {
                    i++;
                    }

                    main()
                    {
                    char lcd_buffer[20];
                    DDRD=0x00;
                    PORTD=0xFF;
                    GICR=0b01000000; // INT0 ON
                    MCUCR=0b00000011; // INT0 MODE= rising edge

                    TCCR0=0b00000011; // timer clock= clock/64
                    TIMSK=0x01; // enable timer0 overflow

                    #asm("sei"
                    TCNT0=0;

                    while(1)
                    {
                    if(i!=0)
                    continue;

                    lcd_clear();

                    if(last_i>200 && last_i<1000)
                    sprintf(lcd_buffer,"signal 1"


                    else if(last_i>1000)
                    sprintf(lcd_buffer,"signal 2"

                    else
                    continue;

                    lcd_puts(lcd_buffer);
                    }
                    }

                    دیدگاه


                      #11
                      پاسخ : کمک در در مورد این دو موج و تفکیک آنها از هم با AVR

                      ممنون از شما بابت کدی که گذاشتید و دست شما درد نکنه ولی خودم بالاخره موفق شدم با تایمر صفر و کانتر 1 برنامشو بنویسم
                      تعداد لبه ها رو با استفاده از کانتر یک به مدت دو ثانیه خوندم که این زمان رو با استفاده از تایمر صفر ایجاد کردم و راهنمایی اول شما مفید واقع شد و منو مجبور کرد که بحث تایمر کانتر هار رو تو بسکام بیشتر بخونم مرسی از زحمتی که کشیدید و این برنامه رو واسه تشخیص آزاد یا مشغول و برداشته شدن خط تلفن میخواستم که امشب موفق شدم و تمومش کردم

                      دیدگاه

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