אמא'לה, ג'וק! מבוא למעגלים משולבים

בפוסט זה ניצור פרויקט ארדואינו שמציג מספרים בין 0 ל-255, בייצוג בינארי, באמצעות שורה של שמונה נוריות LED. לכאורה, אפשר פשוט לחבר שמונה נוריות לשמונה חיבורי פלט של הארדואינו, ואז לבודד ולשלוח לכל אחת מהן את הביט המתאים מתוך הבייט שמכיל את המספר. אבל לארדואינו הבסיסי יש רק 14 חיבורי פלט, אז מה היינו עושים אם צריך היה להציג מספר בעל 16 ביטים, או 32 או 128?

SIPO Binary Number Display
מציג המספרים הבינאריים, עם ארדואינו ומעגל משולב (בין כל החוטים)

הפתרון שיוצג כאן תופס שלושה חיבורי פלט בלבד לשמונה הנורות, ומנצל לשם כך מעגל משולב – "ג'וק" בלשון העם – מסוג SIPO – Serial In Parallel Out. אנחנו נתחיל בסקירה זריזה של ג'וקים בכלל, אחר כך של הג'וק הספציפי שלנו, ומשם נמשיך להרכבה ולתכנות. מוכנים?

הכירו את הג'וק

מעגל משולב (IC – Integrated Circuit) הוא שם כללי למעגל אלקטרוני זעיר, שמבצע בדרך כלל פונקציה מורכבת (יחסית לרכיבים אלקטרוניים בסיסיים), ואשר מגיע במארז פלסטי שחור עם רגלי מתכת, שמאפשר לחבר אותו בקלות למעגל מודפס, מטריצה וכדומה. קיים מבחר עצום של ג'וקים, שממלאים אינספור פונקציות שונות – החל משערי NOT פשוטים וכלה במערכות שלמות ניתנות לתכנות – כמו הג'וק ATMega328 הגדול שמנהל את לוח הארדואינו עצמו.

ג'וקים מגיעים בשני סוגים עיקריים של מארזים: מארז עם רגליים ארוכות, שנקרא DIP (ראשי תיבות של Dual In-line Package), ומארז עם רגליים קצרות בשם SMD (כלומר Surface Mount Device). הסוג השני מיועד למוצרים סופיים, וקשה עד בלתי אפשרי להלחים אותו בלי ציוד ברמה תעשייתית. לכן, כשאתם מחפשים ג'וק לפרויקט חובבים כלשהו או לאבטיפוס, כמעט תמיד תחפשו את גרסת ה-DIP.

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

DIP IC
מעגל משולב עם 14 רגליים. שימו לב לשקע בצד הקדמי למעלה

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

מטורי למקבילי

הג'וק הספציפי בו נשתמש לפרויקט זה הוא מדגם SN74LS164N. יש מספר חברות שמייצרות כזה. זהו ג'וק בעל 14 רגליים, שמקבל קלט דרך רגל אחת ומוציא פלט דרך שמונה אחרות. בשפה המקצועית הוא מכונה Shift Register, שם שמתאר בדיוק את אופן הפעולה שלו: שמונה רגלי הפלט מהוות מעין רגיסטר, בייט של מידע, וכל ביט חדש שנכנס כקלט דוחק את האחרים צעד אחד שמאלה ונכנס במקום הביט הראשון (השולי ביותר – LSB). לדוגמה, אם הרגיסטר מכיל כרגע את המספר הבינארי 10000010 והקלט שמגיע הוא 1, נקבל את התוצאה 00000101 (הביט המודגש מימין הוא זה שנכנס אחרון). נחבר את הנורות שלנו לרגלי הפלט, ואם נעבוד מספיק מהר, נוכל להזין שמונה ביטים כהרף עין כך שנראה את המספר הבינארי כולו בבת אחת.

רגל נוספת של הג'וק, שמכונה MR (עם קו למעלה שאני לא יכול לצייר כאן), מבצעת איפוס כללי של הרגיסטר. הקו העליון פירושו "NOT", כלומר ההיפך: כשיש מתח ברגל הזו אין איפוס, וכשאין מתח יש איפוס.

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

אגב, הג'וק מיועד לעבודה ב-5 וולט (גם זה מצוין במפרט), אבל בפועל עובד בלי שום בעיה גם עם 3.3 וולט. סתם שתדעו. אם כך, יש לנו 8 יציאות, שני חיבורים בשביל החשמל, אות נכנס, אות שעון ואות איפוס. ומה עם הרגל הנותרת? מסתבר שגם היא מיועדת לקלט, וליתר דיוק לנטרול קלט: הג'וק יקבל מתח בקלט כ-1 רק אם המתח יגיע לשתי רגלי הקלט גם יחד. למטרתנו זו התעסקות מיותרת לחלוטין, ולכן אקצר את שתי הרגליים כך ששתיהן יקבלו את הקלט מאותו מקור בו זמנית. זה בסדר, מותר לקצר כאן – זה אפילו כתוב במפרט.

חיבורים וקוד

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

כתיבה של בייט לשורת הנוריות מתחילה באיפוס של הג'וק, כך:

int resetPin = 7;
digitalWrite(resetPin, LOW);
digitalWrite(resetPin, HIGH);

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

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

for (int j = 0; j < 8; j++) {

  // Isolate the MSB and check whether it is 0 or 1
  // hex 0x80 => 128 decimal => 10000000 binary
  if ((x & 0x80) == 0x80) digitalWrite(signalPin, HIGH);
   else digitalWrite(signalPin, LOW);

  // Ready to write - let's send a quick clock signal!
  digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW);

  // Shift the remaining bits one step to the left
  x = x << 1;
}

שימו לב שלצורך בדיקת הביטים השתמשנו באופרטור & (פעולת AND על ביטים) ולא ב-&& (פעולת AND לוגית).

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

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

תודה רבה
בתור מתחיל
רציתי לדעת (עד שהערכה תגיע) כמה יציאות יש בארדואינו והיכן לחבר את הג׳וק?
תודה

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

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

הסבר מעולה יופי של אתר….

מעניין מאוד!