![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
#1 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Hỏi cách ghép nối pic và ic thời gian thực ds12887
Mình đang làm 01 ứng dụng có liên quan đến thời gian thực nhưng không biết tí gì về con RTC ds12887.Bạn nào có tài liệu ghép nối giữa pic6f877a và RTC thì cho mình với.Cảm ơn trước nha!
thay đổi nội dung bởi: lequocbao, 16-12-2008 lúc 12:45 PM. |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
http://datasheets.maxim-ic.com/en/ds...-DS12C887A.pdf) cho thấy chip này giao tiếp kiểu byte, với địa chỉ và dữ liệu được dồn kênh vào các chân AD0..AD7. Do đó, cần một port 8-bit của PIC để nối vào các chân này. Ngoài ra, các chân dùng cho mục đích giao tiếp gồm có: CS, AS, DS, R/W (đây là những chân bắt buộc phải kết nối với PIC). Những chân giao tiếp còn lại là tùy chọn (xem datasheet về thông tin chi tiết). Tất nhiên các chân nguồn cần được nối, và chú ý chân VBAT (xem datasheet). Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Chà! ngoài con ds12887 này ra mình còn con RTC nào khác không anh Namqn(càng ít chân càng tốt)?vì pic em còn dư có 1 port (8 pins) ah!vậy là không đủ để giao tiếp rồi!
|
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Em đã chọn dùng con ds1307 r (chỉ có 8 chân thôi hì hì).Cảm ơn anh Namqn nhiều!
Nhưng anh cho em hỏi là ds1307 chỉ cho nhập xuất dữ liệu dạng mã BCD, mà mã BCD là như vậy phải không anh? vd: số 0(decimal):00000000 số 1 :00000001 số 2 :00000010 số 3 :00000011 số 4 :00000100 số 5 :00000101 số 6 :00000110 số 7 :00000111 số 8 :00001000 số 9 :00001001 nếu đúng thì mình có cách nào chuyển thành số decimal không?tại vì em đang xử lý dữ liệu trong pic bằng số decimal. |
![]() |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
Dữ liệu trong vi điều khiển được lưu ở dạng nhị phân. Không rõ bạn lưu dữ liệu và xử lý bằng số decimal như thế nào, và thực tế bạn thực hiện những phép toán gì? Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Thì các biến em đều khai báo là int8,gán giá trị cho biến là các số thập phân và thực hiện các phép toán +,- ,so sánh bình thường.
|
![]() |
![]() |
![]() |
#8 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 thay đổi nội dung bởi: namqn, 16-12-2008 lúc 05:44 PM. Lý do: viết nhầm |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Như vậy với lệnh:
x=0b00001010; if (x=0xa); thì kết quả vẫn là true đúng không anh? và khi em nhận 01 byte dữ liệu từ ds1307 vào pic và byte đó được lưu tạm thời trong biến có kiểu là int8 thì mặc nhiện byte dữ liệu đó đang được biểu diễn dưới dạng nhị phân đúng không anh? vd: ds1307 truyền đi số 10 (mã BCD) là:00000001(MSB đi đầu - chổ này e không chắc có đúng không nữa,nếu sai anh góp ý giúp e nha!). nhưng khi pic lần lượt nhận vào sẽ là:10000000(binary) sẽ có giá trị là 128 thập phân. Em hiểu như vậy có đúng không? anh Namqn ơi! 11 thập phân là 00001011b chứ đâu phải là 00010011b đâu anh!hì hì... thay đổi nội dung bởi: lequocbao, 16-12-2008 lúc 05:40 PM. |
![]() |
![]() |
![]() |
#10 | |
Trưởng lão PIC bang
|
Trích:
Byte nhận về từ DS1307 có dạng số BCD, bạn lưu vào biến int8 thì nó vẫn số BCD. Bạn chưa cần quan tâm đến việc truyền dữ liệu nối tiếp ra sao. Chỉ cần hiểu nếu DS1307 trả về giá trị 10 (BCD) thì bạn sẽ nhận được giá trị 10 (BCD) trong PIC (giả thiết bạn đang dùng module I2C của PIC). Tôi đã viết nhầm 11 thập phân là 00010011 trước đó, đã sửa lại như bạn chỉ ra. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#11 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Đúng là em đang dùng modul i2c để giao tiếp pic16f877a với ds1307.
Đồng ý là ds1307 trả về số 10(BCD) và chắc chắn pic sẽ nhận được số 10(BCD) Cái em muốn hiểu là số 10(BCD) như ví dụ trên sau khi được lưu vào biến trong pic thì khi đó bản thân vđk pic sẽ hiểu cái giá trị thực sự trong biến là bao nhiêu?10 hay 128 thập phân? vì em cần xử lý +,- so sánh ...biến đó với các giá trị thập phân có sẳn trong pic anh ah! |
![]() |
![]() |
![]() |
#12 | |
Trưởng lão PIC bang
|
Trích:
Như tôi đã nói trước đó (post #8), bạn chỉ cần chuyển các số BCD thành dạng nhị phân trước khi tính toán, so sánh với các hàm có sẵn. Hoặc bạn có thể tự viết các hàm tính toán, so sánh số BCD, và không cần chuyển dạng thành nhị phân. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#13 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Đã hiểu vấn đề, em cảm ơn anh Namqn nhiều!
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|