Chat
Danh mục
Hướng dẫn làm mạch đồng hồ thời gian thực ds1307

Hướng dẫn làm mạch đồng hồ thời gian thực ds1307

Số lượng:
Thêm vào giỏ
Hướng dẫn làm mạch đồng hồ thời gian thực ds1307 đã được thêm vào giỏ hàng



Chip thấy nhiều bạn rất thích làm một mạch đồng hồ thời gian thực GIỜ - PHÚT - GIÂY nhỏ nhắn để ở bàn học, nên hôm nay chip sẽ hướng dẫn chi tiết cho các bạn nào biết hoặc chưa biết tí gì cũng có thế làm cho mình một mạch để chơi cho vui.

Qua bài này.bạn nào làm tốt sẽ có thêm mạch chạy Ngày Tháng Năm - Giờ Phút Giây cho các bạn làm.

P/S:Mạch này là của 1 bạn Đức Hệ ..Chip down về nhưng họ giữ bí mật không chia sẻ code đọc nên chip tiện thể lấy file mạch in làm rồi Test luôn code của chip vào chạy lại ngon...Nên sẽ Source Open cho tất cả các bạn ^^"


Xem video Mô phỏng

Xem video mạch làm thật

Bước 1: Chuẩn bị mua linh kiện

-Chip AT89C52
-IC DS1307
- 2 tụ hóa 10uF 
- 1 tu hóa 470uF
-4 tụ gốm 33pF
-1 thạch anh 12Mhz
-1 thạch anh 32Mhz
-1 Đế Chip 40 chân
- 1 đế ic 8 chân
-1 đế pin 3v
- 1 pin 3v
-4 nút bấm nhỏ
-10 điện trở 1k
-4 điện trở 10k
- 5 trở 100R
- 5 trở 330R
-4 led báo nút bấm + Hz
- 1 LM7805
- 1 trở băng 103
-6 tranzitor C1815
- 6 led 7 đoạn Anode chung loại bé có 10 chân 2 hàng..riêng từng con..

Đế chip 40 chân
Led 7 đoạn anode chung
Chip At89C52
DS1307
Thach anh 12Mhz
Thach anh 32Mhz
Đế Pin 3V
Pin 3V



Led báo nguồn và trạng thái nút bấm  
Kết cấu led
Tụ hóa 10uF - 100uF
LM7805
Tụ gốm 33pF
Trở băng 103
Bước 2: Làm mạch in - Sẽ có 2 loại mạch in :

- Loại 1: Chip sẽ dùng mạch của người khác designed để hướng dẫn các bạn làm, vì chip làm thử chạy ổn.Nhưng không có chức năng báo thức.
- Loại 2: Mạch Chip designed sẽ có thêm chức năng hẹn giờ.( Chip vẽ xong rồi nhưng đang thêm phần hẹn giờ)











Giờ chip sẽ tạm thời hướng dẫn các bạn làm mạch Loại 1.Đây là hình ảnh mạch sau khi làm xong và test thử

Các bạn download mạch in sau về đem in ở quán..Chú ý in lên giấy thủ công cho dễ là mạch..(Mạch in)

♥ Cách làm mạch in cho Member mới Tại Đây:
Sau khi làm xong mạch in là công đoạn gắn linh kiện lên không như các mạch Trái Tim hay Cube không phải câu dây..Bài này sẽ phải câu dây..Các bạn học dần rồi sau này làm những mạch khác của chip..Chip khỏi hướng dẫn...^^"

Mach Nguyên mẫu

Mach CHip chú thích cho các bạn hiểu người người biết lắp..nhà nhà biết lắp..^^

1- là nguồn cấp sạc điện thoại hoặc Pin 9V Bạn nào muốn dùng biếp áp mà đầu ra 5v 1 chiều đảm bảo bị nháy..nên lắp thêm con tụ như hình cuối cùng.
2- pin 3V 
3-Lm7805
4-Thạch anh 32Mhz
5-tụ gốm 33pF
6- nút bấm - Các bạn chú ý..Nút bấm 4 chân..kiếm cái led và cục pin con thở nối nó vào 2 đầu..2 đầu nào bấm mới sáng là 2 đầu hở và nối nó chúi xuống.
7- led báo nút bấm..nếu bạn nào lắp sai nút bấm//cắm nguồn led sáng luôn.nên rút nút bấm ra cắm lại
8- trở 1k cho nút bấm
9-2 chân nút bấm reset mạch lúc bị đơ
10-thạch anh 12Mhz
11-tụ gốm 33pF
12-trở 330R cho led nháy
13-- led
14- trở 100 R
15-Trở băng 103
16-trở 1k
17-trở 10k
18- DS1307
19- tranzitor C1815

Chú ý: Những đường màu xanh tím chính là vị trí những dây câu câu có nghĩa là móc nó trên..dùng chân con trở cắt đứt ấy nối nó như hình sau:

Đặc biệt nên câu hết các dây mới được lắp linh kiện.Nhìn hình sau cho chuẩn nhé các tình yêu.


