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 03-12-2010, 05:17 PM   #1
babybaby002
Đệ tử 1 túi
 
babybaby002's Avatar
 
Tham gia ngày: Nov 2010
Bài gửi: 12
:
Unhappy đồng hồ số đo thời gian thực dùng ds1307 và hiển thị lên LCD

Trích:
Nguyên văn bởi hvhdtk3 View Post
Giờ mình viết xong rồi đây! Không biết gửi File đính kèm như thế nào cả, đành post cả chương trình trình lên vậy! Anh em thông cảm nha!

Tuy dùng Proteus mô phỏng ngon lành, nhưng mình test trên mạch thật thì gặp vấn đề này không giải thích được! Mong anh em giúp đỡ.
Mình đặt giá trị cho DS1307: setDateDs1307(01, 02, 03, 04, 05, 06, 07);
với mục đích hiển thị trên LCD là: Time: 03:02:01 Date: 05:06:07
Nhưng trên LCD lại hiển thị: Time: 05:03:00 Date: 07:00:00
Hic! Hiển thị sai rồi! Biết làm sao đây???

Code:

////////////////////////////////////////////////////////////////////////////////
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=9)
#use i2c(Master,Fast,sda=PIN_A1,scl=PIN_A0)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define DS1307_SDA PIN_A1
#define DS1307_SCL PIN_A0
//************************************************
int8 val_sec1, val_min1, val_hou1, val_dat1, val_mon1, val_yea1;
int8 val_sec2, val_min2, val_hou2, val_dat2, val_mon2, val_yea2;
//************************************************
void display_lcd();
//************************************************
#int_ext // Khai bao chuong trinh ngat
RB0_isr() {
display_lcd();
return input(PIN_B1);
}
//**********************************************
int8 decToBcd(int8 val) {
return ( (val/10*16) + (val%10) );
}
//***********************************
int8 bcdToDec1(int8 val) { //Tach lay so hang chuc
return (val/16*10);
}
//***********************************
int8 bcdToDec2(int8 val) { //Tach lay so hang don vi
return (val%16);
}
//***********************************
void init_DS1307() {
output_float(DS1307_SCL); //Bus free
output_float(DS1307_SDA); //Bus free
}
//***********************************
void write_DS1307(byte address, byte data) {
short int status;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xd0);
while(status==1)
{
i2c_start();
status=i2c_write(0xd0);
}
}
//***********************************
BYTE read_DS1307(byte address)
{
BYTE data;
i2c_start();
i2c_write(0xd0);
i2c_write(address);
i2c_start();
i2c_write(0xd1);
data=i2c_read(0);
i2c_stop();
return(data);
}
//***********************************
void setDateDs1307(int8 second, // 0-59
int8 minute, // 0-59
int8 hour, // 1-23
int8 dayOfWeek, // 1-7
int8 dayOfMonth, // 1-28/29/30/31
int8 month, // 1-12
int8 year) // 0-99
{
write_DS1307(0x0, decToBcd(second));
delay_ms(10);
write_DS1307(0x1, decToBcd(minute));
delay_ms(10);
write_DS1307(0x2, decToBcd(hour));
delay_ms(10);
write_DS1307(0x3, decToBcd(dayOfWeek));
delay_ms(10);
write_DS1307(0x4, decToBcd(dayOfMonth));
delay_ms(10);
write_DS1307(0x5, decToBcd(month));
delay_ms(10);
write_DS1307(0x6, decToBcd(year));
}
//***********************************
void display_lcd() {
LCD_putcmd(0x80);
Printf(LCD_putchar,"Time: ");
LCD_putcmd(0xC0);
Printf(LCD_putchar,"Date:");
//*******************************************
val_sec1 = bcdToDec1(read_DS1307(0x00)); //So giay hang chuc
val_sec2 = bcdToDec2(read_DS1307(0x00)); //So giay hang don vi

val_min1 = bcdToDec1(read_DS1307(0x01));
val_min2 = bcdToDec2(read_DS1307(0x01));

val_hou1 = bcdToDec1(read_DS1307(0x02));
val_hou2 = bcdToDec2(read_DS1307(0x02));

val_dat1 = bcdToDec1(read_DS1307(0x04));
val_dat2 = bcdToDec2(read_DS1307(0x04));

val_mon1 = bcdToDec1(read_DS1307(0x05));
val_mon2 = bcdToDec2(read_DS1307(0x05));

val_yea1 = bcdToDec1(read_DS1307(0x06));
val_yea2 = bcdToDec2(read_DS1307(0x06));
//*******************************************
//In lan luot cac so ra LCD
LCD_putcmd(0x8E);
Printf(LCD_putchar,"%u",val_sec1);
LCD_putcmd(0x8F);
Printf(LCD_putchar,"%u",val_sec2);

LCD_putcmd(0x8A);
Printf(LCD_putchar,"%u:",val_min1);
LCD_putcmd(0x8B);
Printf(LCD_putchar,"%u:",val_min2);

LCD_putcmd(0x86);
Printf(LCD_putchar,"%u:",val_hou1);
LCD_putcmd(0x87);
Printf(LCD_putchar,"%u:",val_hou2);

LCD_putcmd(0xC6);
Printf(LCD_putchar,"%u/",val_dat1);
LCD_putcmd(0xC7);
Printf(LCD_putchar,"%u/",val_dat2);

LCD_putcmd(0xCA);
Printf(LCD_putchar,"%u/",val_mon1);
LCD_putcmd(0xCB);
Printf(LCD_putchar,"%u/",val_mon2);

LCD_putcmd(0xCE);
Printf(LCD_putchar,"%u",val_yea1);
LCD_putcmd(0xCF);
Printf(LCD_putchar,"%u",val_yea2);
}
//***********************************

