ישנן אפשרויות בתכנון משובץ כאשר אין לך מספיק סיכות קלט / פלט זמינות במיקרו-בקר שלך. זה יכול להיות מסיבה כלשהי, יכול להיות שהיישום שלך זקוק למספר נוריות LED או שאתה רוצה להשתמש במספר תצוגות של 7 קטעים, אך אין לך סיכות קלט / פלט נדרשות במיקרו-בקר שלך. הנה מגיע רכיב מושלם, רושם משמרות. Shift register מקבל נתונים סדרתיים ונותן פלט מקביל. זה דורש רק 3 פינים כדי להתחבר למיקרו-בקר שלך ותקבל ממנו יותר מ -8 סיכות פלט. אחד ממרשם המשמרות הפופולרי הוא 74HC595. יש לו מרשם אחסון קצת 8 ו 8 ביט רגיסטר הזז. למידע נוסף על רושמי משמרות כאן.
תוכלו לספק נתונים סדרתיים לרושם המשמרות והוא יינעל במרשם האחסון ואז מרשם האחסון ישלוט על 8 היציאות. אם אתה רוצה יותר תפוקה פשוט הוסף רישום משמרת נוסף. באמצעות שני מדריכי משמרות, תקבלו 8 יציאות נוספות, סך הכל פלט של 16 ביט.
Shift Register 74HC595:
הנה דיאגרמת ה- pin out של ה- 74HC595 לפי גליון הנתונים-
ל- HC595 יש 16 סיכות; אם נראה את גליון הנתונים נבין את פונקציות הסיכה-
ה- QA ל- QH, ממספרי הפינים 1 עד 7 ו- 15 המשמשים כפלט של 8 סיביות ממאגר המשמרות, כאשר הפין 14 משמש לקבלת הנתונים הסידוריים. יש גם טבלת אמת לגבי השימוש בסיכות אחרות ולהיעזר בפונקציות אחרות של מרשם המשמרות.
כשאנחנו כותבים את הקוד לממשק 74HC595, ניישם את טבלת האמת הזו לקבלת הפלטים הרצויים.
כעת נתממשק 74HC595 עם PIC16F877A ונשלוט על 8 נוריות. בינינו ממשק 74HC595 משמרת למיקרו-בקרים אחרים:
- ממשק 74HC595 משמרת סדרתי עם פטל פי
- כיצד להשתמש ב- Shift Register 74HC595 עם Arduino Uno?
- ממשק LCD עם NodeMCU באמצעות Shift Register
רכיבים נדרשים:
- PIC16F877A
- 2 יחידות קבלים דיסק קרמיים 33pF
- 20Mhz קריסטל
- נגד 4.7k
- 8 יחידות נוריות
- נגד 1k -1 יח '(8 יחידות נגדים 1k נדרשים אם יש צורך בנגדים נפרדים בכל נוריות)
- 74HC595 ic
- מתאם קיר 5V
- סביבת תכנות PIC
- קרש לחם וחוטים
תרשים מעגל:
בתרשים המעגל חיברנו את סיכת הנתונים הסדרתית; סיכת שעון וסטרו (תפס) על RB0, RB1 ו- RB2 של המיקרו-בקר בהתאמה. כאן השתמשנו בנגד אחד עבור 8 נוריות. בהתאם לטבלת האמת, אפשרנו פלט על ידי חיבור הפין 13 של 74HC595 לקרקע. סיכת ה- QH נותרה פתוחה מכיוון שלא נפל איתה 74HC595 נוסף. אנחנו מושבת דגל הקלט הברור על ידי חיבור פיני 10 של קופת המשמרת עם VCC.
מתנד הקריסטל מחובר לסיכות OSC של המיקרו-בקר. ל- PIC16F877A אין מתנד פנימי. בפרויקט זה נאיר את ההובלה בזה אחר זה מ- Q0 ל- Q7 באמצעות regitster משמרת.
בנינו את המעגל בלוח לחם-
הסבר קוד:
קוד שלם לשליטה בנורות LED עם רישום משמרות ניתן בסוף המאמר. כמו תמיד, עלינו להגדיר את סיביות התצורה במיקרו-בקר PIC.
# pragma config FOSC = HS // סיביות בחירת מתנד (HS מתנד) # config config WDTE = OFF // טיימר כלב שמירה הפעלת bit (WDT מושבת) # config config PWRTE = OFF // הפעלה טיימר הפעלת ביט (PWRT מושבת) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) # pragma config LVP = OFF // מתח נמוך (אספקה יחידה) תכנות סידורי במעגל אפשר bit (RB3 / PGM pin has function PGM; low -תכנות מתח מופעל) # תצורת פרגמה CPD = OFF // נתונים EEPROM זיכרון קוד ביט הגנה (הגנת קוד EEPROM נתונים כבוי) # config config WRT = OFF // זיכרון תכנית פלאש כתיבה אפשר ביטים (הגנת כתיבה כבויה; כל זיכרון התוכנית עשוי להיות נכתב על ידי בקרת EECON) # pragma config CP = OFF // Bit bit code code code protection (code code off)
לאחר מכן הכרזנו על תדר הקריסטל הנדרש לעיכוב והצהרת הצמצום עבור 74HC595.
#לִכלוֹל
לאחר מכן הכרזנו על פונקציית system_init () כדי לאתחל את כיוון הסיכה.
בטל system_init (בטל) { TRISB = 0x00; }
יצרנו את דופק השעון ואת דופק התפס בעזרת שתי פונקציות שונות
/ * * פונקציה זו תאפשר את השעון. * / שעון ריק (ריק) { CLK_595 = 1; __השהיית_אוס (500); CLK_595 = 0; __השהיית_ (500); }
ו
/ * * פונקציה זו תעבור לאוויר ותפעיל את מפעיל הפלט. * / void strobe (void) { STROBE_595 = 1; __השהיית_אוס (500); STROBE_595 = 0; }
לאחר שתי פונקציות אלה הכרזנו על פונקציית data_submit (נתונים לא חתומים int) כדי להגיש נתונים סדרתיים ל- 74HC595.
בטל data_submit (נתוני int לא חתומים) { for (int i = 0; i <8; i ++) { DATA_595 = (data >> i) & 0x01; שָׁעוֹן(); } strobe (); // הנתונים הוגשו לבסוף }
פונקציה זו נקבל נתונים 8bit ולשלוח כל ביט באמצעות שני מפעילי ביטים עזבו משמרת ו AND המפעיל. ראשית אנו מעבירים את הנתונים בזה אחר זה ומגלים את הסיבית המדויקת אם זה 0 או 1 באמצעות AND המפעיל עם 0x01. כל נתון מאוחסנים על ידי דופק שעון ואת תפוקת נתון סופית נעשה באמצעות דופק הבריח או Strobe. בתהליך זה פלט הנתונים יהיה MSB (הסיבית המשמעותית ביותר) תחילה.
בשנות ה העיקרית פונקציה הגשנו את בינארי ועשה את אחד גבוה סיכות פלט אחד.
system_init (); // המערכת מתכוננת בזמן (1) { data_submit (0b00000000); __השהיית_מס (200); data_submit (0b10000000); __השהיית_מס (200); data_submit (0b01000000); __השהיית_מס (200); data_submit (0b00100000); __השהיית_מס (200); data_submit (0b00010000); __השהיית_מס (200); data_submit (0b00001000); __השהיית_מס (200); data_submit (0b00000100); __השהיית_מס (200); נתונים_שלוח (0b00000010); __השהיית_מס (200); נתונים_שלוח (0b00000001); __השהיית_מס (200); data_submit (0xFF); __השהיית_מס (200); } לחזור; }
כך ניתן להשתמש במרשם משמרות בכדי לקבל יותר סיכות קלט / פלט בחינם בכל מיקרו-בקר לחיבור חיישנים נוספים.