اطلاعیه

Collapse
No announcement yet.

کمک در مورد ADC خارجی و Mega16

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

    کمک در مورد ADC خارجی و Mega16

    با سلام خسته نباشید خدمت مهندسین عزیز
    من یک مشکلی داشتم از شما خواهشمندم به من کمک کنید چون خیلی گیر این قضیه هستم . من میخواستم یک موج سینوسی را که آنالوگ است به وسیله یک ADC خارجی به دیجیتال تبدیل کنم . ADC که من استفاده می کنم 8 بیتی است . من این ADC را به پورت A میکرو Mega16 متصل کرده ام و میخواستم موجی که به آنالوگ تبدیل شد که شامل 256 عدد است (به دلیل 8 بیت بودنش) را در یک چارت pwm i بریزم و این مقدار را با موج مثلثی مقایسه کرده و حاصل را از پورت OC1A میکرو بیرون بدهم . و در این مدار Vin را به موج سینوسی و VREF+ را به power و VREF - را به زمین و clk را به پالس ساعت وصل نموده ام .این برنامه و شبیه سازی را من انجام داده ام اما متاسفانه کار نکرد میخواستم از شما خواهش کنم که هر جایی از برنامه یا مدارم مشکل دارد مرا راهنمایی کنید چون واقعا گیر این قضیه هستم .

    برنامه :
    کد:
    #include <mega16.h>
    #include <delay.h>
    #define adc1 PORTA
    char i=0;
    unsigned char pwm[i];
     
    interrupt [TIM1_COMPA] void timer1_compa_isr(void)
    { 
      pwm[i]=adc1;
      OCR1A = pwm[i];
      i++;
      if(i==255);
      i=0;
    }
    
    void main(void) {
    
    DDRD=0xFF;
    DDRA=0x00;
    PORTA=0xFF;
    
    TCCR1A=0x81;
    TCCR1B=0x09;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x10;
    
    //enable global interrups
    #asm("sei");
    
      while (1);
    }

    شماتیک مدار :


    #2
    پاسخ : کمک در مورد ADC خارجی و Mega16

    سلام . هیچکس نمیتونه کمکم کنه ؟ بخدا خیلی گیر این قضیه خواهش می کنم منو راهنمایی کنین .

    دیدگاه


      #3
      پاسخ : کمک در مورد ADC خارجی و Mega16

      با سلام و خسته نباشید خدمت آقای طراح عزیز
      به طور مثال من میخواستم در ورودی ADC یک موج سینوسی را وارد کنم سپس پس از تبدیل آن مقدار به آنالوگ در داخل میکرو ریخته شود و آن مقدار با موج مثلثی مقایسه شده و خروجی PWM در خروجی OC1A ریخته شود . خواهشمندم مرا راهنمایی فرمایید .

      دیدگاه


        #4
        پاسخ : کمک در مورد ADC خارجی و Mega16

        در برنامه شما اشکالاتی مشاهده می شود ، از جمله اینکه آرایه ای را تعریف کرده اید که تعداد اعضای آن صفر تعریف شده و مشخص نیست که اصولا به چه دلیلی این آرایه تعریف شده است. همچنین قرار دادن محل مقدار دهی به OCR1A در روتین وقفه compare کار درستی نیست. زیرا با توجه به تقسیم بر یک بودن prescaler، اگر مقدار قرائت شده از ADC خارجی مثلا صفر باشد، آنگاه CPU فرصتی برای پاسخگویی به وقفه های پشت سر هم را که به ازای هر کلاک میکروکنترلر درخواست می شود، ندارد.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه

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