במדריך זה נכיר את המעגל המשולב ("ג'וק") הנפוץ, הזול והשימושי שמכונה 595, אשר מטרתו המוצהרת היא להפוך קלט טורי לפלט מקבילי, ושבדרך כלל משתמשים בו כדי להגדיל את מספר פיני הפלט הזמינים בפרויקטים מבוססי מיקרו-בקרים. נבין את המשמעות של הפינים שלו, נלמד כיצד להפעיל אותו ברמות שונות של תחכום ושליטה, ונראה גם מה המגבלות שלו, שכדאי מאד לזכור ולשים לב אליהן בתכנון ובניה של יישומים מעשיים.
במדריך זה מספר סעיפים ודוגמה להתנסות. גם אם לא תבנו את מעגל הדוגמה בפועל, חשוב לקרוא הכול ולפי הסדר, מכיוון שכל סעיף כולל מידע חדש ומבוסס על הסעיפים הקודמים לו.
מבוא
ה-595, שמכונה גם Shift Register או Serial-to-Parallel, הוא אחד הג'וקים המוכרים ביותר בעולם החובבים והמתחילים. הוא שייך למשפחה ותיקה מאד וגדולה של ג'וקים "לוגיים", כלומר כאלה שעובדים עם מידע ספרתי, ואם נתאר את פעולתו בשיא הקיצור, הוא מציג על גבי שמונה פיני פלט נפרדים את שמונה רמות הקלט האחרונות שקיבל דרך פין קלט אחד.
הפופולריות של ה-595 הביאה לכך שהוא מיוצר במבחר גדול מאד של דגמים על ידי יצרנים רבים. רובם תואמים, כמובן, אך פה ושם יש דגמים עם תכונות מעט שונות. במדריך זה נדבר בעיקר על אחד הדגמים המוכרים והזולים ביותר: SN74HC595N של חברת Texas Instruments. הנה המפרט הטכני שלו.
מיפוי הפינים
בשרטוט הבא, שמבוסס על השרטוט שבמפרט, מוצגים שישה-עשר הפינים של ה-SN74HC595N עם שמותיהם הרשמיים ומשמעותם. מידע מפורט יותר על כל אחד מהפינים מופיע בהמשך. אם אתם משיגים ג'וק 595 מדגם אחר, אל תשכחו לוודא במפרט שלו את מיקומי הפינים לפני שתמשיכו בעבודה.
תיאור פונקציונלי (החלק החשוב ביותר – את זה צריך לדעת בעל-פה!)
ה-595 מכיל שני אוגרים (Registers), שהם מעין משתנים בני 8 ביטים כל אחד. הראשון נקרא אוגר ההזזה (Shift Register) והוא זה שמקבל את הקלט הטורי ומעבד אותו. אוגר ההזזה בנוי לכתיבה בלבד: כדי לראות מה יש בו, אנחנו צריכים ליזום העתקה שלו לאוגר השני. האוגר השני נקרא אוגר האחסון (Storage Register), והוא מחובר לפיני הפלט כך ששמונת הביטים שלו תואמים לפיני הפלט מספר 0 עד מספר 7. הנה הפעולות – מודגשות באדום – שניתן לבצע בשני האוגרים באמצעות הפינים של ה-595:
כתיבה לאוגר ההזזה מתבצעת על ידי שני פינים: פין קלט טורי (שנקרא SER) ופין שעון לאוגר ההזזה (SRCLK). כאשר אנחנו מעבירים את פין השעון SRCLK ממתח נמוך לגבוה, קורים שני דברים:
1. ערכי הביטים באוגר ההזזה זזים צעד אחד למעלה: ביט מס' 7 מקבל את הערך שהיה בביט מס' 6, ביט 6 מקבל את הערך שהיה ב-5 וכך הלאה.
2. ביט מס' 0 באוגר ההזזה מקבל את הערך שקיים באותו זמן בפין SER.
הפין SRCLR מאפשר לנו לאפס את אוגר ההזזה כולו בבת אחת. הקו שמעל שם הפין מציין שהוא עובד בלוגיקה הפוכה: כאשר המתח על הפין הזה גבוה, לא קורה כלום: המידע נשאר שמור, כפי שמצוין במיפוי הפינים. דווקא כאשר המתח יורד מתבצעת פעולת האיפוס. כל עוד המתח על פין זה נמוך, אוגר ההזזה יישאר מאופס.
כדי להעתיק את הערכים שבאוגר ההזזה אל אוגר האחסון, ועל ידי כך "לראות" אותם בפיני הפלט של הג'וק, יש להעביר את המתח בפין RCLK מנמוך לגבוה.
הפין OE משמש לנטרול/הפעלה של פיני הפלט, בלוגיקה הפוכה: כשהמתח עליו גבוה פיני הפלט מנוטרלים/מושבתים (עוברים למצב של עכבה גבוהה – High Z – ולא מאפשרים מעבר של זרם חשמלי), וכשהמתח עליו נמוך, פיני הפלט פועלים כרגיל.
פין 'QH (שימו לב לגרש, שנקרא "תג" או "פְּריים") מציג פלט זהה לביט 7 (הגבוה ביותר) של אוגר ההזזה. תכונה זו מאפשרת לנו לחבר את הפין הזה לפין הקלט (SER) של ג'וק 595 נוסף, ועל ידי כך לשרשר את הג'וקים ולהבטיח תזמון נכון של הפלטים שלהם. במקרה כזה, על כל הג'וקים המשורשרים להשתמש באותו אות שעון.
דוגמה: ביטים אקראיים
בפרויקט לדוגמה זה נחבר לכל פין פלט של ה-595 נורית LED, ובעזרת פקודות מלוח ארדואינו נגרום לביטים אקראיים "לרוץ" על פני שורת הנוריות.
חיבורים
- את מתח ההפעלה לג'וק (פין Vcc) ניקח מפין 5V של הארדואינו, ואת האדמה לג'וק (GND) מאחד מפיני GND של הארדואינו.
- נחבר את האנודה (הרגל הארוכה) של כל נורית LED לפין הפלט המתאים לה ב-595, ואת הקתודה (הרגל הקצרה) נחבר דרך נגד של 470R ל-GND. חשוב להשתמש בנגד כזה או בעל ערך גדול יותר, מכיוון שהג'וק אינו מסוגל לספק זרם רב דרך פיני הפלט, ובמיוחד אם כולם פועלים במקרה בו-זמנית.
- את OE נחבר לאדמה (GND) כדי שלא ישבית לנו את הפלט.
- את SRCLR נחבר ל-Vcc כדי שלא יאפס לנו את אוגר ההזזה.
- את SER נחבר לפין 7 בארדואינו (ראו בקוד למטה) ואת SRCLK לפין 8.
- את RCLK, שמעתיק את אוגר ההזזה לאוגר האחסון ומעדכן את הפלט, אפשר לחבר ישירות ל-SRCLK. אופן הפעולה של הג'וק מבטיח שאם שני השעונים הללו עולים בו-זמנית ממתח נמוך לגבוה, קודם כל אוגר ההזזה יועתק, ורק לאחר מכן הוא יעודכן עם הקלט החדש.
תיאור גרפי של המערכת
שימו לב לכיוון הג'וק: פין מס' 1 שלו (השמאלי העליון במיפוי הפינים שהופיע למעלה) נמצא כאן בפינה הימנית העליונה. אל תשכחו את החוט הקצרצר בין פין 11 ל-12 (בכחול)!
קוד ארדואינו
אחרי ביצוע כל החיבורים הנ"ל, העלו את הקוד הבא לארדואינו. בכל ריצה של loop הוא מוריד את המתח בפין השעון, מוציא מתח אקראי (גבוה או נמוך) בפין SER ומעלה שוב את המתח בפין השעון כדי שה-595 יתעדכן.
const byte SER_PIN = 7; const byte SRCLK_PIN = 8; void setup() { pinMode(SER_PIN, OUTPUT); pinMode(SRCLK_PIN, OUTPUT); } void loop() { digitalWrite(SRCLK_PIN, LOW); digitalWrite(SER_PIN, random(2)); digitalWrite(SRCLK_PIN, HIGH); delay(200); }
התוצאה שאתם אמורים לראות היא תבנית אקראית ואינסופית של הדלקה וכיבוי, ש"נוסעת" לאורך שורת נוריות ה-LED בקצב נינוח. אם מתקבל משהו אחר, בדקו שוב בשבע עיניים את החיבורים.
595 כתוספת פיני פלט
מה שראינו בדוגמה למעלה הוא למעשה הרחבה של פין פלט אחד מהארדואינו (ועוד פין לשעון) לשמונה פיני פלט נפרדים. אם נשרשר 595 נוספים נוכל להגיע, בתיאוריה, לכל מספר של פיני פלט שנרצה. המחיר של ההרחבה הזו הוא כמובן הזמן שנדרש לנו כדי לדחוף את הערך הנכון לכל פין. אין אפשרות לגשת ישירות לפין פלט מסוים בג'וק ולשנות אותו, אלא רק לעדכן את כל הפינים מהתחלה (או לאפס את כולם גם יחד עם SRCLR).
חשוב לציין שפיני הפלט של 595 מסוגלים להעביר זרם חשמלי בשני הכיוונים: גם כלפי חוץ (Source) וגם כלפי פנים (Sink). אם, בדוגמה למעלה, נסובב את כל נוריות ה-LED כך שהקתודות יחוברו לפיני הפלט, ונשנה את החיבור כך שכל האנודות יחוברו דרך הנגדים ל-Vcc במקום ל-GND, התוצאה הסופית תיראה זהה – תבנית הכיבוי וההדלקה פשוט תהיה נגדית לזו שהופיעה בסידור הקודם.
אין אפשרות להשתמש ב-595 כהרחבה של פיני קלט. הוא מתאים לפלט בלבד.
מגבלות
הדגם SN74HC595N מסוגל לפעול במתח (Vcc) של 2 עד 6 וולט, ומתח זה הוא כמובן גבול עליון למתח בפיני הפלט שלו. עם זאת, כשהפלט מוגדר כ"מתח גבוה", המתח בפועל יכול להיות נמוך מעט מ-Vcc – ולהיפך, כשהפלט "נמוך" הוא עדיין יכול להיות גבוה מעט מ-0. גדול ההפרש תלוי בין השאר גם בגודל הזרם שעובר בכל פין. כפי שהוזכר, הזרם הזה מוגבל. בנקודה זו המפרט לא לגמרי ברור, אך מוזכרים ערכים של 6 מיליאמפר לפין במתח "ראשי "של 4.5V, ו-7.8 מיליאמפר ב-6V. כלומר, בכל מקרה לא מומלץ לנסות ולהוציא מהרכיב יותר מזה. הדבר עלול לגרום להתחממות יתר ולנזק מסוגים שונים.
גם מהירות התגובה של הרכיב מוגבלת ותלויה במתח. ב-Vcc של 4.5 וולט, למשל, תדר השעון המרבי שיכול להיקלט ולעבור עיבוד תקין הוא 25MHz. זה די והותר לעבודה עם ארדואינו רגיל אך עלול להוות מגבלה בעבודה עם מיקרו-בקרים חזקים, ובמיוחד אם הם עובדים במתחים נמוכים יותר כגון 3.3V. במתח Vcc מינימלי של 2V, התדר המרבי שה-595 מסוגל לעבד יורד עד ל-5MHz.
בפוסט הבא אציג שתי דוגמאות מתקדמות יותר.