4809 זה ה-328 החדש? הכירו את ה-Nano Every

אחרי שנים רבות של ציפייה (ככה זה נראה, לפחות), ארדואינו חזרו קצת לשורשים והוציאו לוח חדש: פשוט, נוח, זול ובלי כל הקשקושים של ה-IoT. לוח זה, שנקרא משום מה Nano Every, שומר פחות או יותר על התצורה הפיזית של ה-Nano הוותיק, אבל במקום ה-ATmega328P הפרהיסטורי הוא כולל מיקרו-בקר מודרני, משוכלל וחזק יותר מאותה משפחה: ה-ATmega4809. הנה סקירה בסיסית של היתרונות והחסרונות של ה-Every – ויש לא מעט!

לוח Nano Every החדש של ארדואינו - האריזה וכל מה שבתוכה
לוח Nano Every החדש של ארדואינו – האריזה וכל מה שבתוכה

מבנה פיזי

בגדול, הלוח דומה מאוד כאמור לארדואינו נאנו ה"קלאסי": אותו גודל (אורך/רוחב) ואותם מיקומי פינים, במיפוי זהה. עם זאת, המתכננים הכניסו שני שינויים שנועדו להפוך את הלוח החדש לנוח יותר לשיבוץ בפרויקטים – בצד התחתון אין שום רכיבים, ובשולי הלוח יש "חצאי חורים" (Castellation). זה מאפשר הלחמה ישירה ושטוחה ל-PCB (אם קניתם את הגרסה בלי ה-headers המולחמים-מראש כמובן).

לוח Nano Every עם Headers
לוח Nano Every עם Headers (לחצו להגדלה)

האופציה הזו, שלא הייתי מכתיר אותה בתור הדרישה הכי קריטית בעולם, עולה ביוקר: כיוון שכל הרכיבים נדחקו לצד העליון, הכיתובים עם שמות הפינים עברו לצד התחתון. כן, איפה שאי אפשר לראות אותם. אם כבר מתכננים PCB ומלחימים את ה-Every אליו, זה פחות נורא. לעבודה על מטריצה לעומת זאת זה סיוט, וכאילו זה לא מספיק גרוע, הכיתוב קרוב מדי לחורי הפינים ועלול להיות מוסתר חלקית על ידי ה-headers המולחמים. זה לפחות מה שקרה בלוח שאצלי, שהולחם במפעל כך שאי אפשר להאשים אותי. לפחות הפינים של GND מוקפים בצבע לבן גם מהצד העליון, כך שאותם קל לזהות.

אותו לוח, צד תחתון
אותו לוח, צד תחתון (לחצו להגדלה)

הלדים של החשמל (ירוק) ופין 13 (כתום) נמצאים משני צדי חיבור ה-Micro USB. רחוק יותר, באמצע הלוח, נמצאים הלדים של RX/TX למחשב, גם הם כתומים. כפתור ה-Reset זעיר אבל נוח.

התאימות המושלמת לסידור הפינים של ה-Nano הישן פירושה שיש להם אותו מספר פיני קלט/פלט, אף על פי של-ATmega4809 יש הרבה יותר פינים מל-ATmega328P. עיון בסכמה של ה-Every מגלה ש-13 (!) פינים מצוינים של המיקרו-בקר פשוט לא מחוברים לכלום ואינם נגישים. איזה בזבוז! ואפרופו, פרס מובטח למי שיצליח להבין מה פשר הרכיב U3B בסכמה הזאת…

סכמה רשמית של ארדואינו Nano Every החדש
סכמה רשמית של ארדואינו Nano Every החדש. מי מבין את פשר הרכיב שסימנתי? (לחצו להגדלה)

שורה תחתונה: תואם מדי.

שעון

על פי המסורת, לוחות ארדואינו 8-ביט סטנדרטיים פועלים במהירות שעון 16MHz, בהתבסס על גביש חיצוני. על ה-Nano Every אין גביש, וזה אומר שהמיקרו-בקר מסתמך על המתנד הפנימי שלו. בדף הרשמי של הלוח כתוב שמהירות השעון שלו היא 20MHz, והמתנד אכן מסוגל לפעול במהירות כזו, אך כשאילצתי את המיקרו-בקר לחשוף את אות השעון (לא דבר שאפשר לעשות עם פקודות ארדואינו רגילות) הסתבר שהוא עובד דווקא ב-16MHz.

אות השעון שחולץ מלוח Nano Every
אות השעון שחולץ מלוח Nano Every. אין ספק שזה 16MHz (לחצו להגדלה)

פקודות תלויות-זמן כמו delay והגדרת ה-baudrate של Serial פעלו בסדר, מה שאומר שספריות הארדואינו מצפות ל-16MHz על הלוח הזה, וחבל שיצרו מצג שווא של מהירות גדולה יותר. מי שירצה לעבוד בכל זאת ב-20MHz יצטרך לחפור עמוק בקוד, וגם לגשת למיקרו-בקר באמצעות צורב ודרך המגעים הלא-נוחים בתחתית הלוח, כי את הפיוז שמגדיר את קצב המתנד הפנימי אי אפשר לשנות דרך ה-Bootloader.

