اطلاعیه

Collapse
No announcement yet.

کمک درباره adc و timer1

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

    کمک درباره adc و timer1

    سلام دوستان. من برای یک قسمت از یک پروژه احتیاج دارم که adc میکرو را (mega32) با تایمر یک فعال کنم .البته خودم تونستم این کارو بکنم اما مشکل اونجاست که بعد از انجام تبدیل توسط adc به جایی اینکه میکرو ادامه برنامه را انجام دهد دوباره از ابتدا برنامه را شروع میکنه یعنی یجورایی ریست میشه .کسی می دونه مشکل از کجاست یا اگه برنامه نمونه ای داره لطف کنه لینکشو بذاره لطفا.حسابی اعصابم رو ریخته بهم نمی فهمم مشکل از کجاست .در ضمن برنامه رو با proteus6.9 تست کردم . :angry:
    http://www.eca.ir/forum2/index.php/topic,10159.0.html
    Engineering is the art of making what you want from things you can get.
    اموزش DSP ...........................
    http://www.eca.ir/forum2/index.php?topic=29824.0
    http://www.eca.ir/forum2/index.php?topic=32324.0

    #2
    پاسخ : کمک درباره adc و timer1

    برنامه تونو بزارید لطفا

    دیدگاه


      #3
      پاسخ : کمک درباره adc و timer1

      unsigned char bufer[10];
      int result=0,j;
      main()
      {
      DDRA=0XFE;
      DDRC=0XFF;
      DDRB=0XFF;
      TCNT1=0X0000;
      TCCR1B=0X00;
      TIFR=0X00;
      TIMSK=0X04;
      ADMUX=0XE0;
      ADCSRA=0Xee;
      SFIOR=0XC0;

      #asm("sei&quot
      while(1)
      {
      TCCR1B=0X05;
      sprintf(bufer,"temp:%d",result);
      lcd_printf(2,20,bufer);
      }
      };
      interrupt[ADC_INT] void convert(void)
      {

      result=(ADCH);


      }
      http://www.eca.ir/forum2/index.php/topic,10159.0.html
      Engineering is the art of making what you want from things you can get.
      اموزش DSP ...........................
      http://www.eca.ir/forum2/index.php?topic=29824.0
      http://www.eca.ir/forum2/index.php?topic=32324.0

      دیدگاه


        #4
        پاسخ : کمک درباره adc و timer1

        سلام .................

        با این برنامه دقیقا میخواید چیکار کنید؟ (منظورم ادامه ی اون قسمتی هست که فرمودید ریست میشه ..) ..
        دوستان! مدتی کمتر به سایت میام ..

        دیدگاه


          #5
          پاسخ : کمک درباره adc و timer1

          این قسمتی از پروژه نمایشگر داخل کابین اسانسور است که شماره طبقات و جهت حرکت اسانسور و باز یا بسته بودن در را نشان می دهد. این قسمت از برنامه را که قرار دادم می خواهم به حالت یک زیر نویس از قسمت پایین ال سی دی گرافیکی عبور کند و دما و ساعت و غیره را نمایش دهد ولی می خواهم مقدار دما ی کابین مثلا هر 10 ثانیه یکبار اپدیت شود با استفاده از delay هم نمی توان این کاررا کرد چون میکرو باید به کار خود ادامه دهد و نباید منتظر طی شدن این 10 ثاتیه شود.
          http://www.eca.ir/forum2/index.php/topic,10159.0.html
          Engineering is the art of making what you want from things you can get.
          اموزش DSP ...........................
          http://www.eca.ir/forum2/index.php?topic=29824.0
          http://www.eca.ir/forum2/index.php?topic=32324.0

          دیدگاه


            #6
            پاسخ : کمک درباره adc و timer1

            سلام ................

            درسته .. حالا متوجه منظورتون شدم .. ببینید شما برای اون کار (همون کنترل کردن 10 ثانیه یک بار ..) باید از تایمر استفاده کنید .. خب این رو توی پیت اولتون هم اشاره کردید .. اما نحوه ی استفاده از اون .. اگه از تایمر 1 استفاده میکنید میتونید از وقفه ی اون استفاده کنید .. یعنی هر بار که Over Flow اتفاق افتاد سنسور چک بشه .. امااینطوری که نمیشه با این اوصاف سنسور باید مدام چک بشه .. پس چیکار کنیم؟ میتونیم هر ده بار یک بار این رفرش رو برای سنسور اعمال کنیم .. یعنی یه متغییر تعریف کنیم اون هم از نوع INT .. بعد بگیم که اگه مثلا مقدار این متغییر شد 10 یا 20 یا هر مقدار که مد نظر شما هست، یک بار read_adc و بعد هم نمایش اون روی ال سی دی .. با این روش میتونید به اجرای دستورات میکرو امیدوار باشید (در واقع مطمئن باشید ..) در عین حالیکه به صورت وقفه ای و با Hold شدن مقدار Program counter در زمان اجرای وقفه هم دستور خوندن سنسور رو اجرا کنید و هم نمایش اون رو روی ال سی دی .. در ضمن از یه مقاومت 100K هم برای پایه ی Reset میکرو استفاده کنید اون هم به VCC .. موفق باشید ..
            دوستان! مدتی کمتر به سایت میام ..

            دیدگاه


              #7
              پاسخ : کمک درباره adc و timer1

              فکر کنم منظور شما اینه که تایمرو فعال کنم و با سرریز تایمر در زیر برنامه مربوط به وقفه سر ریز تایمر adc رو فعال کنم و مقدار اونو بخونم اگه منظور شما این بوده من برنامشو نوشتم و جوابم داد (بدون ریست شدن میکرو)"ممنون"اما فکر نکنم این جواب اصلی باشد چون با سرریز شدن تایمر باید به صورت اتوماتیک adc فعال شود نه از طریق فعال کردن ان در زیر برنامه مربوط به سرریز
              unsigned char bufer[10];

              main()
              {
              DDRA=0XFE;
              DDRC=0XFF;
              DDRB=0XFF;
              TCNT1=0X0000;
              TCCR1B=0X00;
              TIFR=0X00;
              TIMSK=0X04;
              ADMUX=0XE0;
              ADCSRA=0XA6;
              SFIOR=0XC0;


              #asm("sei&quot

              while(1)
              {
              TCCR1B=0X05;
              sprintf(bufer,"temp:%d",ADCH);
              lcd_printf(2,20,bufer);
              };
              }
              interrupt[10] void timer1_isr(void)
              {
              ADCSRA=0XE6;

              }
              http://www.eca.ir/forum2/index.php/topic,10159.0.html
              Engineering is the art of making what you want from things you can get.
              اموزش DSP ...........................
              http://www.eca.ir/forum2/index.php?topic=29824.0
              http://www.eca.ir/forum2/index.php?topic=32324.0

              دیدگاه


                #8
                پاسخ : کمک درباره adc و timer1

                سلام ............

                متوجه منظورتون نشدم .. به چه دلیل اشتباهه؟ ممکنه توضیح بفرمایید؟
                دوستان! مدتی کمتر به سایت میام ..

                دیدگاه


                  #9
                  پاسخ : کمک درباره adc و timer1

                  این راهی که شما فرمودید اشتباه نیست ولی راه اصلی نیست adc نباید داخل زیر برنامه فعال بشه باید وقتی تایمر سرریز میشه اتوماتیک adc فعال شود چون adc علاوه بر راه معمول میتونه توسط منابع دیگه مثل سرریز تایمرها ،ازطریق مقایسه کننده انالوگ یا از طریق حالت تسخیر تایمر فعال شود و رجیستر ADCHوADCL رااپدیت کنه و احتیاجی به فعال کردن مستقیم ADC نیست ولی وقتی من از این روشها استفاده می کنم میکرو ریست میشه البته درشبیه سازی با پروتئوس (روی سخت افزار تست نکردم)
                  http://www.eca.ir/forum2/index.php/topic,10159.0.html
                  Engineering is the art of making what you want from things you can get.
                  اموزش DSP ...........................
                  http://www.eca.ir/forum2/index.php?topic=29824.0
                  http://www.eca.ir/forum2/index.php?topic=32324.0

                  دیدگاه

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