![]() |
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!
|
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, |
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!
|
Trích:
Thân, |
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. |
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, |
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.
|
Trích:
Thân, |
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ì... |
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, |
Đú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! |
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, |
Đã hiểu vấn đề, em cảm ơn anh Namqn nhiều!
|
Múi giờ GMT. Hiện tại là 09:50 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam