PDA

View Full Version : PIC và DS13xx


meishun
06-10-2007, 07:21 PM
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)

david
06-10-2007, 08:13 PM
bác cho em hỏi cục pin CMOS 3V ấy bác mua ở đâu thế,tên là gì a? Họ bán luôn cả cái đế hả bác ?

david
07-10-2007, 10:14 PM
nếu mình muốn dùng chân SQW/OUT để đưa vào ngắt RB0 thì đó là ngắt sườn lên hay sườn xuống ạ,mình phải nạp giá trị B'00010000' vào thanh ghi Control để lấy chu kỳ ngắt 1hz phải không? Bác nào làm rồi chỉ cho em chỗ này được không,em đang bị vướng khi dùng ngắt để đọc DS1307,nếu không dùng ngắt để đọc thì hiện thị rất chuẩn,nhưng khi dùng ngắt thì nó cứ nháy điên điên,hic

meishun
08-10-2007, 10:03 AM
thực ra việc đọc hay ghi dữ liệu vào DS1307 đâu có liên quan gì đến ngắt đâu ! Con DS tự động tăng giá trị thời gian trong mỗi giây,bạn khởi tạo cho con DS xong thì chỉ việc đọc liên tục thôi, Xung 1Hz ở chân SQW của con DS bạn cấp cho LED đơn nhấp nháy chu kì 1 giây cho nó đẹp mắt (LED đơn nằm giữa giờ : phút : giây ấy), đỡ mất công dùng timer viết
PIN CMOS 3 volt (trong hình nó là cục màu vàng đấy) chợ linh kiện bán thiếu gì. Loại có đế dính liền giá 6K, đế rời giá 5K + đế 3K

anhphuong23
09-10-2007, 03:40 AM
Sao mình không thấy các nút chỉnh giờ nhỉ ? lỡ khi hết pin thì thaó PIC ra , canh giờ rồi nạp lại à ?

Pin Cmos là cục hình tròn , màu bạc , kích thước cỡ đồng xu 2k, nằm giữa cái đế màu đen chứ . Đâu phải cục pin màu vàng .

meishun
09-10-2007, 09:10 AM
Pin CMOS có nhiều loại. Loại màu vàng là loại có chân dính liền, ko cần đế. Nút ấn chỉnh giờ trên mạch tui chưa hàn vào.(nút change và inc thôi, ko cần nhiều)

vandungevn
09-10-2007, 11:29 AM
Pin có rất nhiều loại các bạn thích dùng loại nào cũng được miễn là đủ 3VDC cho nó, còn nút nhấn thêm vô đó, mình thấy trên mạch bạn không phải dùng PIC mà hình như dùng AVR bạn, bạn có chương trình đã OK cho PIC chưa vậy, dùng DS1307 đó, post lên cho tui với... thanks.

anhphuong23
09-10-2007, 01:19 PM
thực ra việc đọc hay ghi dữ liệu vào DS1307 đâu có liên quan gì đến ngắt đâu ! Con DS tự động tăng giá trị thời gian trong mỗi giây,bạn khởi tạo cho con DS xong thì chỉ việc đọc liên tục thôi, Xung 1Hz ở chân SQW của con DS bạn cấp cho LED đơn nhấp nháy chu kì 1 giây cho nó đẹp mắt (LED đơn nằm giữa giờ : phút : giây ấy), đỡ mất công dùng timer viết
PIN CMOS 3 volt (trong hình nó là cục màu vàng đấy) chợ linh kiện bán thiếu gì. Loại có đế dính liền giá 6K, đế rời giá 5K + đế 3K


Đúng là pin Cmos có nhiều loại . Nhưng bác chú thích thế này thì bố ai mà tìm được : " (trong hình nó là cục màu vàng đấy) " . Đặc biệt là những bạn chưa biết về loại pin này .

meishun
09-10-2007, 06:23 PM
Mạch dùng PIC16F84A+ds1307. Firmware Upload sau, đang bận quá. Còn 1 mạch dùng PIC12F675 (8 chân)+DS1307+LCD1602 nữa, chắc khi nào rảnh UP mạch và code luôn.

anhphuong23
10-10-2007, 01:24 AM
Ok ! Hy vọng bác post sớm cho anh em được nhờ . Chứ như mấy bác trước đây , cứ hứa nhăng , hứa cuội , làm anh em chờ dài cổ . thật thất vọng !