اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام آقای مرتضوی
    نه هنوز MPCM رو تموم نکردم یه مقداری مشکل توش هست که کم کم درست میشه
    ممنون که خبر گرفتین
    راستی فرکانس رو چطور تنظیم کنم
    من اینطور عمل کردم درسته ؟

    کد:
    #ifdef F_CPU
    #define F_CPU 8000000
    #endif

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

    دیدگاه


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

      سلام
      خواهش میکنم.

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

      سوال: پس تو کدویژن چرا از تعریف xtal استفاده میکنند؟(یا تو (AS ( AtmelStudio چرا از F_CPU استفاده میشه)
      جواب : صرفا جهت استفاده از توابع delay که به صورت نرم افزاری نوشته میشه. و برای محاسبات داخل این توابع باید برای تابع فرکانس پردازنده مشخص باشه.
      خوب پس میریم سراغ هدر delay.h که باید به صورت زیر اینکلود شود:
      کد:
      #include <util/delay.h>
      خوب بازش میکنم و به این قسمت میرسیم:
      کد:
      #ifndef F_CPU
      /* prevent compiler error by supplying a default */
      # warning "F_CPU not defined for <util/delay.h>"
      # define F_CPU 1000000UL
      #endif
      خوب معنیش چیه؟
      یعنی آقای کامپایلر ( کلا کامپایلر آقاست :mrgreen: ) اگر F_CPU برام مشخص نشده بود به آقای برنامه نویس وارنینگ بده و بصورت پیش فرض مقدارش رو 1 مگاهرتز بگیر. ( اون UL یعنی Unsigned Long )
      پس کافیه تو هر سورس فایلی که delay.h را اینکلود میکنید. قبلش فقط بنویسید( مثلا اگر قصد داشتید تو مرحله پروگرام کردن میکرو تون را 8 مگاهرتز تنظیم کنید.):
      کد:
      #define F_CPU 8000000UL
      راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

      دیدگاه


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

        اینی که نوشتم رو به برنامه اصلی اضافه کردم درسته (اول خط)؟
        چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

        دیدگاه


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

          نوشته اصلی توسط صادق ابراهیمی
          اینی که نوشتم رو به برنامه اصلی اضافه کردم درسته (اول خط)؟
          معلومه پست قبلیم رو اصلا نخوندیدا :icon_razz:

          خلاصه :
          اگر تو برنامه هدر delay.h را اضافه کردید. قبلش فقط کافیه اینو بنویسید:
          کد:
          #define F_CPU 8000000UL
          اون ifndef و.. رو نمیخواد

          اگر بتون وارنینگ نداد، درسته.
          راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


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

            منم می خوام کوچ کنم. از کد ویزارد خوشم نمیاد. ترجیح خودم (منوالی) کد بنویسم تا یه ویزارد کمکم کنه و بعد سر در گم بشم که این کدها واسه چیه.
            تازه هر اروری هم که پیش میاد اول از همه به همن کد های اتوماتیک مشکوک میشم. شاید باورتون نشه یه بار چند روز واسه خاطر یه باگ توی کد ویزارد میکروچیپ (واسه pic) درگیر رفع ارور شدم. از اون به بعد به همشون مشکوکم !
            انسان نمی تواند معنی روح و چگونگی زنده بودن خود و سایر موجودات را بفهمد... ولی ساختن موجودات مصنوعی زنده و روح دار ممکن است

            دیدگاه


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

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

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

              اگر هم بواسطه اینکه از کدویزارد استفاده می کردید، از رجیسترها بی اطلاعید ، قبل از هر چیز برید کامل با رجیسترهای میکرویی که استفاده میکنید، آشنا بشید (بوسیله دیتاشیتش)
              راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

              دیدگاه


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

                سلام

                میخواستم مقادیر پایه هایی رو که به صورت ورودی تعریف شدند رو بخونم و ذخیره کنم ، چه دستوری لازمه ؟ (atmel studio)

                دیدگاه


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

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

                  میخواستم مقادیر پایه هایی رو که به صورت ورودی تعریف شدند رو بخونم و ذخیره کنم ، چه دستوری لازمه ؟ (atmel studio)
                  درصورتی که بخواهید مقدار یک بیت از رجیستری را بدست آورید، میتوند از دیفاین زیر استفاده کنید:
                  کد:
                  #define getbit(port,bit) ( ( (port) & (1 << (bit) ) ) >> (bit) )
                  راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                  انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                  دیدگاه


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

                    سلام آقای مرتضوی
                    میشه از این کتابخونه استفاده نکین
                    کد:
                    #include <compat/deprecated.h>
                    کلا با همون شیفت ها بگین
                    همین مثال بالا
                    چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                    دیدگاه


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

                      نوشته اصلی توسط صادق ابراهیمی
                      سلام آقای مرتضوی
                      میشه از این کتابخونه استفاده نکین
                      کد:
                      #include <compat/deprecated.h>
                      کلا با همون شیفت ها بگین
                      همین مثال بالا
                      سلام

                      من برای مثال قبل که از deprecated.h استفاده نکردم!
                      منظورتون اینه دیگه؟
                      کد:
                      #define getbit(port,bit) ( ( (port) & (1 << (bit) ) ) >> (bit) )
                      این یه دیفاینه که خودم نوشتم. و مقدار یک بیت از یک رجیستر را برمیگردونه.
                      سوال: چه جوری اینکار را میکنه؟
                      جواب: با استفاده از همون عملگر های منطقی یا بیتی . به صورت زیر(پرانتز ها را از داخلی ترین پرانتز تحلیل میکنیم) :
                      میگه به اندازه ی بیت ، 1 را به چپ شیفت بده ( که همون مینترمه که داشتیم) بعد با مقدار port اون را and کن . پس تا اینجا جواب یا صفر میشه یا دو به توان بیت( مثلا اگر بیت 3 باشه و مقدارش هم 1 باشه جواب میشه 8 و اگر بیت 3 باشه و مقدارش صفر باشه میشه 0 )
                      بعد از اون ما میایم جواب حاصله را به اندازه بیت به راست شیفت میدیم (چرا؟) چون مثل مثال بالا اگر بیت 3 باشه و مقدارش 1 باشه در این صورت جواب 8 میشه ولی ما 8 نمیخوایم ما یا یک میخوایم یا 0 . پس اگر به اندازه بیت جواب را به راست شیفت بدیم ، جواب نهایی درست میشه(8 را 3 تا به راست شیفت بدید ، 1 میشه)

                      راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                      دیدگاه


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

                        سلام
                        منم چند وقتی میشه که کدویژن رو کنار گذاشتم و به نظرم در حد همون دانشجویی کافیه و برای کارای جدی تر باید کامپایلر های حرفه ای تر استفاده کرد
                        مشکلی نیست که نشه حلش کرد. تو کدویژن داشتیم مثلا PORTA.1=1 ولی تو GCC نمیشه اینجوری نوشت و برای دسترسی بیتی به پورت ها باید چاره ای اندیشه کرد :read:
                        روشهای پیشنهاد شده در پستهای قبلی که استفاده از شیفت دادن و یا کدهای اسمبلی cbi , sbi مفید هستند اما شاید باعث سردرگمی بشن (البته بستگی به خودتون داره، هرجور راحتین ) من کدهای زیر رو پیشنهاد می کنم که خودم ازشون استفاده کردم و جواب داده .
                        منبع : از سایت AVRFreaks که لینکشو ندارم.

                        برای دسترسی بیتی به رجیستر های ورودی و خروجی کدهای زیر رو به برنامه تون اضافه کنین

                        کد:
                        // Bit Field Conversion for PORT Access
                        typedef struct
                        {
                        	unsigned bit0:1;
                        	unsigned bit1:1;
                        	unsigned bit2:1;
                        	unsigned bit3:1;
                        	unsigned bit4:1;
                        	unsigned bit5:1;
                        	unsigned bit6:1;
                        	unsigned bit7:1;
                        } BYTE_BITFIELD;
                        
                        // Data Direction
                        #define ddra (*((volatile BYTE_BITFIELD*)(&DDRA)))
                        #define ddrb (*((volatile BYTE_BITFIELD*)(&DDRB)))
                        #define ddrc (*((volatile BYTE_BITFIELD*)(&DDRC)))
                        #define ddrd (*((volatile BYTE_BITFIELD*)(&DDRD)))
                        
                        // Output Port
                        #define porta (*((volatile BYTE_BITFIELD*)(&PORTA)))
                        #define portb (*((volatile BYTE_BITFIELD*)(&PORTB)))
                        #define portc (*((volatile BYTE_BITFIELD*)(&PORTC)))
                        #define portd (*((volatile BYTE_BITFIELD*)(&PORTD)))
                        
                        // Input Port
                        #define pina (*((volatile BYTE_BITFIELD*)(&PINA)))
                        #define pinb (*((volatile BYTE_BITFIELD*)(&PINB)))
                        #define pinc (*((volatile BYTE_BITFIELD*)(&PINC)))
                        #define pind (*((volatile BYTE_BITFIELD*)(&PIND)))
                        
                        /*
                        Now you can just use:
                        
                        porta.bit1 = 0
                        
                        You can use them like a structure object.*/
                        گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                        دیدگاه


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

                          سلام .
                          این تاپیک ها و فایل هاشون به دردتون میخوره :

                          کتابخانه جایگزین برای کدویزارد : http://www.eca.ir/forum2/index.php?topic=81372.0
                          ال سی دی کاراکتری : http://www.eca.ir/forum2/index.php?topic=81785.0
                          کیپد ماتریسی : http://www.eca.ir/forum2/index.php?topic=81783.0

                          اگر سوال و یا مشکلی بود خوشحال میشم بتونم کمک کنم .
                          گذشت خصلت مردان است

                          دیدگاه


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

                            نوشته اصلی توسط RubeuS
                            کدویزارد؟
                            بله . 100 درصد. با فرض اینکه کدویزارد ،کلیه ی کدها را درست تولید کند(که اینطور نیست)، استفاده از آن اصلا خوب نیست.

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

                            اگر هم بواسطه اینکه از کدویزارد استفاده می کردید، از رجیسترها بی اطلاعید ، قبل از هر چیز برید کامل با رجیسترهای میکرویی که استفاده میکنید، آشنا بشید (بوسیله دیتاشیتش)
                            با عرض سلام و تشکرات فراوان.......
                            یه نکته مهمی هم هست.اونم اینه که کم شدن اندازه کد ها و استفاده کمتر رم میکرو در مقایسه با کدویژن .
                            من تو عمل اینو بیشتر درک کردم
                            تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                            تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                            دیدگاه


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

                              سلام
                              برای صفر کردن درسته
                              کد:
                              PORTB &= ~((1<<PB6) | (1<<PB4) | (1<<PB3));
                              که از پورت B بیت 3-4 و 6 رو صفر میکنه و بقیه رو دست نمیزنه ؟
                              چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                              دیدگاه


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

                                نوشته اصلی توسط صادق ابراهیمی
                                سلام
                                برای صفر کردن درسته
                                کد:
                                PORTB &= ~((1<<PB6) | (1<<PB4) | (1<<PB3));
                                که از پورت B بیت 3-4 و 6 رو صفر میکنه و بقیه رو دست نمیزنه ؟
                                بله درسته.
                                البته اینم میشه
                                PORTB=(0<<PB3)|(0<<PB4)|(0<<PB4) |(0<<PB6)
                                (نتونستم بصورت صحیح اینجا بنویسم کپی کنی درست میشه)
                                از استاد RubeuS شرمنده هستم که دارم میپرم وسط حرف :"> :"> :"> :">
                                تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                                تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                                دیدگاه

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