נכון להיום, נראה שהמיקרו-בקר ATmega328P שולט ללא עוררין בעולם המייקרים המתחילים – עד כדי כך שחלקם לא מודעים בכלל לקיומם של מיקרו-בקרים אחרים. לפני כחצי שנה הופיע בשוק מיקרו-בקר בעל שם זהה כמעט לגמרי, ATmega328PB, ומסתבר שזה לא סתם הבדל סמנטי אלא שדרוג אמתי של ה-328 המוכר. מה מסתתר מאחורי ה-B הנוסף?
ה-ATmega328P הופיע בשנת 2009, ובחודש מרץ של אותה שנה הוא נבחר להחליף את ה-ATmega168 הישן בלוחות הארדואינו Duemilanove (שקדמו לדגמי Uno). בערך באותו זמן הארדואינו זכה להכרה ולהצלחה כלל-עולמית, ומכיוון שממציאי הארדואינו היו חכמים מספיק כדי לא להחליף סוס מנצח, המיקרו-בקר האלמוני-יחסית הפך להיות שם נרדף כמעט לארדואינו, וסיפור הצלחה קטן בפני עצמו.
לאחרונה, כשנדרשתי לבחור מיקרו-בקר לפרויקט כלשהו של לקוח, ה-ATmega328P היה המועמד המוביל: גם כי הוא עמד בלי לחץ בכל הדרישות הטכניות, וגם כי אני באופן אישי מכיר אותו (ואת משפחת AVR בכלל) טוב יותר מאשר את המתחרים. באותו זמן בדיוק החלו להופיע שמועות על ה-ATmega328PB, ומתוך סקרנות התחלתי לקרוא לעומק על מה מדובר. כאשר התברר שהוא משוכלל ואפילו זול יותר מקודמו, הוא הפך להיות הפייבוריט החדש. אז מה יש בו?
תאימות לאחור
ה-328PB, כפי שנקרא לו מעתה והלאה, תואם ל-328P מבחינת מיקום ותפקידי הפינים, וגם מבחינת החומרה. כלומר, אפשר לשים 328PB בכל מקום ששמנו פעם 328P, ולהעלות אליו כל קוד שהעלינו פעם ל-328P, וזה יעבוד. המגבלה היחידה היא שמספר הזיהוי של שני הדגמים שונה, כך שאם אלמנט כלשהו במערכת מסתמך על המספר הזה (למשל, שיטת הצריבה של ארדואינו), הוא עלול לצעוק שמדובר ברכיב שגוי. גם על זה אפשר להתגבר עם קצת ידע טכני, כפי שראינו כשהחלפתי 328P של ארדואינו ב-328 (בלי P!).
מגבלה קטנה נוספת מכיוון אחר היא שה-328PB זמין רק במארזי QFN או TQFP. אין גרסת DIP שאפשר לשים על מטריצה, וכנראה שגם לא תהיה.
בדרך כלל, כשג'וק עובר איזשהו עדכון ונוספת אות לשם שלו, מדובר בעדכון נקודתי יחסית – למשל, טווח מתחי פעולה גדול יותר, או פעולה חסכונית יותר. במקרה של ה-328PB, לעומת זאת, התווספו הרבה דברים, ביניהם…
פי שניים תקשורת
ל-328PB יש שני מודולי USART, שני מודולי SPI ושני מודולי TWI (או I2C) – פי שניים ממה שיש ב-328P. במקרים מסוימים תוספת המודולים יכולה לעשות חיים הרבה יותר קלים למפתחים, אך מכיוון שאין ל-328PB יותר פינים פיזיים מאשר לקודמו (ראו בסעיף הבא), רוב המודולים האלה מצטרפים כפונקציות אלטרנטיביות לפיני קלט/פלט קיימים. כלומר, אנחנו מקבלים עוד צמד RX/TX, אך אם נרצה להשתמש בו "נפסיד" שני פיני קלט/פלט דיגיטלי.
פיני קלט/פלט נוספים
ב-328P היו שני פינים שהוקדשו לקלט אנלוגי בלבד – ייתכן שנתקלתם בהם בדגמי Pro Mini, בשמות A6 ו-A7. ב-328PB, הצמד הזה שודרג לפיני קלט/פלט דיגיטלי עם אופציה לקלט אנלוגי.
בנוסף, ל-328P (במארז TQFP) היו שלושה פינים ל-GND ושניים ל-Vcc (מתח הפעלה), אולי בגלל מגבלות של עיצוב חומרה פנימי, או מתוך מחשבה לעתיד. ב-328PB, אחד מפיני ה-GND ואחד מפיני ה-Vcc שוחררו מתפקידם הקודם והפכו גם הם לפיני קלט/פלט דיגיטלי. מבחינת הרגיסטרים הפנימיים, ארבעת הפינים הדיגיטליים החדשים משתייכים לפורט חדש בשם E.
אפרופו, אם מחליפים 328P ב-328PB במעגל קיים וטוענים אליו קוד קיים, שינוי זה לא יגרום לקצרים חשמליים מכיוון שברירת המחדל של פיני קלט/פלט היא INPUT, שאינה מאפשרת מעבר של זרמים גדולים.
טיימרים נוספים
מעבר לשלושת הטיימרים המוכרים, ב-328PB יש שני טיימרים נוספים של 16 ביט כל אחד. טיימר הוא תמיד נכס רצוי ושימושי, בין השאר מכיוון שכל טיימר נוסף כאן "פותח" עוד שני ערוצי PWM בחומרה.
למרות ההצהרה על 10 ערוצי PWM, אם הבנתי נכון את התיאור הטכני במסמך ההבדלים, שניים מהערוצים החדשים מחוברים למעשה לאותו פין פלט. לא מדובר כאן בתכנון כושל, כי יש מעגלים פנימיים שמאפשרים לנצל את השיתוף הזה ליצירה של גל מאופנן (אות שמועבר על גבי גל נושא) במינימום משאבי עיבוד. חושבים על תדר 38KHz לשידור מידע באינפרה-אדום? בדיוק, ויש לזה גם שימושים אחרים.
מבחר שכלולים
במעמקי המיקרו-בקר החדש מסתתרות עוד כמה הפתעות מעניינות. אחת מהן, למשל, היא קוד זיהוי ייחודי – לא רק לדגם, אלא לכל ג'וק ספציפי שאתם מחזיקים ביד.
בונוס אחר וחשוב הוא מנגנון לזיהוי כשל בשעון חיצוני. נניח שהג'וק מוגדר לקבל את אות השעון שלו מגביש, והגביש מתנתק או נהרס. ב-328P, תקלה כזו תשבית לחלוטין את המיקרו-בקר, אך בזכות המנגנון החדש, ה-328PB מסוגל לעבור לשעון פנימי וגם להבין מה קרה. כך הוא יוכל להודיע למשתמש על הבעיה ולנהל את המערכת בהתאם למצב החדש במקום לקרוס טוטאלית.
בדרך לארדואינו?
האם ה-328PB יגיע בסופו של דבר גם ללוחות הארדואינו הבסיסיים, במקום 328P שמככב בהם כבר שש שנים? מצד אחד, הסידור ה"קלאסי" של הפינים בארדואינו לא יכול להעניק למשתמשים גישה לארבעת פיני הקלט/פלט החדשים, כך שחלק גדול מהפונקציונליות החדשה יילך לאיבוד. מצד שני, יש הרבה דברים שאפשר לעשות גם בלי הפינים הללו. לדוגמה, אפשר לשכתב את ספריות הליבה כך שינצלו את הטיימרים הנוספים, וכך יקטן מספר ההתנגשויות בין ספריות.
גם אם זה יקרה, זה ייקח הרבה זמן – ובינתיים מרחף מעל כל העסק חוסר הוודאות שמקורו ברכישת Atmel על ידי Microchip. אז בקטע של ארדואינו עוד מוקדם לתכנן את המסיבה. אבל אם אתם מפתחים על מיקרו-בקר עצמאי, וה-ATmega328P המוכר נראה לכם אופציה טובה, כדאי מאד לקחת בחשבון את ה-ATmega328PB החדש.
איפה קונים:)
אצל המפיצים המורשים – Digikey, Mouser, RS Components ודומיהם…
כשכתבת על זיהוי כשל בשעון חיצוני זה הזכיר לי את תעלומת הפרו מיני הדפוק 🙂
בדיוק, אבל זה לא פתרון קסם שעובד אוטומטית – צריך לצרוב פיוז מסוים, וצריך לדעת שהוא צרוב ולהבין את המשמעות של זה, אחרת לך תבין למה פתאום התוכנה שלך רצה הרבה יותר לאט…
לדעתי האישית אם כבר יוציאו אותו כלוח ארדואינו, כדאי שיתנו לו שם אחר. אני כבר מדמיין את ההדרכות לשאלה "למה ספרייה x. לא עובדת לי…. תקח זכוכית מגדלת ותסתכל על הג'וק"
נראה לי שספריה מספיק חכמה תדע להתאים את עצמה לג'וקים שונים (זה קורה אגב לא מעט בספריות הקיימות, בשביל הלוחות השונים). מה שכן, הרושם הוא שארדואינו הולכים כיום על לוחות חזקים ומשוכללים יותר, ולא בטוח שמעניין אותם בכלל להתעסק עם האונו הישן.