void main()
{
set_tris_b (0x01);
set_tris_d (0x00);
output_b (0x00);
output_c (0x00);
output_d (0x00);
LCD_init(); //Khoi tao LCD
LCD_putcmd(0x80);
Printf(LCD_putchar,"Time: ");
LCD_putcmd(0xC0);
Printf(LCD_putchar,"Date:");
init_DS1307(); //Khoi tao DS1307
write_DS1307(0x07, 0x90); //Cau hinh thanh ghi cua DS1307
setDateDs1307(01, 02, 03, 04, 05, 06, 07); //Vi du Time: 03:02:01 Date: 05:06:07
enable_interrupts(GLOBAL);
enable_interrupts(INT_ext);
while (1)
{
}
}
//************************************************** **
////////////////////////////////////////////////////////////////////////////////
//************************************************** **
Mình cũng đang làm về cái đồng hồ số này nhưng làm ko chạy, thời gian trên con ds1307 vẫn chạy bình thường nhưng khi hiển thị ra LCD thì nó chạy đc 5s rồi đứng yên, bạn có thể post cái mô phỏng và code cho mình tham khảo với, post cái thư viện #include <lcd_lib_4bit.c> luon nha. hoặc bạn gửi vào mail cho mình bnktunganh@gmail.com, thanks.
babybaby002 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-12-2010, 08:04 PM   #2
babybaby002
Đệ tử 1 túi
 
babybaby002's Avatar
 
Tham gia ngày: Nov 2010
Bài gửi: 12
:
Cool đồng hồ số đo thời gian thực dùng ds1307 và hiển thị lên LCD

mình đang làm về đồng hồ số đo thời gian dùng ds1307 hiển thị lên LCD ,mình viet code hoài mà vẫn chạy sai,mình viết 6 đoạn code và built ra 6 file hex, mà không file hex nào chạy hoàn chỉnh cả, mình có post protues và 6 file code lên, các bạn xem dùm mình và chỉnh sửa dùm mình với nhá, thanks các bạn nhiều lắm.
File Kèm Theo
File Type: rar clockds1307.rar (315.7 KB, 130 lần tải)
babybaby002 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-12-2010, 03:48 PM   #3
babybaby002
Đệ tử 1 túi
 
babybaby002's Avatar
 
Tham gia ngày: Nov 2010
Bài gửi: 12
:
Post pic16f877a+ds1307+LCD

sau 2 đêm cặm cụi sửa chữa, mình đã sửa 6 code thành còn 2 code gần như hoàn chỉnh nhưng vẫn chưa gọi là hoàn chỉnh đúng nhất, vì thời gian chạy được khoảng mấy phút là đứng không hiển thị tiếp ra LCD nữa, ở đây mình có 2 code dùng 2 thư viện LCD khác nhau và trong mỗi code có 2 cách chuyển dữ liệu sang BCD, các bạn xem và chỉnh sửa code sao cho chạy đúng nhất nhé, các bạn có thể post lên đây hoặc gửi vào mail bnktunganh@gmail.com cho mình, cảm ơn các bạn đã giúp đỡ.
File Kèm Theo
File Type: rar ds1307+LCD.rar (199.7 KB, 162 lần tải)
babybaby002 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-12-2010, 12:17 AM   #4
babybaby002
Đệ tử 1 túi
 
babybaby002's Avatar
 
Tham gia ngày: Nov 2010
Bài gửi: 12
:
Cool pic16f877a+ds1307+LCD

mấy bài trước mình post, mình dùng proteus 7.7 và bị lỗi nên time và day nó nhảy loạn xạ, sau khi mình vẽ lại bằng proteus 7.1 thì time và day ổn nhưng biến giây đếm trên ds1307 chậm mất 3 nhịp, khi giây ở đồng hồ thật bên ngoài nhảy được 3s thì con ds mới nhảy được 1s, mình post code và proteus lên đây, bạn nào xem dùm mình phải chỉnh sửa code như thế nào cho giây của con ds nó chạy đúng nha. thanks.
File Kèm Theo
File Type: rar clock.rar (49.0 KB, 244 lần tải)
babybaby002 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-07-2012, 07:56 PM   #5
vimotnguoi_5891
Nhập môn đệ tử
 
Tham gia ngày: Dec 2010
Bài gửi: 6
:
Ai giúp mình cái mạch này với..!!!

Mình đang làm đề tài về con ds1307 code chạy rồi nhưng khi làm mạch nó cứ hiện ra số gì gì ấy? Ai giúp mình với!!!!!
File Kèm Theo
File Type: rar donghothoigianthuc.rar (3.07 MB, 63 lần tải)
vimotnguoi_5891 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-07-2012, 01:22 AM   #6
hatuan296
Làm quen với PIC
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
:
Trích:
Nguyên văn bởi vimotnguoi_5891 View Post
Mình đang làm đề tài về con ds1307 code chạy rồi nhưng khi làm mạch nó cứ hiện ra số gì gì ấy? Ai giúp mình với!!!!!
Mình mở không được bạn à . Mình đang dùng proteus 7.7 sp2 . Mở file nào cũng không thấy linh kiện hết , trang trống trơn .
hatuan296 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-07-2012, 08:41 AM   #7
vimotnguoi_5891
Nhập môn đệ tử
 
Tham gia ngày: Dec 2010
Bài gửi: 6
:
Trích:
Nguyên văn bởi hatuan296 View Post
Mình mở không được bạn à . Mình đang dùng proteus 7.7 sp2 . Mở file nào cũng không thấy linh kiện hết , trang trống trơn .
Test lại rồi. mở được mà.! mô phỏng thì được chỉ có lúc làm mạch thật thí nó chay bị lổi thôi..!! không load được dữ liệu từ khối ds1307..! thử đủ cách rồi mà chịu .!!! dùng proteus thì mở được mà ko cần cùng bản mới mở được đâu !
File Kèm Theo
File Type: rar donghoso.rar (57.0 KB, 41 lần tải)
vimotnguoi_5891 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Làm ơn giúp đỡ lập trình PIC với DS1307, EEPROM enti PIC - Thiết kế và Ứng dụng 1 20-11-2006 06:19 PM


Múi giờ GMT. Hiện tại là 10:31 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