מיקרובקר הם המוח הבלתי נראה מאחורי אינספור מכשירים אלקטרוניים אנו משתמשים מדי יום, מתנור מיקרוגל ובקרות מרחוק במערכות הרכב וגאדג'טים רפואיים. בין משפחות מיקרובקר רבות זמינות, PIC (מפקח על ממשק היקפי) מיקרובקרים, שפותחו על ידי Microchip טכנולוגיה, מציג את הפשטות שלהם, עלות נמוכה וטווח רחב של מודלים מתאימים למתחילים ותכנות דומות.

מה זה מיקרו-בקר?

מיקרובקר PIC הוא מחשב יחיד שבב המשלב יחידת עיבוד מרכזית (CPU), זיכרון (RAM, ROM / פלאש), ו- קידוד קיבולת קלט / קידוד היקפי על מעגל משולב יחיד. PICs הם ארכיטקטורת הרווארד התקנים משמעות תוכנית וזיכרון נתונים הם נפרדים, המאפשר גישה בו זמנית ומשפר את מהירות הביצוע.

להתחיל עם PIC תכנות ב C

מעבדי תכנות PIC C דורשים סביבת פיתוח, מדר, מתכנת / debugger, וכמה חומרה בסיסית.שפת C המועדפת כי היא מופשטת את המורכבות ברמת הייצור, ועדיין מאפשרת מניפולציה ישירה ודור קוד יעיל.עקוב אחר השלבים האלה כדי להגדיר את סביבת התכנות שלך.

התקנת MPLAB X IDE

MPLAB X IDE הוא הסביבה הרשמית של Microchip.It מבוסס על הפלטפורמה NetBeans ומספק ניהול פרויקטים, עריכת קוד, קידוד, פיזור וכלים סימולציה.FLT:0Down MPLAB X IDEFLT:1 מאתר האינטרנט של Microchip.

התקן את XC8 Compiler

ה- XC8 מתרגם קוד C לקוד מכונה עבור המיקרובקרים PIC.הוא מחליף את ה- HI-Tech C המאגד.FLT:0Dload XC8igFLT:1 ולהתקין אותו.microchip מציעה גרסה חופשית עם אופטימיזציה מתונה (מספיק ללמידה ורוב הפרויקטים).

3. קבל מתכנן

כדי להעביר קוד מהמחשב שלך למיקרובקר PIC, אתה צריך מתכנת חומרה.הבחירות הנפוצות ביותר הן PICkit 4, PICkit 5, או MPLAB Snap. מכשירים אלה להתחבר באמצעות USB ויש ראש קטן המחבר את לוחות התכנות של PIC (לעתים קרובות ICSP - In-Circuit Serial Programming). לוחות התחלה רבים (כמו PF161 משולב X) כוללים מתכנתים משולבים X.

4.הצבת מעגל של לוח לחם

עבור הפרויקט הראשון קלאסי - ממצמץ LED - אתה צריך מיקרובקר PIC, לוח לחם, LED, זרם-ההגנה הנוכחית (בדרך כלל 220 ⁇ עד 470 ⁇ ), אספקת חשמל 5V (או מקור כוח מוסדר באמצעות הרגולטור מתח), ו -20MHz קריסטל או או פנימי oscillator (כמעט מודרני PICs יש oscillators פנימי).

כתיבת תוכנית ה-PIC הראשונה שלך ב-C

הקלאסיקות והציטוטים; Blink " התוכנית היא המקבילה המוטבעת של " Hello World. " זה מדגים את I / O שליטה, תזמון, ו הלולאות אינסופיות. להלן הוא דוגמא מלאה עבור PIC16F88 באמצעות אוסטרטור פנימי ב 8 MHz.

המונחים:

// PIC16F88 Blink LED Example using Internal Oscillator
#define _XTAL_FREQ 8000000 // Define oscillator frequency for delay macros

#include <xc.h> // XC8 header file

// Configuration bits: internal oscillator, no watchdog, power-up timer enabled
#pragma config FOSC = INTOSCIO // Internal oscillator with I/O on RA6
#pragma config WDTE = OFF // Watchdog Timer disabled
#pragma config PWRTE = ON // Power-up Timer enabled
#pragma config MCLRE = OFF // RA5/MCLR as digital I/O
#pragma config BOREN = OFF // Brown-out reset disabled
#pragma config LVP = OFF // Low-voltage programming disabled
#pragma config CPD = OFF // Data EEPROM code protection off
#pragma config CP = OFF // Flash program memory code protection off

