PDA

View Full Version : Làm một cái digital clock đơn giản!


noisePIC
06-06-2005, 10:42 AM
Em mới học PIC và muốn làm cho mình một cái đồng hồ chơi cho vui.Trong đầu cũng có một chút ý tưởng về phần thiết kế! Em đọc cho các bác nghe rồi góp ý cho em nhé!
- PIC 16F84A
- Giải mã 3bit-8 đường * 2 con: Điều khiển hiển thị Led 7 đoạn
-Nút bấm chỉnh giờ,phút
- Led 7 đoạn 2 cái

Khi đó cần 6 chân out- 6 chân IN để xuất tín hiệu out ra led 7 đoạn.Đồng thời đọc giá trị các chân để so sánh với thời gian trong chương trình.
Còn gì không nhỉ? Em thấy bọn bạn em bảo có con đồng hồ thời gian thực? Nó là con nào?

Cùng nhau phát triển dự án nhé ..hỡi các newbie !!!

hphong23
07-06-2005, 08:18 AM
- Nếu muốn hiển thị cả giờ và phút thì bạn phải dùng đến 4 con LED 7 đoạn để hiển thị. Vì PIC 16F84 có ít chân IO nên có lẽ bạn nên dùng một con giải mã LED 7 đoạn để điều khiển các thanh của LED (ví dụ như 74LS47). Sau đó dùng thêm 4 chân IO để lần lượt điều khiển các LED theo kiểu multiplex.
- Để thay đổi giờ và phút thì bạn nên dùng 4 công tắc để làm việc đó ( 1 cái để chuyển qua chế độ đặt thời gian, 1 cái dùng để chuyển đến vị trí cần thay đổi, 2 cái để tăng giảm).
- Có một số IC thời gian chuyên dụng, dùng làm đồng hồ. Nó sẽ cho cả tín hiệu giờ, phút, giây, ngày, tháng, năm ( ví dụ DS1303 nếu tôi nhớ không nhầm). Bạn có thể tham khảo thêm về vấn đề này ở diễn đàn: diendansv.hutech.edu.vn
- dưới đây là sơ đồ mạch đồng hồ điện tử dùng 89C52, bạn có thể tham khảo để làm đồng hồ cho riêng mình
Chúc thành công

BinhAnh
07-06-2005, 09:14 PM
Bạn hoàn toàn có thể dùng RTC thông dụng giao tiếp I2C hay parallel. Tuy nhiên bạn có thể tận dụng ngay PIC để làm tốt chuyện này mà ko cần thêm IC chuyên dụng.
Bạn dùng Timer1 và mắc thạch anh 32.768Khz vào chân dao động của timer1. Dùng Prescale đủ lớn, cài đặt ngắt sau 1s cho timer1.Cho phép chế độ SLEEP mode, nó thức dậy mỗi khi có ngắt timer1.
Khi mất điện(có nguôn nuôi phụ), thì PIC sẽ rơi vào SLEEP mode.

Trần Văn Thường
26-12-2005, 12:51 PM
tôi cũng muốn thiết kế một chiếc đồng hồ "thời gian thực luôn" có thể biết ngày tháng năm, tôi sử dụng led 7 đoạn để hiển thị cho giờ, phút, giây(3 cặp 2 led) và tôi sử dụng ic thời gian chuyên dụng DS1307 giao tiếp với con AT89C51 (vì con này rẻ và dễ dùng). nhưng vấn đề là con DS1307 sử dụng giao tiếp I2C nên rất khó viết chương trình cho vi điều khiển (dùng với pic thì rất thuận lợi) vì vậy tôi mong được sự giúp đỡ của các bác...cảm ơn các bác nhiều...

minhtienbk
26-12-2005, 04:35 PM
Đây là diễn đàn PIC nhưng em nghĩ mua con PIC tốn wa' ,xa`i đại IC số ,dễ lắm ,thuật giải cũng dễ ,

mafd_47a
26-12-2005, 08:55 PM
tôi cũng muốn thiết kế một chiếc đồng hồ "thời gian thực luôn" có thể biết ngày tháng năm, tôi sử dụng led 7 đoạn để hiển thị cho giờ, phút, giây(3 cặp 2 led) và tôi sử dụng ic thời gian chuyên dụng DS1307 giao tiếp với con AT89C51 (vì con này rẻ và dễ dùng). nhưng vấn đề là con DS1307 sử dụng giao tiếp I2C nên rất khó viết chương trình cho vi điều khiển (dùng với pic thì rất thuận lợi) vì vậy tôi mong được sự giúp đỡ của các bác...cảm ơn các bác nhiều...




