תוכן עניינים:

תצורת ביתי נתיכים של נתיך נתיך. יצירה והעלאה בזיכרון הבזק של המיקרו -בקר התוכנית מהבהבת LED: 5 שלבים
תצורת ביתי נתיכים של נתיך נתיך. יצירה והעלאה בזיכרון הבזק של המיקרו -בקר התוכנית מהבהבת LED: 5 שלבים

וִידֵאוֹ: תצורת ביתי נתיכים של נתיך נתיך. יצירה והעלאה בזיכרון הבזק של המיקרו -בקר התוכנית מהבהבת LED: 5 שלבים

וִידֵאוֹ: תצורת ביתי נתיכים של נתיך נתיך. יצירה והעלאה בזיכרון הבזק של המיקרו -בקר התוכנית מהבהבת LED: 5 שלבים
וִידֵאוֹ: איך תיבת נתיכים ביתית צריכה להיות? הגנת התמוטטות ניטראלית, מעצור מתח, התקנת לוח חשמל וכבל 2024, יוני
Anonim
Image
Image

במקרה זה ניצור תוכנית פשוטה בקוד C ונשרוף אותה בזיכרון המיקרו -בקר. אנו נכתוב תוכנית משלנו ונרכיב את קובץ ה- hex בעזרת סטודיו Atmel כפלטפורמת הפיתוח המשולבת. אנו נקבע את התצורה של פיסות פיוז ונעלה קובץ hex לזיכרון של הבקר המיקרו AVR ATMega328P, באמצעות מתכנת ותוכנת AVRDUDE משלנו.

AVRDUDE - היא תוכנית להורדה והעלאה של זיכרונות שבב של מיקרו -בקרי AVR של Atmel. הוא יכול לתכנת את ה- Flash ו- EEPROM, וכאשר נתמך על ידי פרוטוקול התכנות הסדרתי, הוא יכול לתכנת פיוזים ונעילת סיביות.

שלב 1: כתיבת תוכנית ועריכת קובץ הקס באמצעות סטודיו Atmel

כתיבת תכנית ועריכת קובץ הקס באמצעות סטודיו Atmel
כתיבת תכנית ועריכת קובץ הקס באמצעות סטודיו Atmel
כתיבת תכנית ועריכת קובץ הקס באמצעות סטודיו Atmel
כתיבת תכנית ועריכת קובץ הקס באמצעות סטודיו Atmel

אם אין לך Atmel Studio, עליך להוריד ולהתקין אותו:

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

לאחר מכן, יש לציין עבור איזה מכשיר יפותח הפרויקט. פרויקט זה יפותח עבור הבקר המיקרו AVR ATMega328P.

הקלד את קוד התוכנית באזור עורך המקורות הראשי של Atmel Studio. עורך המקור הראשי - חלון זה הוא העורך הראשי של קבצי המקור בפרויקט הנוכחי. לעורך יש בדיקת איות ותכונות להשלמה אוטומטית.

1. עלינו לספר למהדר באיזו מהירות השבב שלנו פועל שהוא יכול לחשב עיכובים כראוי.

#ifndef F_CPU

#define F_CPU 16000000UL // אומר תדר קריסטל בקר (16 MHz AVR ATMega328P) #endif

2. אנו כוללים את ההקדמה, שם אנו שמים את המידע הכולל שלנו מקבצים אחרים, המגדיר משתנים ופונקציות גלובליות.

#include // header כדי לאפשר בקרת זרימת נתונים על סיכות. מגדיר סיכות, יציאות וכו '.

#include // header כדי לאפשר פונקציית עיכוב בתוכנית

3. לאחר ההקדמה מגיעה הפונקציה הראשית ().

