איך ולמה לקרוא גליונות נתונים אם מיקרו-בקרים הם התחביב שלך

איך ולמה לקרוא גליונות נתונים אם מיקרו-בקרים הם התחביב שלך

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

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

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

אני אתחיל עם המסורתי

מהבהבת נורית LED ב- Arduino

ומיד הקוד:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"מה זה? – ישאל קורא מתוחכם. - למה אתה כותב משהו לאוגר הקלט של PINB? זה לקריאה בלבד!" בֶּאֱמֶת, תיעוד ארדואינו, כמו רוב המאמרים החינוכיים באינטרנט, מציין שהפנקס הזה הוא לקריאה בלבד. חשבתי כך בעצמי עד שקראתי את זה שוב טופס מידע ל-Atmega328p, מכין מאמר זה. ויש:

איך ולמה לקרוא גליונות נתונים אם מיקרו-בקרים הם התחביב שלך

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

למה עוד לקרוא דפי נתונים?

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

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

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

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

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

  • להיות מסוגל להשתמש בשבבים בפרויקט שאיש לא כתב לו ספרייה;

  • כדי להקל על עצמך את המעבר מקו ח"כ אחד למשנהו;

  • כדי לייעל סוף סוף את הקוד הישן שלך, שלא התאים לארדואינו;

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

למה לכתוב לרושמים ישירות כשיש HAL ו-LL?

מילון
HAL, שכבת הפשטה גבוהה – ספריה לשליטה במיקרו-בקר ברמת הפשטה גבוהה. אם אתה צריך להשתמש בממשק SPI1, אתה פשוט מגדיר ומפעיל את SPI1 מבלי לחשוב אילו רגיסטרים אחראים למה.
LL, API ברמה נמוכה - ספרייה המכילה פקודות מאקרו או מבנים עם כתובות רישום, המאפשרת לך לגשת אליהם לפי שם. DDRx, PORTx, PINx ב-Atmega הם LL.

מחלוקות בנושא "HAL, LL או רישום" מתרחשות באופן קבוע בתגובות על Habré. מבלי לטעון לגישה לידע אסטרלי, אני פשוט אשתף בחוויה ובמחשבות החובבנות שלי.

לאחר שהבנתי פחות או יותר את Atmega ואחרי שקראתי מאמרים על המופלאות של STM32, קניתי חצי תריסר לוחות שונים - דיסקברי, ו-Blue Pills, ואפילו סתם צ'יפס למוצרים הביתיים שלי. כולם אספו אבק בקופסה במשך שנתיים. לפעמים אמרתי לעצמי: "זהו, החל מסוף השבוע הזה אני שולט ב-STM", השיק את CubeMX, יצרתי הגדרה ל-SPI, הסתכלתי על קיר הטקסט שנוצר, בטעם נדיב בזכויות יוצרים של STM, והחלטתי שזה גם איכשהו הַרבֵּה.

איך ולמה לקרוא גליונות נתונים אם מיקרו-בקרים הם התחביב שלך

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

עברו שנתיים, אני עדיין מלקק את השפתיים ST MCU Finder לכל מיני טעימים, אבל מעבר להבנתי, צ'יפס, ובטעות נתקל מאמר נפלא, אם כי לגבי STM8. ו פִּתְאוֹם הבנתי שכל הזמן הזה דפקתי על דלת פתוחה: הרגיסטרים של ה-STM מסודרים כמו של כל חבר כנסת אחר, ואין צורך בקובייה לעבוד איתם. האם זה בכלל היה אפשרי?..

HAL ובמיוחד STM32CubeMX הוא כלי למהנדסים מקצועיים שעובדים בצמוד עם שבבי STM32. התכונה העיקרית היא רמת הפשטה גבוהה, היכולת לעבור במהירות מ-MCU אחד לאחר ואפילו מליבה אחת לאחרת, תוך הישארות בתוך קו STM32. תחביבים כמעט ולא נתקלים בבעיות כאלה - הבחירה שלנו במיקרו-בקרים, ככלל, מוגבלת למבחר AliExpress, ולעתים קרובות אנו נודדים בין שבבים שונים בתכלית - אנו עוברים מ-Atmega ל-STM, מ-STM ל-ESP, או כל דבר חדש, החברים הסינים שלנו. לזרוק עלינו. HAL לא יעזור כאן, ולימוד זה יאכל הרבה זמן.

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

בנוסף, יש ניואנס עם STM32F103 הפופולרי - יש שתי גרסאות LL לא תואמות עבורו, אחת רשמית מ-STM, השנייה מ-Leaf Labs, בשימוש בפרויקט STM32duino. אם אתה כותב ספריית קוד פתוח (והיה לי בדיוק משימה כזו), עליך ליצור שתי גרסאות, או לגשת ישירות לרישומים.

לבסוף, ביטול LL, לדעתי, מפשט את ההגירה, במיוחד אם אתה מתכנן את זה כבר מתחילת הפרויקט. דוגמה מוגזמת: בוא נכתוב Arduino blink ב-Atmel Studio ללא LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

כדי שקוד זה יהבהב עם ה-LED בלוח סיני עם STM8 (מ-ST Visual Desktop), מספיק לשנות בו שתי כתובות:

#define DDR_B 0x5007
#define OUT_B 0x5005

כן, אני משתמש בתכונה של חיבור ה-LED בלוח ספציפי, הוא יהבהב לאט מאוד, אבל זה יקרה!

אילו סוגי גליונות נתונים קיימים?

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

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

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

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

הערת יישום - עצות שימושיות לפתרון בעיות ספציפיות, לעתים קרובות עם דוגמאות קוד.

גיליון Errata - תיאור מקרים של התנהגות לא סטנדרטית של שבבים עם אפשרויות עוקף, אם יש כאלה.

מה כתוב בדפי הנתונים

ישירות ל גליון הנתונים ייתכן שנצטרך את הסעיפים הבאים:

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

תיאור כללי – תיאור מפורט יותר של יכולות השבבים מהקו.

פין - דיאגרמות פינ-אאוט עבור כל חבילות השבבים האפשריות (איזה סיכה על איזו רגל).

תיאור סיכה – תיאור המטרה והיכולות של כל סיכה.

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

הרשמה מפה - טבלת הכתובות של בלוקי רישום, ככלל, ממוקמת בגיליון הנתונים, ובתוך Ref Manual - רק משמרות (קיזוז כתובת).

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

מידע על חבילה - שרטוטים של מקרים זמינים, שימושיים בעת עיצוב הלוחות שלך.

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

סקירה כללית, מבוא, תכונות - סקירה של יכולות היקפיות;

תיאור פונקציונלי, מדריך שימוש או פשוט הגוש הראשי של הסעיף - תיאור טקסט מפורט של עקרונות המכשיר ההיקפי וכיצד להשתמש בו;

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

כיצד לקרוא גליונות נתונים

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

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

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

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

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

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

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

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

מילון

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

חשמל
Vcc, נָכוֹן – "פלוס", אוכל
Vss, Vee – "מינוס", כדור הארץ
נוֹכְחִי – נוכחי
מתח - מתח
להטביע זרם - עבודה כ"קרקע" לעומס חיצוני
למקור זרם - עומס חיצוני מתח
כיור גבוה/סיכת מקור - סיכה עם "סובלנות" מוגברת לטעינה

IO
H, גבוה - על סיכת ה-Vcc
L, נמוך - על סיכת Vss
עכבה גבוהה, היי-ז, צף - אין שום דבר על הסיכה, "התנגדות גבוהה", הוא כמעט בלתי נראה לעולם החיצון.
משיכה חלשה למעלה, משיכה חלשה למטה – נגד משוך/למטה מובנה, שווה ערך ל-50 קילו אוהם בקירוב (ראה גיליון נתונים). הוא משמש, למשל, כדי למנוע מפין הקלט להשתלשל באוויר, ולגרום לאזעקות שווא. חלש - כי קל "להפריע" לו.
למשוך לדחוף - מצב פלט פינים, שבו הוא עובר בין גָבוֹהַ и נמוך - OUTPUT רגיל מ- Arduino.
ניקוז פתוח - ייעוד מצב הפלט שבו הפין יכול להיות אחד נמוךאו עכבה/ציפה גבוהה. יתר על כן, כמעט תמיד זה לא ניקוז פתוח "אמיתי"; יש דיודות מגן, נגדים, ומה לא. זהו פשוט ייעוד למצב קרקע/ללא.
ניקוז פתוח אמיתי - אבל זה ממש ניקוז פתוח: הסיכה מובילה ישירות לקרקע אם היא פתוחה, או נשארת בלימבו אם היא סגורה. המשמעות היא שבמידת הצורך ניתן להעביר דרכו מתח גדול מ-Vcc, אך המקסימום עדיין מצוין בגליון הנתונים בסעיף דירוגים/מתח מקסימליים מוחלטים.

ממשקים
בסדרה - מחובר בסדרה
לשרשרת – הרכבת שבבים לשרשרת באמצעות חיבור טורי, הגדלת מספר היציאות.
משמרת – shift, מציין בדרך כלל קצת shift. בהתאמה, לעבור פנימה и לעבור החוצה - קבלה והעברת נתונים ביט אחר ביט.
בְּרִיחַ - תפס המכסה את המאגר בזמן שהביטים מוזזים דרכו. כאשר ההעברה הושלמה, השסתום נפתח והסיביות מתחילות לפעול.
לשעון - בצע העברה ביט אחר ביט, העבר את כל הביטים למקומות הנכונים.
חיץ כפול, רישום צללים, רושם טעינה מראש – ייעודי היסטוריה, כאשר הפנקס חייב להיות מסוגל לקבל נתונים חדשים, אך להחזיק אותם עד לשלב מסוים. לדוגמה, כדי ש-PWM יפעל כהלכה, הפרמטרים שלו (מחזור עבודה, תדירות) לא אמורים להשתנות עד שהמחזור הנוכחי מסתיים, אבל כבר ניתן להעביר פרמטרים חדשים. בהתאם לכך, הנוכחיים נשמרים רישום צללים, וחדשים נופלים לתוכם רושם טעינה מראש, נכתב לאוגר השבבים המתאים.

כל סוגי הדברים
prescaler – מקדם תדרים
להגדיר קצת - הגדר את הביט ל-1
לנקות/לאפס קצת - אפס את הביט ל-0 (לאתחל - תכונת גליון נתונים STM)

מה הלאה

באופן כללי, תוכנן כאן חלק מעשי עם הדגמה של שלושה פרויקטים על STM32 ו- STM8, שנעשו במיוחד עבור מאמר זה באמצעות גליונות נתונים, עם נורות, SPI, טיימרים, PWM ופסיקות:

איך ולמה לקרוא גליונות נתונים אם מיקרו-בקרים הם התחביב שלך

אבל יש הרבה טקסט, אז הפרויקטים נשלחים לחלק השני.

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

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster