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 Trình điều khiển bước rời rạcbởi mèomướpDạ nếu chú đã viết được chương trình cho vđk thì thêm 1 chương trình con chạy động cơ bước chỉ đơn giản là copy phát. Về phần cứng thì vài con cách ly quang, vài con mosfet thôi ạ. thực sự là dễ dàng như bài tập bình thường của sinh viên thôi ạ...
-
Channel: Máy công cụ
hôm nay, 12:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95vâng mình cảm ơn mn đã góp ý
-
Channel: Điện tử công suất
hôm nay, 11:30 -
-
bởi tom22Xin chào
Tôi có một dự án trong đó một động cơ bước tích hợp được điều khiển bởi một bộ vi điều khiển.
Nhưng tôi thực sự không thích trả tiền cho trình điều khiển bước, khi tôi có một bộ vi điều khiển có khả năng thực...-
Channel: Máy công cụ
hôm nay, 10:54 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú chủ thớt có thời gian và đam mê thì cứ từ từ ngâm cứu đi ạ đừng nghe chú Chú bq... dọa mà sợ ạ. Cái nguồn nhìn cũng lởm có khi hông bằng cái máy hàn tàu của chị hàng xóm hôm nọ tháo ra sửa với chú thợ thông ống nước suốt đêm mới xong. Chú ý an toàn xíu là được ạ...
-
Channel: Điện tử công suất
Hôm qua, 15:40 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi bqvietBộ nguồn xung ở tầm công suất 2700W này, gần 3 ký, không bao giờ đơn giản để mà sửa ngay cả đối với người có kinh nghiệm chứ đừng nói người không chuyên. Đám linh kiện công suất không tự nhiên cháy mà phải xuất phát từ nguyên nhân...
-
Channel: Điện tử công suất
04-01-2025, 22:09 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú kiểm tra đi ốt đầu vào, ra nữa ạ. Về phần kiểm tra dao động chú hỏi chị google ấy ạ, có nhìu cô chú đã hướng dẫn rồi ạ...
-
Channel: Điện tử công suất
04-01-2025, 16:53 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95mình đã kiểm tra phần công suất thấy hỏng cả 4 con IGBT mà mình muốn kiểm tra phần dao động và hồi tiếp khi chưa cấp điện cho mạch thì có cách nào không b, mình không phải dân trong nghề lên chưa có kinh nghiệm sửa. Cảm ơn b
-
Channel: Điện tử công suất
04-01-2025, 14:27 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú nhắm phần công suất dễ kiểm tra và hay hư hỏng nhất trước ạ. Rồi đến phần dao động nguồn, hồi tiếp...
-
Channel: Điện tử công suất
04-01-2025, 11:42 -
-
bởi Minhdai95mọi người đã ai sửa bộ nguồn này chưa ạ, cho e xin ít kinh nghiệm để sửa bộ nguồn. Em cảm ơn...
-
Channel: Điện tử công suất
04-01-2025, 11:22 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
Comment