اطلاعیه

Collapse
No announcement yet.

کمک در مورد ADC و interrupt در کدویژن

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

    کمک در مورد ADC و interrupt در کدویژن

    جستجو کردم ولی به نتیجه ای نرسیدم.وقتی در کد ویزاردinterrupt را فعال می کنیم تابع read_adc دیگر تعریف نمیشود.پس هنگامی که وقفه اتفاق افتاد چطوری مقدار پایه های مختلف ADC را بفهمیم؟

    #2
    پاسخ : کمک در مورد ADC و interrupt در کدویژن

    سلام دایی جان
    وقتی اینتراپت رو فعال می کنی یه روتین اینتراپت به اول برنامه اضافه میشه.
    اگه نگاهی به داخل این روتین بندازی دستور زیر رو می بینی:
    adc_data=ADCW
    یعنی خودش برنامه خوندن از ADC رو نوشته و مقدار ADC رو داخل متغیر adc_data ریخته.
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

    دیدگاه


      #3
      پاسخ : کمک در مورد ADC و interrupt در کدویژن

      برای مثال در ATMega16 که 8 تا ADC داره چطوری مثلا ADC دوم و پنجم رو بخونیم؟
      یه سوال دیگه:با تابع read_adc در حلقه while(1) برنامه مقدار ADC رو می خونم و رو صفحه نمایش میدم.ولی ثابت نیست و تغییرات عجیبی داره.قاعدتا نباید از 1023 بالاتر بره ولی 2000 یا 3000 هم نشون میده.

      دیدگاه


        #4
        پاسخ : کمک در مورد ADC و interrupt در کدویژن

        اینم کد برنامم:
        کد:
        while (1)
           {
           // Place your code here  
            a=read_adc(0); 
            itoa(a,s1);
            lcd_puts(s1); 
            
            lcd_gotoxy(8,0);
            a=read_adc(1); 
            itoa(a,s1);
            lcd_puts(s1);
            
            lcd_gotoxy(0,1);
            a=read_adc(2); 
            itoa(a,s1);
            lcd_puts(s1);
            
            lcd_gotoxy(8,1);
            a=read_adc(3); 
            itoa(a,s1);
            lcd_puts(s1);
            
            delay_ms(100);
        
           }

        دیدگاه


          #5
          پاسخ : کمک در مورد ADC و interrupt در کدویژن

          وقتی اینتراپت ADC رو فعال کردی باید توی روتین اینتراپت بخونی. بعد از خوندن توی همون روتین اینتراپت می تونی کانال دلخواهتو انتخاب کنی.
          توی برنامه بالا هم که بدون اینتراپته باید( lcd_gotoxy(0,0 رو اول روتین داخل while بنویسی.
          با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

          دیدگاه


            #6
            پاسخ : کمک در مورد ADC و interrupt در کدویژن

            با تشکر از شما دوست عزیز.خوب چطوری توی روتین کانال دلخواهم رو انتخاب کنم؟مثلا بنویسم adc_data[0] .

            در برنامه بالا هم جای lcd_gotoxy درسته چون من در هر لحظه 4 تا ADC رو می خونم و تو 4 جای مختلف صفحه نشون میدم.از این بابت درسته و کار هم کرده.
            در ضمن با انتخاب کردن دقت 8 بیتی و noise canceler مشکل بر طرف شد.

            دیدگاه


              #7
              پاسخ : کمک در مورد ADC و interrupt در کدویژن

              نه دایی
              اگه بدود اینتراپت کار کرده باشی می بینی در روتین خوندن از ADC خط اول نوشته :( ADMUX=adc_input | (ADC_VREF_TYPE & 0xff
              همین دستور رو می تونی در روتین اینتراپت بکار ببری.
              روتین LCD کدویژن یه مشکلی داره:
              وقتی یه عدد 4 رقمی رو توی یه جای LCD می نویسه چهار خانه اشغال می کنه. وقتی این عدد 2 رقمی بشه دو خونه از 4 رقم قبلی رو پاک نمی کنه و همونجور می مونه.
              مثلا داری 1020 چاپ می کنی و بعد می خوای همونجا 300 چاپ کنه. بجای 300 می نویسه 1300 !!!
              یعنی رقم 1 عدد 1020 سر جای خودش می مونه و پاک نمیشه.
              یه راهش اینه که آخر while یه دستور پاک کردن کل LCD بزاری. اما این باعث چشمک زدن LCD میشه.
              راه دوم که من همیشه بکار می برم اینه که توی همون خونه یه رشته چهار رقمی خالی چاپ کنی.
              lcd_puts(" "example
              با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

              دیدگاه


                #8
                پاسخ : کمک در مورد ADC و interrupt در کدویژن

                اگه بدود اینتراپت کار کرده باشی می بینی در روتین خوندن از ADC خط اول نوشته :( ADMUX=adc_input | (ADC_VREF_TYPE & 0xff
                همین دستور رو می تونی در روتین اینتراپت بکار ببری.
                با تشکر.هنوز من نفهمیدم چطوری شماره پایه مورد نظر برای خواندن را مشخص کنیم.لطفا یه مثال بزن که توی اینتراپت مقدار ADC پایه 2 رو بخونه و توی یه متغییر به نام a بریزه.
                بازم ممنون.

                دیدگاه


                  #9
                  پاسخ : کمک در مورد ADC و interrupt در کدویژن

                  هر جای برنامه که دوست داری 3 خط زیر رو بنویس دایی:
                  ADMUX=2 | (ADC_VREF_TYPE & 0xff);
                  delay_us(10);
                  ADCSRA|=0x40;
                  این 3 خط یعنی کانال 2 رو انتخاب کردی و 10 میکرو ثانیه صبر کردی و بعد دستور شروع به کار ADC رو دادی.
                  بعد از اینکه ADC کار تبدیل رو انجام داد اینتراپت ADC رو روشن می کنه. داخل روتین اینتراپت هم می تونی مقدار ADCW رو بخونی.
                  بعدش توی همون روتین اینتراپ می تونی دوباره 3 خط بالا رو بنویسی و بجای 2 هر کانال دیگه ای که دوست داری بزاری.
                  با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                  دیدگاه

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