۱۴۰۱ بهمن ۲۱, جمعه

میکروکنترلر PIC - قسمت اول : Blinky

microchip 16f877

 

همانطور که در آموزش یک زبان برنامه نویسی جدید اولین برنامه !Hello World نام دارد ، اولین برنامه در برنامه نویسی یک میکروی جدید Blinky نام دارد. در برنامه Blinky یکی از پایه های میکرو به تناوب ۰ و ۱ (دیجیتال) میشود . یعنی بین ۰ ولت و مقدار تغذیه میکرو تغییر میکند. در صورتیکه یک LED به پایه مذکور اتصال یابد LED شروع به چشمک زدن میکند .

برای اجرای اولین برنامه مدار زیر را میبندیم. توجه کنید پایه MCLR باید حتما به سطح تغذیه High در مدار ما وصل شود .


دربرنامه زیر ابتدا فرکانس کاری کریستال میکرو برای برنامه مشخص شده است . بعد از اضافه کردن فایل تنظیمات عمومی میکروکنترلر را به کامپایلر ارائه داده ایم . در صورتیکه با میکروکنترلر AVR آشنایی داشته باشید ، این تنظیمات همانند تنظیم کردن فیوزبیتهای میکروی AVR میباشد و همان کارکرد را دارد. معانی خطوط config در انتهای همین آموزش ارائه شده است .
در بدنه تابع main ابتدا پایه RB0 را به صورت ورودی تنظیم میکنیم . با استفاده از عبارت TRISB=0 کل پورت B بصورت ورودی تنظیم میشود و اگر مقدار TRISB=1 قرار بگیرد پورت B بصورت خروجی تنظیم میشود. در حقیقت رجیستر TRIS برای هر پورت وظیفه تنظیم ورودی و خروجی بودن کل پورت و یا تک تک بیتها را دارد. به مثالهای زیر توجه کنید :
TRISB = 0xff; // Configure PORTB as Input.
TRISC = 0x00; // Configure PORTC as Output.
TRISD = 0x0F; // Configure lower nibble of PORTD as Input and higher nibble as Output
TRISD = (1<<0) | (1<<3) | (1<<6); // Configure PD0,PD3,PD6 as Input and others as Output

در ادامه پایه RB0 در حلقه while مستمرا ۱ و ۰ شده و ما بین این عمل با استفاده از تابع تاخیر ۱۰۰۰ میلی ثانیه تاخیر بین خاموش و روشن شدن پایه فاصله ایجاد میکنیم.


/*
 * File:   XC8.c
 * Author: Ali
 *
 * Created on July 13, 2017, 9:18 AM
 */

#define _XTAL_FREQ 16000000
#include < xc.h>

// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG

int main()
{
  TRISB0 = 0; //RB0 as Output PIN

  while(1)
  {
	RB0=1;
	__delay_ms(1000);
	RB0=0;
	__delay_ms(1000);
  }
  return 0;
}

تنظیمات config میکرو:

در میکروی pic16f877a که آموزش قسمتهای آن را در دست داریم config به شرح زیر است، توجه داشته باشید که در میکروهای دیگر این تنظیمات میتواند تغییراتی داشته باشد که باید به datasheet سازنده مراجعه کرد .

#pragma config FOSC =

با این خط نوع منبع کلاک میکرو را مشخص میکنیم. در صورتیکه از کریستال خارجی فرکانس بالا استفاده کنیم HS و در صورتیکه از کریستال ساعت ۳۲ کیلوهرتز استفاده کنیم از LP ، در صورتیکه از کریستال خارجی با توان متوسط و سرعت کم استفاده کنیم از عبارت XT استفاده میکنیم. تنظیمات مربوط به منبع کلاک به صورت زیر است:

EXTRCCLK: Use an external RC oscillator circuit. The RC oscillator is connected to pin RA5/OSC1/CLKIN and the clock signal is outputted via the RA4/OSC2/CLKOUT pin.
EXTRCIO: Use an external RC oscillator. The RC oscillator is connected to pin RA5/OSC1/CLKIN and the RA4/OSC2/CLKOUT pin is available for I/O.
INTRCCLK: Use the internal RC oscillator. Pin RA4/OSC2/CLKOUT operates as CLKOUT and pin RA5 is available for I/O.
INTRCIO: Use the internal RC oscillator. Pins RA4 and RA5 are available for I/O.
LP: Low power external crystal oscillator on pins OSC1 and OSC2. This mode offers low power consumption and is only designed for 32kHz watch crystals.
XT: External crystal/resonator on pins OSC1 and OSC2 (RA5 and RA4). This is the medium gain setting appropriate for crystals with a medium drive level specification. This is the mode you will probably use.
HS: External crystal/resonator on pins OSC1 and OSC2 (RA5 and RA4). This is the high gain setting appropriate for crystals with a high drive level specification.
EC: External clock. Use this if you already have a logic level clock signal in your circuit. The clock signal is connected to RA5/OSC1/CLKIN and RA4/OSC2/CLKOUT is available for I/O.

WDTE: تعیین میکند آیا تایمر نگهبان فعال شود یا نه .
PWRTE: با فعال کردن این قسمت تایمر زمان روشن شدن میکرو فعال میشود. در این حالت به مدت ۶۴ میلی ثانیه میکرو در حالت ریست باقی میماند تا تغذیه سیستم به ثبات برسد.
BOREN:در صورتیکه این قسمت فعال باشد و سطح ولتاژ تغذیه میکرو در طی زمان بیش از ۲۰۰ میکرو ثانیه به زیر ۲.۲ ولت برسد میکرو ریست خواهد شد.این قسمت را میتوان به صورت زیر تنظیم کرد:


OFF: Brown-out reset is disabled.
ON: Brown-out reset is enabled.
NSLEEP: Enabled during operation and disabled during sleep mode.
SBODEN: Brown-out reset is controlled by software via the SBOREN bit of the PCON register.

LVP:با غیرفعال کردن این قابلیت میتوانیم از پایه RB3/PGM به عنوان یک پایه I/O استفاده کنیم . توجه نمایید که در میکروهای مختلف پایه PGM به پایه های متفاوتی اختصاص داده شده است و این عملکرد در میکروهای مختلف خانواده PIC پایه های مختلفی را به عنوان I/O به کار میگیرد یا از کار می‌اندازد.
مابقی تنظیمات config مربوط به حفاظت کد در EEPROM و FLASH میکرو میباشد که فعلا خارج از بحث ماست .


هیچ نظری موجود نیست:

ارسال یک نظر