PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Đồng hồ số dùng DS1307 (http://www.picvietnam.com/forum/showthread.php?t=897)

nguyenhung1811 23-07-2009 07:06 AM

Trích:

Nguyên văn bởi hvhdtk3 (Post 27665)
Mình đang làm cái đồng hồ số hiển thị LCD 16*2, dùng DS1307. Có 2 điều tui ko giải thích được, mong các bạn giúp đỡ:
1) Mình đọc kỹ Datasheet của DS1307 và cấu hình thanh ghi Control (địa chỉ 07H) là:
write_DS1307(0x07, 0x90); //nghĩa là tại địa chỉ 07H, ghi vào giá trị 90H = (10010000)binary.
Khi đó, bit SQWE = 1 phải tạo xung ra có tần số 1 Hz.
Khi mô phỏng, thời gian hiển thị trên LCD là đúng, nhưng chân tạo xung 1 Hz lại không đúng, nó cứ 2 giây mới thay đổi trạng thái. Thành ra giá trị giây hiển thị là: 1, 3, 5,... chứ không liên tục 1, 2, 3, 4..... Why?????????????????????????????????
2) Mình đặt giá trị ban đầu cho DS1307 là: ngày 07, tháng 08, năm 09. Nhưng trên LCD không hiển thị số 0, mà chỉ là: 7 / 8 / 9 Why?????????????????????????????????
Các bạn giúp mình với !

ban cho minh xin doan chuong trinh ma ban viet nhe'. Minh viet mai ma` chi co ghi duoc thoi. ko doc du lieu duoc.

minhsondaklak 22-08-2009 05:31 PM

Bạn tham khảo link này xem :
http://www.picvietnam.com/forum/showthread.php?t=2644

chuyentinhyeu03 02-09-2009 08:06 PM

mình đang bắt tay vào làm đồ án này chưa bjt làm như thế nào nên đọc bài viết của anh em thật có ích.cảm ơn anh em nhju

thanhlam1987 11-09-2009 01:16 AM

Em đang học pic16F877 nhưng chưa biết nhiều. Em có bài tập ai có thể giúp:
Dùng pic16f877Agiao tiếp với REATIME13807 với 6 led 7 đoạn. viết chương trình đồng hồ số dùng ASSEMPLY
AI lam được gửi cho em :samac_love999@yahoo.com

tiendungnd 12-09-2009 07:25 PM

ai có code của mạch hiẻn thị đồng hồ số dùng led 7 thanh k? cho mìng với.
ai có gửi vào mail :ptdumh_nd@yahoo.com

duyminhnguyen 22-09-2009 10:40 PM

chương trình của bạn thanhlam1987 , bạn nên đọc datasheet của ds1307 và tìm hiểu cách kết nối phần cứng........vấn đề của bạn mình cũng đang quan tâm ,hy vọng sẽ có người giúp đỡ

....cái này khó ở chỗ khởi tạo ds 1307 và chuản i2c

Mr.Bi 23-09-2009 11:52 PM

Cái này trên mạng đầy , do mấy u k chịu tìm hiểu và thử nghiệm code
Code:

void start(void)
{ SCL=0;SDA=1;SCL=1;SCL=1;
  SDA=0;SCL=0;}
