Chat
Danh mục
Tất cả vấn đề về ic đồng hồ DS1307

Tất cả vấn đề về ic đồng hồ DS1307

Số lượng:
Thêm vào giỏ
Tất cả vấn đề về ic đồng hồ DS1307 đã được thêm vào giỏ hàng

Mình thấy các bạn làm nhiều về đồng hồ với DS1307 mà chưa có một threads nói về con này để các bạn làm thực tế có chổ trao đổi về nó để tìm ra p/pháp nhanh nhất cho mình.
Tất cả những thắc mắc về ds1307 các bạn tập trung vào luồng này nhé..!

Về chất lượng thì ôi thôi có rất nhiều loại,loại tốt nhất là 40k .. loại rẻ nhất là khỏan 8k
đi đôi với ds1307 là thạch anh 32.768Mhz cũng chất lượng như thế.

chú này giá 40k
[​IMG]
còn chú này lại có 8k thôi
[​IMG]
chú này thì 9k
[​IMG]

Với giá cả như vậy các bạn tự suy ra chất lượng nhé...

Khi làm mạch để giảm nhiểu các bạn cần thiết kế chân thạch anh càng gần chân ds càng tốt, nên hàn GND với vỏ thạch anh và nhất thiết phải có tụ 104 lọc nhiểu tại chân ds.

Khi ráp xong mạch sẽ có những tr/hợp sau:
..Nếu chưa có pin 3v thì cắm điện ds ko chạy có khi còn làm nhiểu tá lả...(ráp pin vào)
..Đồng hồ hiển thị 88:88:88 là giao tiếp với vdk ko thành công
..Đồng hồ hiển thị 12:00:80 là đã giao tiếp với vdk thành công nhưng vẫn chưa chạy
Bây giờ muốn dho chạy các bạn cần phải chỉnh lại giây với bất kỳ giá trị nào từ 00 > 59 thì ds mới chạy và lúc này chân 7 mới xuất xung 1Hz..


Bây giờ bàn tới việc ds chạy có chính xác không mới là điều quan trọng.Mình dùng ds rất nhiều mua loại 40k,dùng thạch anh xịn luôn nhưng ds không bao giờ chạy chính xác,một ngày chậm ít nhất là 1s,nhiệt độ càng cao sai càng nhiều, cứ một thời gian lại phải chỉnh lại dho.
code tự chỉnh cố định 1ngày 1s như sau:
Mã:
 //*******************************
void tinhchinh_ds1307()
{ if((hour==0)&&(minute==0)&&(second==0))//chọn luc 00:00:00 de bu s
      { second=1;//so giay can dieu chinh trong ngày
      DS1307_Write(0x00,second);//xong ghi vào ds
      }
}
//hàm này các bạn đặt dưới hàm đoc DS
Bạn nào có cách hay hơn chia sẽ nhé..!!

- cho e hỏi cái trường hợp thứ 2 mà a nói là toàn 888888 là giao tiếp với vdk o thành công thì khác phục thế nào.

Em cần kiểm tra:
1.Hai đường giao tiếp với vdk SDA,SCL,có điện trở treo chưa và có chạm chập không
2.thay thử ds1307
3.VDK và code



Em xin bổ sung thêm phần xung ra tại chân SQW/OUT
Trong datasheet có ghi:
Việc cấu hình được thiết lập tại thanh ghi 0x07
fig1.
- Nếu bit SQWE bằng 0 tức là không cho phép cấp xung ra tại chân SQW/OUT
Lúc này nếu bit số 7: OUT = 1 thì chân SQW/OUT luôn ở mức 1
Ngươc lại nếu bit số 7: OUT =0 thì chân SQW/OUT luôn ở mức 0
- Nếu bit SQWE bằng 1 tức là cho phép xung ra tại chân SQW/OUT
Tùy vào sự kết hợp của các bit RS0 và RS1 thì xung ra tại chân SQW/OUT sẽ có tần số tương ứng như trong bảng
+ RS0=0, RS1=0 tần số 1Hz
1hz.


+ RS0 = 1, RS1=0 tần số 4.096KHz

4096KHz.


+ RS0 = 0, RS1=1 tần số 8.192KHz

8192KHz.


+ RS0 = 1, RS1 = 1 tần số 32.768KHz

32768Khz.
NgoHungCuong, 4/7/15
#49



Về nhiệt độ môi trường thì chúng ta không thể can thiệp vì nó không ổn định nên mình góp ý 1 số ý kiến khi thiết kế phần cứng để DS chạy chính xác ,Theo như kinh nghiệm của mình thì để đồng hồ chạy chính xác thì phụ thuộc vào 1 số yếu tố :
- Nguồn
- DS và thạch anh 32,768
- Nhiệt độ môi trường...
- Nguồn : Nếu nguồn chập chờn ,không ổn định cũng sẽ gây ra hiện tương chạy chậm hoặc nhanh,nhất là những nguồn nắn lọc chưa kỹ mà chủ yếu thường gặp là cục sạc điện thoại, có cục thì chạy nhanh, có cục thì chạy chậm.Khắc phục bằng cách dùng cầu diot +tụ qua 7805 rồi nắn thêm tụ ...
- DS và thạch anh 32,768 : Mình đã thử rất nhiều loại Ds( Cả rẻ, cả đắt) nhưng không thấy có sự khác biệt về sai số,mà chủ yếu là do thạch anh 32,768, nên nên khi thiest kế PCB phải nối vỏ thạch anh xuống mass và khoảng cách từ chân thạch anh đến Ds càng ngắn càng tốt, nhưng vẫn hay xảy ra 1 số trường hợp :
_Khi dùng tay xờ ds thì có hiejn tượng chạy nhanh, chậm hoặc đứng yên ( khắc phục bằng cách thay thạch anh khác )
_Chạy chậm hoặc nhanh so với giờ chuẩn: Nếu như nguồn đã ổn định,và không có hiện tượng như bên trên nhưng mạch vẫn chạy nhanh hoặc chậm thì mắc thêm 2 tụ khoảng 33p vào 2 chân thạch anh( cách này mình hay dùng và rất hiệu quả để tinh chỉnh bằng cách,nếu chạy nhanh thì tăng trị số 2 tụ này lên, còn chậm thì giảm xuống )
Ngoài ra có thẻ dùng code bù giờ như congminhfs đã hướng dẫn để tinh chỉnh cho chính xác
ledacdam, 12/5/16
#66


Code cho DS1307 mà thay DS3231 vào vẫn chạy bình thường chỉ khác là nếu cần đọc nhiệt độ của DS3231 thì viết thêm còn lại code thì giống nhau ( cả địa chỉ cũng như các thanh ghi giây phút giờ ...) Với lại khi kết nối với DS3231 sẽ đơn giản hơn , chỉ cần cấp nguồn cho IC + kết nối 2 chân SDA,SCL rồi nối pin cmos vào là chạy vì thạch anh 32,768 đã tích hợp sẵn trong IC trong khi DS1307 thì phải gắn thạch anh ngoài.Nếu so sánh về kinh tế thì dùng
DS1307 thì :
- IC DS1307 = 6K
- Thạch anh = 2K
- Đế pin + pin cmos = 6K
=> Tổng = 14K
Còn DS3231 thì :
- IC 3231 = 24K
- Đế pin + pin cmos = 6K
=> Tổng = 30K
Nhìn thì có vẻ như dùng DS1307 sẽ rẻ hơn nhưng nếu code thêm chức năng đo nhiệt độ thì bên DS1307 phải mua thêm DS18B20 ( 24K ) hoặc LM35 (20K, nếu dùng 8051 thì + vài chụcK mua thêm con ADC ( do 8051 không có ADC nội ))
Lúc này thì bên DS1307 sẽ khoảng 34-38K trong khi DS3231 thì chỉ 30K ( vì DS3231 đã tích hợp đo nhiệt độ bên trong )
Mình so sánh như vậy chắc nhiều bạn sẽ biết nên dùng DS1307 hay DS3231
Còn về độ chính xác thì theo mình cũng tương đương nhau thôi vì độ chính xác do nhiều yếu tố quyết định : Nguồn, nhiệt độ môi trường, nhiếu chứ không chỉ do DS1307 và thạch anh 32,768
ledacdam, 23/10/1





Chân 7 của DS1307 do code ( mặc định chân 7 không xuất xung nháy, nếu bạn muốn chân 7 xuất xung 1hz hoặc khác thì phải code thêm).Vấn đề khi xờ vào thạch anh thì nó mới nhảy thì bạn thay con thạch anh khác hoặc đổi nguồn khác xem sao
Khi kết nối với DS1307 thì 2 chân SDA và SCL phải có trở kéo 4K7-10K lên VCC, vỏ thạch anh phải nối mass,chân 4 và 8 nên lắp thêm tụ 104 để chống sốc và 2 chân thạch anh lắp thêm 2 tụ khoảng 33p .

Nếu bạn đang dùng 2 tụ bù ở 2 chân thạch anh 32,768 là 33p thì tăng lên
Nếu chỉnh code thì đến thời điểm chạy code tinh chỉnh bạn ghi giá trị cần tinh chỉnh sau đó dừng đọc DS rồi khi qua thời điểm đó bạn tiếp tục cho đọc DS
Ví dụ khi đến 03:01:02 bạn tinh chỉnh cho -2s thì bạn ghi vào DS 03:01:00 sau đó ngừng đọc DS đợi khoảng vài giây bạn cho đọc lại DS vì nếu sau khi bù giờ bạn đọc DS ngay thì khi giây đếm đến 02 nó bị set về 00 rồi đến 02 nó lại set về 00 như vậy nó sẽ lặp đi lặp lại
Nguồn Sưu Tầm