اطلاعیه

Collapse
No announcement yet.

تفاوت جالب بین مگا 8 و 16

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

    تفاوت جالب بین مگا 8 و 16

    [size=14pt]سلام بچه ها
    کد زیر را ببینید.با تغییر مقدار TCNT0 باید فرکانس عوض بشه.این امر در مگا 16 کاملا درست رخ میده ولی در مگا 8 اصلا امکان پذیر نیست.من هم در پروتئوس امتحان کردم و هم در عمل.به نظر شما اشکال کار کجاست؟
    #include <mega8.h>
    void DELAY(){
    TCNT0=20;
    TCCR0=0B00000001;
    while(TIFR==0B00000000);
    TCCR0=0B00000000;
    TIFR=TIFR|0B11111111;
    }

    void main (void){
    DDRB.0=1;
    while(1){
    PORTB.0=1;
    DELAY();
    PORTB.0=0;
    DELAY();
    }
    }
    از خیلیا پرسیدم جواب ندادند اگه میشه 2دقیقه وقت بذارید مشکل ما حل بشه .خیللی ممنون :angry:[img][/img]

    #2
    پاسخ : تفاوت جالب بین مگا 8 و 16

    سلام
    برنامه شما مشکل دارد وگرنه ایراد از میکرو نیست ،من یک برنامه برات نوشتم که اولی TCNT0 از همون صفر شروع می کنه به شمارش و در بعدی از مقدار128 شروع می کنه
    در واقع فرکانس دومی دوبرابر اولی می شه برای تست برنامه دوم فقط کافیه داخل TCNT0 مقدار 128 بریزید
    موفق باشیذ
    کد:
    #include <mega8.h>
    void main(void)
    {
    DDRB=0x01;
    TCCR0=0x01;
    
    TIMSK=0x01;
    ACSR=0x80;
    #asm("sei")
    while (1)
       {
       
    
       }
    }
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    TCNT0=0x80;
    PORTB.0=PORTB^1;
    
    }
    معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
    اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
    آموزش Modelsim

    دیدگاه


      #3
      پاسخ : تفاوت جالب بین مگا 8 و 16

      تایمر کانتر 0 تو مگا 16 و 8 تفاوت داره
      ولی تو این مد نباید مشکلی باشه oo:

      از کجا میفمی که فرکانس تغییر میکنه؟!

      یه پیشنهاد ، پروتئوسو بیخیال شو . دنیای واقعی خیلی فرق داره.
      البته این نظر منه ...
      پشت به کنکور ، رو به سربازی...

      دیدگاه


        #4
        پاسخ : تفاوت جالب بین مگا 8 و 16

        نوشته اصلی توسط black-8
        تایمر کانتر 0 تو مگا 16 و 8 تفاوت داره
        ولی تو این مد نباید مشکلی باشه oo:

        از کجا میفمی که فرکانس تغییر میکنه؟!

        یه پیشنهاد ، پروتئوسو بیخیال شو . دنیای واقعی خیلی فرق داره.
        البته این نظر منه ...
        بله دنیای واقعی بهتره ولی این برنامه چیزی نداره توی همون پروتئوس هم واضح هستش
        معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
        اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
        آموزش Modelsim

        دیدگاه


          #5
          پاسخ : تفاوت جالب بین مگا 8 و 16

          ممنون از دوستان که جواب دادند
          از کجا میفمی که فرکانس تغییر میکنه؟!
          ببین دوست من :یک بار برنامه را با یک مقدار TCNT0 اجرا میکنم و سپس مقدار TCNT0 را عوض کرده و دوباره فرکانس را اندازه گیری میکنم
          ه پیشنهاد ، پروتئوسو بیخیال شو . دنیای واقعی خیلی فرق داره
          من هم در پروتئوس امتحان کردم و هم در دنیای واقعی .نکته ای که هست این برنامه برای مگا16 جواب میده هم در عمل و هم در شبیه ساز ولی برای مگا 8 نه ه ه
          برنامه شما مشکل دارد وگرنه ایراد از میکرو نیست
          ممنونم از برنامه ای که نوشتی ولی برنامه ی من هم اصلا مشکل نداره چون داره برای مگا16 جواب میده.تنها مشکلی که میتونه باشه اینه که رجیسترها را اشتباه کرده باشم که خیلی بعیده و دوستان هم تایید کردند که تایمر 0 مگا 8 و مگا 16 در مد نرمال تفاوتی ندارند.اگه میشه یکبار کد من را بنویسید و برای مگا 8 و 16 امتحان کنید و این تضاد را ببینید .واقعا گیج گیج شدم
          کد:
          [left]#include <mega8.h>                        
          void DELAY(){
          TCNT0=20;//should change        
          TCCR0=0B00000001;
          while(TIFR==0B00000000);
          TCCR0=0B00000000;
          TIFR=TIFR|0B11111111;
          }
          
          void main (void){
          DDRB.0=1;
          while(1){
          PORTB.0=1;
          DELAY();
          PORTB.0=0;
          DELAY();
          }
          }

          دیدگاه


            #6
            پاسخ : تفاوت جالب بین مگا 8 و 16

            جسارتا شما وقتی مگا16 رو میکنید مگا8، اینجا هم تغییرش می دید؟
            اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

            دیدگاه


              #7
              پاسخ : تفاوت جالب بین مگا 8 و 16

              بله قطعا همینطوره و تمام تنظیمات را تغییر میدم. مدتی هم به کامپایلر codevision شک کردم و با avrstdio برنامه را نوشتم .نتیجه هیچ فرقی با codevision نداشت و برای مگا 16 جواب داد و برا مگا 8 خیر... :sad: دوستان اگه زحمتشون نیست این 4 خط برنامه را بنویسید و در پروتئوس امتحان کنید فکر کنم به حرف من برسید :surprised:

              اضافه شده در تاریخ :
              این هم فایلهای codevision و پروتئوس برای مگا8 و مگا16http://forum.techno-electro.com/attachment.php?aid=1409

              دیدگاه


                #8
                پاسخ : تفاوت جالب بین مگا 8 و 16

                نوشته اصلی توسط atmelboy
                بله قطعا همینطوره و تمام تنظیمات را تغییر میدم. مدتی هم به کامپایلر codevision شک کردم و با avrstdio برنامه را نوشتم .نتیجه هیچ فرقی با codevision نداشت و برای مگا 16 جواب داد و برا مگا 8 خیر... :sad: دوستان اگه زحمتشون نیست این 4 خط برنامه را بنویسید و در پروتئوس امتحان کنید فکر کنم به حرف من برسید :surprised:
                لطفا فایل پروژه CV + شبیه سازی پروتئوستون رو زیپ و پلود کنید.
                اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                دیدگاه


                  #9
                  پاسخ : تفاوت جالب بین مگا 8 و 16

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

                  دیدگاه


                    #10
                    پاسخ : تفاوت جالب بین مگا 8 و 16

                    نوشته اصلی توسط atmelboy
                    آقای بابا برقی قرار دادم .چون من تازه با این سایت شروع به کار کردم امکان پلود در سرور سایت را پیدا نکردم پس از سایت تکنو الکترو کمک گرفتم.این انجمن امکان پلود نداره؟
                    ببخشید، فکر کنم موقعی که من در حال تایپ بودم قرار دادید و من ندیدم
                    خیر! امکان پلود برای همه کاربرا فعال نیست
                    بررسی می کنم

                    اضافه شده در تاریخ :
                    خب!
                    ایراد از تنظیمات پروتئوستون هست
                    شما فرکانس میکرو داخل پروتئوس رو 8مگ نکرده بودید، بنابراین وقتی برنامه اجرا می شد پروتئوس یک ارور میداد(منتهی شبیه سازی ادامه داشت، اما با نتیجه غلط!)


                    جالبه این تنظیم رو داخل پروتئوس برای مگا16 درست کرده بودید!
                    برای همین بود که گفتم خودتون فایلاتون رو پلود کنید
                    اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                    دیدگاه


                      #11
                      پاسخ : تفاوت جالب بین مگا 8 و 16

                      یعنی الان شما با تغییر مقدار TCNT0 فرکانس متفاوتی دریافت میکنید ؟ پس اگه اینجوره من این تنظیم را برای مگا 16 هم انجام نداده بودم .پس چرا برای مگا 16 جواب داد؟ :eek:ضمنا من الان تنظیم را برا مگا 8 روی 8 مگاهرتز اسیلاتور درونی گذاشتم و به جواب نرسیدم .یعنی مشکلم حل نشد.نمیدونم شما مشکل من را متوجه شده اید و الان این مشکل برای شما حل شده با تغییر فیوز بیت؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :surprised: :surprised: :surprised:

                      اضافه شده در تاریخ :
                      آقا ببخشید .شما درست میگید تنظیمات فیوز بیت مگا 16 در پروتئوس را مطابق مقدار کلاک کد ویژن تغییر داده بودم ولی این اشکال کار نیست چون بیایید و تنظیمات فیوز بیت مگا 16 در پروتئوس را عوض کنید .میبینید که با تغییر مقدار تایمر کانتر فرکانس عوض شد ولی این امر در مگا 8 رخ نمیده چه با فیوز بیت درست و چه غلط در تنظیمات پروتئوس .لطفا بررسی کنید.ممنونممممممم :agree: :agree:

                      دیدگاه


                        #12
                        پاسخ : تفاوت جالب بین مگا 8 و 16

                        سلام دوست عزیز فکر کنم شما TCNT0 را در تابع اصلی مقداردهی کردین در صورتی که باید در روتین اینتراپت مقدار دهی بشود شما یک بار بیرون ان مقدار دهی کنید می بینید که فرقی نمی کنه هرچقدر مقدارش را تغیر دهید
                        موفق باشید :nice:
                        معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                        اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                        آموزش Modelsim

                        دیدگاه


                          #13
                          پاسخ : تفاوت جالب بین مگا 8 و 16

                          فرقی نمی کنه هرچقدر مقدارش را تغیر دهید
                          دوست من ما میخوایم فرکانس تولید شده با تغییر مقدار TCNT0 عوض بشه .من نمیفهمم چرا کسی صحت این برنامه را یرای مگا 16 در نظر نمیگیره و بیاد همین کاری که برا مگا 16درست انجام میشه را برای مگا 8 تصحیح کنه؟؟؟ :angry: :angry:

                          دیدگاه


                            #14
                            پاسخ : تفاوت جالب بین مگا 8 و 16

                            دوست عزیز من یک برنامه دیگه خودم نوشتم و برایتان گذاشتم چون دقیق نفهمیدم هدفتون از ان طور نوشتن برنامه چیه!! الانم نمی دونم چرا روی برنامه خودتون اصرار می کنید :eek:
                            حالا که این قدر اصرار داری بگو توی این برنامه که نوشتی چی کار داری می کنی و می خوای توسط وقفه پالست را بسازی یا چیز دیگری
                            معجزه این است که هرچه داشته هایت را بیشتر با دیگران سهیم شوی،داراتر می شوی (لئونارد نیموی)
                            اگر مغزانسان،چنان ساده می بود که ما از آن سر در می آوردیم،هنوز چنان احمق بودیم که هیچ از آن سر در نمی آوردیم!
                            آموزش Modelsim

                            دیدگاه


                              #15
                              پاسخ : تفاوت جالب بین مگا 8 و 16

                              جناب atmelboy حق با شماست!
                              برای مگا8 اون کد شما با این که کاملا درست به نظر میاد، اما توی شبیه سازی درست عمل نمیکنه و با تغییر TCNT0 فرکانس تغییری نمی کنه، البته پروتئوس ارور میده که cpu اورلود شده و شبیه سازی realtime نیست، من زیاد با شبیه سازی موافق نیستم، اما گفتی در عمل باز هم همینطوره؟! oo:

                              به هر ترتیب، فرصت نداشتم زیاد دنبال دلیلش بگردم، این کد هم دقیقا همون کاری که شما می خوایید رو انجام میده، تازه وقفه ای هم هست و خیلی هم بهتره :nerd:

                              [ltr]
                              کد:
                              #include <mega8.h>  
                                   
                              // Timer 0 overflow interrupt service routine
                              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                              {
                              TCNT0=150;
                              PORTB.0=!PORTB.0;
                              }
                              
                              void main (void)
                              {
                              
                              DDRB.0=1;
                              TCNT0=150;        
                              TCCR0=0x05;		// Clock value: 0.977 kHz
                              // Timer(s)/Counter(s) Interrupt(s) initialization
                              TIMSK=0x01;
                              
                              #asm("sei")
                              while(1);
                              }
                              اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                              دیدگاه

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