đồng hồ thời gian thực dùng DS 1307

31 866 0
đồng hồ thời gian thực dùng DS 1307

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Khi đọc qua tài liệu này, phát sai sót nội dung chất lượng xin thông báo để sửa chữa thay tài liệu chủ đề tác giả khác Bạn tham khảo nguồn tài liệu dịch từ tiếng Anh đây: http://mientayvn.com/Tai_lieu_da_dich.html Thông tin liên hệ: Yahoo mail: thanhlam1910_2006@yahoo.com Gmail: frbwrthes@gmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 Môn vi xử lý Đề tài : đồng hồ thời gian thực dùng DS 1307 I, Chức mạch điện: - Hiển thị : ,phút,giây, ngày , tháng,năm,thứ tuần - giao tiếp với phím : status-mode-increase-decrease Phím status dùng để chuyển chế độ từ hiển thị ,phút ,giây,thứ sang ngày ,tháng, năm Phím mode dùng để điều chỉnh ngày, tháng, năm ,phút ,giây,thứ II, Mô tả mạch: -Mạch sử dụng IC thời gian thực DS 1307 giao tiếp I2C với Pic Pic16F877A - Dùng led loại led/1 Dùng Tranzito để điều khiển việc đóng ngắt led Vi điều khiển dùng PIC 16F877A Dùng thạch anh 20MHz để tạo dao động cho PIC Dùng mạch tiny Bootloaderđể kết nối pic máy tính , nạp chương trình trực tiếp từ máy tính vào PIC mà không cần thông qua mạch nạp cho PIC III/ Cơ tiny bootloader: Đây bootloader cho vi điều khiển Microchip PIC * Nó bootloader có kích thước nhỏ nhất, 100 word nhớ chương trình * Nó bootloader hỗ trợ tất dòng PIC: 16F, 18F, dsPIC (những dòng có hỗ trợ chế độ self-programming - tự nạp lại) http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 Đặc điểm firmware: * Kích thước có khoảng 100word (cho tất dòng 16F, 18F, dsPIC, thực 100 word); * Có thể ghi vào flash, eeprom, ghi vào bytes cài đăt (configuration bytes) dòng 18F * Khi reset, đợi giây để nhận chương trình nạp, không nhận chuyển qua chạy chương trình * File asm bootloader dễ để chỉnh sửa lại,cho phù hợp với chip, tốc độ truyền nhận Đặc điểm phần mềm máy tính * Có thể tải chương trình vào flash (trong phiên bootloader, cho phép cài đặt byte cài đặt (configuration bytes) thay đổi dễ dàng theo loại PIC) * Làm việc với tất dòng PIC nêu trên; tự động nhận nội dung file HEX dòng PIC * Ghi nhớ cài đặt cuối (thuận tiện cho người dùng thao tác với loại PIC) * Trong trường hợp lỗi, truyền tín hiệu ngược lại cho máy tính để tái đồng máy tính PIC; * Chế độ giao tiếp thay đổi, dùng cổng COM với tốc độ baud Khái niệm chung bootloader Một bootloader chương trình nằm vi điều khiển, giao tiếp với máy tính (thông qua giao tiếp nối tiếp) Bootloader nhận chương trình (đã dịch thành file HEX) từ máy tính ghi vào nhớ flash vi điều khiển thông qua phần mềm máy tính, sau chạy chương trình vi điều khiển Bootloader dùng với vi điều khiển cho phép ghi vào nhớ flash thông qua phần mềm máy tính Bản thân bootloader phải ghi vào nhớ flash mạch nạp khác Để bootloader hoạt động, sau nhấn reset, lệnh "goto bootloader" phải nằm địa chương trình vi điều khiển Có loại bootloader, số loại cần người dùng đặt lại địa dòng lệnh đầu, số khác tự thân đặt dòng lệnh đầu người dùng vào địa khác mà bootloader nằm sẵn đó, quay trở lại chương trình người dùng kết thúc đoạn chương trình bootloader Trong trường hợp này, tiny bootloader tự động đem vị trí đầu chương trình người viết, đặt phía với chương trình bootloader (thực đoạn chương trình tối đa có dòng lệnh) địa 0x0004 địa bắt đầu ngắt Chính vậy, lập trình từ vị trí 0x0000 viết tối đa dòng lệnh, sau phải nhảy đến chương trình Như vậy, tiny bootloader thực thao tác, cắt dòng từ 0x0000 đến 0x0003 , thay dòng lệnh GOTO BOOTLOADER Và tự động đặt dòng lệnh nằm phía chương trình bootloader Sau đó, chạy chương trình tinybootloader phía bên Rồi quay lên chạy dòng lệnh Kết thúc dòng này, lại trở vị trí chương trình chạy bình thường bên phiên tiny bootloader cho phép reset máy tính, không cần phải bấm reset Đây loại tiny bootloader : max232 http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 IV/ Cơ chế hoạt động chức DS1307: Vcc: nối với nguồn X1,X2: nối với thạch anh 32,768 kHz Vbat: đầu vào pin 3V GND: đất SDA: chuỗi data SCL: dãy xung clock SQW/OUT: xung vuông/đầu driver · DS1307 IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian ngày tháng với 56 bytes SRAM Địa dữliệu truyền nối tiếp qua đường bus chiều Nó cung cấp thông tin giờ,phút,giây ,thứ,ngày ,tháng, năm.Ngày cuối tháng tự động điều chỉnh với tháng nhỏ 31 ngày,bao gồm việc tự động nhảy năm Đồng hồ hoạt động dạng 24h 12h với thị AM/PM DS1307 có http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 mạch cảm biến điện áp dùng để dò điện áp lỗi tự động đóng ngắt với nguồn pin cung cấp · DS 1307 hoạt động với vai trò slave đường bus nối tiếp Việc truy cập thi hành với thị START mã thiết bị định cung cấp địa ghi Tiếp theo ghi truy cập liên tục đến thị STOP thực thi Sơ đồ khối DS1307: Mô tả hoạt động chân: · Vcc,GND: nguồn chiều cung cấp tới chân Vcc đầu vào 5V Khi V cung cấp thiết bị truy cập hoàn chỉnh liệu đọc viết Khi pin V nối tới thiết bị Vcc nhỏ 1,25Vbat trình đọc viết không thực thi,tuy nhiên chức timekeeping không bị ảnh hưởng điện áp vào thấp Khi Vcc nhỏ Vbat RAM timekeeper ngắt tới nguồn cung cấp (thường nguồn chiều 3V) · Vbat: Đầu vào pin cho chuẩn pin 3V Điện áp pin phải giữ khoảng từ 2,5 đến 3V để đảm bảo cho hoạt động thiết bị · SCL(serial clock input): SCL sử dụng để đồng chuyển liệu đường dây nối tiếp · SDA(serial data input/out): chân vào cho đường dây nối tiếp Chân SDA thiết kế theo kiểu cực máng hở , đòi hỏi phải có điện trở kéo hoạt động · SQW/OUT(square wave/output driver)- kích hoạt bit SQWE thiết lập 1, chân SQW/OUT phát tần số (1Hz,4kHz,8kHz,32kHz) Chân thiết kế theo kiểu cực máng hở cần có điện trở kéo Chân hoạt động Vcc Vbat cấp http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 · · X1,X2: nối với thạch anh tần số 32,768kHz.Là mạch tạo dao động , để hoạt động ổn định phải nối thêm tụ 33pF Cũng có DS1307 với tạo dao động tần số 32,768kHz, với cấu hình chân X1 nối vào tín hiệu dao động chân X2 để hở 1, Sơ đồ địa RAM RTC: Seconds Minutes Hours Day Date Month Year Control Ram 58x8 00h 07h 08h 3Fh · Thông tin thời gian ngày tháng lấy cách đọc byte ghi thích hợp thời gian ngày tháng thiết lập thông qua byte ghi cách viết vào giá trị thích hợp nội dung ghi dạng mã BCD(binary coded decreaseimal) Bit ghi seconds bit clock halt(CH),khi bit thiết lập dao động disable,khi xoá dao động enable Chú ý phải enable dao động suốt trình cấu hình thiết lập (CH=0) Thanh ghi thời gian thựuc mô tả sau: http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 · · DS1307 chạy chế độ 24h 12h Bit thứ ghi hours bit chọn chế độ 24h 12h bit mức cao chế độ 12h chọn chế độ 12h bit bit AM/PM với mức cao là PM chế độ 24h bit bit 20h(từ 20h đến 23h) Trong trình truy cập liệu, thị START thực thi dòng thời gian truyền tới ghi thứ 2,thông tin thời gian đọc từ ghi thứ cấp này,trong đồng hồ tiếp tục chạy Trong DS1307 có ghi điều khiển để điều khiển hoạt động chân SQW/OUT Bit7 OUT · · Bit6 X Bit5 X Bit4 SQWE Bit3 X Bit2 X Bit1 RS1 Bit0 RS0 OUT(output control):bit điều khiển mức chân SQW/OUT đầu xung vuông disable Nếu SQWE=0 mức logic chân SQW/OUT OUT=1,và =0 OUT=0 SQWE(square wave enable): bit thiết lập enable đầu tạo dao động Tần số đầu sóng vuông phụ thuộc vào giá trị RS1 RS0 RS1 RS0 tần số đầu SQW 0 1 1 1Hz 4,096kHz 8,192kHz 32,768kHz DS1307 hỗ trợ bus dây chiều giao thức truyền liệu thiết bị gửi liệu lên bus gọi phát thiết bị nhận gọi thu thiết bị điều khiển trình gọi master thiết bị http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 nhận điều khiển master gọi slave Các bus nhận điều khiển master,là thiết bị phát chuỗi xung clock(SCL),master điều khiển truy cập bus,tạo thị START STOP Sự truyền nhận liệu chuỗi bus dây Tuỳ thuộc vào bit R/ w mà loại truyền liệu thực thi: · truyền liệu từ master truyền slave nhận: Master truyền byte địa slave Tiếp sau byte liệu slave gửi lại bit thông báo nhận (bit acknowledge) sau byte liệu nhận liệu truyền từ bit có giá trị (MSB) · truyền liệu từ slave master nhận: byte (địa slave) truyền tới slave master Sau slave gửi lại master bit acknowledge slave gửi byte liệu tới master Master gửi cho slave bit acknowledge sau byte nhận trừ byte cuối cùng,sau nhận byte cuối bit acknowledge không gửi Master phát tất chuỗi xung clock thị START STOP truyền kết thúc với thị STOP thị quay vòng START Khi thị START quay vòng truyền chuỗi liệu thực thi bus chưa giải phóng Dữ liệu truyền bắt đầu bit MSB 2, DS1307 hoạt động chế độ sau: · chế độ slave nhận( chế độ DS1307 ghi):chuỗi liệu chuỗi xung clock nhận thông qua SDA SCL Sau byte nhận bit acknowledge truyền điều kiện START STOP nhận dạng bắt đầu kết thúc truyền chuỗi nhận dạng địa thực phần cứng sau chấp nhận địa slave bit chiều Byte địa byte nhận sau điều kiện START phát từ master Byte địa có chứa bit địa DS1307, 1101000, bit chiều (R/ w ) cho phép ghi sau nhận giải mã byte địa thiết bị phát tín hiệu acknowledge lên đường SDA Sau DS1307 nhận dạng địa bit ghi master gửi địa ghi tới DS1307 , tạo trỏ ghi DS1307 master truyền byte liệu cho DS1307 sau bit acknowledge nhận sau master truyền điều kiện STOP việc ghi hoàn thành http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 · chế độ slave phát ( chế độ DS1307 đọc): byte slave nhận tương tự chế độ slave ghi Tuy nhiên chế độ bit chiều lại chiều truyền ngược lại Chuỗi liệu phát SDA DS 1307 chuỗi xung clock vào chân SCL Các điều kiện START STOP nhận dạng bắt đầu kết thúc truyền chuỗi byte địa nhận master phát điều kiện START Byte địa chứa bit địa slave bit chiều cho phép đọc sau nhận giải mã byte địa thiết bị nhận bit acknowledge đường SDA Sau DS1307 bắt đầu gửi liệu tới địa trỏ ghi thông qua trỏ ghi trỏ ghi không viết vào trước chế độ đọc thiết lập địa đọc địa cuối chứa trỏ ghi DS1307 nhận tín hiệu Not Acknowledge kết thúc trình đọc Đọc liệu-chế độ slave phát · thời gian thực việc đọc,ghi liệu DS1307: sơ đồ đồng bộ: http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 đặc tính thời gian thực hiện: V/ Tổng quan vi điều khiển PIC16F877A: http://machdientu.net Page Đề tài : đồng hồ thời gian thực dùng DS 1307 Set hours: Set minutes: http://machdientu.net Page 16 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set year: http://machdientu.net Page 17 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set month: http://machdientu.net Page 18 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set day: http://machdientu.net Page 19 Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net Page 20 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set date: VIII/ Sơ đồ khối mạch: http://machdientu.net Page 21 Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net Page 22 Đề tài : đồng hồ thời gian thực dùng DS 1307 IX,ngôn ngữ lập trình: - ngôn ngữ lập trình cho pic C, dùng CCS 3.227 để biên dịch - sử dụng I2C tích hợp sẵn PIC để giao tiếp với DS1307 - sử dụng hàm có sẵn CCS là:I2C_START;I2C_STOP; I2C_READ; I2C_WRITE dùng để khởi tạo,đọc giá trị từ DS1307 sang PIC - việc hiển thị thời gian liên tục ,ta dùng byte RAM để làm đệm hiển thị (các biến led1, led8), giá trị thời gian đọc từ DS1307 sau chuyển sang BCD lưu biến - Ta đọc giá trị thời gian từ DS1307 đọc giá trị giây, sau phút ta cập nhật toàn ghi thời gian DS1307 đưa hiển thị - Chương trình quét bàn phím xác định phím chức gọi hàm xử lý tương ứng như: chuyển chế độ, chỉnh ,tăng,giảm giá trị… X/ Code: //#include #include #include #use delay(clock=20000000) #use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3) // Cac dinh nghia #define status rd4 #define mode rd5 #define increase rd6 #define decrease rd7 #define led1 ra0 #define led2 ra1 #define led3 ra2 #define led4 ra3 #define led5 ra4 #define led6 ra5 #define led7 re0 #define led8 re1 //Cac bien int8 sec,min,hour,dow,date,month,year; int8 const led_code[16]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b0100 0001,0b00011111,0b00000001,0b00001001,0b01000001,0b01000001,0b01000001,0b01000001,0b01 000001,0b01000001}; int8 sec1,sec2,min1,min2,hour1,hour2,day,date1,date2,month1,month2,year1,year2,year3,year4; void display1(); http://machdientu.net Page 23 Đề tài : đồng hồ thời gian thực dùng DS 1307 void display2(); void update_time(); void set_time(void) ; void set_min(void); void set_hour(void); void set_date(void); void set_day(void); void set_month(void); void set_year(void); void main() { set_tris_a(0x00); set_tris_b(0x01); set_tris_e(0x00); set_tris_d(0xff); // Cong A lam dau // Cong B lam dau ( tru RB0) // Cong B lam dau // Cong D lam dau vao ( ban phim) porta=porte=1; while (1) { update_time(); display1(); if (status==0) {display2();} if (mode==0) { set_time();} } } void update_time() { i2c_start(); i2c_write(0xD0); //Gui dia chi cua slave i2c_write(0x00); //thiet lap lai tro - set register pointer i2c_stop(); I2C_start(); I2C_write(0xD1); /* gui lenh doc du lieu */ sec = i2c_read(1); /* starts w/last address stored in register pointer */ = i2c_read(1); hour = i2c_read(1); //che 24h ko can AND dow = i2c_read(1); date = i2c_read(1); month = i2c_read(1); year = i2c_read(0); i2c_stop(); //========================= sec1=sec & 0x0F; sec2=(sec & 0x70)>>4; //convert to BCD SEC min1=min & 0x0F; min2=(min & 0x70)>>4; //convert to BCD MIN http://machdientu.net Page 24 Đề tài : đồng hồ thời gian thực dùng DS 1307 hour1=hour & 0x0F; hour2=(hour & 0x30)>>4; //convert to BCD HOUR day=(dow & 0x07); date1=date & 0x0F; date2=(date & 0x30)>>4; //convert to BCD DATE month1=month & 0x0F; month2=(month & 0x10)>>4; //convert to BCD MONTH year1=year & 0x0F; year2=(year & 0xF0)>>4; //convert to BCD YEAR } void display1() { // sec - - hour PortB=led_code[sec1]; led6=0;//SEC1 delay_us(500); led6=1; PortB=led_code[sec2]; led5=0;//SEC2 delay_us(500); led5=1; PortB=led_code[min1]; led4=0;//MIN1 delay_us(500); led4=1; PortB=led_code[min2]; led3=0;//MIN2 delay_us(500); led3=1; PortB=led_code[hour1]; led2=0;//HOUR1 delay_us(500); led2=1; PortB=led_code[hour2]; led1=0;//HOUR2 delay_us(500); led1=1; PortB=led_code[day]; led8=0;//DAY delay_us(500); led8=1; } void display2(){ // Dow - Date - Month - Year int16 i=0; while (status==0) {} while (i[...]... Đề tài : đồng hồ thời gian thực dùng DS 1307 Set hours: Set minutes: http://machdientu.net Page 16 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set year: http://machdientu.net Page 17 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set month: http://machdientu.net Page 18 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set day: http://machdientu.net Page 19 Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net... http://machdientu.net Page 20 Đề tài : đồng hồ thời gian thực dùng DS 1307 Set date: VIII/ Sơ đồ khối của mạch: http://machdientu.net Page 21 Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net Page 22 Đề tài : đồng hồ thời gian thực dùng DS 1307 IX,ngôn ngữ lập trình: - ngôn ngữ lập trình cho pic là C, dùng CCS 3.227 để biên dịch - sử dụng I2C tích hợp sẵn trong PIC để giao tiếp với DS1 307 - sử dụng các... giây,thứ - Phím mode dùng để chỉnh giờ,phút,giây,ngày,tháng,năm - Phím increase để tăng giá trị - Phím decrease để giảm giá trị http://machdientu.net Page 13 Đề tài : đồng hồ thời gian thực dùng DS 1307 - Thuật toán điều khiển: + , thay đổi chế độ hiển thị: S Status=0 Đ Quét led hiển thị ngày,tháng,năm +,Chỉnh thời gian: http://machdientu.net Page 14 Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net... I2C_READ; I2C_WRITE dùng để khởi tạo,đọc giá trị từ DS1 307 sang PIC - việc hiển thị thời gian là liên tục ,ta dùng 8 byte RAM để làm bộ đệm hiển thị (các biến led1, led8), các giá trị thời gian đọc từ DS1 307 sau khi đã chuyển sang BCD sẽ được lưu trong các biến này - Ta sẽ đọc các giá trị thời gian từ DS1 307 nhưng chỉ đọc giá trị giây, sau 1 phút ta mới cập nhật toàn bộ thanh ghi thời gian của DS1 307 và đưa... http://machdientu.net Page 11 Đề tài : đồng hồ thời gian thực dùng DS 1307 mạch reset của pic16f877a VI/ Khối hiển thị: - Khối hiển thị dùng 8 led +,ở chế độ hiển thị ngày tháng năm:2 led để hiện thị ngày ,2 led hiển thị tháng ,4 led hiển thị năm +,ở chế độ hiển thị giờ ,phút, giây: 2 led dùng để hiển thị giờ,2 led dùng để hiển thị phút, 2 led dùng để hiển thị giây, 1 led dùng hiển thị thứ trong tuần (chủ... delay_us(500); led8=1; http://machdientu.net Page 25 Đề tài : đồng hồ thời gian thực dùng DS 1307 PortB=led_code[year2]; led7=0;//YEAR2 delay_us(500); led7=1; PortB=led_code[0]; led6=0;//YEAR1 delay_us(500); led6=1; PortB=led_code[2]; led5=0;//YEAR2 delay_us(500); led5=1; i++; } } void update _ds1 307(void) { int8 data=0; // luu tru du lieu tam thoi de gui vao ds1 307 i2c_start(); i2c_write(0xd0); i2c_write(0x00);... data=0x00; i2c_write(data); i2c_stop(); // ket thuc truyen du lieu } void set_time(void) { set_year(); http://machdientu.net Page 26 Đề tài : đồng hồ thời gian thực dùng DS 1307 set_month(); set_date(); set_day(); set_hour(); set_min(); while (mode==0) {} update _ds1 307(); } void set_year(void) { // Cai dat nam while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0)...Đề tài : đồng hồ thời gian thực dùng DS 1307 PIC 16F877A trong mạch là loại có 40 chân,với 5 cổng vào ra la Port A(RA0÷RA5),Port B(RB0÷RB7),Port C(RC0÷RC7),Port D(RD0÷RD7),Port E(RE0÷RE2) Có 3 bộ định thời là timer0,timer1,timer2 8K bộ nhớ chương trình flash Tổ chức bộ nhớ : Có 3 khối bộ nhớ trong pic16F877A:... led: http://machdientu.net Page 12 Đề tài : đồng hồ thời gian thực dùng DS 1307 bắt đầu quét led khởi tạo hệ thống gửi dữ liệu cho led 1 cấp nguồn cho led 1 trễ 1ms ngắt nguồn led 1 gửi dữ liệu cho led 8 cấp nguồn cho led 8 trễ 1ms ngắt nguồn led 8 VII/ khối điều khiển : Gồm 4 phím bấm: status-mode(button1)-increase(button2)-decrease(button3) - Phím status dùng để chọn chế độ hiển thị trên các led là... 0001,0b00011111,0b00000001,0b00001001,0b01000001,0b01000001,0b01000001,0b01000001,0b01 000001,0b01000001}; int8 sec1,sec2,min1,min2,hour1,hour2,day,date1,date2,month1,month2,year1,year2,year3,year4; void display1(); http://machdientu.net Page 23 Đề tài : đồng hồ thời gian thực dùng DS 1307 void display2(); void update_time(); void set_time(void) ; void set_min(void); void set_hour(void); void set_date(void); void set_day(void); void set_month(void); void set_year(void);

Ngày đăng: 27/07/2016, 15:14

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan