shiftOut – הסבר ופרטים

- עמוד זה הוא חלק מהמדריך לפונקציות ארדואינו -

הפונקציה shiftOut(dataPin, clockPin, bitOrder, val) משדרת בייט יחיד באופן סדרתי (שמונה ביטים בזה אחר זה) דרך שני פיני פלט – פין אחד לנתונים עצמם ופין שני לאות שעון, ש“מודיע” לנמען מתי לקרוא כל ביט. אות השעון יוצא מהארדואינו, לא מגיע מהנמען.

פרמטרים

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

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

bitOrder, מטיפוס uint8_t, מציין את הסדר בו נשלחים הביטים – משמאל לימין (הקבוע MSBFIRST, שערכו 1) או מימין לשמאל (הקבוע LSBFIRST, שערכו 0). ערך גדול מ-1 ייחשב גם הוא MSBFIRST. להסבר קצר על משמעות סדר הביטים, ראו בדף הפונקציה shiftIn.

val, מטיפוס uint8_t, הוא הערך הנשלח. מכיוון שהוא uint8_t, הערכים האפשריים הם בטווח 0-255 (כולל) בלבד.

ערך חוזר

אין

דוגמאות

uint8_t dataByte = 123;
shiftOut(10, 11, LSBFIRST, dataByte);

הערות

  • הפונקציה shiftOut מעדכנת את הביט הנשלח בזמן שאות השעון הוא LOW. כלומר, הצד הקולט צריך להיות מסוגל לקרוא כל ביט ברגע שיש עלייה באות השעון (כלומר, כשהשעון עובר מ-LOW ל-HIGH). הפלט בפין clockPin חייב להיות LOW לפני הקריאה לפונקציה, כדי שהסינכרון בין השעון לביטים יהיה נכון.
  • בפונקציה זו, בלוחות ארדואינו טיפוסיים (תדר פעולה של 16MHz), משך ה-LOW של אות השעון הוא כ-12 מיליוניות השנייה, ומשך ה-HIGH הוא כ-5 מיליוניות השנייה. אלה זמנים ממושכים יחסית עבור רכיבים מודרניים, אך עדיין חובה לוודא שהרכיב אליו מיועדים הנתונים מסוגל להגיב במהירות הדרושה.
  • הפונקציה shiftOut היא חוסמת (Blocking) – הקוד הראשי ימשיך לרוץ רק בסיום השידור.

קישורים רלוונטיים

בלוג אישי בנושאי מייקינג, תכנות, מיקרו-בקרים ואלקטרוניקה