اطلاعیه

Collapse
No announcement yet.

مشکل با ریجستر

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

    مشکل با ریجستر

    سلام
    مدتی میشه که با avr کار میکنم زبان C رو بلدم اما با ریجسترها مشکل پیدا کردم
    کتابهایی که دارم بدون معرفی و تفهیم کار با ریجستر از ریجسترهای مختلف استفاده میکنه
    مشکل من با ریجسترها بیشتر مفهومیه ممنون میشم راهنماییم کنید.
    *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
    *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

    #2
    پاسخ : مشکل با ریجستر

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

    دیدگاه


      #3
      پاسخ : مشکل با ریجستر

      نوشته اصلی توسط microjo
      سلام
      مدتی میشه که با avr کار میکنم زبان C رو بلدم اما با ریجسترها مشکل پیدا کردم
      کتابهایی که دارم بدون معرفی و تفهیم کار با ریجستر از ریجسترهای مختلف استفاده میکنه
      مشکل من با ریجسترها بیشتر مفهومیه ممنون میشم راهنماییم کنید.

      بله! اساسا شما نیاز دارید که کار با رجیسترها و مقدار دهی اونا رو برای رفع نیازهاتون بلد باشید(مثلا برای کار با تایمر/کانتر-ADC-واچ داگ- USART و... شما باید با رجیسترهای هرکدوم که تعیین کننده کارایی اون قسمت هستن رو بلد باشید.)

      اگه بخوام کتاب معرفی کنم : کتاب آموزش AVR مهندس مظاهریان خوبه، از اینترنت هم بخوای بگیری تو همین انجمن هم جزوات بسیار خوب و گویایی وجود داره من جمله جزوه آقای رضا سپاسیار که بسیار خوب و کامل هست(دیگه زحمت سرچش با خودت )
      اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

      دیدگاه


        #4
        پاسخ : مشکل با ریجستر

        نوشته اصلی توسط reza_shushtar44
        تو کتاب کاهه (آموزش بسکام avr ) رجیسترهای هر قسمت رو هم معرفی کرده بود . چندان چیز خاصی ندارن . بگید کدومشون رو بلد نیستید اگر بلد بودم راهنمایی میکنم .
        دستور پایین که با ریجستر DDR کار میکنه چطور پورت A رو بصورت ورودی تنظیم میکنه

        ;DDRA=0x00
        *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
        *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

        دیدگاه


          #5
          پاسخ : مشکل با ریجستر

          با سلام
          این جدول رو ببینید :

          دیدگاه


            #6
            پاسخ : مشکل با ریجستر

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

            دیدگاه


              #7
              پاسخ : مشکل با ریجستر

              این رجیسترها در حافظه SRAM واقع شده اند.

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

              1- فرض بکنید میخواین یک پین رو خروجی بکنیم و روی اون مقدار صفر بنویسید

              برای تعیین نوع وظیفه پین ( ورودی و خروجی بودن ) از رجیستر DDR استفاده می کنیم

              خوب حالا می خوایم یک پین مثل پین صفر پورت A رو خروجی بکنیم بکنیم

              کد:
               DDRA.0 = 1

              و میخوایم مقدار این پین خروجی رو 1 منطقی بکنیم

              کد:
               DDRA = 1


              2- حالا فرض می خواهیم همان پین را ورودی بکنیم

              کد:
               DDRA.0 = 0

              در مرحله بعدی میخوایم مقدار این پین رو بخونیم

              کد:
               A = PINA.0

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


              کد:
               PORTA.0 = 1 ;




              نکته : اگه به ردیف سوم جدول دقت بکنی در مورد یک بیت بنام PUD داخل رجیستر SFIOR صحبت میکنه ، اگه این بیت رو 1 بشه تمامی پورت ها از نعمت داشتن مقاومت بالاکش محروم میشن!


              باز مشکلی داشتی بگو

              دیدگاه


                #8
                پاسخ : مشکل با ریجستر

                نوشته اصلی توسط رضا حاجی زاده
                این رجیسترها در حافظه SRAM واقع شده اند.

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

                1- فرض بکنید میخواین یک پین رو خروجی بکنیم و روی اون مقدار صفر بنویسید ...
                تشکر از پاسخ کاملتون اما مشکل من مقداردهی پورتها و تنظیماتشون نیست
                چیزی که عجیبه نحوه مقداردهی رجیسترهاست(بدون 0 و 1)
                مثلا در کد زیر پورت A بصورت خروجی با مقدار پیشفرض 0 تعیین میشود
                سوال اینجاست که چرا با یک و صفر مقداردهی نکرده ؟
                کد:
                DDRA=0xFF;
                ;PORTA=0x00
                *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                دیدگاه


                  #9
                  پاسخ : مشکل با ریجستر

                  نوشته اصلی توسط microjo
                  تشکر از پاسخ کاملتون اما مشکل من مقداردهی پورتها و تنظیماتشون نیست
                  چیزی که عجیبه نحوه مقداردهی رجیسترهاست(بدون 0 و 1)
                  مثلا در کد زیر پورت A بصورت خروجی با مقدار پیشفرض 0 تعیین میشود
                  سوال اینجاست که چرا با یک و صفر مقداردهی نکرده ؟
                  کد:
                  DDRA=0xFF;
                  ;PORTA=0x00
                  خوب چه فرقی میکنه نحوه مقدار دهی؟؟؟ اینجا از کد هگز استفاده کرده . که در واقع نمایش خلاصه واری از باینری هستش.
                  کد:
                  DDRA = 0b11111111
                  
                  DDRA = 0XFF
                  
                  DDRA = 255

                  دیدگاه


                    #10
                    پاسخ : مشکل با ریجستر

                    پس شما در کد بالا همه پین های پورت A رو ورودی کردید ؟

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

                    دیدگاه


                      #11
                      پاسخ : مشکل با ریجستر

                      نوشته اصلی توسط microjo
                      پس شما در کد بالا همه پین های پورت A رو ورودی کردید ؟

                      اگر قرار باشه با مقداردهی رجیسترها سخت افزار رو کنترل کنیم تمام بیتهای رجیسترها باید تا آخر برنامه در SRAM ثابت باشن در اینصورت چطور میشه متغیری رو در فضای ریجسترها اعلان کرد ؟
                      در مثال زده شده همه پین های پورت A رو خروجی(1) تعریف کرده اند.
                      هر رجیستری مخصوص یه کاریه(مثلا رجیسترهای DDRX,PORTx,PINX برای کار با پورت ها هستند) و برای ذخیره سازی مقادیر هم رجیسترهای دیگری وجود دارند.
                      اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

                      دیدگاه


                        #12
                        پاسخ : مشکل با ریجستر

                        فکر میکنم صفحه 181 کتاب مهندس امیر ره افروز درباره تنظیم پایه ها اشتباه باشد .
                        اینجا نوشته "در صورتی که DDRxn صفر باشد, پایه بصورت خروجی و اگر DDRxn یک باشد پایه بصورت ورودی تنظییم میشود!! "
                        *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                        *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                        دیدگاه


                          #13
                          پاسخ : مشکل با ریجستر

                          نوشته اصلی توسط microjo
                          فکر میکنم صفحه 181 کتاب مهندس امیر ره افروز درباره تنظیم پایه ها اشتباه باشد .
                          اینجا نوشته "در صورتی که DDRxn صفر باشد, پایه بصورت خروجی و اگر DDRxn یک باشد پایه بصورت ورودی تنظییم میشود!! "
                          بله، این اشتباست
                          اگه 1باشه اون پین به صورت خروجیه و اگه 0 باشه به صورت ورودی تعریف میشه
                          اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

                          دیدگاه


                            #14
                            پاسخ : مشکل با ریجستر

                            دستورات زیر رجیستر رو بطور نامعلومی مقدار دهی کرده اشتباه نکنم اینجای کتاب هم غلطه
                            کد:
                            TCCR0=0x02;
                            TCCR0=0xFFH;
                            ماشین حساب نمیتونه صفر رو قبل از عدد غیرصفر بیاره و تبدیل مبنا همون عدد میشه بجز صفر
                            *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                            *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                            دیدگاه


                              #15
                              پاسخ : مشکل با ریجستر

                              نوشته اصلی توسط microjo
                              دستورات زیر رجیستر رو بطور نامعلومی مقدار دهی کرده اشتباه نکنم اینجای کتاب هم غلطه
                              کد:
                              TCCR0=0x02;
                              TCCR0=0xFFH;
                              ماشین حساب نمیتونه صفر رو قبل از عدد غیرصفر بیاره و تبدیل مبنا همون عدد میشه بجز صفر

                              این رجیستر برای کار با تایمر/کانتر صفر به کار میره، مثلا وقتی شما بنویسی TCCR0=0x02 میاد و اونو تو مد تایمری با N=8 پیکربندی میکنه، اما TCCR0=0xFFH اشتباست (تا اونجایی که من میدونم!)و احتمالا TCCR0=0xFF بوده که با این حساب میره تو مد PWM,...
                              منظورتون رو از این قسمت نفهمیدم؟
                              "ماشین حساب نمیتونه صفر رو قبل از عدد غیرصفر بیاره و تبدیل مبنا همون عدد میشه بجز صفر"
                              ماشین حساب چیه؟!
                              اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

                              دیدگاه

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