PIC Digital Clock Timer
Note: There is a bug in this program that prevents the alarm from working if the minutes are set to zero. So, an alarm setting of 8:59 or 6:01 will work but 6:00 will not. The bug can be fixed by adding a program line to call the alarm routine after the hours are incremented.
Current listing in the interrupt section is: call Alarm movlw d'60' xorwf MINUTES,0 btfss STATUS,2 ; Check for 60 minutes goto Done ; Jump out if not 60 clrf MINUTES incf HOURS,f New listing should be: call Alarm movlw d'60' xorwf MINUTES,0 btfss STATUS,2 ; Check for 60 minutes goto Done ; Jump out if not 60 clrf MINUTES incf HOURS,f call Alarm ; New line added here
This clock timer uses a PIC16F628 microcontroller to display 3 and 1/2 digit time and control an external load. The clock includes a calendar with leap year and optional daylight savings adjustments. The timer output can be set from 1 to 59 minutes and manually switched on and off. The clock also has a correction feature that allows an additional second to be added every so many hours to compensate for a slightly slow running oscillator. The oscillator uses a common 32.768 KHz watch crystal and the frequency can be adjusted slightly with the 24pF capacitor on the right side of the crystal.On bootup, the display should read 2:56 AM and other data can be displayed by toggling the advance switch (D). Each time the (D) switch is closed and opened, the display will advance to the next data. The order of displayed data and bootup values is as follows:
Time --------------------------------------------- (2:56) Alarm --------------------------------------------- (6:30) Calendar --------------------------------------------- (3:07) Weekday (Sunday=1), Seconds ---------------------------- (1:Seconds) AM/PM (Alarm) (AM=0/PM=1), Timer Duration ------------- (0:45) AM/PM (Time) (AM=0/PM=1), Daylight Savings Disabled -- (0:00) Year (1 to 4) , Error Correction ---------- (2:18) There are 7 displays that advance each time the 'D' switch is toggled. To make adjustments, set the RA5 switch to the "B" position and then toggle the E and F switches to advance the data in the hours or minutes digits. Then toggle the "D" switch to move to the next data. After the 7th display, it will go back to the top and display the current time. Or, just press the time switch 'C' to get to the top at anytime. When done setting everything up, set the RA5 switch to the "A" position so the data cannot be accendentally changed. You can still view everything with the "D" advance key, but the E an F switches will just turn on or off the alarm at RB7. I use it with an external transistor to switch on and off a radio. The 'Daylight savings' setting (in the 6th display in the minutes digits) is used to enable daylight savings time adjustments, one hour ahead on the 2nd sunday in March, and one hour behind on the first sunday in November. The entry will be either 0, 1, or 3. 0 = Daylight savings time disabled (default). 1 = Savings time enabled and current time is standard time. 3 = Savings time enabled and current time is daylight savings time. The last 2 entries on the list (Year and Correction) is for the current year (1 to 4) (4 = Leapyear) so today's setting (2006) will be 2 since leapyear will be on year 4 which is 2 years from now. The correction setting will add a second every so many hours for fine adjustment to the oscillator frequency. My setting is 18 which adds a second every 18 hours. It's pretty accurate and only loses 3 seconds a month. You probably want to run it for a couple weeks to figure out what correction is needed for the crystal you have. Switch functions: RA0 (C switch) = Display Time RA1 (D switch) = Advance to next data (alarm, calendar, etc) RA2, RA3 (E and F switch) = Advance hours and minutes (in setup mode). RA2, RA3 (E and F switch) = Toggle alarm output on/off (in run mode) RA5 in the 'B' position (open) = Setup Mode
http://www.bowdenshobbycircuits.info/pic_ck.htm
Tidak ada komentar:
Posting Komentar