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

31 2 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

BÁO CÁO TỐT NGHIỆP Đề tài Đồng hồ thời gian thực dùng DS 1307 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 hồ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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 cịn 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 xố 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 vng 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 vng 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 ln 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 Set hours: Set minutes: http://machdientu.net Page 16 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 Set year: http://machdientu.net Page 17 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 Set month: http://machdientu.net Page 18 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 Set day: http://machdientu.net Page 19 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net Page 20 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề tài : đồng hồ thời gian thực dùng DS 1307 http://machdientu.net Page 22 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Đề 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

Ngày đăng: 02/11/2022, 10:34

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

  • Đang cập nhật ...

Tài liệu liên quan