ايران ويج

نسخه‌ی کامل: ساخت ساعت
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام . لطفا كمكم كنيد تا يه ساعت با تاريخ بسازم واسه آزمايشگام. درگير برنامه نويسيشم كه به زبان بيسيك بايد باشه. و يه سري دستورات مثل time$ , _second,_min , _hour هم داشته باشه . كريستال ساعت هم در سخت افزارم وجود داره . ممنونم .
برای کریستال 12 مگ تایمر 1 باید به ازای هر ثانیه 183 بار از اول تا آخر و یک بار هم از صفر تا حدود 6900 یا به عبارتی از 58636 تا آخر بشمره. به ازای هر 60 ثانیه یه واحد به متغییر دقیقه اضافه میشه و به ازای هر 60 دقیقه یک واحد به متغییر ساعت
مهندس واسه کار شما بسکام همه توابعش رو داره !!




در بعضي از ميکرو ها تايمر /کانتر دو يا صفر ميتواند به صورت اسنکرون ( در حالت اسنکرون کلاک ‏تايمر توسط کريستال ساعت ‏‏32768‏Hz‏ از دو پايه ‏toc1,toc2‎‏ تامين مي شود) کار کند و زمان و تاريخ را بشمارد ، اين شمارش در ‏همه حالتها حتي زماني که ‏ميکرو در حالت ‏power-save‏ است نيز وجود دارد.

همچنين ايسي هاي نيز وجود دارد که زمان و تاريخ ‏را ميشمارد و حتي قابليت ‏شمارش و ذخيره زمان و تاريخ شمرده شده را نيز دارد در زير هر دو مورد را بررسي ميکنيم:‏


‏>‏Rtc‏ داخلي ميکرو :‏


اين قابليت در بعضي از ميکروها وجود دارد ، که شما ميتوانيد با مراجعه به ديتا شيت ميکرو از وجود يا ‏عدم وجود آن مطلع ‏شويد.‏rtc‏ با دستور زير پيکربندي مي شود:‏

کد php:
CONFIG CLOCK = soft | USER [, GOSUB = SECTIC]‎ 

Soft‏ :هنگامي استفاده مي شود که ميخواهيد از ‏rtc‏ داخلي ميکرو استفاده کنيد.‏

USER‏ : هنگاي استفاده مي شود که بخواهيد از ‏rtc‏ خارجي (مانند ‏Ds1307‎‏ يا...(اين ايسي از پروتکل ‏I2C ‎استفاده ميکند ،کار با اين ‏ايسي در بخش "روشهاي ارتباطي در ‏avr "‎‏ گفته شده است))استفاده کنيد.‏

GOSUB = SECTIC‏: اين گزينه اختياري است ، زماني که تايمر سرريز شد ( تا يک ثانيه شمرد) به ‏برچسب ‏SECTIC‏ پرش مي شود ، ‏باز گشت از برچسب با دستور ‏return ‎صورت ميگيرد ‏

با دستورات زير مقدار اوليه زمان و تاريخ مشخص مي شوند(روش اول) :‏

کد php:
DATE$ = "mm/dd/yy"‎
TIME
$ = "hh:mm:ss"‎ 

به جاي حروف اعداد اوليه قرار داده ميشوند مانند:‏

کد php:
‏$‏regfile = "M16DEF.DAT"‎
‏$‏crystal 
= 8000000‎
Config Lcdpin 
= Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , E = ‎Pind.1 , Rs = Pind.0‎
Config Lcd 
= 16 * 2‎
Enable Interrupts
Config Clock 
= Soft
Date
$ = "11/11/00"‎
Time
$ = "02:20:00"‎
Do
Locate 1 , 1‎
Lcd Date‏$‏
Locate 2 
, 1‎
Lcd Time‏$‏
Loop
End 

شما ميتوانيد با دستورات زير مقدار اوليه اي را براي زمان و تاريخ مشخص کنيد:‏
‏_‏sec = X ‎‏ بين ‏‏0 تا 59 است‏x
‏_‏min = X‏ بين 0 تا 59 است ‏‏ ‏x
‏_‏hour = X ‎‏ بين 0 ‏تا 23 است‏x
‏_‏day = X ‎‏ بين 1 ‏تا 31 است‏x
‏_‏month = X‏ بين 1 تا 12 است ‏‏ ‏x
‏_‏year = x ‎‏ بين 0 تا ‏‏99 است‏x
شما ميتوانيد کليه اعمال جمع و تفريق (کاستن و افزودن ) را مستقيم روي متغيير هاي بالا انجام ‏دهيد .مثال:‏

کد php:
‏$‏regfile = "M16DEF.DAT"‎
‏$‏crystal 
= 8000000‎
Config Lcdpin 
= Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , E = ‎Pind.1 , Rs = Pind.0‎
Config Lcd 
= 16 * 2‎
Config Portb 
= Input
Enable Interrupts
Config Date 
= YMD , Separator‏ =.‏
Config Clock 
= Soft , Gosub = Sectic
‏_‏sec 
= 57 : _min = 59 : _hour = 23 : _day = 32 : _month = 11 : _year = 99‎
Goto W
Set_ok‏
:‏
Locate 1 
, 10 : Lcd "set ok‏ ‏‎"‎
Wait 2 
: Locate 1 , 10 : Lcd‏ "          ‏‎"‎
W‏
:‏
Do
Debounce Pinb.5 , 0 , Incr_sec
Loop
Incr_sec‏
:‏
Do
Locate 1 , 10 : Lcd "set sec"‎
Debounce Pinb.5 
, 0 , Incr_min : Waitms 100‎
If Pinb.6 = 0 Then : _sec = 0 : Waitms 400 : End If
If 
Pinb.7 = 0 Then : _sec = 30 : Waitms 400 : End If
Loop
Incr_min‏
:‏
Do
Locate 1 , 10 : Lcd "set min" : Waitms 100‎
Debounce Pinb.5 
, 0 , Incr_hour
If Pinb.6 = 0 Then  : Incr _min: Waitms 400 : End If
If 
Pinb.7 = 0 Then : Decr _min : Waitms 400 : End If
Loop
Incr_hour‏
:‏
Do
Locate 1 , 10 : Lcd "set hou"‎
Debounce Pinb.5 
, 0 , Incr_day:Waitms 100‎
If Pinb.6 = 0 Then : Incr _hour : Waitms 400 : End If
If 
Pinb.7 = 0 Then  : Decr _hour: Waitms 400 : End If
Loop
Incr_day‏
:‏
Do
Locate 1 , 10 : Lcd "set day"‎
Debounce Pinb.5 
, 0 , Incr_month:Waitms 100‎
If Pinb.6 = 0 Then : Incr _day : Waitms 400 : End If
If 
Pinb.7 = 0 Then : Decr _day : Waitms 400 : End If
Loop
Incr_month‏
:‏
Do
Locate 1 , 10 : Lcd "set mon"‎
Debounce Pinb.5 
, 0 , Incr_year :Waitms 100‎
If Pinb.6 = 0 Then : Incr _month : Waitms 400 : End If
If 
Pinb.7 = 0 Then : Decr _month : Waitms 400 : End If
Loop
Incr_year‏
:‏
Do
Locate 1 , 10 : Lcd "set yea"‎
Debounce Pinb.5 
, 0 , Set_ok : Waitms 100‎
If Pinb.6 = 0 Then : Incr _year : Waitms 400 : End If
If 
Pinb.7 = 0 Then : Decr _year : Waitms 400 : End If
Loop
End
Sectic‏
:‏
Locate 1 
, 1 : Lcd Date$ : Locate 2 , 1 : Lcd Time‏$‏
Return‏ ‏
مثال
:‏
‏$‏regfile 
= "M16DEF.DAT"‎
‏$‏crystal 
= 8000000‎
Config Lcdpin 
= Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , E = ‎Pind.1 , Rs = Pind.0‎
Config Lcd 
= 16 * 2‎
Enable Interrupts
Cursor Off
Config Clock 
= Soft , Gosub = Sectic
Config Adc 
= Single , Prescaler = Auto
Dim Q
(2) As Word
Date
$ = "11/11/00"‎
Time
$ = "02:20:00"‎
Start Adc
Do
Q(1) = Getadc(0‎‏)‏
Q
(2) = Getadc(1‎‏)‏
Q
(1) = Q(1) / 2‎
Q
(2) = Q(2) / 2‎
Locate 1 
, 11‎
Lcd 
"t1:" ; Q(1‎‏)‏
Locate 2 
, 11‎
Lcd 
"t2:" ; Q(2‎‏)‏
Loop
End
Sectic‏
:‏
Locate 1 
, 1‎
Lcd Date‏$‏
Locate 2 
, 1‎
Lcd Time‏$‏
Return 

