اطلاعیه

Collapse
No announcement yet.

دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

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

    دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

    سلام خدمت همه دوستان بالاخص اساتید میکرو
    آقا من پاک قاطی کردم. اول یه سوال بپرسم: میشه به پورت های میکرو بصورت بیتی دسترسی داشت؟ مثلا PORTB.0 یا PINB.0 ؟ من یه برنامه نوشتم واسه ارتباط میکرو با سون سگمنت، به این صورت که وقتی پایه صفر پورت C یک میشه، عدد صفر نمایش داده بشه. وقتی پایه یک پورت C یک میشه، عدد 1، وقتی پایه دو یک میشه عدد 2 و در نهایت وقتی پایه 3 یک میشه عدد 3 نمایش داده بشه.
    یک و صفر کردن پایه های پورت C رو هم به این صورت انجام میدم که یک سیم به پایه مورد نظر وصل کردم، واسه صفر کردنش وصلش میکنم به Ground و واسه یک کردنش وصل میکنم به Vcc.
    ولی کار نمیکنه، اصلا وقتی تغذیه مدار رو روشن میکنم سون سگمنت روشن میشه، در حالی ابتدا باید خاموش باشه، هر چی هم پایه های پورت C رو صفر و یک میکنم تاثیری نمیذاره. برنامه ای که نوشتم اینه:
    #
    include <mega32.h>
    #include <delay.h>

    void main(void)
    {
    DDRB=0xFF;
    PORTB=0xFF;
    DDRC=0x00;
    PORTC=0x00;

    while (1)
    {
    if(PINC.0==1)
    {
    PORTB=0;
    }
    if(PINC.1==1)
    {
    PORTB=0x76;
    }
    if (PINC.2==1)
    {
    PORTB=0x48;
    }
    if (PINC.3==1)
    {
    PORTB=0x42;
    }
    }
    }
    و یه سوال دیگه اگه پایه های یک پورت به جایی وصل نباشه یک محسوب میکنه میکرو؟
    آقا قربونتون برم مشکل از کجاست؟ گیج شدم به خدا

    #2
    پاسخ : دسترسی بیتی به پورت های میکرو؟

    چرا نشه :eek:
    روش اول: حالت کلی : PORTN.x=1 که N نام پورته مثلا A و x پین پورته که از 0 تا 7 میشه بهش داد مثلا :PORTA.7=1
    روش دیگه: عدد دهی در مبنای هگزاست مثلا دستور PORTA=0x40 معادله با دستور PORTA.7=1
    *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
    *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

    دیدگاه


      #3
      پاسخ : دسترسی بیتی به پورت های میکرو؟

      پس مشکل برنامه من چیه؟ آخه چرا صفر و یک کردن پایه های پورت C هیچ تاثیری روی روشن و خاموش شدن سگمنت های سون سگمنت نمیشه؟ :sad:

      دیدگاه


        #4
        پاسخ : دسترسی بیتی به پورت های میکرو؟

        نوشته اصلی توسط mhm_004
        پس مشکل برنامه من چیه؟ آخه چرا صفر و یک کردن پایه های پورت C هیچ تاثیری روی روشن و خاموش شدن سگمنت های سون سگمنت نمیشه؟ :sad:
        disable the Jtag....
        [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

        دیدگاه


          #5
          پاسخ : دسترسی بیتی به پورت های میکرو؟

          این دیگه چجور ایفیه (if(PINC.1==1
          تمام ایفات رو اینطور بنویس شاید حل شد if(PINC.1==1)h
          h رو گذاشتم یا تایپش خراب نشه)
          از مدار مطمئنی
          *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
          *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

          دیدگاه


            #6
            پاسخ : دسترسی بیتی به پورت های میکرو؟

            نوشته اصلی توسط microjo
            این دیگه چجور ایفیه (if(PINC.1==1
            تمام ایفات رو اینطور بنویس شاید حل شد if(PINC.1==1)h
            h رو گذاشتم یا تایپش خراب نشه)
            از مدار مطمئنی
            دوست عزیز این if که شما نوشتی دقیقا همونی هست که من نوشتم، متوجه منظورتون نمیشم؟ دوستان کسی به من کمک کنه خوب. این که یه برنامه خیلی ساده هست.

            دیدگاه


              #7
              پاسخ : دسترسی بیتی به پورت های میکرو؟

              نوشته اصلی توسط shahinbahari
              disable the Jtag....
              Jtag رو هم disable کردم ولی جواب نداد، دو تا if اول کار میکنه ولی بعدی هاش نه. خواهش میکنم یکی کمک کنه :sad:

              دیدگاه


                #8
                پاسخ : دسترسی بیتی به پورت های میکرو؟

                اصلاح گردید
                تمام ایفات رو اینطور بنویس شاید حل شد if(PINC.1)h
                *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                دیدگاه


                  #9
                  پاسخ : دسترسی بیتی به پورت های میکرو؟

                  نوشته اصلی توسط microjo
                  اصلاح گردید
                  تمام ایفات رو اینطور بنویس شاید حل شد if(PINC.1)h
                  دوست عزیز فرقی نکرد. البته یه چیزی رو فهمیدم و اون اینکه وقتی پورت A رو میگیرم به جای C برنامه درست کار میکنه. وقتی پورت C استفاده میکنم دوتا شرط اول کار میکنن ولی شرطهای بعدی نه. فکر میکنم پورت C یه تنظیماتی داره که باید اعمال بشه. کسی میتونه بگه مشکل پورت C چیه؟

                  دیدگاه


                    #10
                    پاسخ : دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

                    نوشته اصلی توسط mhm_004
                    دوست عزیز فرقی نکرد. البته یه چیزی رو فهمیدم و اون اینکه وقتی پورت A رو میگیرم به جای C برنامه درست کار میکنه. وقتی پورت C استفاده میکنم دوتا شرط اول کار میکنن ولی شرطهای بعدی نه. فکر میکنم پورت C یه تنظیماتی داره که باید اعمال بشه. کسی میتونه بگه مشکل پورت C چیه؟
                    با سلام
                    در حالت دیفالت پورت سی به عنوان رابط JTAG تنظیم شده باید فیوز بیت JTAGEN رو غیرفعال کنید
                    ببخشید من پست های قبلی رو نخوندم اول واقعا معذرت میخوام
                    نوشته اصلی توسط mhm_004
                    Jtag رو هم disable کردم ولی جواب نداد، دو تا if اول کار میکنه ولی بعدی هاش نه. خواهش میکنم یکی کمک کنه :sad:
                    ولی این گفتتون اولین چیزی رو که ذهن متبادر میکنه و با توجه به جدول زیر به نظر درست هم میاد

                    دیدگاه


                      #11
                      پاسخ : دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

                      نوشته اصلی توسط mojtaba_led
                      با سلام
                      در حالت دیفالت پورت سی به عنوان رابط JTAG تنظیم شده باید فیوز بیت JTAGEN رو غیرفعال کنید
                      مگه نباید واسه غیرفعال کردن JTAG ، فیوز بیت JTAGEN رو یک کنیم؟ من این کارم کردم ولی تفاوتی نکرد، دو پایه 0 و 1 درست کار میکنه ولی بقیش درست کار نمیکنه.
                      راستی یه سوال دیگه، delay_ms(500) مگه تاخیر نیم ثانیه ای درست نمیکنه؟ چرا در عمل بیشتر از نیم ثانیه تاخیر ایجاد میکنه مثلا یه LED چشمک زن گذاشتم که نیم ثانیه روشن باشه نیم ثانیه خاموش ولی در عمل نزدیک 2 ثانیه روش میموند 2 ثانیه خاموش. چرا اینطوریه؟
                      از همه بچه ها ممنونم

                      دیدگاه


                        #12
                        پاسخ : دسترسی بیتی به پورت های میکرو؟

                        نوشته اصلی توسط mhm_004
                        دوست عزیز فرقی نکرد. البته یه چیزی رو فهمیدم و اون اینکه وقتی پورت A رو میگیرم به جای C برنامه درست کار میکنه. وقتی پورت C استفاده میکنم دوتا شرط اول کار میکنن ولی شرطهای بعدی نه. فکر میکنم پورت C یه تنظیماتی داره که باید اعمال بشه. کسی میتونه بگه مشکل پورت C چیه؟
                        شاید بخاطر اینه که از همه پین ها نمیشه برای امور i/o استفاده کرد . از دیتاشیت نگاه کن
                        اما تجربه من میگه از همه پینای پورت A میشه برای i/o استفاده کرد پس مشکل حتما همینجاست
                        *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                        *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                        دیدگاه


                          #13
                          پاسخ : دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

                          نوشته اصلی توسط mhm_004
                          راستی یه سوال دیگه، delay_ms(500) مگه تاخیر نیم ثانیه ای درست نمیکنه؟ چرا در عمل بیشتر از نیم ثانیه تاخیر ایجاد میکنه مثلا یه LED چشمک زن گذاشتم که نیم ثانیه روشن باشه نیم ثانیه خاموش ولی در عمل نزدیک 2 ثانیه روش میموند 2 ثانیه خاموش. چرا اینطوریه؟
                          تابع DELAY با توجه به فرکانس کاری که براش توی برنامه استفاده میکنید محاسبه میشه پس بنابراین باید فرکانس برنامه تون با فرکانس کار میکرو برابر باشه ! برابر هست ؟

                          اصلا وقتی تغذیه مدار رو روشن میکنم سون سگمنت روشن میشه، در حالی ابتدا باید خاموش باشه،
                          پایه های پورت C رو پول دان کنید

                          دیدگاه


                            #14
                            پاسخ : دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

                            نوشته اصلی توسط mojtaba_led
                            تابع DELAY با توجه به فرکانس کاری که براش توی برنامه استفاده میکنید محاسبه میشه پس بنابراین باید فرکانس برنامه تون با فرکانس کار میکرو برابر باشه ! برابر هست ؟
                            پایه های پورت C رو پول دان کنید
                            دوست عزیز من تازه کارم میشه توضیح بدین منظور از فرکانس کاری میکرو و برنامه چیه؟ یه فرکانس تعیین میکنیم تموم میشه دیگه یعنی چی فرکانس میکرو وبرنامه باید یکی باشه؟ چطوری میشه یکی کرد؟
                            در مورد پول دان کردن پورت C ، من تو کتاب "مرجع کامل میکرو کنترلرهای AVR" نوشته "پرتوی فر" خوندم که نوشته بود در حالتی که پورت رو بصورت ورودی تعریف میکنین، مقاومت pull up داخلی یا خارجی بذارین تا ورودی قابل اطمینان باشه. حالا شما میگین یعنی عکس این گفته عمل کنم؟

                            دیدگاه


                              #15
                              پاسخ : دسترسی بیتی به پورت های میکرو-راه اندازی سون سگمنت

                              منظورم اینه که شما وقتی برنامه رو نوشید چه فرکانسی رو براش تعیین کردید همون فرکانس رو باید از طریق فیوز بیت ها برای میکرو انتخاب کنید . به صورت پیشفرض فرکانس میکرو 1 مگ هست احتمالا شما فرکانس برنامه تون 8 مگ یا فرکانس برنامه رو 1 مگ کنید یا با تنظیم فیوز بیت ها فرکانس میکرو رو 8 مگ کنید البته اگه فرکانس برنامه 8 مگ هست
                              این که میگم پول دان کنید به خاطر اینه که نویز رو حذف کنه و البته پیشنهاد میکنم با اون مقاوت یک خازن 100 نانو هم موازی کنید (البته تنها پایه هایی که به اون ها کلید وصل میکنید و تغییراتشون توی برنامه تاثیر دارند)

                              دیدگاه

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