void main(void) {
 TRISB = 0x00; // Set all Port B pins as outputs
 PORTB = 0x00; // Clear Port B outputs
 while(1) {
 RB0 = 1; // Turn LED on (connect LED to RB0)
 __delay_ms(500); // Delay 500 ms
 RB0 = 0; // Turn LED off
 __delay_ms(500); // Delay 500 ms
 }
}

המאקרו (FLT:1 ), מסופק על ידי XC8 ודורש הגדרת ה-FLT:2 לתדירות של אווסטור בפועל.קווים של ה- XFLT 3 להגדיר פיסות תצורה חומרה - חיוני לתפעול תקין. בדוגמה זו, ה-oscillator הפנימי משמש, כך שאין צורך גביש חיצוני.

הבנת מושגים מרכזיים ב-PIC Programming

כדי לעבור מעבר למצמץ LED, עליך להבין כמה מושגים בסיסיים המגדירים תכנות C מוטבע עבור PICs. מושגים אלה הם אבני הבניין עבור פרויקטים מורכבים יותר.

רשימות ו- bit Manipulation

(ב) כל כרך ומאפיין של PIC נשלט על ידי הגדרת או הבהרת ביטים ברישום תפקידים מיוחדים (SFRs) לדוגמה, ה-FLT:4 קובע את הכיוון של פורט B pins, קביעת קצת עד 1 הופך את זה ל- 1 (הדגשה) כגון: מאקרו (Teramtortort) ו- CLT5 (F) LT5 (N) LT5) LT) LT5 (N) LT5 (N) LT) LT) LT5 (N) LT5 LT5 LT) LT) LT5 (N) LT5 (F) LT 9(F) LT) LT) LT) LT) LT) LT) LT 9(F) LT 7) LT 9(F) LT5 LT5 LT5 LT) LT) LT) LT) LT5 LT5 LT5 LT5 LT5 LT5 LT) LT5 LT) ⁇ ⁇ LT) LT) LT5 LT5 LT (N) ⁇ ⁇

TRISBbits.TRISB0 = 0; // Alternative using bitfield structure
PORTBbits.RB0 = 1; // Set pin RB0 high

תמיד מתייחס לגליון הנתונים של המיקרובקר כדי למצוא את השמות הנכונים ואת עמדות bit.

נמלים Input/Output Ports

(ב) למיקרובקרים יש מספר נמלי I/O (TERA, PORTB, וכו ') כל נמל קשור לרישום: FLT:13 עבור כיוון, FLT:14 עבור רמות קריאה, ו- (FLT:15 עבור רמות התפוקה (FLT:16) במקום זאת, למנוע בעיות קריאה-כתיבה).

אינטרפוחיות

(ב) אינטרפוס מאפשר מיקרובקר להגיב לאירועים (כמו ללחוץ על כפתור, חלוף זמן על גדות או קבלת נתונים סדרתית) ללא בדיקה מתמדת.כאשר מתרחשת הפרעה, ה- CPU מפסיק את התוכנית העיקרית, מבצע שירות אינטררופוטר Routine (ISR), ולאחר מכן קורות חיים ב XC8, ISR מוגדר באמצעות הפונקציה CLT:19L, לדוגמה, CPTL (IFD) כדי להפריע ל-D (IFD) ו-TXCPT) כדי לאפשר לך להפריע ל-IFD (D (D) להפריע ל-DIFD (IFLT:19L) להפריע ל-D (D (DIFDIFD) להפריע ל-TEXD.

המונחים: External Interrupt on RB0

void __interrupt() ISR(void) {
 if(INTF) { // Check if external interrupt flag is set
 LATB ^= 0x01; // Toggle RB0 (LED)
 INTF = 0; // Clear interrupt flag
 }
}

void main(void) {
 TRISB = 0x00; // All outputs
 PORTB = 0x00;
 OPTION_REG &= 0xBF; // Clear INTEDG to interrupt on falling edge
 INTCON |= 0x90; // Enable GIE and INTE
 while(1); // Infinite loop, wait for interrupt
}

אינטרופטרים הם קריטיים עבור מערכות בזמן אמת יעילות, אך דורשים טיפול זהיר של משתנים משותפים (שימוש בתנודתי ואולי לא ניתן להפרעות במהלך חלקים קריטיים).

Timers

Timers הם דלפק חומרה שיכול לייצר עיכובים, למדוד תדר אות קלט, או לייצר PWM גלפורות. רוב PICs יש מודולים רבים של זמן (Timer0, Timer1, Timer2, וכו ') עם יכולות שונות. Timer0 הוא סמן 8 סיביות עם רצף prescalerptionr1 הוא 16 סיביות ויכול לפעול באופן מסונכרן; זמן הוא 8-Wbit עבור חסימה ספציפית (מאט) ללא זמן קצר (מאט) ללא הפרעה) באופן קבוע (מאט) כדי ל-מאט) הוא לעתים קרובות כדי ל-מאט) כדי ל- CPU מהיר (מאט) ללא הפרעה (מאט) כדי ל-מאט) כדי ל-pbit (מאט) כדי ל-מאט) כדי ל-pbit (מאט) כדי ל-pactr (מאט) עם זמן מוגדר מראש (מאט) באופן קבוע) עם CPU מהיר (מאט) עם CPU מהיר יותר) עם CPU מהיר (מחדש) עם CPU מהיר (מאט) ללא הפרעה (מאט) עם זמן מוגדר מראש (מאט) ללא הפרעה (מאט) ללא הפרעה (מאט) עם CPU מהיר (

// Example: Configure Timer0 to interrupt every 10 ms at 8 MHz internal clock
// Prescaler = 256; TMR0 load value = 0xF0 (240 decimal)
// Timer0 tick = 4 / 8MHz = 0.5 µs * 256 = 128 µs per increment
// 240 * 128 µs = 30.72 ms (adjust for desired period)
TMR0 = 0xF0;
OPTION_REG = 0x07; // Prescaler 1:256 assigned to Timer0, internal clock
INTCONbits.TMR0IE = 1; // Enable Timer0 interrupt
INTCONbits.GIE = 1;

הבנת ציר הזמן היא חיונית לייצור בסיסי זמן מדויקים, אותות PWM לשליטה מוטורית, או לכידת רוחב הדופק של קלט.

Analog-to-Digital Converter (ADC)

PICs רבים כוללים מודול ADC הממיר מתח אנלוגי (0 עד VDD) לערך דיגיטלי. ADC משתמש במעגל מדגם-and-hold ו-approximation (SAR) אדריכלות. כדי לקרוא חיישן אנלוגי, להגדיר את הערוץ, להגדיר את זמן הרכישה, להתחיל להמרה, לחכות להשלמת, ולקרוא את התוצאות (ADH, ADHRES,L דוגמה:

ADCON0 = 0x01; // Select channel AN0, turn ADC on
__delay_us(10); // Wait for acquisition time
GO_nDONE = 1; // Start conversion
while(GO_nDONE); // Wait for conversion to finish
int analogValue = ((ADRESH << 8) + ADRESL); // 10-bit result

ניתן להשתמש בקריאה ADC לטמפרטורות רגישות, עוצמת אור, רב עוצמה, רב-עוצמה, וקלטים אנלוגיים רבים אחרים.

פרוטוקול תקשורת היקפי

PICs תומך בפרוטוקולים סידוריים משותפים: UART (סדרת סינכרונית), SPI (סינכרון), ו- I2C (ממשק שני-wire) אלה מאפשרים תקשורת עם חיישנים, תצוגות, מיקרו-בקרים אחרים ומודולים.

  • (FLT:0)UARTIRFLT:1; בשימוש עבור RS-232, קונסולות סדרתיות, מודולי GPS, מודולי Bluetooth.ציון שרביט, לאפשר שידור / קבלה, ולהשתמש ב- TXREG/RCREG.
  • (FLT:0SPIIRLT:1): מלא-דופלקס, מאסטר / שילה. אידיאלי עבור העברת נתונים במהירות גבוהה עם כרטיסי SD, תצוגות ומודולים RF. השתמש ב SDI, SDO, SCK ו- SS pins.
  • (ב) ,0)2CIRFLT:1: אוטובוס דו-חוט עם טיפול מתאים לחיבור מכשירים איטיים מרובים כמו חיישנים ו- EEPROMs. השתמש ב- SDA ו- SCL.

כל פרוטוקול דורש ראשונית זהירה של קצב השעון, פורמט הנתונים והפרעה טיפול אם נעשה שימוש במצב לא חסום.

תכנון ושיקולי תכנות

מיקרובקרים PIC יש זיכרון תכנית נפרד (פלאש), זיכרון נתונים (RAM), ולעתים EEPROM. Program memory מאחסנת את הקושחה; זיכרון נתונים מחזיק במשתנה ורשומות; EEPROM נמשך כמויות קטנות של נתונים על פני מחזורי חשמל.כאשר תכנות ב- C, אתה יכול להשתמש במאורים מדבקים קבועים כדי להציב נתונים בזיכרון התוכנית (באמצעות FEP25 LT או LTF:26 עם הוראות מתאימות של RAM).

שימוש בנתונים EEPROM

רבים כוללים EEPROM פנימי עם שגרות המסופקות על ידי המדר.דוגמה:

#include <xc.h>
void write_eeprom(unsigned char addr, unsigned char data) {
 while(WR); // Wait for previous write to finish
 EEADR = addr;
 EEDATA = data;
 EECON1bits.EEPGD = 0; // Point to EEPROM
 EECON1bits.WREN = 1; // Enable write
 INTCONbits.GIE = 0; // Disable interrupts
 EECON2 = 0x55; // Required sequence
 EECON2 = 0xAA;
 EECON1bits.WR = 1; // Start write
 INTCONbits.GIE = 1; // Re-enable interrupts
 EECON1bits.WREN = 0; // Disable write after completion
}

טיפים ואופטימיזציה

קוד מוטבע יכול להיות מאתגר כי אתה לא יכול להשתמש bugger מסורתי על UART? & mdash; זה המקום שבו a in-circuit debugger כמו PICkit 4 זורח. MPLAB X IDE תומך נקודות, שעונים משתנים, ו- Single-Stepping. עם זאת, עבור פיזור פשוט, אתה יכול לנע LED או לשלוח דמויות על פני תצורה של MPLA פתוח, לא יכול לכלול הגדרות XK.

אופטימיזציה: השתמש במשתנה המקומי כאשר אפשרי (הם מתגוררים ב GPRs) אופטימיזציה של ה- XC8 (גרסה חופשית מציעה -O0; גרסה בתשלום -O1, -O2, -Os) פונקציות קטנות באינטרנט. השתמש ברישום במקום RAM גלובלי.עבור לולאות קריטיות תזמון, לשקול שימוש בזמן מפריע ולא עיכובים עסוקים.

משאבים להמשך הלמידה

מקור: (ב) , (ה) הוא מקור:0) ,516F88 Dataגליון נתונים של המכשיר (PDF) וגליון הנתונים של המכשיר הספציפי שלך.microchip מציע גם הערות יישום, דוגמאות קוד, ו- ActiveFLT:2MicrochipPSKFLT 3 ספרים כגון "Prograing PICcontrollers with XC & 8; על ידי RTRexers, לספק תוכניות מתקדמות יותר עבור RTF.

מסקנה

תכנות מיקרובקרים C פותח עולם של יצירת מערכת משובצת, ממצמץ LED פשוט לרשתות חיישן מתוחכמות ובקרים מוטוריים. על ידי הקמת MPLAB X IDE ו XC8, הבנת היסודות של רישומים, I/O, מפריע, טיעונים, ופריפריה, תוך שימוש בכמות העצומה של תיעוד ומשאבים קהילתיים, אתה יכול להתקדם במהירות מהתחלות כדי להתחיל מידע מותאם אישית, ולאחר מכן, עיצוב לוחמת, ולאחר מכן, החל את ה-ידי מעבדים את הנתונים המופעלים שלך, ולאחר מכן, ולאחר מכן, עיצוב לוח זמנים מופעלים באופן מיידי, עיצוב לוחמתיקים, תוך כדי הפעלתו של לוח זמנים יציב, ולאחר מכן, ולאחר מכן, תוך כדי הפעלתו של לוח זמנים, תוך כדי הפעלתו של פיתוח, החל את ה-ידי מעבדים, ולאחר מכן, ולאחר מכן, תוך כדי הפעלתו של לוח זמנים מופעלים, תוך כדי שימוש בכמות עצומה של טכניקות הפעלה מחדש, ולאחר מכן, תוך כדי הפעלתו של , תוך כדי שימוש במעבדה, תוך כדי שימוש במעבדה, תוך כדי שימוש במעבדה, כדי שימוש במעבדה, תוך כדי שימוש במעבדה, תוך כדי שימוש ב-ידי שימוש במעבדה, החל את הנתונים מופעלת, ולאחר מכן, ולאחר מכן