راه اندازی پورت های میکرو ARM

هدف پروژه

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

سخت افزار مورد استفاده

این پروژه مبتنی بر میکرو کنترلر ARM طراحی شده است. برای سادگی کار از برد آموزشی AT91SAM7X256 برای پیاده سازی استفاده شده است. امکانات استفاده شده در زیر ذکر شده است.

  • پورت 32 بیتی A
  • پورت 32 بیتی B
  • 5 عدد LED متصل شده به پورت B
  • 4 عدد دیپ سوئیچ (DIP Switch) متصل شده به پین های پورت B

کتابخانه های استفاده شده

  • کتابخانه PIO برای کنترل پورت های میکرو (برای یاد گیری درباره این کتابخانه اینجا کلیک کنید)
  • کتابخانه PMC به منظور فعال کردن کلاک پورت های میکرو (برای یاد گیری درباره این کتابخانه اینجا کلیک کنید)

تشریح کد برنامه

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

[pastacode lang=”cpp” manual=”%23include%20%3Cboard.h%3E%0A%23include%20%3Cpio%2Fpio.h%3E” message=”” highlight=”” provider=”manual”/]

در کتابخانه board.h همانطور که در فیلم های آموزشی گفته شده تمامی پورت های میکرو برای اتصال به بخشهای جانبی تعریف شده اند به عنوان مثال برای معرفی پین هایی که به دیود های نورانی و کلید ها متصل به پین های مربوطه در برد آموزشی به شکل زیر در کتابخانه board.h تعریف میشوند.

[pastacode lang=”cpp” manual=”%2F%2F%2F%20LED%20%230%20pin%20definition.%0A%23define%20PIN_LED_0%20%20%7B1%20%3C%3C%2019%2C%20AT91C_BASE_PIOB%2C%20AT91C_ID_PIOB%2C%20PIO_OUTPUT_0%2C%20PIO_DEFAULT%7D%0A%2F%2F%2F%20LED%20%231%20pin%20definition.%0A%23define%20PIN_LED_1%20%20%7B1%20%3C%3C%2020%2C%20AT91C_BASE_PIOB%2C%20AT91C_ID_PIOB%2C%20PIO_OUTPUT_0%2C%20PIO_DEFAULT%7D%0A%2F%2F%2F%20LED%20%232%20pin%20definition.%0A%23define%20PIN_LED_2%20%20%7B1%20%3C%3C%2021%2C%20AT91C_BASE_PIOB%2C%20AT91C_ID_PIOB%2C%20PIO_OUTPUT_0%2C%20PIO_DEFAULT%7D%0A%2F%2F%2F%20LED%20%233%20pin%20definition.%0A%23define%20PIN_LED_3%20%20%7B1%20%3C%3C%2022%2C%20AT91C_BASE_PIOB%2C%20AT91C_ID_PIOB%2C%20PIO_OUTPUT_0%2C%20PIO_DEFAULT%7D” message=”” highlight=”” provider=”manual”/]

 

و برای کلید های فشاری به شکل زیر تعریف شده اند:

[pastacode lang=”cpp” manual=”%2F%2F%2F%20Push%20button%20%230%20definition.%0A%23define%20PIN_PUSHBUTTON_1%20%20%20%20%7B1%20%3C%3C%2023%2C%20AT91C_BASE_PIOA%2C%20AT91C_ID_PIOA%2C%20PIO_INPUT%2C%20PIO_DEGLITCH%20%7C%20PIO_PULLUP%7D%0A%2F%2F%2F%20Push%20button%20%231%20definition.%0A%23define%20PIN_PUSHBUTTON_2%20%20%20%20%7B1%20%3C%3C%2024%2C%20AT91C_BASE_PIOA%2C%20AT91C_ID_PIOA%2C%20PIO_INPUT%2C%20PIO_DEGLITCH%20%7C%20PIO_PULLUP%7D%0A%2F%2F%2F%20Push%20button%20%232%20definition%0A%23define%20PIN_PUSHBUTTON_3%20%20%20%20%7B1%20%3C%3C%2021%2C%20AT91C_BASE_PIOA%2C%20AT91C_ID_PIOA%2C%20PIO_INPUT%2C%20PIO_DEGLITCH%20%7C%20PIO_PULLUP%7D%0A%2F%2F%2F%20Push%20button%20%233%20definition.%0A%23define%20PIN_PUSHBUTTON_4%20%20%20%20%7B1%20%3C%3C%2022%2C%20AT91C_BASE_PIOA%2C%20AT91C_ID_PIOA%2C%20PIO_INPUT%2C%20PIO_DEGLITCH%20%7C%20PIO_PULLUP%7D” message=”” highlight=”” provider=”manual”/]

و به روش مشابه برای بخش های دیگر مانند USART,SPI,… تعریف شده اند.

در مرحله اول پروژه می بایست پین های متصل به دیود نورانی با استفاده از کتابخانه PIO.h پیکر بندی نماییم ،برای این کار بعد از تعریف دیود های نورانی از دستور زیر استفاده میکنیم.

[pastacode lang=”cpp” manual=”const%20Pin%20pinLED%5B%5D%3D%7BPINS_LEDS%7D%3B%0APIO_Configure(pinLED%2CPIO_LISTSIZE(pinLED))%3B” message=”” highlight=”” provider=”manual”/]

و سپس کلید های فشاری:

[pastacode lang=”cpp” manual=”const%20Pin%20pinPB1%20%3D%20PIN_PUSHBUTTON_1%3B%0Aconst%20Pin%20pinPB2%20%3D%20PIN_PUSHBUTTON_2%3B%0A%20%0APIO_Configure(%26pinPB1%2C1)%3B%0APIO_Configure(%26pinPB2%2C1)%3B” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”cpp” manual=”void%20delay_ms(unsigned%20long%20b)%0A%7B%0A%20%20%20%20unsigned%20long%20y%3D0%3B%20%20%0A%20%20%20%20unsigned%20long%20e%3D0%3B%0A%20%20%20%20do%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20for%20(e%3D0%3B%20e%3C3686%3B%20e%2B%2B)%3B%0A%20%20%20%20%20%20%20%20y%2B%2B%3B%0A%20%20%20%20%7D%20while%20(y%3Cb)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

از این تابع برای تاخیر در حد میلی ثانیه استفاده میکنیم به عنوان مثال برای ایجاد یک تاخیر پانصد میلی ثانیه از دستو زیر استفاده میکنیم.

[pastacode lang=”cpp” manual=”delay_ms(500)%3B” message=”” highlight=”” provider=”manual”/]

در ابتدا برنامه پس از پیکر بندی پورتها وارد حلقه while(1)میشویم در این حلقه دیودهای نورانی به صورت مرطب چشمک میزنند و برنامه در حال چک کردن وضعیت کلید ها است که پس از فشردن هر کلید وارد روتین آن کلید شده و برنامه لازمه را اجرا میکند که در صورتی که کلید اول فشرده شود دیود های نورانی شروع به چشمک زدن میکنند و در صورتی که کلید دوم فشرده شود دیود های نورانی روشن شده و دیگر چشمک زدن نمیاشند.

دانلود سورس کد

سورس کد کامل را از اینجا دانلود کنید.

مشاهده نتیجه

با کلیک بر روی عکس زیر فیلم راه اندازی این پروژه را مشاهده کیند.

فیلم ساخت چشمک زن با ARM

مقالات

نظر بدهید

مطلب قبلی
راه اندازی پورت دیباگ(ِDBGU) – سورس…
مطلب بعدی
تکنولوژی ARM