דלגו לתוכן המרכזי
KitLab
שיעור קודם
תצוגת ארבע ספרות וסריקה דינמית· 18 / 41
תצוגת ארבע ספרות וסריקה דינמית
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

תצוגת ארבע ספרות וסריקה דינמית

מה בשיעור?

  • השתהות ראייה
  • למה 4 ספרות היו דורשות 32 פינים
  • קווי מקטעים מול קווי בחירה
  • סריקה דינמית: תורות מהירות
  • למה sleep_ms(5) הוא הלב

מה נלמד כאן

  • השתהות ראייה
  • תצוגת ארבע ספרות ובעיית הפינים
  • סריקה דינמית

הבעיה

תצוגת ארבע ספרות

ספרה אחת דרשה שמונה פינים. שעון צריך ארבע ספרות — כלומר 32 פינים, יותר ממה שיש ללוח.

הפתרון מסתמך על מגבלה של העין האנושית.


הידע שצריך

1. השתהות ראייה

השתהות ראייה

העין ממשיכה "לראות" תמונה כ-0.1 שנייה אחרי שהיא נעלמה.

זה למה סרטים (24 תמונות בשנייה) נראים רציפים, למה להבי מאוורר מיטשטשים, ולמה ציור באור בלילה יוצר קו.

2. המבנה

מבנה התצוגה

ארבע תצוגות באריזה אחת, שחולקות את אותם 8 קווי מקטעים, ועוד ארבעה קווי בחירה (D1-D4) שקובעים איזו ספרה פעילה.

סוג הקו כמות קובע
מקטעים 8 מה מוצג
בחירה 4 איפה

12 פינים במקום 32.

3. סריקה דינמית

⚠️ רק ספרה אחת יכולה לדלוק בכל רגע. אם תדליקו שתיים — שתיהן יציגו את אותו דבר.

הפתרון: מציגים אותן בתורות, מהר מאוד.

  1. ספרה 1, "1", המתנה 5 מילי-שניות
  2. כיבוי, ספרה 2, "2", 5 מילי-שניות
  3. וכן הלאה, וחוזרים

כל ספרה דולקת רבע מהזמן — אבל בגלל השתהות הראייה העין רואה ארבע ספרות דולקות יחד.

זו סריקה דינמית (multiplexing), וזו הטכניקה שמפעילה שלטי חוצות ומסכי LED ענקיים.


הניסוי

המטרה: להציג "1234".

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 1
תצוגת ארבע ספרות 1
נגד 220Ω 8

התרשים החשמלי

התרשים החשמלי

החיבור

חיבור הרכיבים


הקוד

from machine import Pin
import time

seg_list = [14, 25, 26, 27]                       # קווי בחירת ספרה
pin_list = [5, 16, 17, 18, 19, 23, 12, 13]        # קווי מקטעים

number_list = [
    [1, 1, 1, 1, 1, 1, 0, 0],   # 0
    [0, 1, 1, 0, 0, 0, 0, 0],   # 1
    [1, 1, 0, 1, 1, 0, 1, 0],   # 2
    [1, 1, 1, 1, 0, 0, 1, 0],   # 3
    [0, 1, 1, 0, 0, 1, 1, 0],   # 4
    [1, 0, 1, 1, 0, 1, 1, 0],   # 5
    [1, 0, 1, 1, 1, 1, 1, 0],   # 6
    [1, 1, 1, 0, 0, 0, 0, 0],   # 7
    [1, 1, 1, 1, 1, 1, 1, 0],   # 8
    [1, 1, 1, 1, 0, 1, 1, 0],   # 9
]

segs = [Pin(p, Pin.OUT) for p in seg_list]
pins = [Pin(p, Pin.OUT) for p in pin_list]

def clear():
    for p in pins: p.value(0)
    for s in segs: s.value(1)          # כיבוי ספרה = ערך גבוה

def display_number(order, number):
    clear()
    segs[order].value(0)               # הפעלת הספרה הנבחרת
    for i in range(8):
        pins[i].value(number_list[number][i])

digits = [1, 2, 3, 4]

while True:
    for i in range(4):
        display_number(i, digits[i])
        time.sleep_ms(5)               # הלב של השיעור

sleep_ms(5) הוא כל הסוד. ארבע ספרות × 5 מילי-שניות = סיבוב שלם ב-20 מילי-שניות, כלומר 50 סריקות בשנייה — הרבה מעל סף ההשתהות.

שנו ל-100 ותראו את הטריק מתפרק לנגד עיניכם.

מה אמור לקרות

התצוגה מראה 1234


נסו בעצמכם

  • שנו את sleep_ms(5) ל-100. עכשיו הבנתם מה עושה השתהות ראייה.
  • שנו את digits למספר אחר.
  • הציגו מונה עולה: 0000, 0001, 0002…
  • שלבו עם שיעור 12: הציגו טמפרטורה על התצוגה.
  • למה clear() נקראת בתחילת display_number ולא בסופה?

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

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