void stop(void)
{ SCL=0;SDA=0;SCL=1;SDA=1;}
bit write_data(unsigned char chr)
{ unsigned char temp,ack;
  for(temp=0;temp<8;temp++)
    { SDA = (chr& 0x80) ? 1:0;
      SCL=1;
      SCL=0;
      chr=chr<<1;
    };
  SDA=1;SCL=1;ack=SDA;
  SCL=0;
  return(ack);
}
unsigned char convertBCD(unsigned char _data)
{ unsigned char temp;
  temp=(_data/10<<4)|(_data%10&0x0F);
  return temp;
}
unsigned char read_data(void)
{ unsigned char temp1,temp2=0;
  for(temp1=0;temp1<8;temp1++)
    { SCL=1;
      temp2=temp2<<1;
      temp2=temp2|((unsigned char)(SDA));
      SCL=0;
    };
  return(temp2);
}
void write_RTC(unsigned char address, unsigned char _data)
{ bit status;
  start();
  write_data(0xD0);
  write_data(address);
  write_data(_data);
  stop();
  start();
  status=write_data(0xD0);
  while(status)        //status = 1 (NACK)
      { start();
        status=write_data(0xd0);
      };
}
unsigned char read_RTC(unsigned char address)
{ unsigned char k;
  start();
  write_data(0xD0);
  write_data(address);
  start();
  write_data(0xD1);
  k=read_data();
  stop();
  return ((k>>4)*10+(k&0x0F));
}
void init_RTC()
{ write_RTC(0x07,0x10);
  write_RTC(0x00,0x00); //0s
  write_RTC(0x01,0x47); // phut        : 47
  write_RTC(0x02,0x13);        // h : 13
  write_RTC(0x04,0x26);        // ngay : 26
  write_RTC(0x05,0x06);        // thang : 6
  write_RTC(0x06,0x09);        // nam : 2009
}

Đọc bài hướng dẫn chi tiết http://svdanang.com/@pbk/showthread.php?t=29583

const_nos 11-10-2009 10:38 AM

Trích:

Nguyên văn bởi hatuan296 (Post 7080)
Cảm ơn các bạn đã quan tâm . hôm nay mình đã làm được rồi . cái con số mình nhập vào DS không qua trọng . là kiểu dữ liệu gi cũng ok , hex hoặc decimal . nhưng quan trọng là lúc đọc ra . mình phải chuyển số đó sang hex , rồi xuất thẳng ra LCD luôn . bây giờ thì ok rồi . nhưng mình còn chưa biết cái vụ AM và PM . lại còn năm nhuận hay không nhuận để mà biết tự cộng thêm ngày cho tháng 2 . nếu các bạn biết , mình mong các bạn chia sẻ nha .

a, mà lúc mình nạp lần đầu , mình nạp thẳng số hex luôn . vd :
năm : $07
tháng : $01
ngày : $28
giờ : $13
phút : $25
giây : $00
tương ứng khi xuất ra LCD là : 28 - 01 - 07 13:25:00

namqn: đây đâu phải là số hex, nó vẫn là dạng BCD đó chứ. Bạn thử nạp $0F vào ô nhớ đếm năm rồi đọc lại xem sẽ được số nào.

Ủa.Mình có thắc mắc: Con DS nó lưu sẵn thời gian bên trong nó .Mình chỉ cần đọc nó ra với địa chỉ thanh ghi tương ứng để có được là có được thới gian thôi chứ.Tại sao lại phải nhậpo vào rồi mới đọc ra?Mình ko hiểu.Bạn có thể giải thích chổ nầy được không?Sắn tiện bạn post luôn chươnmg trình của bạn lên để mọi người cùng tham khảo

hvhdtk3 15-10-2009 12:35 AM

Trích:

Nguyên văn bởi nguyenhung1811 (Post 27975)
ban cho minh xin doan chuong trinh ma ban viet nhe'. Minh viet mai ma` chi co ghi duoc thoi. ko doc du lieu duoc.

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)
{
}
}
//************************************************** **
////////////////////////////////////////////////////////////////////////////////
//************************************************** **

notrino1506 19-10-2009 03:18 PM

Em có thắc mắc về vấn đề đọc dữ liệu trên DS1307! Bằng ASM
 
Thưa các sư huynh, em đã có tham khảo theo bài của các anh rất kỹ lưỡng và một số bài khác nói về giao tiếp I2C cụ thể là trong trường hợp: gia tiếp với DS1307.
--------------------------------
Kết quả: em có thể ghi dữ liệu vào DS1307, nhưng không thể đọc ra được. Nói chính xác hơn là đọc ra sai! Cụ thể như sau:
--------------------------------
1_Em nạp dữ liệu vào DS1307 từ 0x00 đến 0x07.
http://i681.photobucket.com/albums/v.../Untitled1.jpg
http://i681.photobucket.com/albums/v.../Untitled2.jpg
http://i681.photobucket.com/albums/v.../Untitled3.jpg

2_Kiểm tra bằng KIT developing thì thấy có dao động ở chấn SQW=> nạp dữ liệu vào control byte (địa chỉ 0x07) của IC DS1307 là chính xác.( Cụ thể hơn em nạp giá trị 0x10 vào control byte =>xung 1Hz;...)=>chứng tỏ là ghi dư liệu được và là ghi đúng!


3_Em xuất đúng ngay tại giá trị control byte (tức là bằng 0x10) thì khi đọc thanh ghi SSPBUF sau khi waitMSSP la sai!!
http://i681.photobucket.com/albums/v.../Untitled4.jpg
http://i681.photobucket.com/albums/v.../Untitled5.jpg

4_Em cũng đã thử rất nhiều lần với nhiều thanh ghi khác của RTC, nhưng kết quả truy xuất lại đều vô vọng. Em cũng có tra cai flowchart phần ghi và nhận của PIC về I2C master mode trong datasheet 16F887A(trang số 315 và 317). Nhưng em thấy nó đúng!(sau khi thiết lập mọi thứ; chỉ cần SET SREN thôi).

------------------------------------------
Đó là những thăc mắc của em, em cũng đã suy nghĩ rất nhiều về vấn đề đó và em cũng đã thử và rút ra là:
-có thể sau mỗi lần nhận thì ACK phát ra từ PIC đến RTC có ành hưởng j đến SSPBUF ko?
-Có lần thí nghiệm em đã có thể nhận được 4 bit đầu là chính xác!(chạy debug và KT thanh ghi bằng Watch trong MPLAB), nhung 4 bit sau la FFFF trong khi DS1307 chỉ đếm BCD thôi=> có thể xung clk không đồng bộ dẫn đến dữ liệu nhận sai? Thiết lập của em la hoàn toàn bình thường: thạch anh 4Mhz cho PIc; 32768 cho RTC; tao xung clk đồng bộ 100 Khz....
-Em cũng đã kham khảo ý kiến của thầy trong trường nhưng coi bộ khó có giải đáp!
--------------------------------------------
Em biết là đã làm mất thời gian của các anh rất nhiều nhưng mong anh giúp đỡ em. Em rất muốn hiểu rõ hơn nữa về PIC. Cái này là ĐAMH1 của em: nó chỉ chiếm có 1 trình thôi, tuy vậy em cố gắng thực hiện có KQ ko vì điểm số chỉ vì hiểu biết và đam mê.
-----------------------------------------------
Mong anh hồi âm cho em để em có thể giảii quyết được vấn đề trên.
-----------------------------------------
Em có gửi theo cái ASM của em; hơi lung tung 1 tí (có thêm phần xuất LCD nhưng em đã làm chạy rồi). http://www.mediafire.com/download.php?iyhtwro5zrn
------------------------
CHÂN THÀNH CÁM ƠN các ANH!!!

babybaby002 03-12-2010 05:17 PM

đồ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 (Post 30255)
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 05-12-2010 08:04 PM

đồng hồ số đo thời gian thực dùng ds1307 và hiển thị lên LCD
 
1 Attachment(s)
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.

babybaby002 06-12-2010 03:48 PM

pic16f877a+ds1307+LCD
 
1 Attachment(s)
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 đỡ.

babybaby002 10-12-2010 12:17 AM

pic16f877a+ds1307+LCD
 
1 Attachment(s)
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.

vimotnguoi_5891 05-07-2012 07:56 PM

Ai giúp mình cái mạch này với..!!!
 
1 Attachment(s)
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úi giờ GMT. Hiện tại là 07:51 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