ايران ويج

نسخه‌ی کامل: ساعت با باطری BACK UP
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
سلام...
نوشتن برنامه ساعت زیاد مشکل نیست...
ولی دقتش و داشتن باطری پشتیبان یه کم داستان داره(یا اینکه من بلد نیستم)
من برای بالا بردن دقت ساعت نمیخوام تایمر فعال کنم میخوام با استفاده از ای سی DS1307 و کریستال ساعت دقیقا سر ثانیه یه پالس بده(اگه شماره ای سی رو اشتباه گفتم شما اصلاح کنید)... باطری پشتیبان رو کجا بزارم...تو یه مدار که من دیدم منفی باطری که گرین بود و مثبتش رو داده بود به پایه شماره 3 ای سی...
درسته یا اینکه به صورت دیگه ایه..؟؟؟؟


برای pmوam چیکار کنم؟؟؟ برنامه نویسیش به چه صورته...؟
اگه با بسکام مینویسی یه سمپل داره دقیقا با همینds1307
توی دیتا شیتشم که گفته
پایه شماره 3 ولتاژ باتریه
برای ما بقی کاراتم بعد از آدرس رم توی این آی سی یه رجیستر کنترل هست که با ارتباطI2C میتونی با دستوراش دقیقا همون طوری که دوست داری تنظیمش کنی
خروجی برای ال ای دی 1ثانیه و نیم ثانیه هم داره بازم قابل تنظیمه
[تصویر:  0558857cf10a4bdbbdaa.jpg]
به کدوم پایه های میکرو وصلش کنم...؟؟
برنامشو چجوری بنویسم...؟؟
[تصویر:  a30f7170e59e4f1297dc.jpg]
i2C
کد:
config scl=portd.1
config sda=portd.3
این درسته...
اون دوتا پابه رو برا میکرو معرفی میکنی...درسته؟؟؟؟
بعدش باید چی کار کنم... ؟؟
مقاومت هاشو 4.7K بگیرم خوبه؟؟
درسته.هر پایه ای بخوای میشه
مقاومتشم حدود 2.2کیلو بذار
من برنامه نویسیم خوب نیست اما قبلا زور زدم باش کار کنم ولش کردم
توی سمپل بسکام نمونه برنامه توپی گذاشته از روی کامنتاش میتونی بفهمی چکار کرده
یه سری توابع خواندن و نوشتن داره و یه سری آدرس های مشخص و یه سری متغیر های مشخص که مال ثانیه و دقیقه و ساعت و ماه و سال و am-pm و ... هستش
توی کتاب کاهه یه نگاهی بنداز
توی کتاب مرجع کامل پرتوی فر خوب توضیح داده
من تو help بسکام رو دیدم ولی جز این دوتا خط چیزه دیگه ای نفهمیدم...
دوستان و مدیران بلاخص راهنمایی؟!!!![تصویر:  000201D4.gif]
راستش دستوراتش دقیق یادم نیست ولی تو هلپ بیسکام یه نمونه با لایبریش بود که خیلی کارو راحت میکرد

حالا مشکلتون دقیقا کجاست ؟
مشکل برنامه نویسیشه!!!
چی کار کنم که تو یه ثانیه یه پالس بده..؟؟؟
اون دوتا پایه رو باید چی کار کنم...؟؟؟
من توhelp رو دیدیم ولی چیزی نفهمیدم...!!!
در بعضي از ميکرو ها تايمر /کانتر دو يا صفر ميتواند به صورت اسنکرون ( در حالت اسنکرون کلاک ‏تايمر توسط کريستال ساعت ‏‏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 ‎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 ‎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 Incr_sec
Loop
Incr_sec‏
:
Do
Locate 1 10 Lcd "set sec"
Debounce Pinb.5 
Incr_min Waitms 100‎
If Pinb.6 0 Then _sec 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 
Incr_hour
If Pinb.6 0 Then Incr _minWaitms 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 
Incr_day:Waitms 100‎
If Pinb.6 0 Then Incr _hour Waitms 400 End If
If 
Pinb.7 0 Then Decr _hourWaitms 400 End If
Loop
Incr_day‏
:
Do
Locate 1 10 Lcd "set day"
Debounce Pinb.5 
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 
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 
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 
Lcd Date$ : Locate 2 Lcd Time‏$‏
Return‏ ‏
مثال
:
‏$‏regfile 
"M16DEF.DAT"
‏$‏crystal 
8000000‎
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5 ‎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‏ : علامت بين روز و ماه وسال ميباشد که ميتواند نقطه "." ، مميز"/" يا خط فاصله"-" باشد.‏


DS1307



آي سي به شماره ds1307 وجود دارد که ميتواند زمان را دقيق بشمارد .ويژگي هاي اين ايسي به شرح زير است:

1-
اي سي DS1307 يک RTC مي باشد rtc مخفف ( Real Time Counter)(شمارش گر زمان واقعي)است .


2-
اين اي سي با يک باطري بک آپ 3 ولتي مي تواند تا 10 سال زمان را در خود بشمارد.(در صورتي که باطري دوام اورد ، منظور کم مصرفي ايسي است).

3-
نمايش ساعت (شامل ثانيه - دقيقه وساعت ) به صورت 24 ساعت.


4-
نمايش تاريخ(شامل روز-ماه - سال ) به صورت ميلادي

5-
شمارش روز هفته ( شنبه - 1 شنبه تا جمعه )


6-
شمارش روز هاي طي شده از اول سال (به صورت ميلادي)

7-
داراي پايه جدا براي اتصال باطري بک اپ


8-
داراي دو پايه براي اتصال نوسان ساز مستقل

9-
عملکرد کاملا ثابت در تمامي محيط ها


10-
قيمت و پشيتباني خوب

11-
.....


ما در اينجا با استفاده از اين ايسي زمان را به صورت 24 ساعته نمايش ميدهيم (بهتر است ابتدا ديتا شيت ايسي را مطالعه کنيد تا با نحوه خوانده ونوشتن در آن آشنا شويد ،ديتا شيت را ميتوانيد از سايت www.datasheet4u.com تهيه کنيد).

کد php:
$regfile "m16def.dat":$crystal 1000000
Config Lcd 
16 2
Config Lcdpin 
Pin Rs Pind.0 Pind.1 Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.5
Config Clock 
User:Config Sda Portc.1:Config Scl Portc.0
Const Ds1307w = &HD0:Const Ds1307r = &HD1:Cursor Off
Do
Locate 1 1:Lcd Time$
Loop
End
Getdatetime
:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec 
Ack
I2crbyte _min 
Ack
I2crbyte _hour 
Ack
I2cstop
_sec 
Makedec(_sec) : _min Makedec(_min) : _hour Makedec(_hour)
Return 

مدار برنامه بالا را در شکل بالا مشاهده مي کنيد :

[تصویر:  110e875299db480b923f.PNG]

صفحه‌ها: 1 2 3