אחת הסיבות שבעטיה נרצה חיישן
מיקרופון שיכול לומר לנו מהי התדירות המושמעת לידו, היא תחרות הרובונר. הפעלה על
ידי צפצפה נותנת בונוס של 5%. לא הרבה אמנם אבל בכל זאת משהו. סיבות נוספות יכולות
להיות מסנן תדר ממומש בתוכנה, מעגל כוונון, מנעול המופעל בתדר מסוים, תגובה על
מחיאות כפיים, או נביחה, או שריקה, ולמטרות לימודיות אחרות.
באיור 1 מופיע שרטוט של מעגל כזה. הוא
מבוסס על שלושה רכיבים משולבים: LM386
– מגבר אודיו במתח נמוך, LM2917
– ממיר תדר למתח, ו – TC7660 – ממיר מתח DC ל- DC.
איור 1:
מעגל ממיר תדר למתח
הדרגה הראשונה היא דרגת הגברה, שלוקחת
את מוצא המיקרופון ומגבירה אותו פי כמה עשרות. אחרי כן מגיעה דרגת המרת תדירות
למתח תוך שימוש ברכיב LM2917.
רכיב זה מחולק לחלק הטכומטר ולחלק
מגבר השרת. השתמשתי כאן ברכיב ככניסת טכומטר עם ייחוס לאדמה וחיבור פנימי בין מוצא
הטכומטר והכניסה הלא מהפכת של מגבר השרת.
תוך שמירה על ההמלצות המופיעות בדפי
הנתונים לגבי הנגדים והקבלים, עם שינויים קטנים וניתוק הקולט הטרנזיסטור המוצא מהכניסה המהפכת של מגבר השרת,
מתקבל שמוצא הרכיב הוא פונקציה לינארית , כאשר עבור כניסה של 1KHz, המוצא הוא
1 וולט, ועבור כניסה של 2KHz, המוצא הוא 2 וולט, וכו'. ניתן לראות זאת באיור 2. יש לשים לב
שמעגל זה לא יכול לטפל ביותר מ- 8KHz ומוצאו יהיה מתח קבוע של 8 וולט עבור תדירות של 8KHz או יותר.
הרכיב LM2917 זקוק למתח של V10 עבור פעולה תקינה שלו באופן הזה. אני מאמין שעל חיבור המעגל
להיות פשוט ככל האפשר למשתמש, וכן החלטתי להשתמש ברכיב TC7660 הממיר מתחי DC. הרכיב מקבל V5 ברגל מספר 8 שלו, ואחרי שעוקבים אחר רגל 2 שבה מתקבל מתח הכפול
מזה שנכנס לרגל 8 דרך קבל ושתי דיודות, שכל אחת מורידה את המתח ב- 0.7V (ממתח
קדמי), הוא מניב מתח של: (2x5V
– 2x0.7V)=8.3V. זהו מתח הקטן מ- 10V אולם זה
מספיק לפעולה תקינה של הרכיב LM2917.
איור 2:
המרת תדירות למתח של הרכיב LM2917
המעגל המורכב
מופיע באיור 3.
איור 3:
מכלול מורכב של המעגל המופיע באיור 1.
כעת, אם אין ברשותכם קוים אנלוגיים
הבנויים כחלק מהמעבד שבו אתם משתמשים, תוכלו להוסיף מעגל משווה פשוט, כמו זה
המופיע באיור 4, ולכייל אותו לתדירות רצויה, כך שכאשר מגיעה התדירות הרצויה או
תדירות גבוהה ממנה, מוצא המעגל יהיה ברמה לוגית '1'. מתחת לתדירות זו מוצא המעגל
יהיה ברמה לוגית '0'. הכניסה תוזן ממוצא המעגל שבאיור 1, והמוצא החדש הוא
דיגיטלי. כמו שניתן לראות השתמשתי ב- LM339 כמשווה. כל משווה אחר
יתאים.
איור 4:
מעגל משווה פשוט המשתמש ב- LM339 כמשווה.
כעת נעבור
לתוכנה המשתמשת במעגל שתואר. כדוגמא נכתוב תוכנית בשפת אסמבלי של המעבד 68hc912b32
של חברת מוטורולה. התוכנית מופיעה ברשימה 1.
הנחתי כאן את
ההנחות הבאות:
1.
המוצא
האנלוגי של המעגל מאיור 1 מחובר לפורט ad רגל 7.
2.
כל
האיתחולים של a/d
נעשו לפני ביצוע השגרה הזו.
3.
מבוצעת
המרה למספר בן 8 ביטים.
4.
המספר
המתאים לגילוי רמת תדירות רצויה הוא $c0 (או 0xc0 לאנשי C).
again: movb
#$50,atdctl5
wait: brclr
atdstat #$80 wait
ldaa adr7h
cmpa #$c0
bmi again
wakeup: … ;When
frequency has reached the desired
;level,
the program continues from here.
רשימה
1: תוכנית בשפת אסמבלי של 68hc912b32 עבור גילוי אנלוגי של תדירות כניסה ממיקרופון.
נסביר את השגרה
המופיע ברשימה 1. בשורה הראשונה אנו מציבים $50 (%01010000)
באוגר atdctl5. פירוש הדבר שאנו בוחרים ב- 8 המרות, פעם אחת, וריבוי ערוצים. כל
זאת בכדי להגיד שהמעבד יבצע דגימה אחת מכל ערוץ (ביט, קו) שבפורט ad, ימיר את הדגימות למספרים דיגיטליים, יאחסן מספרים אילו בכתובות
המתאימות (adrxh)
ויעצור.
היות ואנו מעונינים בערוץ 7 (שאליו
מחובר מוצא מעגל המיקרופון), אנו יודעים שכאשר תסתיים ההמרה, נביט במספר שנמצא
בכתובת adr7h.
כיצד נדע שההמרה הסתיימה? ובכן קיים
ביט שנקרא SCF
ראשי תיבות של (Sequence Complete
Flag). כאשר ביט זה הופך
ל- '1', זהו הסימן שכל ההמרות הסתיימו וכל המספרים הדיגיטליים שוכנים לבטח בכתובות
המתאימות.
זה מוביל אותנו לשורה השנייה. ההוראה brclr או Branch if Clear,
בודקת את תוכן הכתובת המופיעה אחרי המילה brclr’' ומחפשת ביט או ביטים לפי המסכה של 8 ביטים המופיעה בשורה אחרי
הכתובת. התוכנה מחפשת אחר ערך הביטים בתוכן הכתובת שמקומם זהה למיקום ה- '1'
במסכה.
במקרה שלנו המסכה היא 80$ או
%10000000. לכן התוכנית מחפשת את הביט השמאלי ביותר בכתובת atdstat (באותו מיקום שבו מופיע ה- '1' במסכה). אם ערכו של הביט הנמצא
במקום הזה הוא 0, אז ביצוע התוכנית הולך לשורה שהתווית בקצה השמאלי שלה זהה לתווית
שמופיעה בסיום השורה של הפקודה brclr, אחרת הביצוע ממשיך מהשורה הבאה. הביט השמאלי ביותר של הכתובת atdstat הוא הדגל SCF. אם ערכו 0, תוצאת התנאי נכונה והביצוע הולך לתווית wait. נוכל לראות שתווית זו מופיע בצידה השמאלי של אותה שורת פקודה.
לכן, מכל זה מה שיקרה הוא שכל עוד ערך
הביט SCF הוא אפס, התוכנית מסתובבת מסביב לזנבה באותה שורה. ברגע שערכו של
הביט הנ"ל הופך ל- 1, התנאי (אפס) לא מתקיים יותר וביצוע התוכנית ממשיך
מהשורה הבאה.
כעת אנו יכולים להיות בטוחים שתוצאות
ההמרה תקפות ונוכל לקרוא מהכתובת הרצויה, הלא היא adr7h. (נזכיר כי חיברנו את מוצאו האנלוגי של מעגל המיקרופון לרגל 7
בפורט ad).
בצעד הבא אנו מטעינים את המספר מ- adr7h לצובר A. זה נעשה בכדי לאפשר השוואה בין המספר שבצובר A (שהוא תוצאת ההמרה של התדר שהתקבל ברגל 7 ממעגל
המיקרופון) למספר $c0 שמתאים לתדירות הרצויה שלנו.
בעצם מבוצעת פעולת חיסור המשנה את
הדגלים באוגר CCR
בהתאמה. כעת המעבד "יודע" אם התוצאה היא חיובית (המיקרופון קלט תדירות
גבוהה יותר מזו הרצויה), אפס (התדירויות זהות), או שלילית (המיקרופון קלט תדירות
הנמוכה מזו הרצויה).
כהערת שוליים נציין שהוראת השוואה (compare) לא משנה את ערך הצובר. זה לא המקרה עם הוראת חיסור, ששם משתנה
תוכן הצובר A (או B).
כעת, אם התוצאה שלילית, תנאי ההשוואה
(branch
if minus) מתקיים וביצוע
התוכנית הולך לתחילת השגרה לתווית again, שם מתבצעת דגימה של התדירות העכשווית והתהליך חוזר על עצמו. אם
התוצאה חיובית או אפס, התנאי של הפרש שלילי לא מתקיים והתוכנית ממשיכה מהשורה הבאה
ושם מבצעת את מה שצריך כאשר התדירות שווה או גבוהה מהרצויה. בתחרות רובונר למשל,
הרובוט יתחיל את פעולתו בשלב זה.
כמובן שאם תבחרו לבצע את הגרסה
הדיגיטלית של המעגל (איורים 1 ו- 4), התוכנית תהפוך לפשוטה יותר ואז יהיה רק צורך
לבדוק האם קו כניסה דיגיטלי הפך ל- '1'.
,בעלי אתר זה לא ישאו באחריות כלשהי לכל נזק, כספי או אחר
שייגרם במישרין או בעקיפין משימוש במידע המצוי באתר זה
כל הזכויות שמורות לאסף פוניס, גיא יונה ואלי קולברג ©
אין להעתיק תכנים מאתר זה ללא רשות בכתב ממנהלי האתר