برنامه بالا علاوه برنمايش ساعت وتقويم دماي دو نقطه ي دلخواه را نيز نمايش ميدهد ، همانگونه که ‏مشاهده ميفرماييد برنامه اسکن ‏کانال هاي ‏adc‏ در حلقه ي ‏do –loop‏ قرار داده شده ، هنگامي که تايمر سرريز مي شود به برچسب ‏Sectic‏ پرش مي شود و زمان ‏و تاريخ بر روي ‏lcd‏ نمايش داده شده و دوباره با دستور ‏return ‎‏ به حلقه ي ‏do-loop‏ رجوع مي شود و ‏اين کار مدام تکرار ‏ميگردد.شما ميتوانيد در حلقه از هر دستوري استفاده کنيد .‏

شما همچنين ميتوانيد با دستور زير فرمت نمايش تاريخ را معين کنيد ( در هرکشوري تاريخ به شکل ‏خاص نشان داده مي شود ، مثلا در ‏ايران به صورت : ‏‎ yy/mm/dd‎‏ و درايلات متحده امريکا به صورت: ‏mm-dd-yy‏ است)‏

کد php:
CONFIG DATE = DMY/MDY/YMD , Separator = char‎ 

DMY/MDY/YMD‏ :نشان دهنده مکان نمايش روز ، ماه وسال است ، ‏d‏ نمايشگر روز(‏Day‏) ، ‏‎ m ‎‏ ‏نمايشگر ماه(‏month‏) و ‏y‏ نمايشگر ‏سال(‏year‏) است .‏
Char‏ : علامت بين روز و ماه وسال ميباشد که ميتواند نقطه "." ، مميز"/" يا خط فاصله"-" باشد.‏
سلام من یه برنامه ساختم که توش ساعت باتایمر 2 وکریستال داخلی داره این برنامه یکبار روال کلی رومیره اعم از ساعت و دما و... ولی در بار دوم میکرو ریست میشه لطفا" کمکم کنین تا بدونم مشکل از کجاست؟؟؟
سلام دوست عزیز

لطف کن برنامتو بزار تا بتونیم نظر بدیم
اگر می خواهید ساعت بسازید من آی سی DS1307 رو به شما پیشنهاد می کنم
به این آی سی یه کریستال ساعت (32768Hz) و یه باتری ساعت (باتری مادر برد کامپیوتر) وصل میشه و با ارتباط I2C با میکرو ارتباط برقرار میکنه
نحوه استفاده و راه اندازیش سادس و با قطع شدن برق اطلاعاتش از بین نمیره (با باتری که روشه میگن تا 10 سال هم زمان رو نگاه میداره)
توی این آی سی ابتدا باید اطلاعات ثانیه ، دقیقه ، ساعت و روز و ماه و سال رو بدی بعدش دیگه خودش همه چیز رو محاسبه میکنه و هر وقت که خواستی میتونی ازش همون اطلاعات رو بگیری
سرچ کنی اطلاعات خوبی پیدا می کنی
یه نمونه میزارم شاید بدردت بخوره اگه نفهمیدی بگو تا برات توضیح بدم
سلام
یه برنامه با میکرو 32 که دارای یه ساعت با تایمر 2 وکریستال32768 خارجیه طراحی کردم و یه کلید منو براش در نظر گرفتم که هر بار اینو میزنم بهترتیب به 15 زیروال از جمله نمایش دماوفشار پایه 5تازمان برای دیفراست و5 مقدار برای روشن بودن دیفراست و در نهایت برگرده به وقفه ساعت و دوباره ساعتو نشون بده ولی هنگام برگشت میکرو ریست مشه و همهچی به حلت اول میره مشکل کجاست
با تشکر