אילו קיבלנו 16MHz במקום 20MHz, דיינו – אלא שיש כאן עוד בעיה. המתנד הפנימי לא מדויק, ועל פי ה-datasheet יכול להגיע במקרים קיצוניים לסטיות של עד פלוס/מינוס 4%. נכון שבתנאים רגילים זה יהיה פחות, אבל גם אחוז אחד זה המון – כמעט רבע שעה ביממה, וזה חיסרון שחייבים לקחת בחשבון בכל יישום תלוי-זמן.

שורה תחתונה: עבודה בעיניים.

חשמל

בנוסף לאספקת החשמל דרך ה-USB, על הלוח יש שני מייצבים: אחד למתח של 5V ואחד ל-3.3V. בלוח ה-Nano הישן, אלה היו LM1117 שמסוגל לתת עד 800mA, ופלט ה-3.3V של שבב התקשורת FT232RL, שהוא בעיקר מס שפתיים – 24mA בלחץ, אם הבנתי נכון.

בלוח החדש יש שדרוג משמעותי לנושא החשמל. המייצב ל-5V, ממתג מדגם MPM3610, מסוגל לספק עד 1.2A, והוא מקבל מתח עד 21V (!). לא הצלחתי להבין בדיוק מהו הסף התחתון של מתח הכניסה, אך הוא נמוך משמעותית מזה של ה-Nano הישן, שהיה 7V. המייצב ל-3.3V בלוח החדש השתדרג גם כן: זהו AP2112K-3.3TRG1, שמסוגל לתת 600mA. כמובן, כמו בכל מערכת, רצוי מאוד לא להתקרב לגבולות היכולת של המייצבים הללו, ולהיזהר מהתחממות יתר.

שורה תחתונה: יישר כוח!

קלט אנלוגי ו-PWM

ל-Nano Every יש 8 פינים שיכולים לשמש לקלט אנלוגי, והם מסומנים בשיטה המוכרת כ-A0 עד A7 כולל. מתוכם, הפינים A4 ו-A5 משמשים בעת הצורך לתקשורת I2C.

המיפוי הזה סטנדרטי בארדואינו אך כאן הוא הפתיע אותי, כיוון שהוא לא תואם את סדר הערוצים האנלוגיים ה"טבעי" של המיקרו-בקר. למעשה, ל-ATmega4809 אין בכלל שום פין שיכול לשמש גם כקו תקשורת של I2C (כשהמיקרו-בקר הוא ה-Master), וגם כערוץ קלט אנלוגי. אז איך מימשו את A4 ו-A5?

ובכן, מסתבר שהמתכננים פשוט עשו קצר בין זוגות פינים של המיקרו-בקר, PA2 עם PF2 ו-PA3 עם PF3. הפינים מפורט A הם ל-I2C והפינים מפורט F הם לקלט האנלוגי. כל עוד מסתמכים על הגדרות ברירת המחדל זה בסדר, אבל אם מישהו ישחק עם הרגיסטרים ויעביר את PF2 או PF3 למצב I/O אחר, זה יגרום לבלגן נוראי, בתיאוריה עד כדי שריפת המיקרו-בקר.

לגבי הפלט ה"אנלוגי" (אות PWM) – כאן מצפה לנו הפתעה לא נעימה. בלוחות הארדואינו נאנו הישנים יש שישה פינים שמסוגלים להוציא אות PWM, ומספריהם 3,5,6,9,10,11. כשבדקתי את המיפוי ב-Every ראיתי שה-PWM בפין 11 מתבסס על אותו משאב בדיוק כמו בפין 9 (הם אופציות חלופיות), אז איך מימשו את שניהם גם יחד ב-Every? התשובה היא שלא מימשו את זה, ופקודת analogWrite לפין 11 לא עושה כלום.

שורה תחתונה: קלט ככה, פלט ביזיון

תקשורת UART

