![]() |
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 !!! |
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 |
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. |
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...
|
Đâ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ễ ,
|
Trích:
Để 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 |
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. |
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ả) |
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 |
Trích:
|
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.
|
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. |
1 Attachment(s)
Trích:
|
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 |
Đồ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à 05:01 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