LED چشمک زن با میکروکنترلر PIC
این پست در واقع ادمه پست قبلی آموزش PIC کار با MPLAB است. در این پست در اول با یک ویدیویی آموزشی آموزش قبلی را مرور کرده و در ادمه توضیحات لازم درباره ی نحوه برنامه نویسی LED چشمک زن با میکروکنترلر PIC توضیح داده خواهد شد.
خانواده ی PIC16 میکروکنترلر های 8 بیتی هستند که در کنار قیمت مناسب از امکانات مناسبی نیز برخوردار هستند. مثل هر میکروکنترلر دیگری تعدادی I/O دارند اولین و ساده ترین قدم برای شروع کار با یک میکروکنترلر یادگیری نحوه ی کنترل پایه های I/O در یک میکروکنترلر است. در ادمه رجیستر های لازم برای کار با I/O ها در میکروکنترلر PIC16 توضیح داده خواهد شد.
رجیستر TRIS:
این رجیستر جهت خروجی یا وروردی بودن هر پین از هر پورت را مشخص میکند. طبق عکس پایین اگر TRIS یک باشد پین به صورت ورودی تنظیم میشود. و اگر مقدار صفر به این رجیستر اختصاص داده شود پین به صورت خروجی تنظیم می شود.
رجیستر PORT:
اگر به هریک از بیت های این رجیستر مقدار 1 داده شود پین متناظر از پورت در صورت خروجی بودن به HIGH تغییر وضعیت می دهد. و اگر 0 مقدار دهی شود وضعیت پین مورد نظر به LOW تغییر می کند. در پایین نمونه مثالی در مورد نحوه ی مقدار دهی به این رجیستر ها قرار می دهم.
TRISC0 = 1; //Makes 0th bit of PORTC Input TRISC5 = 0; //Makes 5th bit of PORTC Output RB3 = 1; //Makes 3ed bit of PORTB at Logic High RB7 = 0; //Makes 7th bit of PORTB at Logic Low
برنامه LED چشمک زن با میکروکنترلر PIC
/* * File: led.c * Author: Ali Ezzati * * Created on February 8, 2015, 5:46 PM */ #define _XTAL_FREQ 8000000 #include <xc.h> // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = EXTRCCLK // Oscillator Selection bits (RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor and Capacitor on RA7/OSC1/CLKIN) #pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled) #pragma config LVP = ON // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) int main() { TRISB0 = 0; //RB0 as Output PIN while(1) { RB0 = 1; // LED ON __delay_ms(1000); // 1 Second Delay RB0 = 0; // LED OFF __delay_ms(1000); // 1 Second Delay } return 0; }
توضیحاتی در مورد برنامه:
عبارت #define _XTAL_FREQ 8000000 فرکانس کلاک میکروکنترلر را برای برنامه مشخص می کند تا تابع __delay_ms() زمان مورد نظر را به درستی برای ما ایجاد کند.
عبارت #pragma config و کدهای بعد از آن بیت های وضعیت میکروکنترلر PIC را تنظیم می کند که در ادمه درباره ی نحوه ی تنظیم این بیت ها بیشتر توضیح میدم.
شماتیک لازم برای راه اندازی LED چشمک زن با میکروکنترلر PIC
تنظیم بیت های وضعیت میکروکنترلر PIC
برای تنظیم این بیت ها کافیه از منوی window این مسیر رو دنبال کنید.
Window >> PIC Memory Views >> Configuration Bits
بعد پنجره ی زیر باز می شود که می توانید تنظیمات مورد نظرتون رو اعمال کنید و کلیدی که در تصویر مشخص هست رو برای تولید کد استفاده کنید.
در مرحله بعد کد تولید شده را کپی کرده و در نوشته خود استفاده کنید.
دانلود پروژه همراه شبیه سازی
سلام
به نظر شما
pic بهتره یا avr
منظورم یک بار برای همیشه است
سلام هر کدام از این میکروکنترلر ها ویژگی خاص خودشون رو دارند و نمیشه گفت این برتری مطلق بر اون یکی داره توصیه من اینه که با هر میکروکنترلری که راحت هست یادگیریش براتون شروع کنید و در زمینه ی برنامه نویسی برای میکروکنترلر حرفه ای بشین بعدا که به این حد رسیدید یادگیری سایر میکروکنترلر ها شاید نهایتا 1 هفته از وقت شمارو بگیره
سلام
شما برای یک مبتدی پیشنهاد شروع چه میکروکنترلی رو توصیه می کنید
بهترین گزینه میتونه ARM باشه چرا که الان تمام سیستم های پیشرفته مثل همین گوشی های موبایل از پردازنده های ARM استفاده میکنند
سلام.
از مطالب مفیدی که به اشتراک گذاشتید تشکر میکنم.
دستور delay که در این برنامه استفاده شده رو من برای شماره های دیگه مثلا 18F نتونستم استفاده کنم و در برنامه پیغام خطا میده. علتش چیه؟
ممنون.
نمی دونم من زیاد با pic کار نکردم همین دو سه پستی که می بنید رو برای آشنایی نسبی باهاش نوشتم و تست کردم همین