Để dùng I2C giao tiếp với DS1307 bạn phải dùng F87x. Kỹ thuật dùng I2C bạn có thể tham khảo tại:

http://www.dientuvietnam.net/board/showthread.php?t=702

Nếu vẫn khó khăn thì nhắn cho mình

falleaf
27-12-2005, 11:33 AM
http://piclist.com/images/boards/clock-et/index.htm

Một ví dụ nhỏ về đồng hồ thời gian thực.

Lưu ý, điều quan trọng nhất là phải xác định được sai số của thạch anh, và bù vào dao động này, nếu không kết quả đồng hồ sẽ không còn là thời gian thực nữa.

chúc vui.

voduychau
09-03-2006, 10:51 AM
mọi ứng dụng của vdk,dù ít dù nhiều,mỗi lện đều ngốn thời gian(mặc dù rất nhỏ,8951 chạy thạch anh 12M mỗi lệnh ít nhất là 1 uS) nên để làm clock real time,nên để mạch quét led và đếm giờ độc lập với vxl,vxl chỉ đóng vai trò chỉ đạo thôi,có thế mới nhanh được.
biện pháp nâng độ chính xác hay nhất và dễ làm nhất lả xem thử trong 1 khoảng thời gian nào đó,mạch chạy sai bao nhiêu,rồi ta ra lệnh cho vdk âm thầm add thêm vào bộ đếm(hi hi,cách này hữu hiệu hơn nhiều so với việc ngồi tìm cách mua linh kiện chính xác,có ai ngồi xem đồng hồ từng giây từng phút đâu mà sợ lộ? mà việc làm này cũng chẳng có gì gọi là ngu cả)

ThaiVu
25-07-2006, 02:32 PM
neu ban nao dung PicBasic Pro thi day la trang wed chi cho ban
http://www.rentron.com/PicBasic/SERLED.htm

mnt
06-10-2007, 10:22 AM
tôi cũng muốn thiết kế một chiếc đồng hồ "thời gian thực luôn" có thể biết ngày tháng năm, tôi sử dụng led 7 đoạn để hiển thị cho giờ, phút, giây(3 cặp 2 led) và tôi sử dụng ic thời gian chuyên dụng DS1307 giao tiếp với con AT89C51 (vì con này rẻ và dễ dùng). nhưng vấn đề là con DS1307 sử dụng giao tiếp I2C nên rất khó viết chương trình cho vi điều khiển (dùng với pic thì rất thuận lợi) vì vậy tôi mong được sự giúp đỡ của các bác...cảm ơn các bác nhiều...
em cung dang can tim lieu ve van de nay .bac co dc tai lieu can tim thi cho em xin dc ko ha bac ?em cam on bac truoc nhe !

hungdv
23-10-2007, 10:03 PM
Theo tôi được biết muốn đồng hồ số ko bị trế thì phải dùng các IC real time như con DS1307 chẳng hạn. Tuy nhiên thì có cách làm đồng hồ số bằng các IC logic thì phải. Có ai đó đẫ nói với tôi nhưng mà chả hướng dãn nên tôi vẫn chưa làm dc. Ai biết hti fdnahf chút thời gian hướng dẫn anh em mới vào nghề đi.

anh_gioi
23-10-2007, 11:17 PM
bên anh linh308 đã nói về vấn đề này rồi đấy.anh ấy còn up cả phần cứng lẫn phần mềm nữa đấy.các bạn xem trong các đề tài học pic ấy.
tui down về rùi nhưng hiện tại vẫn chưa chạy đc(pó tay luôn)
phần cứng: 16F877A,DS1307,LCD 16x2..hết.

thaithienanh
24-10-2007, 02:02 AM
Theo tôi được biết muốn đồng hồ số ko bị trế thì phải dùng các IC real time như con DS1307 chẳng hạn. Tuy nhiên thì có cách làm đồng hồ số bằng các IC logic thì phải. Có ai đó đẫ nói với tôi nhưng mà chả hướng dãn nên tôi vẫn chưa làm dc. Ai biết hti fdnahf chút thời gian hướng dẫn anh em mới vào nghề đi.

Không biết lý do tại sao bạn thích làm đồng hồ số bằng IC số nhỉ :), sẽ phức tạp đấy nhưng dù sao cũng khá hoành tráng :D, ở đây mình có giữ một luận văn của anh chàng sinh viên nào đó (bây giờ chắc thành "ông chàng" rồi :p) có làm về cái này, mà hình như tới khúc cuối cũng buông tay và xin làm bằng VĐK thì phải (đọc phớt qua khúc cuối thấy có file hex nữa :D) dù sao thì mình nghĩ phần đầu của luận văn cũng giúp cho bạn hiểu đuợc vấn đề :)

Dolphin
26-10-2007, 05:21 AM
Mình đang làm clock dùng Pic16f84A, dùng Xtal 32,768kHz, ngắt TMR0. Đang viết code phần hiển thị thời gian nhưng không hiểu sao khi mô phỏng bằng Proteus thì bị lỗi. Ai thấy lỗi chỗ nào chỉ hộ tí.

;------------Program Listing, Clock.asm ------------------------------
list p=16F84A
#include <p16F84A.inc>

ERRORLEVEL -302
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _LP_OSC

;--------------------- Define Variables -------------------------------
HOURS equ 21h
MINUTES equ 22h
HOURS_A equ 23h
MINUTES_A equ 24h
MONTH equ 25h
DAYS equ 26h
WEEKDAY equ 27h
SECONDS equ 28h
AMPM_A equ 29h
TIMER_LIMIT equ 2ah
AMPM equ 2bh
DAYLIGHT equ 2ch
YEAR equ 2dh
CORRECTION equ 2eh
TEMP equ 35h
TENS equ 36h
TEMPW equ 37h
SWITCH equ 38h
STATUS_SAVE equ 39h
TEMP1 equ 3ah
ALARM equ 3bh
LIMIT equ 3dh
TEMP_SAVE equ 3eh
TIMER equ 3fh
AMPM_LED equ 40h
COUNTER equ 41h


;--------------------- Program Starts here --------------------------
org 0
goto INIT
org 0x04
goto Int
;--------------------- Interrupt routine to update time -------------
Int
movwf TEMPW ;
swapf STATUS,0 ;
movwf STATUS_SAVE ;
bcf STATUS,RP0 ;
incf SECONDS,f ;

movlw d'60'
xorwf SECONDS,0
btfss STATUS,2 ;
goto Done ;
clrf SECONDS
incf MINUTES,f
movlw d'60'
xorwf MINUTES,0
btfss STATUS,2 ;
goto Done ;
clrf MINUTES
incf HOURS,f
movlw d'24'
xorwf HOURS,0
btfss STATUS,2 ;
goto Done ;
clrf HOURS
Done
bcf INTCON,2
swapf STATUS_SAVE,0
movwf STATUS
swapf TEMPW,f
swapf TEMPW,0
retfie

;--------------------- End Interrupt Procedure ----------------------


INIT ; Initialize variables

bsf STATUS,RP0 ;
bcf STATUS,RP1 ;
movlw b'00000000'
movwf TRISB ;
movlw b'11100000' ;
movwf TRISA ;
movlw b'00000100' ; Scale 1/32
movwf OPTION_REG
bcf STATUS,5 ;
bcf STATUS,0 ;
bcf STATUS,2 ;
bcf STATUS,1 ;
bsf INTCON,5 ;
bcf INTCON,2 ;
bsf INTCON,7 ;
clrf SECONDS
clrf HOURS ;
clrf MINUTES ;
goto Main

Array ; Data for 7 segment digits
addwf PCL,1
retlw b'01000000' ; "0"
retlw b'01111001' ; "1"
retlw b'00100100' ; "2"
retlw b'00110000' ; "3"
retlw b'00011001' ; "4"
retlw b'00010010' ; "5"
retlw b'00000010' ; "6"
retlw b'01111000' ; "7"
retlw b'00000000' ; "8"
retlw b'00010000' ; "9"

Main ; ------------ Main Loop ----------------------

call Display ; Display data
goto Main

;--------------------- End of Main Loop ------------------------------

Output ; Write data to port B
call Array
iorwf ALARM,0
movwf PORTB
return


Delay ;------------------------ Delay ---- about 600 uS ------------

movlw d'25'
Delay_0
movwf TEMP1
Delay_1 movwf COUNTER
Delay_2 decfsz COUNTER,f
goto Delay_2
decfsz TEMP1,f
goto Delay_1
return

Digits ; Converts value in TEMP to 2 single digits - TENS and TEMP

clrf TENS
movlw d'10'
Loop
incf TENS,f
subwf TEMP,f
btfss STATUS,0
goto Ones
goto Loop
Ones
decf TENS,f
addwf TEMP,f
return

Display ; -------------------- Display Data -----------------------
;*********************Display Hour***************************
movf HOURS,W
movwf TEMP
call Digits
;******Display Tens of Hour*******
movfw TENS ;
call Output
movlw b'00000001'
movwf PORTA
call Delay
;******Display Units of Hour*******
movfw TEMP
call Output
movlw b'00000010'
movwf PORTA
call Delay
;*********************Display Minute************************
movf MINUTES,W
movwf TEMP
call Digits
;******Display Tens of Minute*******
movfw TENS
call Output
movlw b'00000100'
movwf PORTA
call Delay
;******Display Units of Minute*******
movfw TEMP
call Output
movlw b'00001000'
movwf PORTA
call Delay
return
end

vandungevn
26-10-2007, 01:02 PM
Nói về thời gian thực dùng I2C trên CCS và MPLAB tôi chưa giao tiếp được với chúng, bạn nào đã giao tiếp được với DS1307 ngon lành bằng ngôn ngữ C thì thông tin lên cho tui với. Đang cần.....

minhpic
27-10-2007, 10:10 AM
mình có thể làm việc ấy

wwwaaa
29-09-2008, 03:57 AM
Theo tôi được biết muốn đồng hồ số ko bị trế thì phải dùng các IC real time như con DS1307 chẳng hạn. Tuy nhiên thì có cách làm đồng hồ số bằng các IC logic thì phải. Có ai đó đẫ nói với tôi nhưng mà chả hướng dãn nên tôi vẫn chưa làm dc. Ai biết hti fdnahf chút thời gian hướng dẫn anh em mới vào nghề đi.

Đồng hồ số dùng IC logic bác nói đây,đối với dân lập trình vđk thì cái đồng hồ này đúng là ác mộng kinh hoàng.Mặc dù lúc thiết kế tôi đã "bớt xén" nhiều linh kiện rồi nhưng vẩn tốn 24-25 em IC gì đó. Điểm đặc biệt là lúc hẹn giờ thằng này hiển thị thời gian hẹn ngay trên chính bộ led 7 đoạn hiển thị thời gian thực,xác nhận hẹn giờ xong là nó quay về hiển thị thời gian thực,hiển thị buổi sáng chiều (đã Việt hóa),báo thức bằng 3 tiếng bíp ngắt quãng giống loại thương mại đấy. Khuyến cáo là đừng bác nào ráp theo,vì trên sơ đồ có một số "tiểu xảo". Các bác muốn tham khảo thì chỉ nên nắm giải thuật và ý tưởng thôi rồi tự làm,thế tốt hơn



"Không biết lý do tại sao bạn thích làm đồng hồ số bằng IC số nhỉ , sẽ phức tạp đấy nhưng dù sao cũng khá hoành tráng"

Không phải "thích" mà là do trường nào cũng có vài môn như "Kĩ thuật số" và "Thực tập kt số" . Các sư phụ bảo làm bằng IC logic mình dùng VĐK là vêu mỏ đấy

trananhduy19119
29-09-2008, 09:05 PM
các bác giúp me với em đang định làm con đèn giao thông ( đèn xanh đèn đỏ có cả bảng báo thời gian đếm lùi) nhưng chưa biết cách làm
bác nào chỉ giáo cho em với
em xin cảm ơn

vanhung4050
31-10-2008, 02:32 PM
Cac bac nen dung 89c51 giao tiep i2c voi ds1307 ko kho dau.Hoac dung pic16f88 gi do voi ds1307 cung hay lam .khi khac minh pót so do va code cho

thaiphong1617
20-09-2010, 10:02 AM
dung la kho ma. da hoc vdk ma lai bat dung ic so de lam. kieu nay chac chet mat. ko biet co qua khoi nam nay hay ko day. bac nao co cai mach nao simple hon thi share cho e voi. chu cai mach nay thi e chiu