PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Làm một cái digital clock đơn giản! (http://www.picvietnam.com/forum/showthread.php?t=53)

noisePIC 06-06-2005 10:42 AM

Làm một cái digital clock đơn giản!
 
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

1 Attachment(s)
- 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

hoc hoi hoc hoi
 
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

Trích:

Nguyên văn bởi Trần Văn Thường
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

dong ho dien tu
 
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

Trích:

Nguyên văn bởi Trần Văn Thường (Post 1297)
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

1 Attachment(s)
Trích:

Nguyên văn bởi hungdv (Post 12309)
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

2 Attachment(s)
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

Đồng hồ thời gian thực I2C
 
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.....


Múi giờ GMT. Hiện tại là 12:05 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam