اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    در رابطه با برنامه بالا......

    اصلا بزارید اول یه چیزی بگم : شما که دیگه نباید اینجوری رجیسترها را مقداردهی کنید!!
    پس اون شیفت و ... نحوه ی مقدار دهی رجیسترها که به خوانایی برنامه کمک میکنه چی شد؟ :icon_razz: :rolleyes: پست 10 همین تاپیک

    مقداردهی رجیسترها باتوجه به دیتاشیت مگا 16 و مگا32 و... درسته(البته بهتره بگید چه میکرویی استفاده میکنید . تو gcc وقتی از هدر io استفاده میکنید ، چون دیگه با دیدن فایل اصلی برنامه نمیشه فهمید میکروتون چیه بهتره جلو اینکلود io یک کامنت بزارید و بگید مثلا MCU برابر فلان میکرو )
    درضمن وقتی از delay استفاده میشه.... F_CPU فراموش نشه.
    نکته : به وارنینگهایی که کامپایلر بتون میده توجه کنید. الان کامپایلر یه وارنینگ برای مشخص نکردن F_CPU حتما بتون داده.


    خوب حالا بریم سراغ برنامه :
    همون طور که گفتم ، رجیسترها درست مقداردهی شده اگر فرکانس کلاک سی پی یو روی 8 مگاهرتز تنظیم شده باشه ،با این مقادیر usart روی 9600bps تنظیم میشه. ( 8 بیتی - بدون پریتی - 1دونه stop bit - فعال سازی ارسال اطلاعات )
    البته بهتره قبلش پین مربوط به ارسال اطلاعات خروجی بشه. ولی نشه هم فکر نکنم مشکلی پیش بیاد.

    خوب در رابطه با printf : بله مشکل همینجاست. شما اگه بجاش بنویسید مثلا ;UDR=0xAA میبینید که درست کار میکنه .

    واقعیتش من زیاد (زیاد که نه اصلا) با این توابع کار نمیکنم و همیشه خودم یه تابع برای اینکار مینویسم و یا در اکثر اوقات از وقفه برای اینکار استفاده میکنم .(وقت پردازنده ارزش داره ، وقتی رو یک فلگ داره busy waiting انجام میشه یعنی وقت پردازنده داره الکی تلف میشه).

    سه گزینه پیش روتون میزارم:
    1- برم ته تو printf رو در بیارم. ( خودم این گزینه را زیاد دوست ندارم :mrgreen: )

    2- یه تابع براتون بنویسم که اینکار رو کنه.

    3- بتون توضیح بدم که چجوری با وقفه رشته تون را بفرستید.( اینو خیلی دوست دارم چون این کار یک عمقی نگریه)


    راستی الان یادم اومد : حتما قبل از انتخاب برید پست زیر را بخونید ، خیلی خوبه ( در همین رابطه است) :

    http://www.eca.ir/forum2/index.php?topic=45733.msg488342#msg488342
    این تابع خیلی سر سخته میشه کلا آموزش بدین که چطوری تابع مینویسین؟
    تو خیلی موارد به کار میاد
    فکر کنم خیلی ها مشکل دارن
    تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

    دیدگاه


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

      نوشته اصلی توسط سعید دلشاد منور
      این تابع خیلی سر سخته میشه کلا آموزش بدین که چطوری تابع مینویسین؟
      تو خیلی موارد به کار میاد
      فکر کنم خیلی ها مشکل دارن
      از تابع زیر میتونید استفاده کنید

      کد:
      void usartSend(const char *str)
      {
      	while (*str)
      	{
      		UDR = *str;
      		str++;
      		while(!(UCSRA & (1<<TXC)));
      		UCSRA|=(1<<TXC);
      	}
      	
      }
      فقط یک رشته میگیره و میفرسته.

      در ضمن یه چیزی که یادم اومد :

      در کل توابع printf و scanf توابع سنگینین و این سنگین بودنشون بعضی جاها کار دست آدم میده ( مخصوصا در پروژه های بزرگ و پروژه هایی که از چندین وقفه درشون استفاده میشه و ....)

      بهترین حالتش استفاده از وقفه است . یکم شاید اولش سخت باشه ولی یواش یواش جا میفته و بش میرزه.

      -----------------------------------------------------------------------------
      ویرایش:
      با توجه به کذاشتن اثر احتمالی روی بقیه فلگ ها توسط دستور UCSRA|=(1<<TXC); بایستی این دستور به شکل زیر نوشته شود:
      کد:
      UCSRA=(1<<TXC);
      راه اندازی ماژول 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

        نوشته اصلی توسط RubeuS
        از تابع زیر میتونید استفاده کنید

        کد:
        void usartSend(const char *str)
        {
        	while (*str)
        	{
        		UDR = *str;
        		str++;
        		while(!(UCSRA & (1<<TXC)));
        		UCSRA|=(1<<TXC);
        	}
        	
        }
        فقط یک رشته میگیره و میفرسته.

        در ضمن یه چیزی که یادم اومد :

        در کل توابع printf و scanf توابع سنگینین و این سنگین بودنشون بعضی جاها کار دست آدم میده ( مخصوصا در پروژه های بزرگ و پروژه هایی که از چندین وقفه درشون استفاده میشه و ....)

        بهترین حالتش استفاده از وقفه است . یکم شاید اولش سخت باشه ولی یواش یواش جا میفته و بش میرزه.
        تشکر بی نهایت از سید.
        میشه نحوه کار این تابع رو توضیح بدین؟
        این روش کار ما روش سرکشی هست؟
        تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

        دیدگاه


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

          نوشته اصلی توسط سعید دلشاد منور
          تشکر بی نهایت از سید.
          میشه نحوه کار این تابع رو توضیح بدین؟
          این روش کار ما روش سرکشی هست؟
          بزارید ابتدا سوال دومتون را پاسخ بدم:
          بله آفرین و این همون روش سرکشی یا polling است .

          برای درک بهتر مثلا شما پردازنده را در یک طرف و ماژول اینترفیس سریال ( usart ) را در طرف دیگه شبیه دو شخص فرض کنید.
          فکر کنید پردازنده یک کارفرما باشه و ماژول سریال یک کارگر.
          پردازنده(کارفرما ) به کارگرش(ماژول سریال) دستور میده یک کاری کنه.
          حالا اگه بخواید روش پولینگ را در اینجا شبیه سازی کنیم ، اینجوریه:
          کارفرما مرتبا به کارگره میگه کار را انجام دادی؟؟میگه نه دوباره میپرسه کار را انجام دادی؟ و... تا اینکه بگه اره انجام شد.

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

          ( اگه علاقه مند به این مباحث هستید باید مباحث در رابطه با معماری کامپیوتر بخونید که خیلی گسترده است) ( من خودم بیشتر تحقیقات و مطالعاتم در رابطه با معماری کامپیوتر بوده و هنوز خیلی چیزا هست که نمیدونم ) ( انشالله اگه وقت شد یک تاپیک ایجاد میکنم در رابطه با طراحی پردازنده و میکرو کنترلر با FPGA (از صفر یه پردازنده ساده را ساختن - البته باید دوستان به مفاهیم معماری کامپیوتر تسلط کافی را داشته باشند))


          حالا بریم سراغ سوال اول:

          فهمیدیم که روش ، روش سرکشی یا polling است.

          تابع را نگاه کنید :

          یک حلقه while اصلی داره: (while (*str

          این حلقه چک میکنه رشته به آخر رسیده یا نه : یعنی دونه دونه کارکتر ها را میفرسته.

          بریم داخل حلقه:

          4 تا خطه:


          خط 1 : UDR = *str
          این یک کاراکتر(کارکتری که اشاره گر str بهش اشاره میکنه) از رشته را به رجیستر UDR میده . ( با اینکار پردازنده به ماژول سریال دستور ارسال میده ( کارفرما و کارگره که یادتونه؟) )

          ----------------------------------

          خط 2 : str++;
          اشاره گر str را به کاراکتر بعدی اشاره میده.

          ----------------------------------

          خط 3 : while(!(UCSRA & (1<<TXC)));
          این حلقه مثل همونه که کارفرما مدام از کارگر بپرسه : کارت تموم شد؟
          مداوم فلگ TXC را چک میکنه و در صورت بالا رفتن ( 1 شدن) از حلقه میاد بیرون

          ----------------------------------

          خط 4 : UCSRA|=(1<<TXC);
          با این دستور پردازنده فلگ را دستی پایین میاره.( اینکار برای چک کردن فلگ در دفعات بعدی لازمه)

          راه اندازی ماژول 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

            نوشته اصلی توسط RubeuS
            بزارید ابتدا سوال دومتون را پاسخ بدم:
            بله آفرین و این همون روش سرکشی یا polling است .

            برای درک بهتر مثلا شما پردازنده را در یک طرف و ماژول اینترفیس سریال ( usart ) را در طرف دیگه شبیه دو شخص فرض کنید.
            فکر کنید پردازنده یک کارفرما باشه و ماژول سریال یک کارگر.
            پردازنده(کارفرما ) به کارگرش(ماژول سریال) دستور میده یک کاری کنه.
            حالا اگه بخواید روش پولینگ را در اینجا شبیه سازی کنیم ، اینجوریه:
            کارفرما مرتبا به کارگره میگه کار را انجام دادی؟؟میگه نه دوباره میپرسه کار را انجام دادی؟ و... تا اینکه بگه اره انجام شد.

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

            ( اگه علاقه مند به این مباحث هستید باید مباحث در رابطه با معماری کامپیوتر بخونید که خیلی گسترده است) ( من خودم بیشتر تحقیقات و مطالعاتم در رابطه با معماری کامپیوتر بوده و هنوز خیلی چیزا هست که نمیدونم ) ( انشالله اگه وقت شد یک تاپیک ایجاد میکنم در رابطه با طراحی پردازنده و میکرو کنترلر با FPGA (از صفر یه پردازنده ساده را ساختن - البته باید دوستان به مفاهیم معماری کامپیوتر تسلط کافی را داشته باشند))


            حالا بریم سراغ سوال اول:

            فهمیدیم که روش ، روش سرکشی یا polling است.

            تابع را نگاه کنید :

            یک حلقه while اصلی داره: (while (*str

            این حلقه چک میکنه رشته به آخر رسیده یا نه : یعنی دونه دونه کارکتر ها را میفرسته.

            بریم داخل حلقه:

            4 تا خطه:


            خط 1 : UDR = *str
            این یک کاراکتر(کارکتری که اشاره گر str بهش اشاره میکنه) از رشته را به رجیستر UDR میده . ( با اینکار پردازنده به ماژول سریال دستور ارسال میده ( کارفرما و کارگره که یادتونه؟) )

            ----------------------------------

            خط 2 : str++;
            اشاره گر str را به کاراکتر بعدی اشاره میده.

            ----------------------------------

            خط 3 : while(!(UCSRA & (1<<TXC)));
            این حلقه مثل همونه که کارفرما مدام از کارگر بپرسه : کارت تموم شد؟
            مداوم فلگ TXC را چک میکنه و در صورت بالا رفتن ( 1 شدن) از حلقه میاد بیرون

            ----------------------------------

            خط 4 : UCSRA|=(1<<TXC);
            با این دستور پردازنده فلگ را دستی پایین میاره.( اینکار برای چک کردن فلگ در دفعات بعدی لازمه)
            خیلی خیلی خیلی ممنون
            این روش که پدر پردازنده(کارفرما) رو در میاره.هم خود پردازنده(کارفرما) و هم ماژول(کارگر) خسته میشن.و سرعت کار پایین میاد.تو مد وقفه چطوری میشه؟ به isr انشعاب پیدا میکنه؟ چند تا کتاب دارم تو هیچ کدوم توضیح نداده.
            تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

            دیدگاه


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

              سلام

              من از اینکه بالاخره تونستم کمی با avr studio برنامه نویسی کنم خیلی خوشحالم . :wow: :wow: :wow:
              مخصوصا وقتی دو تا برنامه نوشتم که یکیش با avr studio و دیگری با بسکام بود و دو تا حلقه تو در تو بزرگ داشت (برای ایجاد تاخیر قابل ملاحظه )و پس از خروج از حلقه مقدار رو روی lcd نشون میداد.
              مفتخرم بگم برنامه نوشته شده با avr studio چیزی حدود 3.6 برابر از برنامه بسکام سریعتر عمل میکرد :wow: :wow: :wow: :wow:

              در راستای مطالبی که از شما یاد گرفتم ، مشکلی برخوردم که اگر ممکنه زحمت بکشید پاسخ بدید.
              برای ست یا ریست کردن یک بیت خاص از پورت و همچنین برای خواندن مقدار یک پین از پورت از چه دستوری باید کمک بگیرم و تو چه کتابخونه ای وجود دارند؟
              در مورد اون دستور delay هم که گفتید باید تو کتابخونه avr/delay.h فرکانس میکرو رو تعریف کرد.
              خوب اگر بجای استفاده از از دستور
              include<avr/delay.h>
              بیاییم و خود فایل delay.h رو توی دایرکتوری پروژه مان کپی کنیم بهتر نیست و در نهایت
              include "delay.h"
              رو استفاده کنیم؟
              اینجوری تنظیمات درون delay.h مربوط به پروژه مان محفوظ میماند.

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

              با تشکر

              دیدگاه


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

                نوشته اصلی توسط سعید دلشاد منور
                خیلی خیلی خیلی ممنون
                این روش که پدر پردازنده(کارفرما) رو در میاره.هم خود پردازنده(کارفرما) و هم ماژول(کارگر) خسته میشن.و سرعت کار پایین میاد.تو مد وقفه چطوری میشه؟ به isr انشعاب پیدا میکنه؟ چند تا کتاب دارم تو هیچ کدوم توضیح نداده.
                خواهش میکنم

                در رابطه با اینکه کدوم پدرشون در میاد ، یه مطلب اضافه میکنم:

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

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

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

                در رابطه با روش دوم( وقفه) انشالله در آینده توضیح میدم.

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




                راه اندازی ماژول 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

                  نوشته اصلی توسط RubeuS
                  خواهش میکنم

                  در رابطه با اینکه کدوم پدرشون در میاد ، یه مطلب اضافه میکنم:

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

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

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

                  در رابطه با روش دوم( وقفه) انشالله در آینده توضیح میدم.

                  در رابطه با کتاب خوندن و کلاس های دانشگاه و... من یه چیز اضافه کنم:
                  مطالبی که از طریق کتاب خوندن و کلاسهای دانشگاه و در کل تئوری فرا گرفته میشه ، بسیار بسیار بسیار مفیده ، چون پایه و اساس استفاده در عمل همون تئوریاست و من هیچکدوم از حرفهایی که در رابطه با بی ارزشی کلاس های دانشگاه و تئوری خوندن ، گفته میشه را قبول ندارم .
                  اونها اساس کار هستند.
                  وقتی تو عمل میرید باید اونها را با زمینه ای که کار میکنید ارتباط دهی کنید .
                  خیلی ممنون سید منظورم دروس دانشگاهی نبود.همین کتابهای آموزش avr بود.سایت های خارجی رو نگاه میکنم . خیلی ممنون
                  تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

                  دیدگاه


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

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

                    من از اینکه بالاخره تونستم کمی با avr studio برنامه نویسی کنم خیلی خوشحالم . :wow: :wow: :wow:
                    مخصوصا وقتی دو تا برنامه نوشتم که یکیش با avr studio و دیگری با بسکام بود و دو تا حلقه تو در تو بزرگ داشت (برای ایجاد تاخیر قابل ملاحظه )و پس از خروج از حلقه مقدار رو روی lcd نشون میداد.
                    مفتخرم بگم برنامه نوشته شده با avr studio چیزی حدود 3.6 برابر از برنامه بسکام سریعتر عمل میکرد :wow: :wow: :wow: :wow:

                    در راستای مطالبی که از شما یاد گرفتم ، مشکلی برخوردم که اگر ممکنه زحمت بکشید پاسخ بدید.
                    برای ست یا ریست کردن یک بیت خاص از پورت و همچنین برای خواندن مقدار یک پین از پورت از چه دستوری باید کمک بگیرم و تو چه کتابخونه ای وجود دارند؟
                    در مورد اون دستور delay هم که گفتید باید تو کتابخونه avr/delay.h فرکانس میکرو رو تعریف کرد.
                    خوب اگر بجای استفاده از از دستور
                    include<avr/delay.h>
                    بیاییم و خود فایل delay.h رو توی دایرکتوری پروژه مان کپی کنیم بهتر نیست و در نهایت
                    include "delay.h"
                    رو استفاده کنیم؟
                    اینجوری تنظیمات درون delay.h مربوط به پروژه مان محفوظ میماند.

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

                    با تشکر
                    خواهش میکنم
                    بنده هم خوشحالم از اینکه رفتید دنبالش .در رابطه با سوالاتون:
                    به لینک های زیر برید:
                    انجام عملیات بیتی روی یک بایت یا رجیستر خاص : http://www.eca.ir/forum2/index.php?topic=81025.msg493466#msg493466

                    آشنایی با عملگر شیفت و مقدار دهی به رجیستر ها به صورت رایج تر: http://www.eca.ir/forum2/index.php?topic=81025.msg493484#msg493484

                    نحوه کار با توابع تاخیر( delay ) در اتمل استادیو: http://www.eca.ir/forum2/index.php?topic=81025.msg493662#msg493662
                    این هم بخونید:
                    http://www.eca.ir/forum2/index.php?topic=81025.msg494372#msg494372


                    در رابطه با delay ، خیر شما نیاز نیست اینکار را بکنید. همانطور که گفتم هر جایی دوست دارید util/delay.h را اینکلود کنید ، فقط قبلش F_CPU رو باید مشخص کنید.(توجه داشته باشید که نباید کامپایلر به این قضیه بتون وارنینگ بده)

                    بله من هم موافق یادگیری ماهی گیری هستم :agree::
                    برای اینکار روی تابع مورد نظر کلیک کنید و از دکمه های ترکیبی alt + G استفاده کنید.
                    راه اندازی ماژول 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

                      سلام
                      از استاد گرانقدر مهندس مرتضوی برای تاپیک قشنگشون واقعا ممنونم.
                      مهندس اگه امکان داره یه مثال از ذخیره ارایه در حافظه فلش و فراخوانی اطلاعات اون قرار بدین. مثلا برنامه نمایش اعداد 0 تا 9 بر روی سون سگمنت.
                      چندین سایت و تاپیک رو خوندم ولی خب متاسفانه من با این قضیه هنوز مشکل دارم و اطلاعات صحیح فراخوانی نمیشه.
                      پیشاپیش ممنون
                      چرا ناراحتی پاتریک!
                      + امروز ی بچه دیدم سرچهارراه گل میفروخت
                      - از دیدنش ناراحت شدی؟
                      + نه
                      پس چی ناراحتت کرده
                      + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                      ------------------------------------------------------------------------------------------------------
                      تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                      ------------------------------------------------------------------------------------------------------
                      محصولات

                      دیدگاه


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

                        نوشته اصلی توسط سوران آراسته
                        سلام
                        از استاد گرانقدر مهندس مرتضوی برای تاپیک قشنگشون واقعا ممنونم.
                        مهندس اگه امکان داره یه مثال از ذخیره ارایه در حافظه فلش و فراخوانی اطلاعات اون قرار بدین. مثلا برنامه نمایش اعداد 0 تا 9 بر روی سون سگمنت.
                        چندین سایت و تاپیک رو خوندم ولی خب متاسفانه من با این قضیه هنوز مشکل دارم و اطلاعات صحیح فراخوانی نمیشه.
                        پیشاپیش ممنون
                        سلام
                        خواهش میکنم سوران جان شما لطف دارید نسبت به بنده.

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

                          توضیحاتتون و همینطور تاپیکتون عالیه .در حد بوندس لیگا :wow: :wow: :wow: :wow: :job: :job: :job: :job: :job:
                          نوشته اصلی توسط RubeuS
                          خواهش میکنم
                          بنده هم خوشحالم از اینکه رفتید دنبالش .در رابطه با سوالاتون:
                          به لینک های زیر برید:این هم بخونید:
                          http://www.eca.ir/forum2/index.php?topic=81025.msg494372#msg494372


                          در رابطه با delay ، خیر شما نیاز نیست اینکار را بکنید. همانطور که گفتم هر جایی دوست دارید util/delay.h را اینکلود کنید ، فقط قبلش F_CPU رو باید مشخص کنید.(توجه داشته باشید که نباید کامپایلر به این قضیه بتون وارنینگ بده)

                          بله من هم موافق یادگیری ماهی گیری هستم :agree::
                          برای اینکار روی تابع مورد نظر کلیک کنید و از دکمه های ترکیبی alt + G استفاده کنید.

                          دیدگاه


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

                            نوشته اصلی توسط سوران آراسته
                            مهندس اگه امکان داره یه مثال از ذخیره ارایه در حافظه فلش و فراخوانی اطلاعات اون قرار بدین. مثلا برنامه نمایش اعداد 0 تا 9 بر روی سون سگمنت.
                            چندین سایت و تاپیک رو خوندم ولی خب متاسفانه من با این قضیه هنوز مشکل دارم و اطلاعات صحیح فراخوانی نمیشه.
                            اینکه چرا یه کاربر فعال این سوال رو میپرسه(اونم سوران) یه طرف؛
                            یه طرف دیگه هم اینکه دن یه مقاله آموزشی داشت که کامل توش درباره progmem صحبت کرده(فوق العاده ساده و روانه(وقتی یه غیر انگلیسی یه مطلب انگلیسی رو می نویسه واقعا خوندنش راحته)).
                            از طرف دیگر من موندم چرا این تاپیک پنس شد!!!
                            در حالی که دوباره میگم تاپیک WINAVR جناب حسینی عالیه!
                            شما من فکر کنم با پیگیری از این پست در تاپیک جناب حسینی کامل به جواب میرسید!:


                            توی win avr چطور میشه یه رشته رو توی فلش ذخیره کرد؟

                            دیدگاه


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

                              خوب در این پست میخوام به ذخیره و دسترسی به اطلاعات داخل حافظه فلش بپردازم:

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

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

                              دیتا آبجکت چیست و معرفی استراکچر: http://www.eca.ir/forum2/index.php?topic=81025.msg504542#msg504542

                              مختصری در باب اشاره گرها در سی و عملگر <-- : http://www.eca.ir/forum2/index.php?topic=81025.msg504661#msg504661

                              --------------------------------------------------------------------------------

                              هر کامپیوتر دارای یک یا چند نوع حافظه است (میکروکنترلر یک کامپیوتر کوچک است). حافظه ها می تونند در دسته بندی های مختلفی قرار گیرند . به عنوان مثال :
                              یک دستبندی میتواند به صورت زیر باشد:
                              حافظه های فقط خواندنی - حافظه های خواندنی نوشتنی - حافظه های خواندنی و به صورت محدود نوشتنی و...

                              یا:
                              حافظه موقت --- حافظه دائم
                              یا به صورت زیر:
                              حافظه ی مخصوص ذخیره ی دستورات - حافظه ی مخصوص ذخیره ی داده - حافظه ی مخصوص برای پشته ( stack ) و...


                              زمان مقدار دهی به حافظه:
                              در دو زمان میشه یک خانه از یک حافظه را مقدار دهی کرد:

                              1- زمان کامپایل( بدلیل اینکه برنامه نویسی برای میکرو کنترلر در کامپیوتر دیگری انجام میشود ، به زمان کامپایل ، زمان پروگرام هم می گویند):
                              این زمانی است که هنوز دستورات روی پردازنده هدف اجرا نشده و فقط دستورات بارگذاری میشود، مثلا در میکرو در موقع پروگرام شدن، دیدید که پردازنده دستورات مربوطه را اجرا نمیکند و زمانی که میکرو به منبع تغذیه متصل میشود ، پردازنده ی آن شروع به اجرای دستورات میکند.

                              2- زمان اجرا:
                              خوب همانطور که توضیح داده شد ، زمان اجرا همان زمانی است که میکرو به تغذیه وصل شده و شروع به اجرای دستورات میکند.


                              ------------------------------------------------------

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

                              در رابطه با دسته بندی دوم : حافظه ی فلش در دسته ی "حافظه دائم" قرار میگیرد.

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


                              حافظه ی فلش موجود ، در اصل در زمان پروگرام شدن مقدار دهی میشود و بعد از آن فقط میتوان محتویات آن را خواند( البته در زمان اجرا فقط در قسمت بوت لودر میتوان درونش نوشت که بحث این پست نیست)


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

                              خوب پس میریم سراغ سی و برنامه نویسی:
                              اگر پست هایی که در اول این پست خوندم را خونده باشید:
                              ما گفتیم که مثلا حافظه برای یک دیتاآبجکت میگیریم و یا اشاره گری به یک دیتا آبجکت ایجاد میکنیم. یا مثلا بوسیله ی دستور ;int x با کامپایلر یک قرار داد می بندیم که یک دیتا آبجکت از نوع متغییر و عددصحیح با نام قرار دادی x در حافظه ایجاد کن. خوب این حافظه چیه ؟ این حافظه اصلا ربطی با حافظه ی فلش نداده و یک حافظه ی اجباری برای پردازنده است که نوع این حافظه خواندنی نوشتنی و موقت برای ذخیره داده میباشد.

                              پس کلیه مفاهیم در اون دو پست مربوط به این نوع حافظه بوده که در میکرو یک حافظه ی (SRAM ( Static Random Access Memory برای اینکار تعبیه شده.
                              پس وقتی گفتیم یک اشاره گر به حافظه یعنی یک اشاره گر به حافظه ی SRAM یا آدرس یک خانه حافظه یعنی آدرس یک خانه حافظه ی SRAM ، یا وقتی گفتیم ایجاد یک دیتاآبجکت در حافظه یعنی ایجاد اون در SRAM و...

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

                              این کامپایلر برای اینکار به ما امکاناتی میدهد که برای دسترسی به این امکانات بایستی فایل مخصوص به آن اینکلود شود :
                              به صورت زیر:
                              #include <avr/pgmspace.h>

                              pgmspace یا Program Space:


                              بعد از اینکلود کردن این فایل ، برای اینکه یک دیتا آبجکت بسازید و به کامپایلر بگید که میخوام این دیتا آبجکت درون حافظه ی فلش ایجاد شود، بایستی از روش زیر استفاده شود:

                              کد:
                              static const [Data Type] [Data Object Name] PROGMEM = [Initial value];
                              مثال: مثلا برای ایجاد یک دیتا آبجکت از نوع int و با نام i و با مقدار اولیه 0x076f باید به صورت زیر عمل شود:
                              کد:
                              static const int i PROGMEM = 0x076f;
                              سوال : چرا باید اینجوری نوشت؟

                              جواب : این چیزیه که کامپایلر خواسته و البته کاملا هوشمندانه بوده :
                              چرا static ؟ : چون میخواسته بگه life time ش همیشگی است.(با توجه به خصوصیات حافظه فلش)
                              به پست زیر مراجعه شود:
                              انواع متغییرها از نظر حوزه دسترسی و LifeTimeم : http://www.eca.ir/forum2/index.php?topic=81025.msg499601#msg499601


                              چرا const ؟ : چون میخواسته بگه مقدارش زمان اجرا تغییر نمیکنه. ( با توجه به خصوصیات خافظه فلش که گفته شد)
                              ( پس الان با توجه به const بودن میشه نتیجه گرفت که اعلان دیتا آبجکت در فلش بدون مقدار اولیه ، یه چیز چرته و همیشه باید مقدار اولیه داشته باشه)

                              اگه PROGMEM را ننویسیم چی میشه؟
                              اول بگم که این مربوط به واژه های کلیدی در سی نمیشه و کامپایلر خودش اضافه کرده ( تو کدویژن یادتونه مینوشتید flash ؟ اونم مربوط به خود کامپایلره و به زبان ربطی نداره. جالبه ...نه؟)
                              اگه این کلمه نوشته نشه با توجه به سینتکس زبان سی یک دیتا آبجکت ثابت با لایف تایم همیشگی از نوع int با مقدار اولیه ی ذکر شده در حافظه ی موقت ( SRAM ) ایجاد میشه.
                              (راستی فهمیدید چرا من از کلمه ی دیتا آبجکت استفاده میکنم؟ اگه میخواستم از کلمه ی متغییر استفاده کنم باید اینجا میگفتم : "متغییر ثابت" که این یه حرف خنده داره . زیاد دیدم ازاین اشتباهات میکنن)

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

                              ادامه دارد...
                              راه اندازی ماژول 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

                                نوشته اصلی توسط rozeh
                                اینکه چرا یه کاربر فعال این سوال رو میپرسه(اونم سوران) یه طرف؛
                                یه طرف دیگه هم اینکه دن یه مقاله آموزشی داشت که کامل توش درباره progmem صحبت کرده(فوق العاده ساده و روانه(وقتی یه غیر انگلیسی یه مطلب انگلیسی رو می نویسه واقعا خوندنش راحته)).
                                از طرف دیگر من موندم چرا این تاپیک پنس شد!!!
                                در حالی که دوباره میگم تاپیک WINAVR جناب حسینی عالیه!
                                شما من فکر کنم با پیگیری از این پست در تاپیک جناب حسینی کامل به جواب میرسید!:


                                توی win avr چطور میشه یه رشته رو توی فلش ذخیره کرد؟
                                میتونم ازتون خواهش کنم در این تاپیک شما کمتر پیشنهاد بدید و اگر خواستید استفاده کنید و اگر هم نخواستید خوب اصلا بازش نکنید . همین مطالب را تو یک پست دیگه هم گفتید.
                                ------------------------------------------

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

                                ---------------

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