Mô phỏng protes chương trình đồng hồ chạy được khoảng 1 lúc đúng sau đó nhảy lung tung. Khi dừng chương trình và chạy lại thì tiếp tục chạy đúng và cũng 1 lúc lại nhảy linh tinh. Anh nào biết nó bị sao không ah ? Có phải tràn bộ nhớ không ah ?
Thông báo
Collapse
No announcement yet.
Ds1307
Collapse
X
-
Nguyên văn bởi quytho Xem bài viếtMô phỏng protes chương trình đồng hồ chạy được khoảng 1 lúc đúng sau đó nhảy lung tung. Khi dừng chương trình và chạy lại thì tiếp tục chạy đúng và cũng 1 lúc lại nhảy linh tinh. Anh nào biết nó bị sao không ah ? Có phải tràn bộ nhớ không ah ?
Thực ra khi bạn đọc byte lưu số liệu giây thì 4 bit đầu là đơn vị giây, 4 bit sau là chục giây. Với phút và giờ cũng thế bạn chỉ cần tách byte số liệu thành 2 nửa và hiển thị từng nửa một là được.Cty tnhh thiết bị điện - điện tử công nghiệp: 0437821690 / 0988.775.900
Thiết kế hệ thống điện điều khiển
Sửa chữa INVERTER, DRIVER , PLC, UPS ...!
Comment
-
Nguyên văn bởi quytho Xem bài viếtko được bạn ơi ! Khi mình mô phỏng : lúc đầu chạy cũng ko đúng thời gian cài đạt. Cho chạy lại là được rùi nhưng khi làm mạch thật vẫn bị loạn. Anh em nào gặp trường hợp đó chưa, cho mình ý kiến với !
Thank !!!!!
Comment
-
Sao hiện thị giờ không đúng, và đứng im vậy...???
Nguyên văn bởi phong25_2 Xem bài viếthehe, cai mach no chay tot roi, 2 điện trở kéo lên e cũng có mắc, nhưng nó sao sao ấy, giog như bị nhiễu, e gắn thêm 2 con 4k7 nữa là chạy ngon luôn, đây là ctrinh rất cơ bản, xin post lên cho các bạn muốn làm về 1307 tham khảo:
#asm
.equ __lcd_port=0x1B ;PORTA
.equ __i2c_port=0x18
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <mega16.h>
#include <ds1307.h>
#include <delay.h>
#include<lcd.h>
void main(void) {
unsigned char h,m,s,x,y;
i2c_init();
lcd_init(16);
rtc_init(0,0,0);
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(0);
i2c_stop();
rtc_set_time(0,0,0);
lcd_gotoxy(0,0);
lcd_putsf("REAL TIME CLOCK!");
while (1)
{
rtc_get_time(&h,&m,&s);
lcd_gotoxy(4,1);
x=h/10;
y=h%10;
lcd_putchar(x+0x30);
lcd_putchar(y+0x30);
lcd_putsf(":");
x=m/10;
y=m%10;
lcd_putchar(x+0x30);
lcd_putchar(y+0x30);
lcd_putsf(":");
x=s/10;
y=s%10;
lcd_putchar(x+0x30);
lcd_putchar(y+0x30);
delay_ms(200);
};
}
Comment
-
có ai giúp minh với.sao mình lập trình với ds1307 mà no không chạy .sử dụng atmega16l.mạch mô phỏng và code cac bác xem giùm nhé;[http://www.mediafire.com/?8zuajo70gebsto8]có gi gửi vào gmail nhé.thank may bac nhiều:trunghaudn@gmail.com
/************************************************** ***
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 12/20/2010
Author :
Company :
Comments:
Chip type : ATmega16L
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega16.h>
#include <delay.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
//khai bao nut nhan
#define nut_tang PINA.1
#define nut_giam PINA.2
#define nut_chon PINA.3
#define nut_thoat PINA.4
unsigned char m,h,day,month=0,year,led_7s,nhiet_do=78,s ;
unsigned char ms[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F};
unsigned int Addr[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
void cai_dat()
{
while (nut_thoat)
{
if(!nut_chon)led_7s++;
if(led_7s<=5)
{
if(led_7s==1) //cai min
{
if(!nut_tang){
if( m==59)m=0;
else m++;}
delay_ms(50);
if(!nut_giam){
if(m==0)m=59 ;
else m--;}
delay_ms(50);
PORTD=Addr[2];
PORTB=ms[m/10];//min chuc
delay_ms(10);
PORTD=Addr[3];
PORTB=ms[m%10];//min don vi
delay_ms(10);
}
if(led_7s==2)// cai hour
{
if(!nut_tang){
if( h==12)h=0;
else h++; }
delay_ms(50);
if(!nut_giam){
if( h==0)h=12;
else h--;}
delay_ms(50);
PORTD=Addr[0];
PORTB=ms[h/10];//hour chuc
delay_ms(10);
PORTD=Addr[1];
PORTB=ms[h%10];//hour don vi
delay_ms(10);
}
if(led_7s==3)// cai day
{
if(!nut_tang){
if( day==31)day=0;
else day++; }
delay_ms(50);
if(!nut_giam){
if( day==0)day=31;
else day--;}
delay_ms(50);
PORTD=Addr[4];
PORTB=ms[day/10];//day chuc
delay_ms(10);
PORTD=Addr[5];
PORTB=ms[day%10];//day don vi
delay_ms(10);
}
if(led_7s==4)//cai month
{
if(!nut_tang){
if( month==12)month=0;
else month++; }
delay_ms(50);
if(!nut_giam){
if( month==0)month=12;
else month--;}
delay_ms(50);
PORTD=Addr[6];
PORTB=ms[ month/10];// month chuc
delay_ms(10);
PORTD=Addr[7];
PORTB=ms[ month%10];// month don vi
delay_ms(10);
}
if(led_7s==5)//cai year
{
if(!nut_tang){
if( year==99)year=0;
else year++; }
delay_ms(50);
if(!nut_giam){
if( year==0)year=99;
else year--;}
PORTD=0xff;
delay_ms(50);
PORTC=Addr[5];
PORTB=ms[ year/10];// year chuc
delay_ms(10);
PORTC=Addr[4];
PORTB=ms[ year%10];//year don vi
delay_ms(10);
}
// PORTC=Addr[7];
// PORTB=ms[ led_7s];
// delay_ms(10);
}
else led_7s=0;
PORTC=0xff;
PORTB=0x00;
delay_ms(50);
}
};
void hien_thi()
{
PORTC=0xff;
PORTD=Addr[2];
PORTB=ms[m/10];//min chuc
delay_ms(1);
PORTD=Addr[3];
PORTB=ms[m%10];//min don vi
delay_ms(1);
PORTD=Addr[0];
PORTB=ms[h/10];//hour chuc
delay_ms(1);
PORTD=Addr[1];
PORTB=ms[h%10];//hour don vi
delay_ms(1);
PORTD=Addr[4];
PORTB=ms[day/10];//day chuc
delay_ms(1);
PORTD=Addr[5];
PORTB=ms[day%10];//day don vi
delay_ms(1);
PORTD=Addr[6];
PORTB=ms[month/10];// month chuc
delay_ms(1);
PORTD=Addr[7];
PORTB=ms[month%10];// month don vi
delay_ms(1);
PORTD=0xff;
PORTC=Addr[3];
PORTB=ms[ 2];// year nghin
delay_ms(1);
PORTC=Addr[2];
PORTB=ms[ 0];//year tram
delay_ms(1);
PORTC=Addr[5];
PORTB=ms[year/10];// year chuc
delay_ms(1);
PORTC=Addr[4];
PORTB=ms[year%10];//year don vi
delay_ms(1);
PORTD=0xff;
PORTC=Addr[6];
PORTB=ms[nhiet_do/10];// nhiet chuc
delay_ms(1);
PORTC=Addr[7];
PORTB=ms[nhiet_do%10];//nhiet don vi
delay_ms(1);
};
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0xff;
DDRA=0xFF;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=T
PORTC=0x00;
DDRC=0xFC;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
while (1)
{
cai_dat();
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(0);
i2c_stop();
rtc_set_time(h,m,s);
rtc_set_date(day,month,year);
while(1)
{
rtc_get_time(&h,&m,&s);
rtc_get_date(&day,&month,&year);
hien_thi();
delay_ms(10);
};
};
}
Comment
-
bạn nên tạo một project riêng biệt để kiểm tra con DS1307, sau đó bạn mới kiểm tra lại cái proiect hiện tại của bạn.Nguyễn Xuân Thanh - 0905848525 - 01686996698
Chuyên: Quảng Cáo Điện Tử
=>Led Siêu Sáng - Board điều khiển led động
=>Các loại Màn Hình Led trong nhà, ngoài trời
Comment
-
-
bạn thử nối mass cho vỏ thạch anh xem, mà bạn thử trên test board hay board phát triển thế, nếu ko dc nữa bạn dùng phương pháp loại trừ thử xemNguyễn Xuân Thanh - 0905848525 - 01686996698
Chuyên: Quảng Cáo Điện Tử
=>Led Siêu Sáng - Board điều khiển led động
=>Các loại Màn Hình Led trong nhà, ngoài trời
Comment
-
Nguyên văn bởi thangktvta Xem bài viếtChào các bác đã dùng con này. Em đang dùng DS1307 giao tiếp với mega88 để băm thời gian lên LED 7, không hiểu tại sao sau khi reset hoặc mất điện thì Giây nó lại nhảy về 0, giờ, phút... vẫn bình thương. Các khai báo biến cho h,m,s giống hệt nhau? Nhờ các bác giúp em. Thanks!Tư vấn thiết kế hệ thống điện-điện tử theo yêu cầu.
Tel: 0903 702 417. Email: web:
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:56 -
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment