- הגדרת חומרה ודרישה
- תרשים מעגלים לממשקי LED עם Nuvoton N76E003
- סיכות טיימר על Nuvoton N76E003
- טיימר רושם ב- Nuvoton N76E003
- סוגי זמנים ב- Nuvoton N76E003
- תכנות מיקרו-בקר Nuvoton N76E003 לטיימרים
- קוד מהבהב ואימות פלט עבור פונקציונליות טיימר
בהדרכות המיקרו-בקר הקודמות של Nuvoton, השתמשנו בתכנית LED מהבהבת בסיסית כמדריך להתחלה וגם ממשק את GPIO כקלט לחיבור מתג מישוש. עם הדרכה זו, אנו מודעים לחלוטין כיצד להגדיר את פרויקט Keil ולהגדיר את הסביבה לתכנות N76E003 מיקרו-בקר Nuvoton. זה הזמן להשתמש בפריפריה הפנימית של יחידת המיקרו-בקר ולהתקדם קצת יותר באמצעות הטיימר המובנה של N76E003.
במדריך הקודם שלנו, השתמשנו רק בעיכוב תוכנה כדי להבהב נורית LED, לכן במדריך זה נלמד כיצד להשתמש בפונקציית עיכוב הטיימר וכן ב- ISR של טיימר (Interrupt Service Routine) ולהבהב של שתי נוריות בודדות. אתה יכול גם לבדוק את ההדרכה לטיימר של Arduino ואת ההדרכה של PIC Timer כדי לבדוק כיצד להשתמש בטיימרים עם מיקרו-בקרים אחרים. מבלי לבזבז זמן רב בואו נעריך איזה סוג של התקנת חומרה אנו דורשים.
הגדרת חומרה ודרישה
מכיוון שהדרישה של פרויקט זה היא ללמוד טיימר ISR ופונקציית עיכוב הטיימר, נשתמש בשתי נוריות LED, מתוכן אחת מהבהבת באמצעות עיכוב טיימר בלולאת הזמן ואחת נוספת תמצמצ בתוך פונקציית ISR.
מכיוון שנורית LED זמינה בלוח הפיתוח N76E003, פרויקט זה דורש נורית LED נוספת ואת הנגד המגביל לזרם כדי להגביל את זרם ה- LED. הרכיבים הדרושים לנו -
- כל צבע של ה- LED
- נגד 100R
שלא לדבר על מלבד הרכיבים הנ"ל, אנו זקוקים ללוח פיתוח מבוסס מיקרו-בקר N76E003 וכן למתכנת Nu-Link. בנוסף, נדרשים גם חוטי קרש וחיבור לחיבור כל הרכיבים.
תרשים מעגלים לממשקי LED עם Nuvoton N76E003
כפי שניתן לראות בתרשים שלהלן, נורית הבדיקה זמינה בתוך לוח הפיתוח והיא מחוברת ביציאה 1.4. נורית LED נוספת מחוברת ליציאה 1.5. הנגד R3 משמש להגבלת זרם ה- LED. בצד שמאל קיצוני מוצג חיבור ממשק התכנות.
סיכות טיימר על Nuvoton N76E003
את תרשים הסיכות של N76E003 ניתן לראות בתמונה למטה-
כפי שאנו רואים, לכל סיכה יש מפרט שונה וכל סיכה יכולה לשמש למטרות מרובות. עם זאת, סיכה 1.5 המשמשת כסיכת פלט LED, היא תאבד את ה- PWM ופונקציונליות אחרת. אבל, זו לא בעיה שכן אין צורך בפונקציונליות אחרת לפרויקט זה.
הסיבה מאחורי בחירת סיכה 1.5 כפלט וסיכה 1.6 כקלט היא בגלל הזמינות הקרובה ביותר של סיכות GND ו- VDD לחיבור קל. עם זאת, במיקרו-בקר זה מתוך 20 פינים, 18 פינים יכולים לשמש כסיכת GPIO וכל פינים אחרים של GPIO יכולים לשמש למטרות הקשורות לפלט ולקלט, למעט סיכה 2.0 המשמשת באופן ייעודי לאיפוס קלט ולא ניתן להשתמש בה כ תְפוּקָה. ניתן להגדיר את כל הפינים של GPIO במצב המתואר להלן.
בהתאם לגליון הנתונים, PxM1.n ו- PxM2.n הם שני רושמים המשמשים לקביעת פעולת הבקרה של יציאת הקלט. מכיוון שאנו משתמשים ב- LED ואנו דורשים את הפין כסיכות פלט כלליות, לכן נשתמש במצב קוואזי דו-כיווני עבור הפינים.
טיימר רושם ב- Nuvoton N76E003
הטיימר הוא דבר חשוב לכל יחידת מיקרו-בקר. מיקרו-בקר מגיע עם היקפי טיימר מובנה. ה- nuvoton N76E003 מגיע גם עם ציוד היקפי לטיימר 16 סיביות. עם זאת, כל טיימר משמש למטרות שונות, ולפני שמשתמשים בממשק טיימר כלשהו חשוב לדעת על הטיימר.
סוגי זמנים ב- Nuvoton N76E003
טיימר 0 ו -1:
שני טיימרים טיימר 0 וטיימר 1 זהים ל- 8051 טיימרים. שני טיימרים אלה יכולים לשמש כטיימר כללי או כמונים. שני טיימרים אלה פועלים בארבעה מצבים. בשנת המצב 0, טיימרים אלה יפעלו במצב 13 סיבי טיימר / מונה. בשנת Mode 1, הרזולוציה קצת שני טיימרים אלה יהיו 16 סיביות. בשנת 2 Mode, טיימרים מוגדרים כמצב טען אוטומטית עם רזולוציה 8 סיביות. בשנת Mode 3, טיימר 1 הוא עצר וטיימר 0 יכולים לשמש הדלפק טיימר בעת ובעונה אחת.
מתוך ארבעת המצבים הללו, נעשה שימוש במצב 1 ברוב המקרים. שני טיימרים אלה יכולים להשתמש ב- Fsys (תדר מערכת) במצב קבוע או מוגדל מראש (Fys / 12). ניתן גם לנעול אותו ממקור שעון חיצוני.
טיימר 2:
טיימר 2 הוא גם טיימר של 16 ביט שמשמש בעיקר לצילום צורות גל. הוא גם משתמש בשעון המערכת וניתן להשתמש בו ביישומים שונים על ידי חלוקת תדר השעון באמצעות 8 סולמות שונים. ניתן להשתמש בו גם במצב השוואה או ליצירת PWM.
זהה כמו טיימר 0 וטיימר 1, ניתן להשתמש בטיימר 2 במצב טעינה אוטומטית.
טיימר 3:
טיימר 3 משמש גם כטיימר של 16 סיביות והוא משמש למקור שעון קצב השידור של ה- UART. יש לו גם תכונה לטעינה אוטומטית. חשוב להשתמש בטיימר זה רק לתקשורת טורית (UART) אם היישום דורש תקשורת UART. מומלץ לא להשתמש בטיימר זה למטרות אחרות במקרה כזה בגלל התהליך הסותר במערך הטיימר.
שעון עצר כלבי שמירה:
טיימר כלב השמירה יכול לשמש כטיימר רגיל של 6 סיביות אך הוא אינו משמש למטרה זו. השימוש בטיימר Watchdog כטיימר למטרות כלליות חל על יישומי צריכת חשמל נמוכים כאשר המיקרו-בקר נשאר בעיקר במצב סרק.
טיימר כלב השמירה, כפי שהשם מרמז, תמיד בודק אם המיקרו-בקר עובד כמו שצריך או לא. במקרה של מיקרו-בקר תלוי או עצור, WDT (Watchdog Timer) אפס את המיקרו-בקר באופן אוטומטי מה שמבטיח שהמיקרו-בקר יפעל בזרימת קוד רציפה מבלי להיתקע, להיתקע או במצבים עצורים.
טיימר להשכמה עצמית:
זהו ציוד היקפי נוסף לטיימר המשרת תהליך תזמון ייעודי זהה לטיימר כלב שמירה. טיימר זה, מעיר את המערכת מעת לעת כאשר המיקרו-בקר פועל במצב צריכת חשמל נמוכה.
ניתן להשתמש בפריפריה טיימרית זו באופן פנימי או באמצעות ציוד היקפי חיצוני להעיר את המיקרו-בקר ממצב שינה. עבור פרויקט זה נשתמש בטיימר 1 ובטיימר 2.
תכנות מיקרו-בקר Nuvoton N76E003 לטיימרים
הגדרת הסיכות כפלט:
נתחיל מקטע הפלט תחילה. אנו משתמשים בשני נוריות, האחת היא ה- LED המשולב בשם Test, ומחוברת ליציאה P1.4 ולנורית חיצונית המחוברת לסיכה P1.5.
לכן, שני פינים אלה מוגדרים כסיכת פלט לחיבור שני נוריות LED אלה באמצעות קטעי הקוד שלהלן.
#define Test_LED P14 #define LED1 P15
שני פינים אלה מוגדרים כסיכה דו-כיוונית כמעט בפונקציית ההתקנה.
הגדרת חלל (בטל) {P14_Quasi_Mode; P15_Quasi_Mode; }
הגדרת פונקציית הטיימר:
בפונקציית ההתקנה יש צורך להגדיר טיימר 2 כדי לקבל את הפלט הרצוי. לשם כך, נגדיר את רישום T2MOD עם גורם חלוקת שעון 1/128 ונשתמש בו במצב עיכוב לטעינה אוטומטית. להלן סקירה כללית של הרשמת T2MOD-
ה- 4,5 וה- 6 של הרישום T2MOD קבעו את מחלק השעון של טיימר 2 והביט השביעי קבע את מצב הטעינה האוטומטית. זה נעשה באמצעות השורה הבאה -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
שתי שורות אלה מוגדרות בקובץ Function_define.h כ-
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF # הגדר TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
כעת, שורות אלה קובעות את ערך התזמון הנדרש עבור ה- Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
המוגדר עוד יותר בקובץ Function_define.h כ-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 אלפיות השנייה
אז, 16000000 הוא תדר הקריסטל של 16 Mhz שמגדיר את עיכוב הזמן של 100 ms.
מתחת לשתי שורות ירוקן את טיימר 2 בתים נמוכים וגבוהים.
TL2 = 0; TH2 = 0;
לבסוף מתחת לקוד יאפשר להפסקת הטיימר 2 ולהפעיל את הטיימר 2.
set_ET2; // הפעל את Timer2 interrupt set_EA; set_TR2; // הפעלת טיימר 2
ניתן לראות את פונקציית ההתקנה המלאה בקודים הבאים -
הגדרת חלל (בטל) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // הפעל את Timer2 interrupt set_EA; set_TR2; // הפעלת Timer2 }
טיימר 2 ISR פונקציה:
ניתן לראות את הפונקציה ISR של טיימר 2 בקוד שלמטה.
בטל Timer2_ISR (בטל) להפריע 5 { clr_TF2; // נקה Timer2 דגל הפרעה LED1 = ~ LED1; // מתג LED1, מחובר ב- P1.5; }
קוד מהבהב ואימות פלט עבור פונקציונליות טיימר
הקוד (המופיע להלן) כשהוא מחובר החזיר 0 אזהרה ו- 0 שגיאות והבהבתי אותו בשיטת ההבהוב המוגדרת כברירת מחדל בקייל. לאחר ההבהוב נוריות הנור מהבהבות בעיכוב מוגדר של טיימר כפי שתוכנת.
בדוק את הסרטון המופיע להלן לקבלת הדגמה מלאה כיצד הלוח עובד עבור קוד זה. מקווה שנהנית מההדרכה ולמדת משהו שימושי אם יש לך שאלות השאירו אותן בסעיף ההערות למטה. אתה יכול גם להשתמש בפורומים שלנו כדי לפרסם שאלות טכניות אחרות.