PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 06-10-2007, 07:21 PM   #1
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
PIC và DS13xx

Xin chào các bạn, hiện nay đề tài làm Lịch vạn niên ứng dụng Real Time Clock đang là đề tài khá hot đối với các bạn Sinh Viên. Các diễn đàn đều có trao đổi sôi nổi về việc thiết kế LVN bằng cách sử dụng PIC và RTC ds13xx (DS1307, DS1302, DS1337...) theo chuẩn I2C, một số bạn làm thành công, một số bạn gặp khó khăn vì đồng hồ cứ quay về thời điểm khởi tạo mỗi khi mất điện... Nay, mình xin chia sẻ một vài kinh nghiệm trong việc thiết kế LVN dùng IC RTC DS13xx (8 Pin)
- Trước hết, cần phải có 1 cục pin CMOS 3V để đảm bảo dữ liệu bên trong con DS13xx không bị mất khi nguồn ngoài bị mất-cái này cực kì quan trọng. Nhiều bạn thắc mắc là đã gắn pin rồi mà sao khi ấn RESET hoặc rút nguồn ra ghim lại thì thời gian ko tiếp tục mà lại là thời điểm khởi tạo--> hư phần cứng???! Không chắc ! Bạn để ý là đầu hàm main() chúng ta sử dụng hàm ds13xx_Init(...) sau đó là các hàm đọc thời gian trả về từ con DS trong vòng lặp while(1). Nếu PIC bị RESET, con trỏ sẽ trỏ tại vị trí đầu chương trình chính và gặp hàm khởi tạo ds13xx nó khởi tạo con ds 1 lần nữa ! Để tránh hiện tượng này ta sẽ sử dụng dụng 1 Byte RAM trong vùng user's RAM của con DS để làm biến "FLAG" kiểm tra xem con DS đã được khởi tạo chưa.VD Nếu bạn dùng DS1307 thì khi ghi vào thanh ghi CONTROL ở địa chỉ 0x07 ta sẽ tiếp tục ghi 1 giá trị bất kì vào địa chỉ tiếp theo là 0x08. Ở đầu chương trình chính bạn dùng ham if để kiểm tra nếu giá trị trong thanh ghi 0x08 của con DS trùng với giá trị mà bạn đã lưu vào đó thì nhảy đến hàm đọc thời gian... còn không thì thực thi hàm ds13xx_Init(...). Như vậy, nếu mất điện hoặc ấn Reset thì đồng hồ vẫn chạy đúng !
- Vậy, nếu không có con DS1307 mà chỉ có con DS1302 hoặc DS1337 thì cách mắc PIN CMOS như thế nào? Xem trong datasheet con ds1302 có hai chân VCC1 và VCC2. Một chân bạn nối thẳng lên nguồn, chân còn lại nối vào cực (+) của PIN. Ngoài ra nếu không dùng PIN bạn có thể dùng 1 cái tụ 1000uF cũng được, nếu mất nguồn, tụ sẽ xả điện qua con DS1302 (cả tháng ko hết !). Nhưng, DS1337 thì sao, nó ko có chân VBAT hay VCC2. Ko sao, bạn dùng 2 con diode mắc Cathode chung vào chân VCC, Anode của con diode thứ nhất bạn nối lên VCC, anode con thứ 2 bạn nối với PIN. Vậy là xong.
- Nếu các bạn tự xây dựng các hàm I2C mà ko dùng hàm có sẵn của CCS thì chương trình sinh mã ít hơn (xấp xỉ 920 bytes Flash) do đó nếu dùng con PIC có bộ nhớ lớn,nhiều chân hoặc nhiều chức năng quá thì thật là uổng phí. Tôi chỉ sử dụng thằng 'binh bét' 16F84A là được 1 cái LVN hiển thị Thứ Ngày Tháng Năm Giờ Phút Giây bằng 16 LED7 đoạn ! (Hôm nay ra tiệm NET ko dem theo sơ đồ, hẹn vài hôm nữa post lên). Dưới đây là hình cái đồng hồ mini mình làm lúc trước (dùng 89)
Hình Kèm Theo
File Type: jpg SL700280.JPG (865.3 KB, 55 lần tải)
meishun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam