Đề tài Thiết kế mạch đồng hồ số dùng Atmega32

Trong cuộc sống hiện đại ngày nay,Cơ-Điện tử là một ngành không thể thiếu và nó đóng vai trò vô cùng quan trọng.Hầu như toàn bộ các nhà máy,xí nghiệp đều được áp dụng các kỹ thuật của ngành cơ điện tử và một phần không nhỏ trong số đó là ứng dụng vi điều khiển. Dưới sự hướng dẫn của thầy Trần Văn Hùng, em thực hiện đề tài : “ thiết kế đồng hồ thời gian thực” . Sau một thời gian nỗ lực không ngừng trong học tập cũng như được sự chỉ dẫn nhiệt tình của thầy Trần Văn Hùng, em đã hoàn thành đề tài được giao.Trong quá trình thực hiện đề tài,do trình độ hiểu biết còn nhiều hạn chế nên đề tài còn nhiều thiếu sót,rất mong được sự giúp đỡ của thầy để chúng em học tập được tốt hơn.Em xin gửi lời cảm ơn đến các thầy giáo bộ môn Cơ-Điện tử và đặc biệt là thầy Trần Văn Hùng đã giúp đỡ chúng em rất nhiều trong quá trình thực hiện đề tài,em xin chân thành cảm ơn.

doc23 trang | Chia sẻ: ngtr9097 | Ngày: 12/05/2013 | Lượt xem: 3205 | Lượt tải: 10download
Bạn đang xem nội dung tài liệu Đề tài Thiết kế mạch đồng hồ số dùng Atmega32, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU Trong cuộc sống hiện đại ngày nay,Cơ-Điện tử là một ngành không thể thiếu và nó đóng vai trò vô cùng quan trọng.Hầu như toàn bộ các nhà máy,xí nghiệp đều được áp dụng các kỹ thuật của ngành cơ điện tử và một phần không nhỏ trong số đó là ứng dụng vi điều khiển. Dưới sự hướng dẫn của thầy Trần Văn Hùng, em thực hiện đề tài : “ thiết kế đồng hồ thời gian thực” . Sau một thời gian nỗ lực không ngừng trong học tập cũng như được sự chỉ dẫn nhiệt tình của thầy Trần Văn Hùng, em đã hoàn thành đề tài được giao.Trong quá trình thực hiện đề tài,do trình độ hiểu biết còn nhiều hạn chế nên đề tài còn nhiều thiếu sót,rất mong được sự giúp đỡ của thầy để chúng em học tập được tốt hơn.Em xin gửi lời cảm ơn đến các thầy giáo bộ môn Cơ-Điện tử và đặc biệt là thầy Trần Văn Hùng đã giúp đỡ chúng em rất nhiều trong quá trình thực hiện đề tài,em xin chân thành cảm ơn. Nha Trang,ngày 10 tháng 06 năm 2010. MỤC LỤC Lời mở đầu…………………....…………………………………………......1 Mục lục………………………………………………………………......…..2 Chương 1: Nhiệm vụ và phân tích nhiệm vụ………………………..............3 1.1.Nhiệm vụ được giao. ….....…………………………………………..3 1.2.Phân tích nhiệm vụ……….....………………………………………..3 Chương 2: Thiết kế hệ thống……….....…………………………………......3 2.1.Tổng quan về đề tài…………….....………………………………….3 2.2.Cấu trúc tổng thể………………….………………………………….4 2.2.1.Chip vi điều khiển Atmega32 …………..…………..………….4 2.2.2.Khối tạo thời gian thực………...……………………………….5 2.2.3.Khối hiển thị (Mạch Led 7 đoạn.......)………………………….9 Chương 3 : Lý thuyết liên quan………………….....………………………11 Chương 4 : Thiết kế phần thiết bị………………….....…………………….12 4.1.Khối điều khiển………………………………...…………………...12 4.2.Điều chỉnh thời gian……………………………...…………………13 4.3.Khối hiển thị………………………………………………………....14 4.4.Khối tạo thời gian thực………………………………………………14 Chương 5 : Thiết kế phần mềm…………………………....……………….16 5.1.Sơ đồ điều khiển……………………………………………………..16 5.2.Code lập trình………………………………………………………..17 Kết Luận…………………………………………………....………………23 Tài liệu tham khảo.......................................................................................23 Chương 1: Nhiệm vụ và phân tích nhiệm vụ. 1.1.Nhiệm vụ được giao. Thiết kế đồng hồ thời gian thực . 2.2.Phân tích nhiệm vụ. *Tài liệu tham khảo: + Giáo trình Kỹ thuật ứng dụng Vi Điều Khiển,interface board designed và điện tử công suất của thầy Trần Văn Hùng. + Các tài liệu liên quan tham khảo trên mạng internet. + Tham khảo ý kiến chuyên môn của các thầy trong bộ môn cơ điện tử. *Thiết kế phần cứng. Thiết kế hệ thống bao gồm khối điều khiển (mạch vi điều khiển),khối hiển thị (mạch led 7 đoạn anot chung),khối thời gian thực (mạch DS1307 ) Trong khối điều khiển bao gồm chip vi xử lý ATMEGA32L,thực hiện chức năng điều khiển,đọc-xuất dữ liệu. Khối hiển thị bao gồm 6 led 7 đoạn,tương ứng hiển thị 00-00-00(giờ-phút-giây).Trong khối hiển thị có 6 tranzito C1815 thực hiện chức năng kích mở cho từng led 7 đoạn sáng. Khối thời gian thực bao gồm 1 ic thời gian thực DS1307 được sử dụng để cập nhật thời gian và ngày tháng.Để giúp ic hoạt động,sử dụng nguồn nuôi pin 3V. * Software : sử dụng ngôn ngữ lập trình CodeVision AVR để lập trình điều khiển. *Giải thuật điều khiển : + Yêu cầu tìm hiểu: Cách quét led và hiển thị giữ liệu ra led 7 đoạn. Cách kích mở các Tranzito C1815 để làm sang tắt các led. Cách đọc giữ liệu từ IC thời gian thực DS1307. Nguyên tắc hoạt động của IC thời gian thực DS1307. Cách ghi-đọc dữ liệu trong EEPROM. Chương 2: Thiết kế hệ thống 2.1.Tổng quan về đề tài. Đề tài “ “ thiết kế đồng hồ thời gian thực” với yêu cầu chung là hiển thị thời gian thực ra Led 7 đoạn . Trong quá trình thiết kế,đề tài thường gặp phải những lỗi như : Chập mạch,các thanh của Led 7 đoạn bị đứt nét,nhiễu mạch… Biện pháp khắc phục: + Kiểm tra thật kỹ trước khi cấp nguồn nuôi cho mạch. + Dùng nhựa thông phủ bên ngoài mạch để bảo vệ. + Dùng đồng hồ số để test mạch. Các linh kiện sử dụng trong mạch. +ATMEGA32L. +Pin 3V. +Đế cắm Pin 3V. +Led 7 đoạn(Anot chung). +Tranzito C1815. +IC thời gian thực DS1307. +Lược đực. +Lược cái. +Nút nhấn. +Điện trở: 1k,10k,39Ω. +Jack nguồn. 2.2.Cấu trúc tổng thể.  ATMEGA32L 2.2.1. Chip vi điều khiển. Xử dụng chip vi điều khiển ATMEGA32L. Có 4 PORT điều khiển. + PORT B: từ PORTB.0=>PORTB.5 điều khiển sáng tắt các Led 7 đoạn. + PORTA điều khiển xuất dữ liệu ra Led 7 đoạn.(Hiển thị thời gian ra Led 7 đoạn). +PORTC.5 đến PORTC.7 điều chỉnh thời gian bằng nút nhấn. + 2 chân SDA và SCL của PORTC,ứng với PORTC.1 và PORTC.0 có tác dụng như đường BUS dữ liệu để cho IC thời gian thực DS1307 truy cập vào.Chân SDA: chuỗi dữ liệu,Chân SCL: dãy xung clock. + Chân Reset : Thiết lập lại trạng thái ban đầu cho vi điều khiển.  Sơ đồ các chân điều khiển 2.2.2.Khối tạo thời gian thực.  DS1307 DS1307 là IC thời gian thực với nguồn cung cấp nhỏ để (sử dụng Pin 3V)cập nhật thời gian và ngày tháng. DS1307 có 7 byte dữ liệu,1 byte điều khiển và 56 byte lưu trữ dành cho người sử dụng. DS1307 hoạt động với vai trò slave trên đường Bus nối tiếp,việc truy cập được thi hành với chỉ thị start và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi.Tiếp theo đó là thanh ghi được truy cập liên tục cho đến khi chỉ thị stop được thực thi.  Sơ đồ chân DS1307. Vcc: nối với nguồn X1,X2: nối với thạch anh 32,768 kHz Vbat: đầu vao pin 3V GND: nối Mass SDA: chuỗi data SCL: dãy xung clock DS1307 có 56 byte SRAM,dữ liệu được truyền và nhận qua đường Bus 2 chiều,nó cung cấp thông tin về giờ-phút-giây,ngày-tháng-năm. Chân số 7 của IC DS1307 là chân SQW/OUT.Đây là chân đo xung của DS1307 hoạt động ở 4 chế độ 1HZ,4.096HZ,8.192HZ,32.768HZ.Các chế độ này được quy định bởi thanh ghi Control register. Chân VCC: đầu vào là 5V DC giúp cho IC hoạt động,IC có thể được truy cập và giữ liệu có thể đọc và viết. Khi nguồn pin 3V được cấp vào và VCC nhỏ hơn 1.25VBAT thì quá trình đọc và viết không được thực thi tuy nhiên chức năng timekeeper không bị ảnh hưởng bởi điện áp vào thấp.Khi VCC < VBAT thì RAM và Tinekeeper sẽ được chuyển tới nguồn cung cấp trong (thường là nguồn Pin 3V) . Chân SCL (Serial clock input) : SCL được sử dụng để đồng bộ sự chuyển dữ liệu trên đường dây nối tiếp. Chân SDA (Serial data input/out) : là chân vào ra cho 2 đường nối tiếp,chân SDA thiết kế theo kiểu cực máng hở,đòi hỏi phải có một điện trở kéo trong khi hoạt động. Hai chân X1,X2 được nối với thạch anh tần số 32.768KHZ, là một mạch tạo dao động ngoài,để mạch hoạt động ổn định thì cần phải mắc thêm 2 tụ 27n. * Sơ đồ địa chỉ RAM và RTC :  Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte thanh ghi thích hợp.Thời gian và ngày tháng được thiết lập cũng thông qua các byte thanh ghi này bằng cách viết vào đó những giá trị thích hợp.Nội dung của các thanh ghi dưới dạng mã BCD(Binary coded decreaseimal).Bit 7 của thanh ghi second là bit clock haft(CH), khi bit này được thiết lập 1 thì giao động disable,khi nó được xóa về 0 thì giao động enable. DS1307 có thể chạy được ở chế độ 24h hay 12h.Bit thứ 6 của thanh ghi hours là bít chọn chế độ 24h hoặc 12h. Trong quá trình truy cập dữ liệu,khi chỉ thị START được thực thi thì dòng thời gian được truyền tới 1 thanh ghi thứ 2,thông tin thời gian sẽ được đọc từ thanh ghi thứ cấp này.Trong khi đó đồng hồ vẫn tiếp tục chạy. DS1307 hỗ trợ Bus 2 dây 2 chiều và giao thức truyền dữ liệu.Thiết bị gửi dữ liệu lên Bus được gọi là bộ phát và thiết bị nhận dữ liệu gọi là bộ thu.Thiết bị điều khiển quá trình này gọi là Master.Thiết bị nhận sự điều khiển của Master gọi là Slave. Các Bus nhận sự điều khiển của Master là thiết bị phát ra chuỗi xung clock (SCL).Master sẽ điều khiển sự truy cập Bus,tạo ra các chỉ thị START-STOP. *Sự truyền nhận dữ liệu trên chuỗi Bus 2 dây: Tùy thuộc vào bit R/W mà hai loại truyền dữ liệu sẽ được thực thi. + Truyền dữ liệu từ Master truyền và Slave nhận: Master sẽ truyền Byte đầu tiên là địa chỉ của Slave,tiếp theo đó là các byte dữ liệu.Slave sẽ gửi lại bit thông báo đã nhận được (Bit acknowledge) sau mỗi byte dữ liệu nhận được.Dữ liệu sẽ truyền từ bít có giá trị nhất (MSB). + Truyền dữ liệu từ slave và master nhận: byte đầu tiên (địa chỉ của slave) được truyền tới slave bởi master. Sau đó slave sẽ gửi lại master bit acknowledge. tiếp theo đó slave sẽ gửi các byte dữ liệu tới master. Master sẽ gửi cho slave các bit acknowledge sau mỗi byte nhận được trừ byte cuối cùng,sau khi nhận được byte cuối cùng thì bit acknowledge sẽ không được gửi .  Sơ đồ đồng bộ 2.2.3.Khối hiển thị (Mạch Led 7 đoạn).  Led 7 đoạn Led 7 đoạn là loại Led được tích hợp nhiều Led bên trong được nối cùng 1 chân.Trong thực tế có 2 loại Led 7 đoạn là Anot chung và Katot chung.Trong sơ đồ được chỉ ra ở hình trên là loại Led Anot chung.Các Led có chung nhau chân nguồn,các chân còn lại a,b,c,d,e,f,g chân nào được nối với Mass thì chân đó sẽ sáng.  Bảng logic Chương 3: Lý Thuyết Liên Quan *Lý thuyết I2C. Một giao tiếp I2C có 2 dây: Serial data(SDA) và Serial clock(SCL).SDA là đường truyền dữ liệu hai hướng và SCL là đường truyền xung đồng hồ và chỉ theo một hướng.  Bus I2C và các thiết bị ngoại vi Như hình ở trên,một khi thiết bị ngoại vi kết nối với Bus I2C thì chân SDA của nó sẽ nối với dây SDA của Bus,chân SCL sẽ nối với dây SCL của Bus.  Kết nối thiết bị vào Bus I2C ở chế độ chuẩn. Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên.Sự cần thiết của các điện trở kéo này là vì chân giao tiếp của các thiết bị ngoại vi thường ở dạng cực máng hở.Giá trị của các điện trở này khác nhau tùy thuộc vào từng thiết bị và chuẩn giao tiếp.Thường giao động trong khoảng 1KΩ đến 4.7KΩ.  Truyền nhận giữ liệu chủ-tớ Một Bus I2C chuẩn truyền 8 bít dữ liệu có hướng trên đường truyền với tốc độ là 100KBit/S-Chế độ chuẩn(Standard Mode) .Tốc độ truyền có thể lên tới 400KBit/S-Chế độ nhanh(Fast Mode) và cao nhất là 3.4MBit/S-Chế độ cao tốc(High-Speed Mode) . Chương 4: Thiết kế phần thiết bị 4.1.Khối điều khiển  Mạch vi điều khiển Thực hiện chức năng đọc-xuất và xử lý dữ liệu.Thực hiện giao tiếp I2C với DS1307. 4.2.Điều chỉnh thời gian.  Mạch nút nhấn Gồm 3 nút nhấn.Khi ấn nút thì chân 1 được nối với chân 2 và đưa điện áp nối xuống Mass.Lúc này điện áp tại chân 2 bằng 0 làm cho vi điều khiển nhận biết được sự thay đổi này và thực hiện lệnh cần điều khiển.Nút thứ nhất có tác dụng thiết lập cho vi điều khiển hoạt động ở chế độ bình thường hay chế độ cài đặt thời gian.Nút thứ 2 làm tăng thời gian cần điều chỉnh,nút thứ 3 làm giảm thời gian cần điều chỉnh. 4.3.Khối hiển thị.  7 chân a,b,c,d,e,f,g của Led 7 đoạn được nối với nhau và nối vào PORTD của vi điều khiển có tác dụng hiển thị thời gian.Chân số 3 của 6 Led 7 đoạn được nối với 6 chân E của Tranzito C1815 có tác dụng điều khiển Led sáng tắt theo ý muốn.6 chân B của Tranzito C1815 được nối với 6 chân của PORTB của vi điều khiển để điều khiển Led sáng tắt với thời gian mong muốn. 4.4.Khối tạo thời gian thực. Sử dụng IC thời gian thực DS1307 với nguồn nuôi 3V.Địa chỉ và dữ liệu được truyền nối tiếp qua đường Bus 2 chiều cung cấp các thông tin về giờ-phút-giây.Chân số 5 và 6 được nối tương ứng với 2 chân SDA và SCL của vi điều khiển để thực hiện giao tiếp I2C. Nó hoạt động trong bộ giao động với tần số thạch anh là 32.768KHZ.  Sơ đồ khối tạo thời gian thực Chương 5: Thiết kế phần mềm /***************************************************** 5.1.Sơ đồ điều khiển.  *Giải thích: Sau khi chương trình bắt đầu hoạt động,hệ thống sẽ giải mã Led 7 đoạn và quét Led.Sau đó khởi tạo đường truyền I2C và đọc thời gian thực DS1307.Hiển thị thời gian ra 6 Led 7 đoạn. Thời gian S bắt đầu tăng và mỗi lần tăng tiến hành kiểm tra 1 lần.khi S>59 thì đưa S về trạng thái ban đầu là 00.Sau đó lại tiếp tục tăng. Khi S>59 thì tăng phút và tiến hành kiểm tra phút.Nếu phút>59 thì tăng giờ và đưa giá trị phút về 00.Sau đó lại tiếp tục tăng. Khi Giờ>23 đưa giá trị giờ về 00 đồng thời tiến hành kiểm tra giờ.Sau đó lại tiếp tục tăng. Nếu giá trị giờ và phút thỏa mãn đồng thời với điều kiện ta cài đặt trong chuơng trình hẹn giờ thì VDK sẽ out giá trị 0 hoặc 1 ra để điều khiển sáng tắt đèn. /***************************************************** 5.2.Code lập trình. #include #include #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0 #endasm #include #include #define led1 PORTB.0 #define led2 PORTB.1 #define led3 PORTB.2 #define led4 PORTB.3 #define led5 PORTB.4 #define led6 PORTB.5 #define set PINC.7 #define up PINC.6 #define down PINC.5 bit set0=1,set1=1,up0=1,up1=1,down0=1,down1=1; unsigned char code[]={0x40,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char h=20,m=3,s=0; unsigned char kt=0,a=0,x=0; //=============================================================================== void kt_phim() { set0=set1; set1=set; if((set0==1)&&(set==0)) { kt++; if(kt>3) kt=0; } switch(kt) { case 0 : break; case 1 : { up0=up1; up1=up; a=1; if((up0==1)&&(up1==0)) { h++; if(h>23) h=0; } down0=down1; down1=down; if((down0==1)&&(down1==0)) { h--; if(h<0) h=23; }break; } case 2: { up0=up1; up1=up; a=1; if((up0==1)&&(up1==0)) { m++; if(m>59) m=0; } down0=down1; down1=down; if((down0==1)&&(down1==0)) { m--; if(m<0) m=59; } break; } case 3: { up0=up1; up1=up; a=1; if((up0==1)&&(up1==0)) { s++; if(s>59) s=0; } down0=down1; down1=down; if((down0==1)&&(down1==0)) { s--; if(s<0) s=59; } break; } } } void read_ds1307() { if(kt==0) { if(a==1) { rtc_set_time(h,m,s); a=0; delay_us(300); } rtc_get_time (&h,&m,&s); } } void hien_thi1() { if((kt==0)||(kt!=1)||((kt==1)&&(x<50))) { PORTA=code[h/10]; led1=1; delay_us(2000); led1=0; PORTA=code[h%10]; led2=1; delay_us(2000); led2=0; } if((kt==0)||(kt!=2)||((kt==2)&&(x<50))) { PORTA=code[m/10]; led3=1; delay_us(2000); led3=0; PORTA=code[m%10]; led4=1; delay_us(2000); led4=0; } if((kt==0)||(kt!=3)||((kt==3)&&(x<50))) { PORTA=code[s/10]; led5=1; delay_us(2000); led5=0; PORTA=code[s%10]; led6=1; delay_us(2000); led6=0; } } void main(void) { PORTA=0xFF; DDRA=0xFF; PORTB=0x00; DDRB=0xff; PORTC=0xff; DDRC=0x00; PORTD=0x00; DDRD=0x00; TCCR0=0x00; TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ACSR=0x80; SFIOR=0x00; // I2C Bus initialization i2c_init(); rtc_init(0,1,0); //rtc_set_time(10,20,2); while (1) { // Place your code here x++; kt_phim(); read_ds1307(); hien_thi1(); if(x==100) x=0; }; } ****************************************************** Kết Luận Sau một thời gian nỗ lực không ngừng trong học tập cũng như được sự nhiệt tình chỉ bảo của thầy Trần Văn Hùng cũng như các thầy giáo bộ môn,em đã hoàn thành được đề tài được giao đó là “ “ thiết kế đồng hồ thời gian thực”. Trong quá trình thực hiện đề tài em đã đúc kết được rất nhiều kinh nghiệm quý báu cho bản than để phục vụ em trong quá trình học tập sau này.Qua rất nhiều lần thử nghiệm với mô hình cuối cùng em cũng đã đạt được thành công mong muốn.Cũng với đề tài này,trong tương lai em dự định sẽ phát triển nó ở mức cao hơn,có nhiều ứng dụng trong thực tế hơn như : tự động kết nối với một thuê bao điện thoại khi xảy ra sự cố trong nhà(chẳng hạn như cháy nhà.),có hệ thống báo cháy và tự động dập tắt đám cháy trong thời gian nhất định… Cuối cùng em xin một lần nữa gửi lời cảm ơn chân thành đến thầy Trần Văn Hùng cũng như các thầy giáo bộ môn đã giúp đỡ chúng em rất nhiều trong quá trình thực hiện đề tài,em xin chân thành cảm ơn. Tài liệu thao khảo 1. Thầy Trần Văn Hùng “Kỹ thuật ứng dụng Vi Điều Khiển,interface board designed và điện tử công suất” Giáo trình lưu hành nội bộ ,Đại Học Nha Trang. 2. các trang website tham khảo: + + www.datasheetall.com