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

ATtiny84/85 שימוש חוזר בממשק פינים של ממשק SPI: 6 שלבים
ATtiny84/85 שימוש חוזר בממשק פינים של ממשק SPI: 6 שלבים

וִידֵאוֹ: ATtiny84/85 שימוש חוזר בממשק פינים של ממשק SPI: 6 שלבים

וִידֵאוֹ: ATtiny84/85 שימוש חוזר בממשק פינים של ממשק SPI: 6 שלבים
וִידֵאוֹ: Aqara L1 350 - Zigbee 3.0 потолочный светильник с сменной цветовой температурой 2024, יולי
Anonim
ATtiny84/85 SPI שימוש חוזר בממשק פינים
ATtiny84/85 SPI שימוש חוזר בממשק פינים

מדריך זה הוא מעקב אחר "ATtiny84/85 איתור באגים במעגל עם פלט סידורי" ומרחיב את תצורת החומרה והתוכנה הזו כדי לטפל בנושא השימוש החוזר בסיכות ההורדה של התכנות על ידי תוכנית היישום. בסך הכל, בין זה לבין חלק 1 שניתן להדריך, הנושאים הבאים נדונים/מודגמים:

נוֹשֵׂא ATtiny84 ATtiny85
תקשורת טורית באמצעות מחלקת SoftwareSerial איקס איקס
שיתוף סיכות מכשיר בין אפליקציה להורדה איקס איקס
הפסקה של שינוי סיכה איקס
הפרעה חיצונית איקס
שינה במצב POWER_DOWN; להתעורר בהפרעה איקס
לעקוף את שגיאת הקישור הווקטורי "כפל ההגדרות" הקשור ל- SoftwareSerial איקס
מעגל שינוי, הורדה, איתור באגים, … מחזור פיתוח של התקני ATtiny איקס איקס

הוספת רכיב קלט/פלט חומרה לאחד הפינים המוקדשים לממשק התכנות SPI היא לפעמים בסדר, לפעמים לא. לדוגמה, הוספת LED ל- MISO רק גורמת להבהבה של ה- LED במהלך ההורדה ואז היא זמינה לאפליקציה. עם זאת, הוספת זמזם פיצו ל- MISO תגרום לצליל זעקה נורא ואחריו כשל בהורדה.

מדריך זה מסביר כיצד להשתמש במכפיל 4x2: 1 כדי "לשחזר" שימוש בסיכות שהוקצו לאותות MISO, MOSI ו- SCK של ממשק SPI על ידי הגנה עליהם במהלך ההורדה. שימוש חוזר בסיכת RESET דורש החלפת נתיך ואינו מכוסה בגישה זו. הקצאה כפולה של הסיכות מתבצעת על ידי שימוש במכפיל כדי לעבור בין האפליקציה לבין תשומות התכנות בהתאם להורדה. קוד וסכימות כלולים הן עבור ATtiny84 והן ב- ATtiny85. התצורה של ATiny84 מטופלת תחילה מכיוון שיש לה שתי יציאות קלט/פלט וניתן להשתמש בהן להמחשת כמה בעיות/פתרונות נוספים. בעקבות הדיון tiny84, אותם תרחישים נדונים עבור ה- ATtiny85.

שלב 1: חומרה נדרשת

תמונה
תמונה

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

שֵׁם מקור אפשרי כיצד משתמשים
מרבב 4x2: 1 מוסר מכיל ארבעה מתגים עם 2 כניסות; 1 פלט המהווים את המנגנון שבאמצעותו משותפים אותות ממשק SPI וקלט/פלט של יישומים.
מתג SPST כל סוג מתג (רגעי או נעול) יעבוד. המתג משמש להמחשת שיתוף סיכות עבור קלט יישום.
נגד 10K נגד משיכה למתג SPST למניעת קלט צף
תמונה
תמונה
תמונה
תמונה

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

פִּין שֵׁם פוּנקצִיָה
15 ז כפי שצוין בטבלת האמת, המכפף פועל רק כאשר סיכת ההפעלה G נמוכה. מכיוון שאף פעם לא נרצה להשבית לחלוטין את המרבב, סיכה 15 תחובר ישירות לקרקע.
2-4; 5-7; 9-11;12-14 A (קלט), B (קלט), Y (פלט) ישנם ארבעה כניסות 2; בוררי 1-פלט עם כל קבוצה של 3 סיכות ממוספרים ברצף בסדר A (קלט), B (קלט), Y (פלט) למשל עבור מתג 1; סיכה 2 = 1A; סיכה 3 = 1B; סיכה 4 = 1 Y.
1 בחר כאשר בחירה נמוכה, כניסת המתג A מחוברת לסיכת פלט המתג המשויכת, Y. כאשר הבחירה גבוהה, קלט המתג B מחובר לפלט במקום זאת. המתגים נשלטים בו זמנית על ידי האות Select ומתפקדים באופן זהה.
8 GND קרקע IC מרובי
16 VCC כוח IC מרובה