int main (void) {

הפונקציה הראשית () היא ייחודית ומנותקת מכל שאר הפונקציות. כל תוכנית C חייבת להיות בעלת פונקציה () ראשית אחת בדיוק. Main () הוא המקום בו ה- AVR מתחיל לבצע את הקוד שלך כאשר הכוח נמשך לראשונה, כך שזו נקודת הכניסה של התוכנית.

4. הגדר את סיכה 0 של ה- PORTB כפלט.

DDRB = 0b00000001; // הגדר את PORTB1 כפלט

אנו עושים זאת על ידי כתיבת מספר בינארי לרשם כיווני הנתונים ב '. רישום כיוון הנתונים ב' מאפשר לנו לבצע את נתחי הקלט או הפלט של רגיסטר B. כתיבה של 1 הופכת אותם לפלט, בעוד ש- 0 יגרום להם להזין. מכיוון שאנו מצמידים נורית LED לשמש פלט, אנו כותבים מספר בינארי, מה שהופך את הסיכה 0 של יציאה B לפלט.

5. לולאה.

בעוד (1) {

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

6. הדלק נורית המחוברת ליציאה PB0

PORTB = 0b00000001; // מדליק נורית המחוברת ליציאה PB0

קו זה נותן 1 ל- PB0 של PortB. PORTB הוא רשם חומרה על שבב ה- AVR המכיל 8 פינים, PB7-PB0, העובר משמאל לימין. הצבת 1 בסוף נותנת 1 ל- PB0; זה מגדיר את PB0 גבוה מה שמדליק אותו. לכן הנורית המחוברת לפין PB0 תידלק ותדלק.

7. עיכוב

_ delay_ms (1000); // יוצר עיכוב של שנייה

הצהרה זו יוצרת עיכוב של שנייה אחת, כך שהנורית נדלקת ונשארת שנייה בדיוק.

8. כבה את כל סיכות B, כולל PB0

PORTB = 0b00000000; // מכבה את כל סיכות B, כולל PB0

קו זה מכבה את כל 8 סיכות ביציאה B, כך שאפילו PB0 כבוי, כך הנורית כבה.

9. עיכוב נוסף

_ delay_ms (1000); // יוצר עיכוב נוסף של שנייה

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

10. הצהרת החזרה

}

החזרה (0); // בשורה הזו אף פעם לא ממש מגיעים}

השורה האחרונה בקוד שלנו היא הצהרת החזרה (0). למרות שהקוד הזה אף פעם לא מבוצע, כיוון שיש לולאה אינסופית שלעולם לא מסתיימת, עבור התוכנות שלנו הפועלות על מחשבים שולחניים, חשוב שמערכת ההפעלה תדע אם הן פועלות כהלכה או לא. מסיבה זו, GCC, המהדר שלנו, רוצה שכל ראשי () יסתיים בקוד החזרה. קודי החזרה הם מיותרים עבור קוד AVR, המפעיל עצמאי של כל מערכת הפעלה תומכת; עם זאת, המהדר יעלה אזהרה אם לא תסיים את הראשי עם החזרה ().

השלב האחרון הוא בניית הפרויקט. המשמעות היא לאסוף ולבסוף לקשר את כל קבצי האובייקטים ליצירת קובץ ההפעלה (.hex). קובץ hex זה נוצר בתוך תיקיית Debug הנמצאת בתוך תיקיית Project. קובץ hex זה מוכן להטענה בשבב המיקרו.

שלב 2: שינוי תצורת ברירת המחדל של ביטי הנתיכים של בקר הבקרה

שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה
שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה
שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה
שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה
שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה
שינוי תצורת ברירת המחדל של סיביות הנתיכים של בקר הבקרה

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

ישנם 19 סיביות נתיכים המשמשים ב- ATmega328P, והם מופרדים לשלושה בתים נתיכים שונים. שלושה מפיסי הנתיך כלולים ב"בייט נתיך מורחב ", שמונה ב"בייט נתיך גבוה", ושמונה נוספים נמצאים ב"בייט נתיך נמוך ". יש גם בית רביעי המשמש לתכנת סיבי הנעילה.

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

שבבי ATmega 328P כוללים מתנד RC מובנה בעל תדר של 8 מגה -הרץ. שבבים חדשים נשלחים עם מערכת זו כמקור השעון והפיוז CKDIV8 פעיל, וכתוצאה מכך שעון מערכת של 1 מגה -הרץ. זמן ההפעלה מוגדר לתקופה מקסימלית ופסק זמן.

שבבי ATMega 328P חדשים בדרך כלל כוללים את הגדרות הנתיכים הבאות:

נתיך נמוך = 0x62 (0b01100010)

נתיך גבוה = 0xD9 (0b11011001)

נתיך מורחב = 0xFF (0b11111111)

אנו נשתמש בשבב ATmega 328 עם קריסטל חיצוני של 16MHz. לכן, עלינו לתכנת פיסות של "Fuse Low Byte" בהתאם.

1. ביטים 3-0 שולטים בבחירת המתנד, והגדרת ברירת המחדל של 0010 היא שימוש במתנד RC הפנימי המכויל, אותו איננו רוצים. אנו רוצים את פעולת מתנד הגביש בעל הספק נמוך מ -0.0 עד 16.0 מגה-הרץ, ולכן יש להגדיר את הסיביות 3-1 (CKSEL [3: 1]) ל- 111.

2. ביטים 5 ו -4 שולטים בזמן ההפעלה, והגדרת ברירת המחדל של 10 היא לעיכוב הפעלה של שישה מחזורי שעון מהפעלה וכיבוי חשמל, בתוספת עיכוב הפעלה נוסף של 14 מחזורי שעון בתוספת 65 אלפיות השנייה מהאיפוס.

כדי להיות בצד הבטוח של מתנד קריסטל בעל צריכת חשמל נמוכה, אנו רוצים את העיכוב המרבי האפשרי של 16, 000 מחזורי שעון מהפסקת חיסכון בחשמל, ולכן יש להגדיר את SUT [1] ל -1, בתוספת עיכוב הפעלה נוסף. מתוך 14 מחזורי שעון בתוספת 65 אלפיות השנייה מהאיפוס, לכן יש להגדיר את SUT [0] ל- 1. בנוסף, CKSEL [0] צריך להיות מוגדר ל -1.

3. ביט 6 שולט ביציאת השעון ל- PORTB0, שלא אכפת לנו. אז אפשר להשאיר את סיביות 6 ל -1.

4. ביט 7 שולט בפעולת החלוקה ב- 8 והגדרת ברירת המחדל של 0 מפעילה את התכונה, אותה איננו רוצים. לכן, ביט 7 צריך להיות שונה מ -0 ל -1.

לכן, ה- Fuse Low Byte החדש צריך להיות 11111111, שבסימון הקסדצימלי הוא 0xFF

כדי לתכנת פיסות של "Fuse Low Byte" נוכל להשתמש במתכנת שלנו (https://www.instructables.com/id/ISP-Programmer-fo…) ובתוכנת AVRDUDE. AVRDUDE הוא כלי שורת פקודה המשמש להורדה ומהעלאה למיקרו-בקרי Atmel.

הורד את AVRDUDE:

ראשית, עלינו להוסיף לתאר את המתכנת שלנו לקובץ התצורה של AVRDUDE. ב- Windows קובץ התצורה נמצא בדרך כלל באותו מיקום כמו קובץ ההפעלה של AVRDUDE.

הדבק את הטקסט בקובץ התצורה avrdude.conf:

# ISPProgv1

מתכנת id = "ISPProgv1"; desc = "דפיקות יציאה טורית, איפוס = dtr sck = rts mosi = txd miso = cts"; type = "סרבן"; connection_type = טורי; איפוס = 4; sck = 7; mosi = 3; מיסו = 8;;

לפני הפעלת ה- AVRDUDE, עלינו לחבר את המיקרו -בקר למתכנת, בהתאם לתוכנית

פתח את חלון הודעת DOS.

1. לצפייה ברשימת המתכנתים הנתמכים על ידי avrdude הקלד פקודה avrdude -c c. אם הכל בסדר, ברשימה צריך להיות מזהה המתכנת "ISPProgv1"

2. לצפייה ברשימת התקני Atmel בהם avrdude נתמך הקלד פקודה avrdude -c ISPProgv1. ברשימה אמור להיות מכשיר m328p עבור Atmel ATMega 328P.

לאחר מכן, הקלד avrdude -c ISPProgv1 –p m328p, הפקודה תגיד avrdude באיזה מתכנת משתמשים ומה מחובר מיקרו בקר Atmel. הוא מציג את חתימת ATmega328P בסימון הקסדצימלי: 0x1e950f. הוא מציג את תכנות ביט הנתיכים הנמצא כיום ב- ATmega328P גם בסימון הקסדצימלי; במקרה זה, בתים הנתיכים מתוכנתים כברירת מחדל של היצרן.

לאחר מכן, הקלד avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, זוהי פקודה לספר ל- avrdude באיזה מתכנת משתמשים ומה מחובר מיקרו Atmel ולשנות את ה- Byte Low Byte ל- 0xFF.

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

שלב 3: צריבת התוכנית לתוך הזיכרון של המיקרו -בקר ATMega328P

צריבת התוכנית לתוך הזיכרון של הבקר ATMega328P
צריבת התוכנית לתוך הזיכרון של הבקר ATMega328P
צריבת התוכנית לתוך הזיכרון של הבקר ATMega328P
צריבת התוכנית לתוך הזיכרון של הבקר ATMega328P

ראשית, העתק את קובץ ה- hex של התוכנית שהכנו בתחילת ההוראה לספריית AVRDUDE.

לאחר מכן, הקלד בחלון שורת DOS את הפקודה avrdude –c ISPProgv1 –p m328p –u –U flash: w: [שם קובץ ה- hex שלך]

הפקודה כותבת קובץ hex לזיכרון המיקרו -בקר. כעת, המיקרו -בקר פועל בהתאם להוראות התוכנית שלנו. בוא נבדוק את זה!

שלב 4: בדוק את פעולות המיקרו -בקר בהתאם להוראות התוכנית שלנו

בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו
בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו
בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו
בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו
בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו
בדוק שהמיקרו -בקר פועל בהתאם להוראות התוכנית שלנו

חבר רכיבים בהתאם לתרשים סכמטי של מעגל ה- LED המהבהב AVR

ראשית, אנו זקוקים לחשמל, כפי שעושים כל מעגלי ה- AVR. כ -5 וולט של הספק מספיקים להפעלת שבב ה- AVR. אתה יכול להשיג את זה מסוללות או ממתח DC. אנו מתחברים +5V של כוח לסיכה 7 ומחברים את סיכה 8 לקרקע על לוח הלחם. בין שני הפינים, אנו מציבים קבל קרמיקה 0.1μF כדי להחליק את כוח אספקת החשמל כך ששבב ה- AVR יקבל קו חשמל חלק.

הנגד 10KΩ משמש לאספקת הפעלה (POR) למכשיר. כאשר הכוח מופעל, המתח על פני הקבל יהיה אפס כך שהמכשיר מתאפס (מכיוון שהאיפוס פעיל נמוך), ואז הקבל נטען ל- VCC והאיפוס יושבת.

אנו מחברים את האנודה של ה- LED שלנו לפין AV0 pin PB0. זהו סיכה 14 של ATMega328P. מכיוון שמדובר בנורית LED, אנו רוצים להגביל את הזרם הזורם לנורית כך שהוא לא יישרף. זו הסיבה שאנו ממקמים נגד 330Ω בסדרה עם הנורית. הקתודה של ה- LED מתחברת לקרקע.

קריסטל 16 מגה -הרץ משמש לאספקת שעון עבור המיקרו -בקר Atmega328 וקבלים של 22pF משמשים לייצוב פעולת הגביש.

אלה כל החיבורים הדרושים להדלקת הנורית. ספק כוח.

בסדר. נורית LED מהבהבת בעיכוב של שנייה. העבודה של המיקרו -בקר מתאימה למשימות שלנו

שלב 5: מסקנה

אומנם, זה היה תהליך ארוך להבהב נורית LED, אך האמת היא שפינית בהצלחה מכשולים גדולים: יצירת פלטפורמת חומרה לתכנות מיקרו -בקר AVR, שימוש באולפן Atmel כפלטפורמת הפיתוח המשולבת, שימוש ב- AVRDUDE כתוכנה עבור הגדרה ותכנות של מיקרו -בקר AVR

אם אתה רוצה להתעדכן בפרויקטים הבסיסיים של מיקרו -בקרים שלי, הירשם ל- YouTube שלי! צפייה ושיתוף בסרטונים שלי היא דרך לתמוך במה שאני עושה

הירשם לערוץ YouTube FOG

מוּמלָץ: