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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 04-05-2011, 10:45 AM   #1
phanhoangag
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 17
:
Red face help me!!!!! DS1307 + 16f877a

void INIT_MAIN() {
// Khoi tao truyen thong I2C
I2C_Init(100000); // Kích hoạt môddun truyền thông i2c với tốc độ baud là 100kHz
// Khoi tao DS1307
I2C_Start(); // điều kiện start
I2C_Wr(0xD0); // truyền địa chỉ của ds1307 và chọn ghi dữ liệu lên ds1307
I2C_Wr(0x00); // Truyền địa chỉ ô nhớ đầu tiên của ds1307
I2C_Wr(0x13); // Khoi tao gia tri ban dau cho thanh ghi giây
I2C_Wr(0x03); // Khoi tao gia tri ban dau cho thanh ghi phút
I2C_Wr(0x02); // Khoi tao gia tri ban dau cho thanh ghi giờ
I2C_Wr(0x03); // Khoi tao gia tri ban dau cho thanh ghi thứ
I2C_Wr(0x05); // Khoi tao gia tri ban dau cho thanh ghi ngày
I2C_Wr(0x03); // Khoi tao gia tri ban dau cho thanh ghi tháng
I2C_Wr(0x03); // Khoi tao gia tri ban dau cho thanh ghi năm
I2C_Wr(0x90); // đặt cấu hình cho thanh ghi điều khiển, sử dụng xung 1Hz.
I2C_Stop(); // Điều kiện stop
}
chuong trinh chinh
void MAIN() {
INIT_MAIN();
}
Trong hàm INIT_MAIN() có đoạn khởi tạo cho ds1307 như trên. Như thế cứ mỗi lần con PIC được cấp điện lại thi đồng hồ lại bị Reset theo giá trị mình khởi tạo ban đầu cho nó. Vi Thế mỗi lần như vậy phải chỉnh lại giờ cho đồng hồ .
co ai giup minh khong?????????
phanhoangag vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2011, 03:57 PM   #2
tanbka
Đệ tử 5 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 91
:
DS1307 chỉ phải khởi tạo một lần thôi, vậy nên sau đó bạn bỏ hàm INIT đi.Không để trong hàm Main nữa
tanbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2011, 10:19 PM   #3
danghien719
Đệ tử 3 túi
 
danghien719's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 52
:
cái này đơn giản thôi.
đầu tiên bạn cứ nạp cho Ds1307 set giá trị chuẩn, thế là nó đã OK rồi, có cục pin nuôi rùi.
sau đó bỏ dòng lệnh set đi, nạp lại lần nữa. xem sản phẩm
chúc vui.
danghien719 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2011, 10:48 PM   #4
phanhoangag
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 17
:
Smile lich van nien

kam on cac nhieu de minh thu xem
phanhoangag vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-05-2011, 12:02 PM   #5
phanhoangag
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 17
:
Red face

may anh co cach nao k can xoa doan khoi tao Ds ma van k can chinh gio lai k giup voi!!!!!!
phanhoangag vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-05-2011, 12:43 AM   #6
tanbka
Đệ tử 5 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 91
:
Cái đoạn khởi tạo ấy không dùng làm gì cả, xóa đi là cách hay nhất bạn ơi.
tanbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-05-2011, 09:28 PM   #7
friend_1990
Đệ tử 3 túi
 
Tham gia ngày: Apr 2011
Bài gửi: 56
:
Trích:
Nguyên văn bởi tanbka View Post
Cái đoạn khởi tạo ấy không dùng làm gì cả, xóa đi là cách hay nhất bạn ơi.
vậy bạn đã làm ds1307 lần nào chưa vậy tui đang làm đồ án mà mù về con này quá bạn có thể nói cho tui biết tìm hiểu từ đâu ko?
friend_1990 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-05-2011, 10:00 PM   #8
shindo216
Nhập môn đệ tử
 
Tham gia ngày: May 2010
Bài gửi: 9
:
mình có mấy file này bạn đọc tham khảo
File Kèm Theo
File Type: rar i2c.rar (876.2 KB, 255 lần tải)
shindo216 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-05-2011, 10:22 AM   #9
phanhoangag
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 17
:
Red face Giup!!!!

xoa doan khoi tao nap vao chay binh thuong.Nhung tat nguon wa ngay sao cap nguon lai no laj nhay lun tung lai fai khoi tao lai thi no moi chay.minh co su dung pin cmos lam nguon nuoi rui.
Co ban noi the nay:
bẫy DS : Đặt lệnh ghi vào d/c 0x08 ngay trong hàm khởi tạo DS.
Trong hàm Main() thì kiểm tra lại d/c 0x08 xem có còn duy trì giá trị đó không. Nếu không còn tức là các thông số thời giờ trong DS cũng đã sai, phải cho khởi tạo lại DS. Nếu còn thì bỏ qua bước khởi tạo

READ_DS(); //Đọc ds1307, có đọc X = giá trị lưu tại 0x08 (0x08 chứa 0xff)
if (X != 0xff) SET_DS(); //Nếu khác 0xff thì Khởi tạo DS1307, có ghi vào 0x08 giá trị 0xff
---------------------------------------------------------------------
VD:

void RTC_init()
{
unsigned char i,RTC_flag;
// dat ba^~y DS1307
RTC_flag = RTC_get(0x08); // doc gia tri tại địa chỉ 0x08 của DS1307 .
if(RTCflag!=0xFF) // neu ko phai 0xFF
{
RTC_setdate(0x21,0x07,0x08); // thi khoi tao gia tri cho DS1307
RTC_settime(0x14,0x30,0x00);
Soft_I2C_Start(); // dat cau hinh cho DS
Soft_I2C_Write(RTC_ID);
Soft_I2C_Write(0x07); //dat con tro tai vi tri nay
Soft_I2C_Write(0x10); // tao xung 1Hz tai chan so 7.
Soft_I2C_Write(0xFF); // ghi giá trị 0xFF vào ô nhớ có địa chỉ 0x08;
Soft_I2C_Stop();
}
}

với các hàm do người dùng tự định nghĩa (nếu nắm được nguyên tắc I2C thì thật dễ dàng):
unsigned char RTC_get(unsigned char addr);
RTC_settime(unsigned char hh, unsigned char mm, unsigned char ss);
RTC_setdate(unsigned char dd, unsigned char mm, unsigned char yy);
- khi đó, trong hàm main():

void main()
{
// thiet lap PORT cho PIC
// thiet lap gia tri cho cac thanh ghi chuc nang khac, v.v...
RTC_init(); // goi ham khoi tao DS1307 - da co "trap".
// cac ham khac ....
while (1)
{
// hien thi hoac cac cong viec khac....
}
}

minh k hieu lam co ai giup minh voi!!!!!!!!!!!!!!!!!!!!
phanhoangag vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2011, 05:58 PM   #10
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
phải chi dùng thư viện DS1307. mọi chuyện sẻ đơn giản hơn..

chi cần truy xuat den các đĩa chỉ của ds1307 LÀ OK.
File Kèm Theo
File Type: rar ds1307.rar (1.2 KB, 121 lần tải)
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-05-2011, 05:46 PM   #11
tanbka
Đệ tử 5 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 91
:
Cũng từ một số ví dụ trên internet, mình đã xây dựng đủ cảc hàm cho DS1307, bạn chỉ cần gọi hàm ra để sử dụng thôi, chú ý hàm init cũng chỉ dùng 1 lần thôi rồi xoá đi trong những lần sau nhé. Bạn có thể tham khảo cho nhanh. Oh nhưng khôgn bit add tài liệu như thế nào nhỉ?
tanbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2011, 10:54 AM   #12
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Hi all,
Mình đang gặp vấn đề với chú DS1307.
Đó là, không thể đọc được giá trị "Giây".
Các giá trị còn lại thì đọc được và thay đổi đúng.
Có ai gặp phải hiện tượng này xin chia sẻ! ^^ (Mình dùng CCS 4.017, thư viện DS1307.c trên CCS info)
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-05-2011, 11:07 PM   #13
tanbka
Đệ tử 5 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 91
:
Tất cả các giá trị đọc được, chỉ có giây không đọc được thì có lẻ bạn chỉ phải xem lại phần chương trình xử lý của bạn có bị nhầm gì không thôi.
tanbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2011, 09:43 AM   #14
Delfy_Coltech
Đệ tử 4 túi
 
Delfy_Coltech's Avatar
 
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Hanoi, Vietnam
Bài gửi: 78
:
Exclamation My prob.

Trích:
Tất cả các giá trị đọc được, chỉ có giây không đọc được thì có lẻ bạn chỉ phải xem lại phần chương trình xử lý của bạn có bị nhầm gì không thôi
Mình đã check lại và mô phỏng chạy bình thường với PIC16F877A.
Tuy nhiên khi viết cho mạch thực của mình (dùng dsPIC30F), thì không đọc được giá trị giây.

Đây là đoạn code đọc dữ liệu và hiển thị:
Code:
// DS1307 Testing
ds1307_init();
ds1307_set_date_time(RTCValue.date,RTCValue.month,RTCValue.year,RTCValue.day,RTCValue.hour,RTCValue.minute,RTCValue.second);
while(1)
{
ds1307_get_date(RTCValue.date,RTCValue.month,RTCValue.year,RTCValue.day); ds1307_get_time(RTCValue.hour,RTCValue.minute,RTCValue.second); 
printf(lcd_putc,"\fThu%d%02d/%02d/%02d",RTCValue.day,RTCValue.date,RTCValue.month,RTCValue.year);
printf(lcd_putc,"\n%02d:%02d:%02d", RTCValue.hour,RTCValue.minute,RTCValue.second);
      fprintf(P2PC,"\f\%02d/\%02d/\%02d\r\n",RTCValue.date,RTCValue.month,RTCValue.year); 
fprintf(P2PC,"\r\n%02d:\%02d:\%02d", RTCValue.hour,RTCValue.minute,RTCValue.second);
}
Trong đó, RTCValue là struct chứa 7 biến thời gian được khởi tạo từ đầu.
Thư viện mình dùng dưới đây:
File Kèm Theo
File Type: rar DS1307.rar (1.2 KB, 41 lần tải)
__________________
Mechatronics Department
University of Engineering and Technology, VNUH.
Delfy_Coltech vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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à 02:22 PM.


Đượ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