- מהם הנתיכים ב- AVR - הסבר מפורט
- Fuse Bits בארדואינו
- רכיבים נדרשים לבדיקת נתיכים ב- AVR
- סכמטי לבדיקת ביטי הפיוז ב- AVR
- בדיקת הנתיכים ב- AVR
במדריך זה נדבר על נתיכים. כשהייתי בקולג 'ולמדתי על כל הדברים המגניבים באלקטרוניקה, שמעתי את המונח נתיך ב- AVR בפעם הראשונה, המחשבה הראשונית שלי בנושא הייתה, אה! יש משהו בתוך ה- AVR שיפוצץ אם אעשה משהו לא בסדר. אז לא היו הרבה משאבים זמינים באינטרנט שיעברו. חיפשתי לא מעט כדי לגלות כי הנתיכים הללו התייחסו לכמה סיביות מיוחדות בתוך מיקרו-הבקר AVR. סיביות אלה הן כמו מתגים זעירים בתוך ה- AVR ועל ידי הפעלה / כיבוי של אותם, אנו יכולים להפעיל / לכבות כמה תכונות מיוחדות של ה- AVR. הפעלה וכיבוי פירושו הגדרה ואיפוס.
אנו ננצל את ההזדמנות הזו כדי לדון בכל מה שיש שם על סיביות הפיוז ב- AVR. לשם פשטות, ניקח את הדוגמה של לוח ארדואינו המאכלס את מיקרו-בקרת ATmega328P הפופולרי. כאן, תלמד כיצד להגדיר את הנתיכים האלה להגדרת חלק מהתכונות הללו לסירוגין, מה שמאוד שימושי ביישומים בחיים האמיתיים. אז בואו ניכנס לזה.
בפוסטים הקודמים שלנו, בנינו הרבה פרויקטים של מיקרו בקרי AVR כמו מודול GSM ממשק עם מיקרו בקר AVR וממשק HC-05 עם מיקרו בקר AVR. אתה יכול לבדוק אותם אם אתה רוצה ללמוד עוד על פרויקטים אלה.
מהם הנתיכים ב- AVR - הסבר מפורט
כפי שדנו קודם, נתיכים במיקרו-בקר הם כמו מתגים קטנים שניתן להפעיל ולכבות כדי לאפשר ולהשבית תכונות שונות במיקרו-בקר AVR. זה החלק בו נשאלת השאלה הבאה שלנו, אז כיצד נגדיר או לאפס את הנתיכים הללו? התשובה לשאלה זו פשוטה: אנו עושים זאת בעזרת רושמי נתיכים.
ב- IC של ATmega328P ישנם בסך הכל 19 סיביות נתיך והן מחולקות לשלושה בתים נתיכים. אלה מוגדרים כ"בתים נתיכים מורחבים ", " בתים נתיכים גבוהים " ו- " בתים נמוכים בנתיך ".
אם אתה מסתכל בטבלה 27 של גליון הנתונים ATmega328 / P Rev: 7810D – AVR – 01/15, תוכל לגלות את כל הפרטים הקטנים על סיביות הנתיך. אך התמונה שלהלן תתן לך מושג טוב יותר לגבי קטע נתיכי גיליון הנתונים.
כעת, כאשר למדתם קצת על פיסות הפיוז, בואו נעבור את גליון הנתונים ונגלה את כל הפרטים הדרושים אודות IC זה.
ביטי הנתיכים המורחבים:
לאחר שתלחץ על הכרטיסייה Fuse Bits ותגלול מעט מטה, תמצא את הטבלה 27-5: המציגה את הטבלה עבור "בייט נתיך מורחב" הידוע בכינויו " EFUSE". התמונה למטה מראה בדיוק את זה.
בטבלה זו יש רק שלוש סיביות שמישות, ושלושת האחרות שמורות. שלושת הביטים הללו עוסקים ברמת זיהוי ה- Brownout. כפי שניתן לראות בהערה אם נסתכל על טבלה 28-5, נוכל למצוא פרטים נוספים אודותיה.
כפי שניתן לראות בטבלה לעיל, יש לנו את הטבלה לזיהוי Brownout. זיהוי השחרה הוא תכונה המאפסת את המיקרו-בקר כאשר מתח האספקה יורד מתחת לרמת מתח מסוימת. ב- IC של ATmega328P נוכל להשבית לחלוטין את זיהוי ה- brownout או שנוכל להגדיר אותו לרמות שמוצגות בטבלה לעיל.
הבתים הנתיכים הגבוהים:
כפי שניתן לראות בתמונה למטה, טבלה 27-6: בגליון הנתונים מציגים את סיביות הנתיך הגבוהות יותר של ה- ATmega328P IC.
הפתיל גבוהה העסקה עם משימות שונות בתוך מיקרו ATmega328. בחלק זה נדבר על סיביות הנתיך הגבוהות ועל פעולתן. נתחיל בביטים BOOTRST, BOOTSZ0 ו- BOOTSZ1. שלושת הסיביות הללו אחראיות לקביעת גודל האתחול; גודל האתחול מתייחס לכמות הזיכרון השמורה להתקנת מטען האתחול.
Bootloader הוא תוכנה מיוחדת הפועלת על גבי המיקרו-בקר ומנהלת משימות שונות. אך במקרה של הארדואינו, טוען האתחול משמש להעלאת סקיצת הארדואינו בתוך המיקרו-בקר. באחד המאמרים הקודמים שלנו, הראינו לך כיצד לשרוף את Bootloader ב- ATmega328P באמצעות Arduino. אתה יכול לבדוק את זה אם אתה מעוניין בנושא. אם נחזור לנושא שלנו, מטרותיהם של סיביות אחרות בבית הגבוה מובהרות באופן סביר, סיבית ה- EESAVE היא שמירה על זיכרון ה- EEPROM בזמן שמתבצע תחת מחזור מחיקת שבב. סיבית WDTON היא לאפשר או להשבית את טיימר כלב השמירה.
טיימר כלב השמירה הוא טיימר מיוחד ב- ATmega328P IC אשר השעון הנפרד שלו פועל באופן עצמאי. אם טיימר כלב השמירה מופעל, עליך לנקות אותו עם פרק זמן מסוים, אחרת טיימר כלב השמירה יאפס את המיקרו-בקר. זו תכונה שימושית שמגיעה למיקרו-בקרים רבים אם המעבד נתקע; כלב השמירה יאפס אותו כדי למנוע נזק ליישום הסופי.
ביט ה- DWEN קיים כדי לאפשר את חוט הבאגים; זהו פרוטוקול הכנה המובנה באופן פנימי בחומרה שלהם, המשמש לתכנות וליפוי באגים של המעבדים. כאשר תכונה זו מופעלת, ניתן להבהב ולפתור באגים במעבד באמצעות חוט יחיד. אך כדי להשתמש בו, תזדקק לחומרה מיוחדת המכינה את אטמל.
שתי הביטים הנותרים הם אותם ביטים שעליך להימנע מהם, אלא אם כן אתה יודע בדיוק מה אתה עושה. אלה הם RSTDISBL bit-7 ו- SPIEN bit-5. RSTDISBL (איפוס חיצוני מושבת) כשמו כן מבטל את סיכת איפוס החומרה החיצונית, ובסיבית SPIEN משתמשים כדי להשבית את ממשק התכנות SPI. השבתה של אחד משני הסיביות הללו יכולה לבנות לחלוטין את ה- AVR שלך; לכן, להשאיר אותם לבד זה רעיון טוב.
בתים הנתיכים הנמוכים:
כפי שניתן לראות בתמונה למטה, טבלה 27-7: בגליון הנתונים מציגה את סיביות הפיוז התחתונות של ה- IC של ATmega328P.
בית נתיך זה אחראי על הגדרת מקור השעון וכמה פרמטרים אחרים של השעון בתוך ה- AVR. בחלק זה נלמד על כל אלה.
ניתן להגדיר את הביט השביעי או את דגל ה- CKDIV8 לחלק את מקור השעון ב- 8, זה שימושי מאוד שאולי כבר ידעת אם ניסית לתכנת את ה- AVR בעצמך. הביט הבא הוא ביט ה- CKOUT וזה הביט השישי בבייט הנתיך הנמוך. תכנותו יפיק את אות השעון הפנימי ב- PORTB0 של המיקרו-בקר.
ביטים 5 וסיבית SUT1 ו- SUT0 שולטים בזמן ההפעלה של המיקרו-בקר. זה מונע כל פעולות הפעלה אשר עשויות או לא יתקיימו לפני שמתח האספקה יכול להגיע לרמת מתח סף מינימלית מקובלת. וארבעת CKSEL0 - 4 הביטים האחרונים משמשים לבחירת מקור השעון של המיקרו-בקר. הטבלה המוצגת להלן מעניקה לך הבנה טובה יותר של ארבעת הסיביות הללו האחראיות על הגדרת מקור השעון. תוכל למצוא טבלה זו בקטע מקור השעון בגליון הנתונים.
עכשיו, לפני שנמשיך הלאה, יש עוד דבר שעלי לעבור עליו הוא הטבלה לעיכוב בהפעלה של מתנד. על ידי עיכוב הפעלה, אנו מתייחסים לסיביות 4 ו -5 של בית הנתיך התחתון. יש להגדיר את העיכובים בהתאם למצב בו המעגל יפעל וסוג המתנד שבו אתה משתמש. ערכי ברירת המחדל מוגדרים לעוצמת עלייה איטית עם 6 מחזורי שעון בעת ביצוע רצף הפעלה או הפעלה. לאחר מכן, יש עיכוב נוסף של 14 מחזורי שעון עם עיכוב של 65 M לאחר ההפעלה.
פאי! זה היה מידע רב לעיכול. אך לפני שנמשיך הלאה, בוא נסיים את החלק הזה בהערה מהירה.
הערה:
אם בדקת היטב את גליון הנתונים, בטח שמת לב, תכנות סיבית נתיך פירושו להגדיר אותו נמוך, כלומר 0 (אפס), וזה ההפך ממה שאנחנו עושים בדרך כלל כדי להפוך יציאה גבוהה או נמוכה. עליך לזכור זאת תוך כדי הגדרת התיקונים שלך.
Fuse Bits בארדואינו
דיברנו הרבה על נתיכים בסעיף לעיל, אך בחלק זה, בואו נדבר על איך להגדיר אותם וכיצד לכתוב אותם במיקרו-בקר. לשם כך נצטרך כלי שנקרא Avrdude. זהו כלי שניתן להשתמש בו לקריאה, כתיבה ושינוי זיכרון במיקרו-בקרים AVR. זה עובד עם SPI ויש לו רשימה ארוכה של תמיכה בסוגים שונים של מתכנתים. תוכלו להוריד את הכלי מהקישור הבא. כמו כן, נשתמש במיקרו-בקר Arduino המועדף עלינו.
- הורד את Avrdude גרסה 6.3 Windows-ming32
עכשיו, שיש לך את Avrdude, עליך לחלץ את זה ולפתוח חלון פקודה בתיקייה זו. כמו כן, אם אתם מתכננים להשתמש בו מאוחר יותר, תוכלו להוסיף את נתיב התיקיה לקטע משתנה הסביבה של חלונות. אבל אני אשים את זה על שולחן העבודה שלי ואפתח שם חלון פקודה. לאחר שעשינו זאת, נחבר את מתכנת ה- USBasp למחשב שלנו ונדאג שיהיה לנו את מנהל ההתקן המתאים למתכנת ה- USBasp שלנו. ברגע שנעשה את זה, טוב לנו ללכת ונקרא קודם את ערך הנתיך של ברירת המחדל. לשם כך, עליך להפעיל את הפקודה הבאה.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
אם הכל תקין, פקודה זו תקרא את בתים הנתיכים ותכניס אותם לשלושה קבצי טקסט נפרדים. התמונה למטה תתן לך מושג טוב יותר על התהליך.
כפי שאתה יכול לראות, ה- Avrdude קרא את ביטי הנתיכים על הננו של Arduino ושמר אותם בשלושה קבצי טקסט נפרדים. כעת, פתחנו אותם וקיבלנו שלושה ערכים; ל- EFUSE: 0xFD, ל- HFUSE: 0XDA, ל- LFUSE: 0xFF. זה היה ערך הנתיך המוגדר כברירת מחדל עבור ננו ארדואינו. כעת, בואו להמיר את הסיביות הללו לבינאריות ונשווה אותן לערך ברירת המחדל שלהן מגליון הנתונים. הטבלה שלהלן מראה בדיוק את זה.
מטעמי נוחות, סיביות הפיוז נכתבות בערכים הקסדצימאליים, אך אם נמיר אותם לערכים בינאריים ונשווה אותם לגליון הנתונים, נדע מה קורה. נתחיל בתא הפתיל התחתון. כפי שניתן לראות מהמחרוזת שלעיל, הוא מוגדר ל- 0XFF והערך הבינארי יהיה 0B11111111.
השוואת מניות נתיכים נמוכות יותר עם ארדואינו:
בית נתיך נמוך |
ביט מס ' |
ערך ברירת מחדל ב- AVR |
ערך ברירת המחדל של ארדואינו |
CKDIV8 |
7 |
0 (מתוכנת) |
1 (לא מתוכנת) |
CKOUT |
6 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
SUT1 |
5 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
SUT0 |
4 |
0 (מתוכנת) |
1 (לא מתוכנת) |
CKSEL3 |
3 |
0 (מתוכנת) |
1 (לא מתוכנת) |
CKSEL2 |
2 |
0 (מתוכנת) |
1 (לא מתוכנת) |
CKSEL1 |
1 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
CKSEL0 |
0 |
0 (מתוכנת) |
1 (לא מתוכנת) |
בית הנתיך הגבוה מוגדר ל- 0XDA בבינארי שהוא 0B11011010.
בית נתיכים גבוה יותר בבינארי:
בייט נתיך גבוה |
ביט מס ' |
ערך ברירת מחדל ב- AVR |
ערך ברירת המחדל של ארדואינו |
RSTDISBL |
7 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
DWEN |
6 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
SPIEN |
5 |
0 (מתוכנת) |
0 (מתוכנת) |
WDTON |
4 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
תשמור |
3 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
BOOTSZ1 |
2 |
0 (מתוכנת) |
0 (מתוכנת) |
BOOTSZ0 |
1 |
0 (מתוכנת) |
1 (לא מתוכנת) |
BOOTRST |
0 |
1 (לא מתוכנת) |
0 (מתוכנת)) |
ההגדרה עבור בית הנתיכים המורחב מוגדרת ל- 0XFD, בינארית היא 0B11111101.
בייט נתיך מורחב בבינארי:
בייט נתיך מורחב |
ביט מס ' |
ערך ברירת מחדל ב- AVR |
ערך ברירת המחדל של ארדואינו |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
BODLEVEL1 |
1 |
1 (לא מתוכנת) |
0 (מתוכנת) |
BODLEVEL0 |
0 |
1 (לא מתוכנת) |
1 (לא מתוכנת) |
עכשיו, זה מסיים את סוף החלק הזה. נכון לעכשיו, למדנו הרבה על מיקרו-בקר ה- AVR ועל סיביות הפיוז שלו. אז בואו נסכם את המאמר הזה על ידי בחינת התיאוריה שלנו על ידי שינוי והתנסות בכמה מקטעי הפיוז בארדואינו ננו.
רכיבים נדרשים לבדיקת נתיכים ב- AVR
דיברנו הרבה על הנתיכים בחלק הנ"ל. אך כדי להמשיך הלאה במאמר, אנו זקוקים לכמה רכיבי חומרה וכמה כלי תוכנה. בחלק זה נדבר על אלה. רשימה של רכיבים נדרשים עם תמונות מוצגת למטה.
- לוח לחם - 1
- ארדואינו ננו - 1
- מתכנת AVR USBasp - 1
- כבל USB - 1
- ממיר AVR 10 פינים ל- 6- פינים - 1
- Avrdude (כלי תוכנה לתכנות AVR)
- נורית - 1
- נגד 330R - 1
- כבלים מגשרים
סכמטי לבדיקת ביטי הפיוז ב- AVR
הגדרת בדיקת החומרה מוצגת להלן בהתקנה זו. חיברנו את ה- Arduino Nano למחשב באמצעות כבל USB, וחיברנו גם את מתכנת ה- USBasp למחשב האישי. מטרת מאמר זה היא לתכנת את ביטי הנתיך ב- AVR. מסיבה זו חיברנו את מתכנת ה- USBasp עם ה- Arduino. התמונה למטה תתן לך מושג טוב יותר על ההתקנה.
בדיקת הנתיכים ב- AVR
הגדרת הבדיקה מוצגת להלן. כפי שאתה יכול לראות, חיברנו את הארדואינו ואת מתכנת ה- USBasp לשני ה- USB של המחשב הנייד שלי.
עכשיו בואו נפתח את ה- Arduino IDE ונעלה סקיצה מהבהבת בסיסית. תוכן הסקיצה הבסיסית של המצמוץ מובן מאליו, ולכן לא שמתי שום פרטים על כך.
תראו בסרטון כי הוביל על סיכה מס '13 מהבהב כמו שצריך. עכשיו בואו נתאים את הגדרות הנתיך ונגדיר אותן לערכי ברירת המחדל שלה. וכפי שראינו בעבר בגיליון הנתונים; ה- EFUSE הוא 0XFF; ה- HFUSE הוא D9; LFUSE הוא: 62. עכשיו בואו להגדיר את זה עם Avrdude, להבהב אותו ולראות מה קורה. הקוד בו נשתמש הוא-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
ברגע שאעשה זאת, תראה שהנורית תמצמץ לאט מאוד מכיוון שחישבנו ותכנתנו את הערך לשעון 16Mhz ועכשיו אחרי שריפת הנתיכים, זה רק מתנד RC פנימי של 1Mhz. זו הסיבה שהנורית מהבהבת כל כך לאט. עכשיו בואו ננסה להעלות סקיצה שוב. נראה שהארדואינו נותן שגיאה והקוד לא מועלה. מכיוון שעל ידי שינוי הנתיכים, גם פישלנו את הגדרות טעינת האתחול. אתה יכול לראות את זה בתמונה למטה.
כדי לתקן זאת ולהחזיר את הארדואינו כפי שהיה קודם, עלינו פשוט לשרוף את מטען האתחול שוב עבור הארדואינו. לשם כך, עבור אל כלים -> מתכנת- USBasp , וברגע שנעשה זאת, נוכל ללכת שוב אל כלים ונוכל ללחוץ על אפשרות טעינת האתחול הצריבה. זה שוב ישרוף את מטען האתחול המלאי בארדואינו שלך והכל יחזור כפי שהיה קודם.
לאחר שה- Bootloader הוחזר לארדואינו, הוא חזר למצבו המקורי והתמונה האחרונה מראה לך נורית LED מהבהבת לאחר שה- Bootloader נשרף שוב.
וזה מסמן את סוף המאמר הזה. אני מקווה שנהנית מהמאמר ולמדת משהו חדש. אם יש לך שאלות בנוגע למאמר, אל תהססו להגיב למטה.