ל-ATmega4809 יש ארבעה מודולי UART בחומרה, ממסופרים 0 עד 3 כולל. בארדואינו Nano Every בחרו להנגיש למשתמשים רק שניים מהם:

  • מודול 3 הוא Serial, שמהווה את ערוץ התקשורת עם המחשב דרך חיבור ה-USB (באמצעות ג'וק מתווך); את הפלט/קלט שלו לא תמצאו בפינים הסטנדרטיים שעל הלוח.
  • מודול 1 הוא זה שמנותב לפינים 0 (קלט, RX) ו-1 (פלט, TX), והוא נקרא Serial1. אותו לא תראו ב-Serial Monitor.

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

ומה לגבי שני המודולים האחרים? מי שייכנס לעומק המיפוי והרגיסטרים יגלה שאת מודול 0 אפשר לממש דרך הפינים 2(TX) ו-7(RX). את מודול 2 אפשר לממש דרך פינים 6(TX) ו-3(RX) אם משנים את הניתוב הפנימי של המודול (דרך הרגיסטרים של PORTMUX, ראו ב-Datasheet). בכל מקרה, כדי לעשות זאת צריך להגדיר את כל הרגיסטרים לבד: נכון לכתיבת שורות אלה אין אובייקט Serial מוגדר-מראש בארדואינו עבור המודולים האלה.

שורה תחתונה: סבבה.

זיכרון

ה-ATmega4809 אינו מתחרה במיקרו-בקרים 32 ביט שנעשים נפוצים וזולים יותר ויותר, אך הוא כן מהווה שדרוג לעומת ה-ATmega328P הוותיק. זה מתבטא בעיקר בזיכרון ה-RAM, שכולל 6KB – פי שלושה מארדואינו אונו או נאנו. ה-Flash שבו מאוחסן קוד התוכנה גדל ב-50% ל-48KB, ואילו ה-EEPROM דווקא הצטמק בשלושה רבעים וגודלו בלוח החדש 256 בייטים בלבד. השיפור ב-RAM וב-Flash הוא לא מהפכני, ולא יגלה לכם עולם חדש של נפח בלתי-נדלה לספריות ולמשתנים. מצד שני, במערכות מסוג זה, כל קילובייט עוזר.

שורה תחתונה: נחמד.

מחיר

אחד היתרונות הגדולים של ה-Every הוא תג המחיר הזול שלו: 8 אירו בחנות ארדואינו הרשמית (לפני מיסים/משלוח), לעומת 20 אירו ל-Nano הישן. זה עדיין גבוה משמעותית מחיקויי ה-Nano הסיניים, ובכל זאת – בהתחשב באיכות הרכיבים וההרכבה וביכולות של המיקרו-בקר החדש – זה צעד ענק לטובת המייקרים.

שורה תחתונה: מגניב ביותר (לפני מיסים/משלוח)

תמיכה

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

עם גרסה 1.8.9 של סביבת הפיתוח וספריות מעודכנות, כל הדוגמאות שבדקתי התקמפלו בלי בעיה, כולל למשל תוכנת הבדיקה של NeoPixel. מצד שני, מותקנות אצלי כרגע מעט ספריות, וממקורות טובים. סביר להניח שיש שם בחוץ הרבה ספריות של אנשים פרטיים שלא נכתבו עם מספיק אבסטרקציה (בגלל חוסר ידע או חוסר ברירה) והן לא יצליחו לעבוד על ה-Every.

ספריית NeoPixel בפעולה על ה-Nano Every
ספריית NeoPixel בפעולה על ה-Nano Every (לחצו להגדלה)

הנתונים על הלוח עצמו, באתר הרשמי של ארדואינו, מאוד לא ממצים, ודפי המידע של הפקודות השונות עדיין לא כוללים התייחסויות אליו, עד כמה שראיתי. בחלק מהמקרים הוא אמנם יתנהג בדיוק כמו ה-Nano הישן, אבל בחלק (כגון בנושא של Serial) ממש לא, וצריך לחטט באינטרנט כדי לגלות מידע שגם הוא לא תמיד נכון.

שורה תחתונה: בינונית מינוס

סיכום כללי ועגום

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

בקיצור, ה-Every הוא לצערנו לא הארדואינו החדש בה"א הידיעה. לא רע במיוחד, בטח לא טוב במיוחד – סתם עוד לוח (זול) שמצטרף למשפחה.

תוספת מאוחרת: אחרי שכתבתי את כל זה, גיליתי שעל הצד האחורי של קופסת הקרטון של ה-Every כתוב שיש 5 פיני PWM, כך שהתחקיר שלי בנושא היה נכון-אך-מיותר. כתוב שם גם שמהירות השעון היא 20MHz, מה שלא נכון הן לפי הסקופ והן לפי קריאה של הרגיסטר המתאים.

להרשמה
הודע לי על
5 תגובות
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

אירוני שעבור ההמרה מ-USB ל-UART השתמשו ב-cortex-m0+ שמנצח את ה-ATMEGA בכל פרמטר חוץ מגודל הפלאש וכמות הפינים (שגם כך לא מנוצלת פה כמו שאמרת).
היו כבר עושים פורט לארדואינו בקר ההוא וסוגרים עניין יותר בזול 😛
דאטהשיט למעוניינים: http://ww1.microchip.com/downloads/en/devicedoc/atmel-42363-sam-d11_datasheet.pdf

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

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

זה לא כזה נפוץ בשרטוטים של מעגלים בסדרי גודל שהחובב הממוצע נחשף אליהם.
בדרך כלל נתקלים בזה ברכיבי FPGA או ASICים למינהם אשר דורשים המון(!) מתחי הזנה שונים ומשונים.
כל אחד ממתחים אלה מחובר הרבה פעמים למספר פינים שונים ברכיב, ולכל אחד מהם צריכים לחבר המון (עשרות רבות) קבלי Decoupling בערכים שונים על-פי דרישות היצרן ונתוני המערכת.

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