שלב 2: סקירת מקרי בדיקה

תמונה
תמונה
תמונה
תמונה

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

RESET היא הבחירה המושלמת עבור האפשרות Select multiplexer מכיוון שהיא נמוכה במהלך ההורדה אך חוזרת גבוה כשההורדה מסתיימת. שים לב שניתן להשתמש בכל אחד ממתגי המרבב עבור שני המקרים מכיוון שכל המתגים מתנהגים זהים. כמו כן, אף אחת מהדוגמאות אינה "מציאותית"; הם נבחרו במקום זאת כדרך הפשוטה ביותר להמחיש את טכניקות הבידוד

  1. מארז פלט: פלט LED מ- ATtiny84 pin 4 (SCK) מבודד באמצעות מתג מרבב 2

    • חבר את סיכה מרבב 2A לקרקע
    • חבר סיכה מרבב 2B ל- ATtiny85 פין 4
    • חבר את פלט 2Y לאנודת ה- LED

      • תוצאות צפויות:

        • נורית כבויה במהלך ההורדה מכיוון שהיא מחוברת לאדמה 2A
        • נורית מחוברת לפין פלט היישום 4 לאחר ההורדה באמצעות 2B ומתחילה להבהב
  2. מקרה כניסה: קלט מתג SPST לסיכה 6 של ATtiny84 (MOSI) מבודד באמצעות מתג מרבב 3

    • חוט מוליך MOSI מכותרת מתכנת AVR מועבר ל- 3A
    • מתג קלט 3B מחובר לפלט SPST
    • פלט 3Y מחובר לסיכה 6 של ATtiny84

      • 3A, MOSI, מחובר לסיכה 6 במהלך ההורדה
      • 3B, פלט SPST, מחובר לסיכה 6 לאחר ההורדה

מקרה 1 מצליח אם הנורית לא מהבהבת במהלך הורדת התוכנית ואז מהבהבת כל שתי שניות לאחר ההורדה כצפוי תחת בקרת התוכנית. ללא בידוד הנורית הייתה מהבהבת במהלך ההורדה מכיוון שהיא מחוברת ישירות לאות SCK, שמשנה את המצב לנתוני/שידור נתוני השעון.

מקרה 2 מצליח אם אות MOSI מועבר ל- ATtiny84 במהלך ההורדה, כלומר ההורדה לא נכשלת, והנורית מגיבה להפעלה/כיבוי של SPST לאחר ההורדה. מקרה 2 אכן מונע כשל הורדה אחד בלתי סביר. ללא בידוד, מתג SPST יגרום לכישלון אם 1) משתמשים במתג נעול ו 2) המתג נשאר במצב פועל במהלך ההורדה. כאשר המתג מבודד על ידי המרבב, המתג אינו יכול לגרום לכשל הורדה בשום מקרה. קצת מתיחה אבל מנחמת אותנו הזקנים.

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

שלב 3: מקרה ATtiny84 1 - לבודד פלט יישומים

תמונה
תמונה

שלב זה מתאר את ההתקנה לשיתוף של סיכת פלט יישום עם אות הורדה. הדוגמה שבה נעשה שימוש היא הנורית המחוברת לסיכה 4 (SCK). שימוש בלד הקיים כדוגמה מאפשר דגש על הוספת המרבב לסביבת החומרה והתוכנה של חלק 1.

  • חוּמרָה

    • הוסף את המרבב ללוח הלחם במיקום היחסי המוצג בתרשים הטיגון לעיל. המרבב ממוקם כלפי המרכז כדי לאפשר מקום למתג SPST הדרוש במקרה 2.
    • הרחב את אות ה- RESET למכפיל על ידי הוספת חוט עופרת (הצבע צהוב) מסיכה 11 של ATtiny84 לסיכה 1 מרבב.
    • התקנת החומרה הנותרת היא כפי שניתן בשלב 2

      • חבר את סיכה מרבב 2A ישירות לקרקע
      • חבר את פין 2B לסיכה ATtiny84
      • חבר את הפלט 2Y לאנודת ה- LED

        • תוצאות צפויות:

          • במהלך ההורדה 2Y מחובר לקרקע (2A) כך שהנורית נשארת כבויה
          • לאחר ההורדה 2Y מחובר ל- ATtiny84 pin 4 - בקרת LED ליישום
  • תוֹכנָה

    • נעשה שימוש חוזר בקוד החלק 1; זמין מהחלק הראשון להנחיה במקום לשכפל כאן
    • טען והדר את תוכנית החלק 1 ב- Arduino IDE
    • חבר את מתכנת ה- AVR הקטן ליציאת USB למחשב
    • חבר את כבל ה- USB ל- Adafruit Serial ליציאת USB שנייה

      • נוצרת יציאת COM והיא זמינה באופן אוטומטי ברשימת יציאות IDE
      • הפעל את חלון ה- COM
    • הורד את הקוד המורכב ל- ATtiny84

תוצאות תוכנית היישומים זהות לחלק 1 מכיוון שהשינוי היחיד היה העברת הנורית למיקום "מוגן": הנורית מהבהבת במרווחים של 2 שניות; הפלט הסדרתי זהה. ההבדל היחיד שצריך להתרחש הוא שהנורית כבר לא מהבהבת במהלך ההורדה מכיוון שבמהלך הזמן הזה היא מחוברת לקרקע באמצעות סיכה 2A מרבב.

תמונה
תמונה

שלב 4: מקרה ATtiny84 2 - לבודד קלט יישומים

תמונה
תמונה

שלב זה בונה על ההתקנה של מקרה בידוד הפלט הקודם. שינויי חומרה מורכבים מהצמדת מתג SPST לסיכה 6 של ATtiny84 (MOSI) באמצעות המרבב. כך ששינויי החומרה הם מינימליים אך ישנם מספר שינויי תוכנה המאפשרים למתג SPST לשלוט בנורית באמצעות הפרעה להחלפת סיכה. הקוד המעודכן כלול בתחתית סעיף זה. יש להעתיק את הקוד ל- IDE של Arduino; מציע לשמור אותו בשם Multiplexer_Input. (אני מתנצל על אורך הקטע הזה, אך זהו לב מטרתו של המורה וחושב שהוא קורא טוב יותר כמונולית במקום להכניס הפסקות מלאכותיות.)

עדכון מקום מַטָרָה
כוללים מחלקת SoftwareSerial "פריצה" כולל סעיף הנורית נשלטת כעת על ידי מתג SPST באמצעות הפרעה להחלפת סיכה. יש לשנות את מחלקת SoftwareSerial מכיוון שאחרת היא מקצה את כל וקטורי ההפרעה לשינוי סיכה. זה גורם לשגיאת קישור "הגדרה מרובה" עבור הווקטור (יציאה 0) שהוקצה למתג SPST. גרסת SoftwareSerial שנפרצה צריכה להיות ממוקמת באותה ספרייה כמו התוכנית, כך שהיא תשפיע רק על יישום זה.
הגדרת סיכת קלט SPST סעיף כולל/הגדרה הקצאת קלט SPST לפין התקן. הסיכה היא ספציפית להתקן ולכן היא מתווספת לקטע #ifdef ATtiny8x.
מצב סיכת קלט SPST פונקציית ההתקנה סיכת SPST מוגדרת כ- INPUT
קבע את תצורת הפסקת סיכת SPST פונקציית ההתקנה וקטור ההפרעה מוקצה לסיכת הקלט SPST כך ששינוי מצב מתג גורם להפרעה. אוגרי התצורה וסוג ההפרעה הם ספציפיים למכשיר. כדי להפוך את הקוד לפשוט ככל האפשר, ההבדלים מטופלים בתוך קטע #אם מוגדר
הגדרת הודעה טורית מלאה פונקציית ההתקנה הודעת הפלט הסידורי המלא של ההתקנה משתנה כך שישקף את יישום קלט המרבב
הוסף פונקציית ISR של מתג SPST קטע קוד ה- ISR עבור הפרעה לשינוי סיכת SPST מתווסף. הקוד נפוץ אך הווקטור המשמש הוא מכשיר ספציפי ומוגדר בחלקים התלויים בהתקן בראש התוכנית. על מנת לוודא שה- ISR מופעל, מצב LED משתנה. אף על פי שאין אין ביישום אמיתי, נוצרת הודעת פלט טורית המשקפת את מצב ה- LED החדש.
שנה את עיבוד הלולאה פונקציית לולאה ISR שולט כעת בהדלקת וכיבוי הנורית כך שהפונקציונליות תוסר משגרת הלולאה. שיחה לשגרת השינה מתווספת ל- ATtiny84 כמעין "תוספת". עבור יישום זה, שינה ATtiny85 אינה פועלת; אולי בגלל ההתערבות של מחלקת Serial Software מכיוון שהיא פועלת עם הסרת SoftwareSerial.
הוסף שגרת שינה קטע קוד אין צורך בפונקציונליות שינה כדי להוכיח שימוש במכפיל. רק הוסיף כי בדרך כלל ירצה לחכות לקלט במצב POWER_DOWN כדי לחסוך בחשמל במקום להמשיך לרוץ בלולאת התוכנית מבלי לעשות דבר עד שתתרחש קלט.

שנה את קוד המחלקה SoftwareSerial

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

C: / Program Files (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src

בצע חיפוש ב- PCINT0_vect ב- SoftwareSerial.cpp כדי למצוא את מיקום ההתחלה לשינויי הקוד. הוסף את הקוד הבא מיד לפני המשפט #אם מוגדר (PCINT0_vect) הקיים.

#אם מוגדר (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif מוגדר (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

עכשיו הגיב על בלוק הקוד הקיים שמקצה את וקטורי הפסקת היציאה כפי שמצוין להלן (פשוט הוסף את סמלי ההערה של בלוק ההתחלה והסיום / * ו- * /):

/*

#if מוגדר (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if מוגדר (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if מוגדר (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if מוגדר (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif */

הגדר את החומרה

מתג SPST מחובר לסיכה 6 של ATtiny84 (MOSI) כמפורט בשלב 2. ההליך כפול כאן לנוחות.

  • חבר את כניסת המתג 3A לכבל MOSI של מתכנת ה- AVR הזעיר
  • חבר 3B לסיכת הפלט של מתג SPST
  • חבר 3Y לסיכה 6 של ATtiny84

    • תוצאות:

      • 3A, MOSI, יועבר ל- ATtiny84 pin 6 במהלך ההורדה
      • 3B, פלט SPST, יוגדר לסיכה 6 לאחר ההורדה

הפעל את התוכנית

לפני הריצה, הצב את מתג SPST במצב כבוי. אחרת הנורית תידלק כאשר המתג כבוי וההיפך. בצע את ההליך לשלב 3 כדי לטעון, לאסוף ולהוריד את תוכנית קלט היישום באמצעות Arduino IDE. כמו בעבר, הנורית לא אמורה להבהב במהלך ההורדה ולכן האינדיקציה היחידה שהתוכנית פועלת תהיה ההודעה הטורית בסיום שגרת ההתקנה: SETUP Complete - קלט דוגמה

בשלב זה התוכנית מחכה לקלט ממתג SPST. הצבת המתג במצב ON תגרום להדלקת הנורית; שינוי בחזרה למצב כבוי מכבה את הנורית. הודעות פלט מוודאות כי ה- ISR הופעל (ISR: Led HIGH, ISR: Led LOW). שימו לב לסדר ההודעות הסדרתיות הוא GO TO SLEEP הראשון שמחכה לשינוי מצב מתג; כאשר מקבלים קלט מתג ה- ISR מופעל, מחליף את הנורית ומתעד את השינוי; לאחר מכן העיבוד מתגבר בעקבות קריאת השינה מכיוון שההפסקה מעירה את המעבד.

תמונה
תמונה

תוכנית להוראה זו:

//************************************************************************

// חלק 2: יישום/הורדת שיתוף סיכות למכשיר //. משנה את קוד חלק 1 כדי לתמוך בשימוש חוזר ביישומים בסיכות // המוקצות לממשק התכנות SPI //. קוד "Comon" עבור ATtiny85 ו- ATtiny84 // ************************************** ****************************** #include "SoftwareSerial.h" // Modified Arduino SoftwareSerial class #include // While קוד העיבוד נפוץ, הסיכות המשמשות הן ספציפיות למכשיר #אם מוגדרות (_ AVR_ATtiny84_) || מוגדר (_ AVR_ATtiny84A_) #define ledPin 4 // מתג כדי להדליק/לכבות את Led מחובר/להגדיר #להגדיר rxPin 9 // סיכה המשמשת לקבלת סידורי #define txPin 10 // סיכה המשמשת לשידור סידורי #define SpstPin 6 // קלט ממתג SPST (MOSI) #define ISR_VECT PCINT0_vect // מתג SPST פין שינוי הפרעה וקטור #elif מוגדר (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // קלט ממתג SPST (INT0_0_def // מתג SPST פין שינוי הפרעה וקטור #else #שגיאה רק ATiny84 ו- ATtiny85 נתמכים על ידי פרויקט זה #endif // צור מופע של מחלקת סדרת התוכנה המציין איזה התקן // סיכות ישמשו עבור קבלה ושידור SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // אתחל משאבי עיבוד // ------------------- -------------------------------------------------- --- הגדרת חלל () {mySerial.begin (9600); // התחל עיכוב בעיבוד סדרתי (2000); // תן זמן ליציאת Serial Com להשלמת ההפעלה. // אחרת הפלט הראשון כנראה חסר או משובש pinMode (ledPin, OUTPUT); // הגדר סיכת לד עבור OUTPUT pinMode (SpstPin, INPUT); // הגדר את סיכת המתג SPST כ- INPUT #אם מוגדר (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // הגדר הפרעה לשינוי סיכה כדי להתמודד עם קלט המתג בפין 6 (MOSI) GIMSK | = (1 <

שלב 5: מקרה ATtiny85 1 - לבודד פלט יישומים

תמונה
תמונה

במקום לבנות התקנת חומרה כפולה עבור ATtiny85, כנראה שקל יותר להתחיל עם התצורה המוגמרת עבור ATtiny84 משלב 4 ולהחליף את שבב tiny84 ב- tiny85. כל החומרה הנדרשת כבר זמינה. אם אתה משתמש בגישה זו, אתר את זעיר 85 כך שהסיכות 3 ו -4 תואמות את הכבל הטורי tx ותקבל חוטים. אז זה רק עניין של העברת חוטי ההובלה של ממשק SPI כך שיתאימו למיקומם הנדרש עבור ה- ATtiny85.

אם מתחילים מאפס, פשוט בצע את השלבים הכלליים משלב 3 ואת תרשים הטיגון לעיל. הקוד זהה לזה שמשמש עבור ATtiny84 בשלב 3 עם אותן תוצאות צפויות - ללא הבהוב במהלך ההורדה; בעת הפעלת הנורית מהבהבת במרווחים של 2 שניות והודעות פלט סדרתיות עוקבות אחר מצב הנורית.

תמונה
תמונה

שלב 6: מקרה ATtiny85 2 - בידוד קלט יישום

תמונה
תמונה

לצורך התקנת חומרה, התחל עם התצורה משלב 5 והוסף את מתג SPST כפי שמצוין בתרשים הטיגון לעיל. למעשה השתמשתי במתג רגעי עבור גרסת ה- tiny85 וזה הופך את האימות לקל יותר. שימו לב שפלט המתג מסתובב 180 מעלות מתצורת ATtiny84. שינוי זה מקל על ניתוב חוטי החיבור מכיוון שכל 3 אותות ה- SPI נמצאים באותו צד עבור ה- ATtiny85.

השתמש באותה תוכנית כמו לשלב ATtiny84 4. אותן תוצאות כלליות צפויות - נורית LED משתנה כאשר מתג SPST מופעל/כבוי והודעות פלט סדרתיות מתעדות את השינויים. הודעות GO TO SLEEP חסרות מכיוון שפונקציונליות שינה אינה מופעלת עבור ATtiny85. למרות שנעשה שימוש באותה תוכנית, ישנם הבדלים ניכרים ביישום כדי להסביר את העובדה של- ATtiny85 יש רק רשם יציאות אחד (יציאה 0):

  1. SoftwareSerial מקצה כעת את הפסקת השינוי ביציאת 0 פינים לתקשורת סדרתית (נזכיר שהצלחנו להשתמש ביציאה 1 עבור ה- ATtiny84).
  2. יש ליישם את הפסקה של מתג SPST עם הפרעה חיצונית 0 (INT0) מכיוון שההפרעה לשינוי סיכה אחת ויחידה מוקצה על ידי SoftwareSerial. זה אכן ממחיש את הנקודה שבה הפרעות לשינוי סיכה והפרעות חיצוניות אינן תלויות מבחינה לוגית וניתן להשתמש בהן בתוך אותו רשם יציאות.
  3. שום דבר לא מרוויח על ידי שימוש בגירסת SoftwareSerial שהשתנתה - יש רק יציאה אחת והמחלקה SoftwareSerial תתפוס אותה. עם זאת, המעמד שהשתנה עדיין שימש רק כדי להימנע משינוי שאינו קשור ישירות למטרת שלב זה.

מוּמלָץ: