اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    من زیاد با این برنامه کار نمیکنم . ولی منظورتون کدوم قسمته؟
    قسمت سمت چپ مربوط به سرعت ارسال اطلاعات است.

    دقیقا میخواید چه کاری انجام بدید؟
    در قسمت navigation برای انتخاب نوع نوسان ساز میکرو و تنظیمات مربوطه ، در حالت نوسانساز کریستالی مثلا چنین گزینه ای هست :
    EXT. crystal/resonator high frequency

    دیدگاه


      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط aseok
      در قسمت navigation برای انتخاب نوع نوسان ساز میکرو و تنظیمات مربوطه ، در حالت نوسانساز کریستالی مثلا چنین گزینه ای هست :
      EXT. crystal/resonator high frequency
      ورژنی که من الان دارم 1.72 است(زیاد باش کار نکردم ، نمیدونم این جدیده یا نه)
      نمیدونم منظورتون کجاست.


      شما فقط بهم بگید میخواید چیکار کنید . میخواید چه تغییری اعمال کنید ؟ دراون صورت میتونم راهنمایی کنم.

      راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

      دیدگاه


        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        کریستال خارجی 16MHZ کجا باید تعیین بشه ؟

        نسخه پروگرامر بنده 1.6.6 هستش .

        دیدگاه


          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          نوشته اصلی توسط aseok
          کریستال خارجی 16MHZ کجا باید تعیین بشه ؟
          من یه توضیحات کلی در این رابطه میدم:

          هدف: تعیین فرکانس کاری پردازنده ی میکرو در مرحله ی پروگرام کردن.(برای تنظیم روی حالت استفاده از کریستال خارجی)

          خوب مثل همیشه اولین کاری که باید انجام بدیم ، مراجعه به دیتاشیت میکروکنترلر است( آب هم که میخواید بنوشید به دیتاشیت مراجعه کنید ) :
          فرض میکنیم میکروی ما مگا32 است:
          خوب بزارید یه سرچ بزنیم توش(میدونم همون اول هاست ولی نمیدونم دقیقا چه صفحه ایه)....

          آهان صفحه 24 (نوشته Crystal Oscillator ) :
          ببنید این بخش جزء بخش تنظیم فیوزبیت ها است. دوتا فیوزبایت تو میکرو مگا32 وجود داره. این فیوزبایت ها مقدارشون در هنگام پروگرام شدن تعیین میشه و دیگه در هنگام کار میکرو عوض نمیشه.
          یکی از تنظیماتی که انجام میده تعیین فرکانس کاری پردازنده میکرو و کلا کلاک سیستم است.

          یه نکته ی مهم در تنظیمات فیوز بیت ها است و اونم اینکه مقدار صفر دادن به اونها یعنی programmed و مقدار یک دادن به اونها یعنی unprogrammed . (یه جورایی با لاجیک معمولی جور در نمیاد)

          خوب بریم برا خوندن صفحه 24 :
          نوشته هاش مهمه (مثلا میگه اگه فیوز بیت CKOPT برنامه ریزی بشه(programmed) در ان حالت نویز پذیری کمتر میشه ولی بجاش مصرف تغذیه بیشتر میشه و....)
          ولی مهمترین جا ، جدول پایین صفحه است:
          با این جدول حالت های مختلف تعیین میشه :

          ما میخوایم بزاریم رو حالت 16MHz ( سطر آخر جدول):
          ستون اول : CKOPT حتما باید برنامه ریزی بشه ( برابر صفر قرار داده بشه)

          ستون دوم : فیوز بیت های CKSEL1 و CKSEL2 و CKSEL3 روی یکی از حالت های 101 یا 110 یا 111 قرار بگیره ( فکر کنم بهتر باشه رو 111 باشه ( ولی تو دیتاشیت ذکر نشده) )

          در ستون آخر هم مقدار رنج مناسب برای خازن های متصل شده به کریستال را ذکر کرده . ( 12 تا 22 پیکو فاراد)
          در صفحه بعدی یک جدول مربوط به تنظیم CKSEL0 و SUT1 و SUT0 است که با توجه به استفاده از کریستال کوارتز یا رزوناتور سرامیکی استفاده شده مقادیر تعیین میشه. همچنین با توجه به تغذیه و زمان رسیدن تغذیه به ولتاژ مورد نیاز برای میکرو(برای تعیین زمان شروع به کار میکرو ( همون اول که به تغذیه متصل میشه)) (مشخصا CKSEL0 باید 1 باشه)

          حالا برمیگردیم به برنامه :
          مطمئنا یک قسمت برنامه مربوط به تنظیم فیوزبیت ها میشه . با توجه به مقادیر بالا فیوزبیت ها را تنظیم کنید و پروگرام کنید.( Program Fuse )
          سپس با توجه به شکل صفحه 24 کریستال را به میکرو متصل کنید و میکرو را به تغذیه وصل کنید.

          برای اطلاع بیشتر به فیلم ها آموزشی جناب کی نژاد قسمت "فیوزبیت ها" مراجعه شود.
          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            سلام

            در هدر delay.h قسمت زیر برای تعریف کلاک وجود داره :
            کد:
            #ifndef F_CPU
            /* prevent compiler error by supplying a default */
            # warning "F_CPU not defined for <util/delay.h>"
            # define F_CPU 16000000UL
            #endif
            به طور کلی وقتی که این مقدار بیش از 1MHZ میشه (این تابع در lcd هم استفاده میشه ) ، عملکرد lcd از برنامه نوشته شده فاصله میگیره و تاخیرها بیش از مقدار واقعی میشه و تایمر 1 ثانیه ای چندین ثانیه طول میکشه .

            لطفا راهنمایی فرمایید ، با تشکر .

            دیدگاه


              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              سلام

              من قصد دارم یه تایع یا روتین تعریف کنم که باهاش بتونم یه عدد بین 0 و 1 بهش بدم و متناسب با اون رجیسترهای OCR1AH و OCR1AL مقدار مناسب بگیرن...
              خودم ار تابع زیر استفاده کردم :
              کد:
              void timer1_set_dutycycle(float dc)
              {
              	unsigned long int DC;
              	DC=65535-dc*10000;
              	DC++;
              	OCR1AH=(8>>DC);
              	DC=65535-dc*10000;
              	DC++;
              	OCR1AL=(DC<<8);
              }
              ولی مشکلی که وجود داره اینه که اصلا کار نمیکنه! (دیوتی سایکل سیگنال 0 میشه)
              اصلا انگار نه انگار.وقتی مستقیم به DC مقدار 0 میدم کار میکنه و تو پروتئوس دیوتی سایکل رو 0 میبینم....ولی وقتی بهش مقدار میدم دیوتی سایکل 50% میشه و هیچ کاری به مقدار DC نداره...نمیدونم مشکل از کجاست...میشه بنده رو راهنمایی بفرمایید؟
              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

              www.intelart.ir


              ساخت کنترلر دما PID فازی با AVR [آموزشی]

              دیدگاه


                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                نوشته اصلی توسط aseok
                سلام

                در هدر delay.h قسمت زیر برای تعریف کلاک وجود داره :
                کد:
                #ifndef F_CPU
                /* prevent compiler error by supplying a default */
                # warning "F_CPU not defined for <util/delay.h>"
                # define F_CPU 16000000UL
                #endif
                به طور کلی وقتی که این مقدار بیش از 1MHZ میشه (این تابع در lcd هم استفاده میشه ) ، عملکرد lcd از برنامه نوشته شده فاصله میگیره و تاخیرها بیش از مقدار واقعی میشه و تایمر 1 ثانیه ای چندین ثانیه طول میکشه .

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

                از منوی project گزینه آخر که به اینصورت نوشته >> properties اسم پروژه رو انتخاب کنید
                مثلا اگه اسم پروژه رو گذاشتین test میشه test properties و همچنین میتونید از کلید ترکیبی alt+f7 هم استفاده کنید.
                در پنجره باز شده به تب toolchain برید و از قسمت AVR/GNU C Compiler گزینه symbols رو انتخاب کنید.
                بعد روی علامت مثبت add item کلیک کنید و در پنجره باز شده عبارت زیر رو تایپ کنید:
                F_CPU=1000000UL برای کریستال 1 مگ
                F_CPU=2000000UL برای کریستال 2 مگ
                و .....
                بعد هم پنجره رو OK کنید و تمام...

                دیدگاه


                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

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

                  از منوی project گزینه آخر که به اینصورت نوشته >> properties اسم پروژه رو انتخاب کنید
                  مثلا اگه اسم پروژه رو گذاشتین test میشه test properties و همچنین میتونید از کلید ترکیبی alt+f7 هم استفاده کنید.
                  در پنجره باز شده به تب toolchain برید و از قسمت AVR/GNU C Compiler گزینه symbols رو انتخاب کنید.
                  بعد روی علامت مثبت add item کلیک کنید و در پنجره باز شده عبارت زیر رو تایپ کنید:
                  F_CPU=1000000UL برای کریستال 1 مگ
                  F_CPU=2000000UL برای کریستال 2 مگ
                  و .....
                  بعد هم پنجره رو OK کنید و تمام...
                  بنده در قسمت symbol کلاک رو تعریف نمیکردم و در هدرهای مختلف کلاک رو تغییر میدادم و حتی المقدور فیوز بیتهارو هم رعایت میکردم .
                  برای مثال وقتی که کلاک بیش از 1 مگ میشه ( 8 یا 16) ، حروف در lcd یک به یک ظاهر میشه ولی در حالت کلاک 1 مگ ، به یکباره تمام جمله ظاهر میشه البته بنده با توجه به آزمایش عینی این رو گفتم .

                  دیدگاه


                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    سلام

                    حتی اگر مقدار تعریف شده در هدرها مغایر با این تعریف باشه ، محاسبات بر مبنای این تعریف صورت میگیره ؟

                    تشکر .

                    دیدگاه


                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      نوشته اصلی توسط aseok
                      سلام

                      حتی اگر مقدار تعریف شده در هدرها مغایر با این تعریف باشه ، محاسبات بر مبنای این تعریف صورت میگیره ؟

                      تشکر .
                      سلام
                      بله شما اگه مقدار فرکانس مورد نظرتون رو از اون قسمت که در پست قبلی گفتم تعریف کنید دیگه تمامی محاسبات هدرها بر اساس همین مقدار صورت میگیره و فرکانس تعریف شده در خطوط برنامه دیگه مورد نظر کامپایلر نیست!!
                      موفق باشید

                      دیدگاه


                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        یه توصیه (البته اینو بگم در حدی نیستم که بخوام توصیه کنم و شاید همتون این کار رو بلد باشید!!) به دوستانی که دارن با WINAVR کار میکنن و از محیطش خسته شدن و همچنین به دوستانی که با AVRSTUDIO 6 کار میکنن و با بعضی از کتابخونه های قدیمی مشکل دارن.
                        شما میتونید تو محیط AVRSTUDIO برنامتون رو بنویسید و تمامی تنظیمات رو انجام بدید ولی کامپایل کردن بر مبنایWINAVR باشه.
                        یعنی در محیط AVRSTUDIO از WINAVR استفاده کنید که هم با کتابخونه های قدیمی مشکلی نداشته باشه و هم محیط به اصطلاح یوزر فرندلی تره!!
                        خودم که نفهمیدم چی گفتم
                        لینک زیر هم آموزش این کار هست که باید فن بزنید تا باز شه
                        کد:
                        http://avrstudio5.wordpress.com/2013/03/07/using-winavr-with-atmel-studio-6-0-or-later/
                        در ضمن کاری به اسم سایت نداشته باشد که نوشته AVRSTUDIO5 آموزش مربوط به AVRSTUDIO6 هست.
                        سوالی بود در خدمتم
                        موفق باشید

                        دیدگاه


                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          نوشته اصلی توسط aseok
                          سلام

                          در هدر delay.h قسمت زیر برای تعریف کلاک وجود داره :
                          کد:
                          #ifndef F_CPU
                          /* prevent compiler error by supplying a default */
                          # warning "F_CPU not defined for <util/delay.h>"
                          # define F_CPU 16000000UL
                          #endif
                          به طور کلی وقتی که این مقدار بیش از 1MHZ میشه (این تابع در lcd هم استفاده میشه ) ، عملکرد lcd از برنامه نوشته شده فاصله میگیره و تاخیرها بیش از مقدار واقعی میشه و تایمر 1 ثانیه ای چندین ثانیه طول میکشه .

                          لطفا راهنمایی فرمایید ، با تشکر .
                          سلام
                          اول یه سوالی داشتم:
                          شما خودتون این قسمت delay.h را تغییر دادید؟
                          اون دیفاین مربوط به F_CPU در حالت عادی روی 1000000UL دیفاین شده است. شما خودتون به 16 مگاهرتز تغییرش دادید؟

                          نباید اینکار را کنید. بهتره تو هدر فایل های استاندارد کامپایلر دست برده نشه.(خوب اسمش پیداست استاندارده دیگه - تو یه چیزه استاندارد که دست نمیبرن )


                          ببنید اینجوری نیست که برا برنامه نویسی برای یک میکرو ، کامپایلر نیاز ذاشته باشه بدونه کلاک سی پی یو چه قدره.

                          این F_CPU هم فقط تو هدر delay.h مطرح میشه. یعنی فقط این هدر نیاز داره بدونه فرکانس کلاک پردازنده شما چه قدره ،
                          خوب اگه بهش اشتباه بدید ، چی میشه؟
                          کامپایلر که غمش نیست ، بدون ارور کامپایل میکنه. ولی اگر از توابع delay.h استفاده کنید خوب معلومه ، عملکردشون اشتباه میشه. مثلا میخواید تاخیر 1 میلی ثانیه ایجاد کنید یهو 16 میلی ثانیه میشه یا برعکس.

                          خوب برای اینکه بهش بفهمونیم فرکانس کلاک سی پی یو چقدره ، باید چه کرد؟

                          اول اینکه نباید کدهای خودشو تغییر بدید(چرا انقدر خشن، صلح آمیز ترم میشه اینکار رو کرد oo: )

                          ببنید این هدرفایل به حالت پیشفرض فکر میکنه کلاک سی پی یو 1مگاهرتزه .
                          ولی ازتون میخواد تعیین کنید کلاک پردازنده تون چه قدر ، اگرم همون 1مگاهرتزه ازتون یه مهر تایید میخواد وگرنه بتون وارنینگ میده .
                          حالا چه طور میشه این مهر تایید رو زد؟
                          راحته. قبل از اینکلود کردن delay.h قبلش با یه دیفاین F_CPU را مشخص کنید.

                          اینجوری:
                          کد:
                          #define F_CPU 16000000UL
                          #include <util/delay.h>
                          الان به delay.h فهموندیم که فرکانس کلاک پردازنده 16 مگاهرتزه.

                          توجه کنید که با اینکار دیگه وارنیگ مبنی بر اینکه مقدار فرکانس پردازنده وارد نشده ، داده نمیشه . و همچنین کلیه توابع دیگه درست کار میکنند.( ولی باید دیگه در هنگام پروگرام کردن میکرو ، فرکانس کاری رو 16 مگاهرتز(در mega32 ومشابهات باید برای اینکار از کریستال خارجی استفاده کرد) تنظیم بشه)



                          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                          دیدگاه


                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            نوشته اصلی توسط punisher.x64
                            سلام

                            من قصد دارم یه تایع یا روتین تعریف کنم که باهاش بتونم یه عدد بین 0 و 1 بهش بدم و متناسب با اون رجیسترهای OCR1AH و OCR1AL مقدار مناسب بگیرن...
                            خودم ار تابع زیر استفاده کردم :
                            کد:
                            void timer1_set_dutycycle(float dc)
                            {
                            	unsigned long int DC;
                            	DC=65535-dc*10000;
                            	DC++;
                            	OCR1AH=(8>>DC);
                            	DC=65535-dc*10000;
                            	DC++;
                            	OCR1AL=(DC<<8);
                            }
                            ولی مشکلی که وجود داره اینه که اصلا کار نمیکنه! (دیوتی سایکل سیگنال 0 میشه)
                            اصلا انگار نه انگار.وقتی مستقیم به DC مقدار 0 میدم کار میکنه و تو پروتئوس دیوتی سایکل رو 0 میبینم....ولی وقتی بهش مقدار میدم دیوتی سایکل 50% میشه و هیچ کاری به مقدار DC نداره...نمیدونم مشکل از کجاست...میشه بنده رو راهنمایی بفرمایید؟
                            راستش من درست منظور از کاربرد تابعتون را نفهمیدم.

                            شما اگر میشه یک مثال بزنید که بگید مثلا میخوام تابع اینطور عمل کنه که با فلان ورودی بهمان خروجی بده.
                            میخواید چی کار کنید؟ ، چرا به عنوان پارامتر یک float گرفتید؟ میخواید یک رجیستر به دلخواه مقدار دهی کنید؟ اگر اینطوریه پس چرا float گرفتید؟ منظورتون چی بوده؟
                            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                            دیدگاه


                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              نوشته اصلی توسط aseok
                              بنده در قسمت symbol کلاک رو تعریف نمیکردم و در هدرهای مختلف کلاک رو تغییر میدادم و حتی المقدور فیوز بیتهارو هم رعایت میکردم .
                              نباید اینکار صورت بگیره.
                              به همون نحو که گفته شد بایستی عمل بشه.
                              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                              دیدگاه


                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                دوستان در رابطه با وقفه ها و استک و... مطالب جامع و کلی در پست زیر گفته شد، گفتم شاید براتون جالب باشه:

                                http://www.eca.ir/forum2/index.php?topic=83612.msg513233#msg513233
                                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                                دیدگاه

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