Đối với những bạn mới làm quen câu dây..không nên gắn trực tiếp led 7 đoạn lên mạch..mà mua thêm Jump cắm cái sau đó cắm nó vào chân mạch..còn led 7 đoạn gắn lên.con led nào die thì rút ra cho nhanh..Nói chung vài chục năm mới chết led.













Đối với mạch in này: Muốn làm thành công nhanh thì lắp khối led hiển thị trước ( Chú ý câu hết các đương dây, sau đó khoan mé led 7 thanh rồi hàn, hàn cực cẩn thận bằng hàn mũi nhỏ càng tốt sẽ không bị dính )
Sau khi hàn xong..bắt đầu kiểm tra tín hiệu led bằng cách dùng đồng hồ vạn năng mở thang đo x10 chấn chân đen vào chân ra chung nguồn của led 7 thanh( tra google) chân đỏ đồng hồ quẹt qua các tín hiệu a,b,c,d,e,f kiểm tra xem chập không? như vậy là gần thành công rồi..sau đó lắp các linh kiện đúng chiều..Lắp nút bấm hết sức cẩn thận, lắp phải đúng chiều led báo nút bấm ko sáng..khi đã ok hết nạp ic gắn vào mạch. Đó là kinh nghiệm làm mạch thật của chip.


Bước 3: Nạp IC 89C52 - Có 2 loại code nạp vào Chip 89c52

- Loại 1: Code này chỉ có file Hex - Nghĩa là nạo xong rồi vứt đấy chẳng phát triển thêm VD như hẹn giờ hay là cho bạn nào làm Đồ Ăn phát triển
(Hex)
-Loại 2: Code chip thiết kế lại chạy ổn định ngon lành hơn..và  Chip sẽ nâng cấp lên thêm hẹn giờ cho nó hay ho.Code này mở các bạn down về đọc thoải mái.
( Full Source Open)
Sau khi xong mạch..Tìm cách nạp IC các bạn ra quan Quảng cáo led nhờ họ nạp hộ hoặc là mang Lên TP Nam Định Chip Nạp Free ^^
Khi nào có thêm Hẹn giờ Chip sẽ Up lên.

Bước 4:Nối nguồn - chạy mạch

Chúc các bạn thành công.
( Full Tất Cả)
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download


//DONG HO SU DUNG TIMER BLOG DIEN TU - TIN HOC EDIT By ChipKool.net
//PHAN CUNG: 89c51; THACH ANH: 12MHZ ;
//SU DUNG 6 LED 7 DOAN GIO : PHUT : GIAY
/************KHAI BAO THU VIEN, DINH NGHIA********************************************* ***********/
#include
#define Set_key P3_4
#define Up_key P3_5
#define Dw_key P3_6
#define SDA P1_1
#define SCL P1_0
#define DS1307_ID 0xD0
#define SEC 0x00
#define MIN 0x01
#define HOUR 0x02
//#define DATE 0x04
//#define MONTH 0x05
//#define YEAR 0x06
/************KHAI BAO BIEN, MANG...******************************************* ********************/
unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //Decimal to Led7seg
unsigned char t_view,time,index,F_set,B_nhay,get_t ;
unsigned char hour,sec,min;
/************KHAI BAO HAM, CHUONG TRINH CON*********************************************** ********/
void set_main(void); // Chuong trinh khoi tao main
void setup_timer(void); // Chuong trinh cai dat timer 1 va 0
void delay(unsigned int time); // Delay
void Fix_time(void); // Kiem tra va hieu chinh gia tri cua gio,phut,giay
void Keypad(void); // Kiem tra xu ly phim nhan.
void T1_ISR(void); //ngat timer 1 phuc vu nhay led
void T0_ISR(void); // Dung ngat timer 0 de quet led
/************CAC CHUONG TRINH CON*********************************************** ******************/
// FOR I2C
/************************************************** *********************/
void I2C_start(void)
{
SCL = 1; SCL = 0;
SDA = 1; SCL = 1;
delay(2);
SDA = 0; delay(2);
SCL = 0; delay(2);
}
void I2C_stop(void)
{
SCL = 1; SCL = 0;
SDA = 0; delay(2);
SCL = 1; delay(2);
SDA = 1;
}
bit I2C_write(unsigned char dat)
{
unsigned char i;
for (i=0;i<8 -1="" 0-="" 0="" 0x0f="" 0x80="" 1:0="" 1="" 7seg="" acknowledge="" addr="" address="" amp="" ang="" bcd="" bien="" bit="" bus="" byte="" char="" che="" check="" chinh="" chuong="" clear="" co="" connect="" cua="" dat="" data="" delay="" do="" ds1307="" ds1307_get="" ds1307_write="" duoc="" ea="1;" et0="1;" et1="1;" et_key="" f_set="" fix_time="" for="" gia="" giay="" gio="" hex="" hieu="" hour="23;" i2c="" i2c_read="" i2c_start="" i2c_stop="" i2c_write="" i="0;i<8;i++)" iam="" if="" in="" int="" keep="" keypad="" khoi="" kiem="" led="" loop="" main="" min="59;hour--" nhan.="" nhan="" on="" p0="0x00;" p1="0xFF;" p2="0x00;" p3="0xFF;" phim="" phut="" ram="" rd_bit="" read="" receive="" request="" ret="" return="" scl="" sda="(dat" sec="59;min--;}" set="" set_main="" setup="" setup_timer="" start="" tao="" temp="dat" tf0="0;" tf1="0;" th0="-1000/256;" th1="0x3C;" time--="" time="" timer0="" timer1="" timer="" tl0="-1000%256;" tl1="0xAF;" tmod="0x11;" to="" tr0="1;" tr1="1;" tra="" tri="" trinh="" tu="" unsigned="" va="" void="" while="">2
<8 -1="" 0-="" 0="" 0x0f="" 0x80="" 1:0="" 1="" 7seg="" acknowledge="" addr="" address="" amp="" ang="" bcd="" bien="" bit="" bus="" byte="" char="" che="" check="" chinh="" chuong="" clear="" co="" connect="" cua="" dat="" data="" delay="" do="" ds1307="" ds1307_get="" ds1307_write="" duoc="" ea="1;" et0="1;" et1="1;" et_key="" f_set="" fix_time="" for="" gia="" giay="" gio="" hex="" hieu="" hour="23;" i2c="" i2c_read="" i2c_start="" i2c_stop="" i2c_write="" i="0;i<8;i++)" iam="" if="" in="" int="" keep="" keypad="" khoi="" kiem="" led="" loop="" main="" min="59;hour--" nhan.="" nhan="" on="" p0="0x00;" p1="0xFF;" p2="0x00;" p3="0xFF;" phim="" phut="" ram="" rd_bit="" read="" receive="" request="" ret="" return="" scl="" sda="(dat" sec="59;min--;}" set="" set_main="" setup="" setup_timer="" start="" tao="" temp="dat" tf0="0;" tf1="0;" th0="-1000/256;" th1="0x3C;" time--="" time="" timer0="" timer1="" timer="" tl0="-1000%256;" tl1="0xAF;" tmod="0x11;" to="" tr0="1;" tr1="1;" tra="" tri="" trinh="" tu="" unsigned="" va="" void="" while="">
if(F_set==4) {F_set=0;
DS1307_Write(0x02,hour);
DS1307_Write(0x01,min); }
}
if(F_set==1){ //Tang hoac giam phut neu F_set = 1
if(!Up_key) hour++;
if(!Dw_key) hour--;
}
if(F_set==2){ //Tang hoac giam gio neu F_set = 2
if(!Up_key) min++;
if(!Dw_key) min--;
}
if(F_set==3){ //Tang hoac giam gio neu F_set = 2
if(!Up_key) sec++;
if(!Dw_key) sec--;
}
Fix_time(); //kiem tra tran so
delay(20000);
}
void T1_ISR(void) interrupt 3 //ngat timer 1 chay dong ho
{
TR1=0;
TF1=0;
TH1=0x3C; // nap lai gia tri cho thanh ghi
TL1=0xAF;
time++;
if(time==10)
{time=0; B_nhay++; get_t=1;
if(B_nhay==2)
B_nhay=0;
}
TR1=1;
}
/*************************************/
void T0_ISR(void) interrupt 1 // Dung ngat timer 0 de quet led
{
TR0=0;
TF0=0;
TH0=0xfc;//-1000/256; // Nap lai gia tri cho thanh ghi
TL0=0x18;//-1000%256;
index++;
//giay
if(index==1)
{
if(F_set==3 && B_nhay==1){index++; index++;}
else
{
t_view=sec; //sec;
P2=0xff;
P0=0x20;//00100000
P2=led7_data[t_view%10]; }} //lay so du sau khi chia 10
if(index==2)
{
P2=0xff;
P0=0x10;//00010000
P2=led7_data[t_view/10]; } //xuat gia tri hang chuc
//phut
if(index==3){
if(F_set==2 && B_nhay==1){index++; index++;}
else
{ t_view=min;
P2=0xff;
P0=0x08;//00001000
P2=led7_data[t_view%10]; }}
if(index==4)
{ P2=0xff;
P0=0x04;//00000100
P2=led7_data[t_view/10]; }
//gio
if(index==5) {
if(F_set==1 && B_nhay==1){index=0;}
else
{ t_view=hour;
P2=0xff;
P0=0x02;//00000010
P2=led7_data[t_view%10]; } }
if(index==6)
{ P2=0xff;
P0=0x01;//00000001
P2=led7_data[t_view/10];
index=0; }
TR0=1;
}
/************CHUONG TRINH CHINH********************************************* **********************/
void main()
{
set_main();
time=index=0;
hour=0;
min=0;
sec=0;
F_set=0;
get_t=0;
setup_timer();
while(1)
{
Keypad();
if(F_set==0)
{
if(get_t == 1)
{
get_t = 0;
sec = DS1307_get(SEC);
min = DS1307_get(MIN);
hour = DS1307_get(HOUR);
}
}
}
}


Blog Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử