15-09-2011, 10:31
|
|
|
חבר מתאריך: 20.10.06
הודעות: 202
|
|
תוכנה אשר מכבה ומדליקה לד לסירוגין, בכל לחיצה על לחצן
אני לא אכתוב את התוכנית עצמה כי אין לי זמן לזה וגם אין לי אפשרות לבדוק אותה ממילא.
לחילופין, אכתוב לך את עקרון הפעולה של התוכנה (האלגוריתם) ואם תממש אותו כמו שצריך,
אז התוכנה תבצע את מה שאתה מבקש..
אני לא מכיר את החומרה שלך ולא יודע כיצד חיברת את הלד ואת הלחצן אל המיקרובקר, אז אני אניח
שכאשר הלחצן לחוץ הוא מאלץ "1" בכניסת המיקרובקר וכשהוא לא לחוץ, יש "0" בכניסה.
כמו-כן, אני אניח ש-"1" מדליק את הלד, ו-"0" מכבה אותה.
האלגוריתם
*בטל את כל נגדי משיכת-העל (Pull-ups) הפנימיים בעזרת הסיבית 'PUD' בתוך הרגיסטר MCUCR
(חפש מידע על כך בדפי-הנתונים או באינטרנט, זה לא מסובך)
*קבע את הפין אליו מחוברת הלד בתור מוצא (Output) ושים בו "0" (לד כבויה).
*קבע את הפין אליו מחובר הלחצן בתור מבוא (Input),כתוב אליו "1" ואפשר את נגד ה-PullUp הפנימי שלו (זה בעצם הופך את הפין למבוא המתאים לקריאת מצב הלחצן).
צור לולאה שבודקת את מצב המפסק בערך בכל 10 מילי-שניה. אם 5 בדיקות רצופות מראות שהלחצן
לחוץ (זהו מנגנון נגד הריטוטים), אז תדליק את הלד.
לאחר הדלקת הלד, חכה בלולאה עד שתזהה שהלחצן אינו לחוץ (אם לא תבצע את הבדיקה הזו, אז
מיד תזוהה שוב "לחיצה" ואז התוכנית תכבה את הלד ואז תדליק וחוזר חלילה..)
צור שוב לולאה שבודקת את מצב המפסק בכל 10 מילי-שניה. אם 5 בדיקות רצופות מראות שהלחצן
לחוץ (זהו מנגנון נגד הריטוטים), אז תכבה את הלד.
לאחר כיבוי הלד, חכה בלולאה עד שתזהה שהלחצן אינו לחוץ (אם לא תבצע את הבדיקה הזו, אז
מיד תזוהה שוב "לחיצה" ואז התוכנית תדליק את הלד ואז תכבה אותו וחוזר חלילה..)
חזור לתחילת הרוטינה והמתן ללחיצה הבאה..
המלצות
* צור תת-שגרה (sub-routine) שאחראית על בדיקת הלחצן וקרא לה בכל המקומות הדרושים
בתוכנית, במקום לכתוב בדיוק את אותו הקוד מספר פעמים לאורך התוכנית.
* תשתמש במשתנה כלשהו על-מנת לשמור את המצב הנוכחי של הלד (דלוקה או כבויה), על-מנת שיהיה
לך נוח להחליט האם הפעולה הבאה שיש לבצע כתגובה ללחיצה על הלחצן, היא כיבוי או הדלקה.
בברכה,
דיגיגיל
_____________________________________
_- סיוע בהשלמת פרויקט-גמר להנדסאים -_
(האתר digigil.com נסגר)
|