לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה --לשאלות בנושאי טלוויזיות, מערכות קולנוע ביתי, הגברה וסאונד - אנא פנו לפורום אודיו וקולנוע ביתי -- www.fresh.co.il/f=103 תגיות פורום: פורום אלקטרוניקה - פורום חשמל - שאלות בנושאי אלקטרוניקה - תכנון מעגלים - מעגלים מודפסים - פיתוח אלקטרוני - תכנון PCB - בקרים למנועים - תאורת לדים - תכנון דימר - מודינג - Arduino - מיקרו בקרים - שליטה על תאורה - שלט רחוק - משדר FM - תאורת LED - פתרון שאלות בחשמל - אלקטרוניקה תקבילית חץ ימינה  

לך אחורה   לובי הפורומים > תחביבים > חשמל ואלקטרוניקה
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 15-12-2011, 11:55
  משתמש זכר DigiGil DigiGil אינו מחובר  
 
חבר מתאריך: 20.10.06
הודעות: 202
שלח הודעה דרך MSN אל DigiGil
הכוונה..

אני לא יכול לכתוב את הקוד במקומך (זה בכל זאת לוקח זמן), אבל אני יכול לתת לך הכוונה, לגבי האופן שבו יהיה לך הכי קל ומהיר (אני מקווה) לממש את מה שאתה רוצה..

הבנתי שהמטרה שלך היא כזו: כשיש "1" ב-P1.0 . מתחילה השהייה של כ-5 דקות. לאחר ההשהייה, הבקר מעלה ל-1 את P1.1 ומתחילה השהייה של כ-4 דקות. לאחר ההשהייה הזו, P1.1 ישתנה ל-"0", חוזרים לתחילת התוכנה, ושוב מחכים לקבלת "1" בפורט P1.0..

מכיוון שלא ציינת מגבלות ואילוצים כלשהם, דרך פשוטה יחסית למימוש תהיה כך:
באתחולים, תאתחל את מצב הפורט כרצונך, תאפשר פסיקת טיימר, תגדיר דגל (משתנה bit) שמציין ש"ההשהיה הסתיימה" ותאפס אותו. תגדיר משתנה כלשהו (Byte) שמחזיק את זמן ההשהייה הרצוי בדקות. תגדיר טיימר של בערך דקה אחת (צריך לחשב את ערכי האתחול, בהתאם לדגם המיקרובקר ולגביש בהם אתה משתמש). אל תאפשר את ריצת הטיימר עדיין.
ברוטינה הראשית, קבע את משתנה זמן ההשהיה ל-5. תעשה Polling על P1.0 (תבדוק אותו שוב ושוב, עד שמשתנה), כאשר הוא 1, תאפשר את הטיימר ואז תעשה Polling על הדגל שמציין שהסתיימה ההשהייה. כאשר הדגל משתנה, קבע את P1.1 ל-1 ואז קבע את משתנה הזמן ל-4, תאפס את הדגל שמציין שההשהיה הסתיימה, תאפשר את הטיימר ותבצע Polling על דגל סיום ההשהיה עד שיהיה 1, ואז תשנה את P1.1 ל-0, תאפס את הדגל שמציין שההשהיה הסתיימה, ותחזור חזרה לתחילת התוכנית.
בתוך רוטינת הטיפול בפסיקת הטיימר (ISR), בטל את אפשור הטיימר (TR0=0), אם מונה-הזמן שונה מאפס, תפחית 1 ממונה-הזמן. בדוק אם עכשיו מונה הזמן-שווה 0 (הזמן עבר). אם כן, אתה צריך לקבוע את דגל "ההשהייה הסתיימה" ל-1 (כלומר ההשהייה הסתיימה). לאחר הבדיקה, תטען שוב את הטיימר בערכים שיגרמו לו למנות דקה 1 ותאפשר את ריצת-הטיימר (TR0=1), כדי שאחרי דקה, רוטינת הטיפול תופעל שוב.

זו כאמור דרך פשוטה יחסית. לא יודע אם היא הכי יעילה עבורך, כי זה תלוי בהגדרות הפרויקט שלך.
יתרונות:
מימוש פשוט וגמיש, מאפשר לשנות בקלות את משך ההשהיות (ברזולוציה של דקות).
חסרונות:
1. לא מתאים במקרים שהמערכת צריכה לטפל בארועים אסינכרוניים נוספים, מלבד השינוי ב-P1.0. אם אכן יש אירועים נוספים, כדאי לשקול שימוש בפסיקות ואז זה מסבך מעט את המימוש.
2. לא מתאים לשימוש במערכות בהן צריכת ההספק אמורה להיות מינימלית, מכיוון שמימוש כזה לא מאפשר להכנס למצב "הנמכת הספק" (Power down).

בברכה,
דיגיגיל
_____________________________________
_- סיוע בהשלמת פרויקט-גמר להנדסאים -_
(האתר digigil.com נסגר)


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 03:07

הדף נוצר ב 0.03 שניות עם 11 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר