اطلاعیه

Collapse
No announcement yet.

IOPORT

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

    IOPORT

    سلام
    کی میتونه یه توضیح کافی در مورد IOPORT در ATMELSTDIO اینجا قرار بده :nerd:
    بعدا یه جمله قشنگ مینویسم

    #2
    پاسخ : IOPORT

    اگه یه جست و جوی خیلی کوچیک انجام بدید توی همین انجمن تمام اون چیزی که می خواید هست.فیلم های آقای کی نژاد هم که کامل ترین منبع.

    دیدگاه


      #3
      پاسخ : IOPORT

      از راهنمایی شما متشکرم ولی متن سوال من چیز دیگه ای بود
      بعدا یه جمله قشنگ مینویسم

      دیدگاه


        #4
        پاسخ : IOPORT

        مهندس توضیحش خیلی مفصله...بهتره فیلم استاد کی نژاد رو دانلود کنی..خیلی عالی توضیح داده
        جهت اطلاع بخش سوم رو دانلود کن :agree:

        دیدگاه


          #5
          پاسخ : IOPORT

          ایشون در موزد ورودی خروجی ها رو دانلود کردم وچندین بار مرور کردم
          ولی ظاهرا بیشتر راجع به خروجی صحبت شده
          منطورم مبحث ورودی خروجیهای عمومی هستش مثل این خط
          board
          _
          init () ; while (gpio_pin_ is _high ( GPIO_ PUSH_ BUTTON_1 )) {


          gpio_ set _pin_high ( LED1 ) ;

          gpio_ set _pin_high ( LED2 ) ;

          gpio_ set _pin_high ( LED3 ) ;

          gpio_ set _pin_high ( LED4) ;

          _delay_ms ( 500 ) ;

          gpio_ set _pin_ low ( LED1 ) ;

          gpio_ set _pin_ low ( LED2 ) ;

          gpio_ set _pin_ low ( LED3 ) ;

          gpio_ set _pin_ low ( LED4) ;

          _delay_ms ( 500 ) ;
          بعدا یه جمله قشنگ مینویسم

          دیدگاه


            #6
            پاسخ : IOPORT

            بیبین من از این برنامه ای که گذاشتی اطلاعی ندارم
            اما در xmega ودر محیط اتمل استودیو اینطور میتونی عمل کنی
            اولا که تعریف ورودی به صورت زیر است:
            کد:
            PORTA_DIR=0x00;
            بعد از تعریف باید نوع اتصال اون به پول پ و پول دان رو تعریف کنی که این کار رو به دو صورت زیر میتونی انجام بدی:
            1
            کد:
            ;PORTA_PIN0CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN1CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN2CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN3CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN4CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN5CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN6CTRL=PORT_OPC_PULLDOWN_gc
            ;PORTA_PIN7CTRL=PORT_OPC_PULLDOWN_gc
            2
            از دستور کپی کننده استفاده کنی
            کد:
            PORTCFG_MPCMASK=0xff;
            ;PORTA_PIN0CTRL=PORT_OPC_PULLDOWN_gc
            با این دستور هر مقداری که بعد از portcfg به هر کدام از پایه های هر پورت بدی در بقیه پایه ها هم کپی میشه(این دستور نیاز به مطالعه بیشتر داره)

            بعد از این عملیات میتونی از ورودی استفاده کنی
            حالا دو نمونه :
            کد:
            a = PORTA_IN;
            و یا اگه پینرو بخوای چک کنی
            کد:
            if (PORTE_IN & 128){
            یعنی اگه پین شماره هفت از پورت e یک شد فلان کار روانجام بده

            دیدگاه


              #7
              پاسخ : IOPORT

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

              دیدگاه


                #8
                پاسخ : IOPORT

                ببخشید اگر منطور یک پین خاص باشه و به بقیه کاری نداشته باشیم
                PORT A_DIR=0x00فقط باید مپلا در مورد پین یک بنویسیم PORT A_DIR=0x126 ایا درست میگم
                ویه موضوع دیگه PULLUP و PULLDOWN ظاهرا منطق ورودی رو عوض میکنن
                یعنی در هر صوذت با ورودی تعریف کردن یک پین مقدار فیزیکی روی پین 3 ولت میشود و وقتی پین را به زمین متصل کنیم در حالت PULLUP برای میکرو یک در نظر گرفته میشه و در حالت PULLDOWN صفر
                یا اشتباه میکنم
                بعدا یه جمله قشنگ مینویسم

                دیدگاه


                  #9
                  پاسخ : IOPORT

                  سلام اقا رضا
                  پین B.4 از طریق یک شاسی به زمین مدار متصل هستش من میخام با گرفتن این شاسی برنامه شرط اجرا بشه و این کد رو نوشتم

                  ; (if (PORTB_IN & 16)_delay_ms(2000
                  اما جواب برعکسه یعنی این شرط اجرا میشه و وقتی شاسی رو نگه دارم از شرط خارج میشه
                  و با تغیر پوا اپ و پول دان هم اتفاقی نمیفته
                  ; PORTB_PIN4CTRL=PORT_OPC_pulldown_gc
                  ; PORTB_PIN4CTRL=PORT_OPC_PULLUP_gc
                  یعنی در دوحالت ولت پین حدود 3 ولت هستش مشگل کجاست
                  اقا پیدا کردم باید JTAGE رو غیر فعال میکردم در غیر اینصورت دستورات PORTB_PIN4CTRL=PORT_OPC_PULLUP_gc اجرا نمیشن
                  بعدا یه جمله قشنگ مینویسم

                  دیدگاه


                    #10
                    پاسخ : IOPORT

                    :redface:

                    دیدگاه


                      #11
                      پاسخ : IOPORT

                      اقا نخند راهنمایی کن برادر
                      این خط یعنی چی جطور میشه وضعیت یک پین رو خوند
                      روی برد اموزشی ECA یه برنامه نوشته که من سر در نمیارم GPIO


                      بعدا یه جمله قشنگ مینویسم

                      دیدگاه


                        #12
                        پاسخ : IOPORT

                        /*
                        * LED_SHIFT.c
                        *
                        * Created: 6/23/2015 4:11:47 PM
                        * Author: SH-K
                        */


                        #include <avr/io.h>
                        #define F_CPU 2000000UL
                        #include <util/delay.h>
                        #include <avr/interrupt.h>
                        #define B4 (PORTB.IN & 16)

                        int main(void)
                        {
                        unsigned char LED=0x01;

                        PORTC_DIRSET=PIN0_bm|PIN1_bm|PIN2_bm|PIN3_bm;
                        PORTCFG_MPCMASK=PIN3_bm|PIN2_bm|PIN1_bm|PIN0_bm;
                        PORTC_PIN0CTRL=PORT_INVEN_bm;

                        PORTB_DIRCLR=PIN4_bm|PIN5_bm;

                        PORTCFG_MPCMASK=PIN5_bm|PIN4_bm;
                        PORTB_PIN4CTRL=PORT_OPC_PULLUP_gc|PORT_ISC_LEVEL_g c|PORT_INVEN_bm|PORT_SRLEN_bm;



                        while(1)
                        {

                        Q:
                        PORTC_OUT=LED;
                        _delay_ms(500);
                        LED<<=1;
                        if (LED==8)goto Q1;
                        if (B4)_delay_ms(2000);
                        goto Q;

                        {
                        }
                        Q1:
                        PORTC_OUT=LED;
                        _delay_ms(500);
                        LED>>=1;
                        if (LED==1)goto Q;
                        goto Q1;

                        }
                        }
                        اقا من برنامه رو اینجوری نوشتم وجواب گرفتم نمیدونم درست یا نه ولی
                        پورت B.4 از طریق یه شاسی به زمین متصل میشه پس مجبورم این پورت رو پولاپ کنم تا بتونم وضعیت اونو با فشردن شاسی چک کنم
                        بعد اومدم گیت نات رو در ورودی فعال کردم
                        ;PORTB_PIN4CTRL=PORT_OPC_PULLUP_gc|PORT_ISC_LEVEL_ gc|PORT_INVEN_bm|PORT_SRLEN_bm
                        تا بتونم از دستور
                        ; ( if (PORTB_IN& 16)_delay_ms(2000
                        استفاده کنم
                        ایا راه ساده تری هست که بتونم صفر شدن پین B4 رو در این حالت تشخیص بدم .
                        لطفا مسخرم نکنین جواب بدین من در کد نویسی تازه کارم

                        بعدا یه جمله قشنگ مینویسم

                        دیدگاه


                          #13
                          پاسخ : IOPORT

                          اولا کسی مسخره نکرد...گفتی پیدا کردم ما هم خوشحال شدیم
                          در مورد کد
                          خوب شما میخوای یه ورودی رو بخونی و ببینی کی این ورودی hi میشه
                          برای این کار عرض کردم ورودی رو باید مرور کنی
                          به این روش
                          مثلا:
                          کد:
                          if (portA_in & pin4_bm) {portb_out=0xff;}
                          خوب شما اومدی نات کردی ..مشکلی نداره .باز هم با همین نمونه کد میتونی چک کنی. در ضمن قبل از تعاریف یه مقدار دستی هم به پین بده یعنی به نوعی پول پ رو با مقدار یک کردن پین ایجاد کن
                          مثلا:
                          کد:
                          PORTA_OUT|=pin4.bm;
                          اما:
                          کد:
                          PORT_ISC_LEVEL_gc
                          اینو نمیدونم چرا گذاشتی
                          مگه میخوای وقفه راه اندازی کنی؟
                          اول برنامه هم کتابخونه وقفه اینکلود کردی...چرا؟
                          اما در مورد راه ساده تری که بخوای صفر شدن یک پایه رو چک کنی
                          خوب در این صورت نیاز نیست نات پین رو فعال کنی
                          و فقط در دستور تغییر کوچکی ایجاد میکنی
                          مثلا:
                          کد:
                            ; ( if (!(PORTB_IN& 16))_delay_ms(2000
                          علامت نات قبل از پرانتز کار نات پین رو انجام میده ...
                          پیش :agree:برو و در سخت افزار تست کن..

                          دیدگاه


                            #14
                            پاسخ : IOPORT

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

                            دیدگاه

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