MVIO: עולם חדש מופלא

סדרת DA החדשה של מיקרו-בקרי AVR מהווה קפיצת מדרגה בעיקר מבחינת נפח זיכרון ומהירות, ואילו סדרת DB העוד-יותר חדשה מפציצה עם פיצ'רים נוספים שהם Killer apps ממש. בואו נדבר על אחד מהם – פיני קלט/פלט מרובי-מתחים (Multi-Voltage I/O)

דיאגרמה של מודול ה-MVIO מתוך ה-Datasheet
דיאגרמה של מודול ה-MVIO מתוך ה-Datasheet

אחד מטקסי הזובור שעוברים משתמשי ארדואינו מתחילים הוא התגלית (בדרך הקשה, כמובן) שלא כל הרכיבים האלקטרוניים מוכנים לעבוד באותו מתח. זה יכול להיות מתאם לכרטיס SD, רכיב שעון חיצוני, לא משנה – הפואנטה היא שפתאום מטריצה וחוטי גישור כבר לא מספיקים כדי לחבר בין חלקי המערכת, וצריך גם רכיב מתאם בין רמות מתח לוגיות, מייצב מתח נוסף, ועוד כאבי ראש. עם הזמן גורם ההפתעה נעלם, אך כאבי הראש נמשכים: המרת המתחים מחייבת אותנו לעתים קרובות לשים רכיבים מתווכים במערכות שלנו, שתופסים מקום ועולים כסף.

פה ושם אפשר למצוא מיקרו-בקרים שעובדים ב-3.3V, ועם זאת מוכנים לסבול קלט של עד 5V. זה נחמד, אבל חד-סטרי. מה שבאמת היה עוזר לנו זה פינים שיכולים גם להוציא וגם לקלוט מתח שונה מהמתח ה"ראשי" של המיקרו-בקר. זה בדיוק מה שמודול ה-MVIO של סדרת ה-DB עושה.

בגדול, מדובר על פורט (8 פינים) אחד ויחיד מבין הפורטים של המיקרו-בקר, שמקבל את המתח החיובי שלו מפין ייעודי שנקרא VDDIO2 במקום מפין VDD הראשי. האדמה נשארת משותפת. הפינים של הפורט הזה יתנהגו, מכל הבחינות שרלוונטיות למתח חשמלי, כאילו היו שייכים למיקרו-בקר שעובד כולו על המתח שב-VDDIO2. המתח הראשי יכול להיות בין 1.8V ל-5.5V (כן כן, אומרים שזה לא ה-Absolute Maximum אלא המקסימום הרגיל!) ואילו VDDIO2 יכול להיות בין 1.62V ל-5.5V, וגם להשתנות בזמן העבודה, בלי שום תלות בין שני המתחים.

כלומר, אנחנו דואגים למקור המתח הנוסף, ואז יכולים "לדבר" עם כל רכיב דיגיטלי אחר שמחובר אליו, בלי שנצטרך ממירי סיגנלים ומתאמי רמות למיניהם. לרוע המזל, אין לפורט הזה (פורט C) חיבור למודול ADC, כך שאנחנו לא יכולים לקרוא קלט אנלוגי. אבל כן יש בו קלט/פלט דיגיטליים רגילים, תקשורת UART, SPI ו-I2C (אחד מכל אחד) ועד 7 ערוצי פלט PWM, אם הבנתי נכון את ה-Datasheet. לא הכול בבת אחת, כמובן.

בנוסף, המיקרו-בקר מספק יכולות מעקב ובקרה בסיסיות על מה שקורה בפורט הזה מבחינת מתח. הפין VDDIO2 עצמו מחובר לאחד מערוצי ה-ADC, אחרי מחלק מתח ביחס 1:10 שמבטיח שהפלט שם לעולם לא יהיה גבוה יותר מהמתח של VDD. זה מאפשר לנו לדעת "מבפנים" מה המתח המדויק ב-VDDIO2. כמו כן, יש ביט סטטוס (VDDIO2S, שהוא ביט 0 ברגיסטר MVIO.STATUS) שאומר אם המתח ב-VDDIO2 הוא מעל המינימום המותר או לא, וכן פסיקה שמבוססת עליו ויכולה להתעורר אוטומטית בכל פעם שביט הסטטוס משתנה.

הכנות ב-Curiosity Nano

ה-AVR128DB48 היחיד שיש לי בינתיים נמצא על לוח הערכה רשמי מסדרת Curiosity Nano של Microchip, ושם VDDIO2 מחובר כברירת מחדל, פיזית, למתח הראשי של המערכת. לכן, כדי לשנות את המתח שלו, צריך לנתק נגד אחד, ולחבר את המתח החיצוני לנקודה ייעודית באמצע הלוח (אין פין מתאים ב-headers הרגילים שבצדדים):

לפני ואחרי: התאמת לוח Curiosity Nano עם AVR128DB48 למתח חיצוני ל-MVIO
לפני ואחרי: התאמת לוח Curiosity Nano עם AVR128DB48 למתח חיצוני ל-MVIO (לחצו להגדלה)

יש למיקרו-בקר פיוז בשם MVSYSCFG, שקובע אם אספקת החשמל היא Dual או Single. כברירת מחדל, הג'וק שעל הלוח הוגדר עם Dual, אבל גם כששיניתי אותו ל-Single הפינים בפורט C (שהפעלתי בקוד) נותרו דוממים, עד שחיברתי מתח ל-VDDIO2. אז מה שהפיוז הזה עושה בפועל זה רק לכבות את אמצעי המעקב והבקרה שהזכרתי קודם, מה שחוסך כ-500 ננו-אמפר, לפי ה-Datasheet. בכל מקרה, אי אפשר להשאיר את VDDIO2 צף. ליתר דיוק, אפשר, אך ייתכן שזה לא יהיה בריא לסיליקון.

הדגמה של ה-NVIO

בתמונה הבאה, פינים דיגיטליים של המיקרו-בקר (PB0 לחוט האדום ו-PC0 לחוט הכתום) מזינים זוגות זהים של לדים צהובים במעין טור. כל לד מפיל כ-2V, והמתח הראשי של המערכת הוא 3.3V. לכן, בזוג הלדים השמאלי רק הראשון דולק ולשני לא נשאר מספיק מתח. פין PC0, לעומת זאת, מעביר מתח שה-MVIO מקבל מספק כוח חיצוני ב-5V (דרך התנינים) וזה מספיק לשני הלדים.

הדגמת פלט מתחים שונים מאותו מיקרו-בקר, עם MVIO
הדגמת פלט מתחים שונים מאותו מיקרו-בקר, עם MVIO (לחצו להגדלה)

כתבתי גם קוד בדיקה שמשקף, באמצעות הלד המובנה על הלוח (פין PB3), את ביט הסטטוס של המתח ב-VDDIO2. הקוד הזה מסתמך על הפסיקה של ה-MVIO, והופתעתי לראות שזמן התגובה של הקוד ל"משחקים" שלי עם ספק הכוח איטי, עד כדי שנייה שלמה. מהר מאוד הבנתי שהסיבה היא שבמהלך הבדיקה, הפינים של פורט C לא היו מחוברים לכלום, צריכת החשמל הייתה אפסית, ולכן הפלט מספק הכוח (הסיני) עצמו השתנה לאט יותר ממה שהתצוגה שלו הראתה. הוספתי נגד 510 אוהם בין אחד הפינים, שהגדרתי כפלט HIGH, לאדמה, וזה שיפר מעט את זמן התגובה. תגובה מיידית התקבלה כאשר ניתקתי וחיברתי פיזית את הפלוס מהספק ל-VDDIO2. מתח הסף לשינוי ביט הסטטוס היה בסביבות 1.5V.

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

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

להרשמה
הודע לי על
0 Comments
Inline Feedbacks
הראה את כל התגובות