לוג'יק אנלייזר לקמצנים – מבוא

מנתח לוגי ("Logic Analyzer") ראוי לשמו הוא מכשיר גדול, מורכב ויקר מאד – בערך בסדר גודל של אוצילוסקופ. עם זאת, בניגוד לסקופ, הלוג'יק מתעד רק רמות מתח דיגיטליות ("0" ו-"1" לוגיים, מכאן השם), ולכן מתאים ונוח במיוחד לעבודה עם מיקרו-בקרים, מעבדים למיניהם ומערכות דיגיטליות אחרות.

יש בשוק מספר התקנים בסיסיים יותר, שעושים את אותו הדבר אך עם יכולות מוגבלות פי כמה ובחיבור למחשב, כלומר ללא מסך או ממשק משל עצמם. בין המוכרים שבהם נמצאים Logic הקומפקטי של חברת Saleae, שמחירו $149 בלבד, ואחיו הגדול והמשוכלל Logic16 שעולה, נכון לעכשיו, פי שניים. התקנים כאלה הם מושלמים לחובבים שעובדים עם מיקרו-בקרים איטיים יחסית, כמו בארדואינו או ב-MSP430 Launchpad. לרוע המזל, המחיר עדיין קצת גבוה עבור החובב המתחיל הטיפוסי, ולנישה הזו נכנסו – כרגיל – חיקויים סיניים זולים.

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

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

זיוף סיני של לוג'יק אנלייזר של Saleae
זיוף סיני של לוג'יק אנלייזר של Saleae (מבנה חיצוני שונה) וארדואינו לקנה מידה

החומרה

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

להתקן יש כניסת GND, שמהווה את הבסיס להשוואת המתחים: מתח של 0.8V ומטה נחשב 0 לוגי, מתח של 2.0V ומעלה נחשב 1 לוגי, ומה שבין לבין נרשם כ"מה שהיה קודם". גבולות אלה פירושם שההתקן אמור לעבוד היטב גם עם לוגיקה של 5V וגם עם 3.3V. במתחים נמוכים יותר עלולות לצוץ בעיות, והלוג'יק אינו מיועד לעבוד במתחים גבוהים יותר.

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

התוכנה

הדברים המעניינים באמת שהלוג'יק הזה יודע לעשות נמצאים בתוכנה, אותה אפשר להוריד מכאן (יש גרסאות לחלונות, לינוקס ו-OS X). ההתקנה שגרתית, והיא כוללת גם את מנהלי ההתקנים הדרושים עבור החומרה. אם אתם מתקינים בלינוקס, ייתכן שתקבלו בהפעלה הראשונה הודעה בנוגע לבעיית הרשאות עבור החומרה, כולל האופן לפתרונה – העתקה של קובץ מסוים מהתיקייה Drivers של ההתקנה לתיקייה etc/udev/rules.d.

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

צילום מסך של תוכנת Logic של Saleae
צילום מסך של תוכנת Logic של Saleae

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

Triggers

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

סימון טריגר עליית מתח בערוץ 1
סימון טריגר עליית מתח בערוץ 1

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

קביעת טריגר מותנה באפס לוגי
קביעת טריגר מותנה באפס לוגי

הדגמה

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

#define TRIG_PIN 10
#define PWM_PIN 6
#define PWM_DC 64
#define PWM_DURATION 10

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode( PWM_PIN, OUTPUT);
}

void loop() {

   delay(1000);

   digitalWrite(TRIG_PIN, HIGH);
   analogWrite(PWM_PIN, PWM_DC);
   delay(PWM_DURATION);

   digitalWrite(TRIG_PIN, LOW);
   analogWrite(PWM_PIN, 0);

}

חיברתי את אחת מכניסות ה-GND של הלוג'יק ל-GND של הארדואינו, את הכניסה של ערוץ 0 לפין 6 (זה יהיה ערוץ המדידה, שגם חייב להיות 0 כדי שהטריגר יפעל) ואת הכניסה של ערוץ 1 לפין 10 (זה יהיה פין הטריגר).

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

צילום מסך של דגימה ראשונית בתוכנה
צילום מסך של דגימה ראשונית בתוכנה

קל לראות את הסיגנל מפין 10 (בערוץ 1) שהתחיל את המדידה הרשמית – שימו לב לכיתוב 0ms מעליו – ואת אות ה-PWM מפין 6, שנמשך בדיוק כפי שרצינו עד 10ms. אפשר ללחוץ בשטח הגרפים עם העכבר ו"למשוך" את התמונה ימינה ושמאלה, לכווץ או למתוח את ציר הזמן עם הגלגלת, וכן להשתמש במקשי החיצים לאותן פעולות.

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

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

יש ל DANGEROUSPROTOTYPES לוג'יק אנלייזר ל16(32) ארוצים ב60$. אחלה לעבודה עם בקרים AVR . הפרוייקט די מת אבל כלי עובד ללא טענות

לפני יומיים ראיתי כזה, והתלבטתי אם לקנות…תודה!