Thiết kế mạch đèn giao thông thông minh dùng AVR Trong thời đại ngày nay khi nhân loại đang có những bước tiến vượt bậc về khoa học công nghệ thì ngành điện tử cũng có nhiều bước tiến rất quan trọng, đặc biệt là lĩnh vực vi điều khiển. Các bộ vi xử lý ngày càng phát triển hoàn thiện hơn và được sử dụng phổ biến trong hầu hết các hệ thống điều khiển tự động trong công nghiệp, khoa học kĩ thuật cũng như các thiết bị dân dụng. Vi xử lý đã đem lại những ưu điểm, những chức năng đặc biệt đã hộ trợ con người trong những hệ thống phức tạp đòi hỏi yêu cầu kĩ thuật cao. Để ứng dụng những tính năng đặc biệt đó vào đời sống thực tiễn thì nhóm sinh viên chúng em đã tiến hành nghiên cứu đồ đề tài bài tập lớn: “Thiết kế mạch điều khiển đèn giao thông thông minh xử dụng chip vi xử lý ATmega32” Hệ thống này giúp chúng ta điều chỉnh thời gian của đèn giao thông theo hoàn cảnh cụ thể mà không cần sự giám sát thường xuyên của con người. Hệ thống xử dụng chip vi xử lý ATmega32 là IC điều khiển chính. Ngoài ra còn xử dụng một số linh kiện điện tử khác sẽ được đề cập trong phần sau của báo cáo. Do thời gian thực hiện có hạn. Đồng thời luôn có sự khác nhau giữa lý thuyết và thực tiễn nên trong quá trình làm việc nhóm em không tránh khỏi thiếu sót. Mong nhận được sự giúp đỡ, đóng góp nhiệt tình từ thầy để bản báo cáo có thể hoàn thiện hơn. Chúng em xin chân thành cảm ơn
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG ====o0o==== BÁO CÁO BÀI TẬP LỚN VI XỬ LÝ ĐỀ TÀI: THIẾT KẾ MẠCH ĐIỀU KHIỂN ĐÈN GIAO THƠNG THƠNG MINH DÙNG ATMEGA 32 Nhóm sinh viên: 1.NGUYỄN THỊ THƯƠNG - 20112253 TRẦN THỊ HOÀI THƯƠNG 20104101 NGUYỄN TRỌNG THƯỢNG – 20112261 NGUYỄN VĂN THUÂN - 20114638 GVHD: BTL Kỹ thuật Vi xử lí – 2014 NGUYỄN HOÀNG DŨNG Page BTL Kỹ thuật Vi xử lí – 2014 Page MỤC LỤC BTL Kỹ thuật Vi xử lí – 2014 Page BẢNG PHÂN CHIA CÔNG VIỆC STT HỌ TÊN Nguyễn Thị Thương Trần Thị Hoài Thương Nguyễn Văn Thuân Nguyễn Trọng Thượng BTL Kỹ thuật Vi xử lí – 2014 CƠNG VIỆC + Tìm hiểu lý thuyết AVR + Tìm hiểu Codevision AVR + Viết code mơ proteus + Viết báo cáo + Tìm hiểu lý thuyết Atmega 32 + Xây dựng lưu đồ thuật tốn cho code + Viết code + Tìm hiểu linh kiện sử dụng, hàn mạch + Thiết kế sơ đồ nguyên lí + Thiết kế mạch in Page LỜI NÓI ĐẦU Trong thời đại ngày nhân loại có những bước tiến vượt bậc về khoa học công nghệ thì ngành điện tử cũng có nhiều bước tiến rất quan trọng, đặc biệt là lĩnh vực vi điều khiển Các bộ vi xử lý ngày càng phát triển hoàn thiện và được sử dụng phổ biến hầu hết các hệ thống điều khiển tự động công nghiệp, khoa học kĩ thuật cũng các thiết bị dân dụng Vi xử lý đã đem lại những ưu điểm, những chức đặc biệt đã hộ trợ người những hệ thống phức tạp đòi hỏi yêu cầu kĩ thuật cao Để ứng dụng những tính đặc biệt đó vào đời sống thực tiễn thì nhóm sinh viên chúng em đã tiến hành nghiên cứu đồ đề tài tập lớn: “Thiết kế mạch điều khiển đèn giao thông thông minh xử dụng chip vi xử lý ATmega32” Hệ thống này giúp chúng ta điều chỉnh thời gian của đèn giao thông theo hoàn cảnh cụ thể mà không cần sự giám sát thường xuyên của người Hệ thống xử dụng chip vi xử lý ATmega32 là IC điều khiển chính Ngoài còn xử dụng một số linh kiện điện tử khác sẽ được đề cập phần sau của báo cáo Do thời gian thực hiện có hạn Đồng thời có sự khác giữa lý thuyết và thực tiễn nên quá trình làm việc nhóm em không tránh khỏi thiếu sót Mong nhận được sự giúp đỡ, đóng góp nhiệt tình từ thầy để báo cáo hồn thiện Chúng em xin chân thành cảm ơn! BTL Kỹ thuật Vi xử lí – 2014 Page I Tìm hiểu chung AVR ATmega 32 1.1 Tìm hiểu chung AVR 1.1.1 Giới thiệu chung AVR - - - - - AVR họ vi điều khiển hãng Atmel sản xuất, chip vi điều khiển bits với cấu trúc tập lệnh đơn giản hóa – RISC (Reduced Instruction Set Computer), kiểu cấu trúc thể ưu xử lí Ưu điểm AVR so với chip vi điều khiển bits khác (ưu điểm tính ứng dụng chức năng): + Gần không cần mắc thêm linh kiện phụ sử dụng AVR, chí khơng cần nguồn tạo xung clock cho chip (thường khối thạch anh) + Thiết bị lập trình (mạch nạp) cho AVR đơn giản, có loại mạch nạp cần vài điện trở làm số AVR cịn hỗ trợ lập trình on – chip bootloader khơng cần mạch nạp… + Bên cạnh lập trình ASM, cấu trúc AVR thiết kế tương thích C + Nguồn tài nguyên source code, tài liệu, application note…rất lớn internet Các tính chip AVR: + Có thể sử dụng xung clock lên đến 16MHz, sử dụng xung clock nội lên đến MHz (sai số 3%) + Bộ nhớ chương trình Flash lập trình lại nhiều lần dung lượng lớn, có SRAM (Ram tĩnh) lớn, đặc biệt có nhớ lưu trữ lập trình EEPROM + Nhiều ngõ vào (I/O PORT) hướng (bi-directional) + bits, 16 bits timer/counter tích hợp PWM + Các chuyển đối Analog – Digital phân giải 10 bits, nhiều kênh + Chức Analog comparator + Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232) + Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master Slaver + Giao diện nối tiếp Serial Peripheral Interface (SPI) Một số chip AVR thông dụng: + AT90S1200, AT90S2313, AT90S2323 and AT90S2343, AT90S2333 and AT90S4433, AT90S4414 and AT90S8515, AT90S4434 and AT90S8535, AT90C8534 + ATtiny10, ATtiny11 and ATtiny12, ATtiny15, ATtiny22, ATtiny26, ATtiny28 + ATmega8/8515/8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega169, ATmega32, ATmega323, ATmega103, ATmega64/128/2560/2561 + AT86RF401 … Có thể lập trình cho AVR phần mềm hỗ trợ ngôn ngữ cấp cao BascomAVR (Basic) hay CodevisionAVR (C) (các ngôn ngữ cấp cao giúp BTL Kỹ thuật Vi xử lí – 2014 Page - dễ dàng thực phép toán đại số 16 hay 32 bit), chủ yếu ta lập trình cho AVR ASM (Assembly) trình dịch (compiler) ASM cho AVR hồn tồn miễn phí, nguồn source code cho AVR viết ASM lớn 1.1.2 Cấu trúc AVR AVR có cấu trúc Harvard, đường truyền cho nhớ liệu (data memory bus) đường truyền cho nhớ chương trình (program memory bus) tách riêng Data memory bus có bit kết nối với hầu hết thiết bị ngoại vi, với register file Trong program memory bus có độ rộng 16 bits phục vụ cho instruction registers Hình mơ tả cấu trúc nhớ AVR: 0000 0000 16 bits Program Memory 32 Register File Data Memory Page Data EEPROM S1F S20 BTL Kỹ thuật Vi xử lí – 2014 0000 bits 64 I/O Registers Internal SRAM S5F S60 End Address External SRAM bit End Addresss End Addresss Hình 1: Tổ chức nhớ AVR + Bộ nhớ chương trình (Program memory): Là nhớ Flash lập trình được, chip AVR cũ (như AT90S1200 hay AT90S2313…) nhớ chương trình gồm phần Application Flash Section chip AVR có thêm phần Boot Flash setion + Bộ nhớ liệu (Data Memory): Đây phần chứa ghi quan trọng chip, việc lập trình cho chip phần lớn truy cập nhớ Bộ nhớ liệu chip AVR có độ lớn khác tùy theo chip, nhiên phần nhớ chia thành phần: register file (32 ghi), I/O Memory (64 ghi nhập/xuất), internal SRAM, external SRAM, EEPROM 1.1.3 Hoạt động AVR a Cấu trúc bên AVR Sơ đồ cấu trúc bên AVR sau: BTL Kỹ thuật Vi xử lí – 2014 Page Flash Program Memory Status and Control Program Counter 32x8 General Purpose Registers Instruction Register Instruction Decoder Direct Addre ssing Interrupt Unit SPI Unit Indi rect Add ressi ng ALU Watchdog Timer Analog Comparator Control Lines Data SRAM I/O Module I/O Module EEPROM I/O Module n I/O Lines Hình 2: Cấu trúc bên AVR + ALU – Arithmetic Logic Unit: Bộ ALU hiệu suất cao AVR hoạt động liên kết trực tiếp với 32 ghi làm việc Trong chu kì clock, hoạt động tính tốn số học ghi ghi với liệu trực tiếp thực thi Hoạt động ALU chia làm phần chính: xử lý số học, phép toán logic phép toán với bit BTL Kỹ thuật Vi xử lí – 2014 Page + Thanh ghi trạng thái – Status Register: Thanh ghi chứa kết liên quan đến lệnh xử lý số học gần Kết chứa ghi sử dụng để thực hoạt động có điều kiện Thanh ghi trạng thái khơng tự động lưu lại nhảy vào interrupt không tự động phục hồi (restore) quay về, cần thực điều phần mềm • Bit – I: Global Interrupt Enable Bit cho phép ngắt toàn cục Bit tồn cục bị xóa tự động phần cứng có ngắt xảy Và set trở lại tự động phần cứng lệnh RETI (lệnh quay từ chương trình ngắt) thực thi • Bit – T: Bit Copy Storage • Bit – H: Half Carry Flag • Bit – S: Sign Bit, S = N + V • Bit – V: Two’s Complement Overflow Flag • Bit – N: Negative Flag • Bit – Z: Zero Flag • Bit – C: Carry Flag BTL Kỹ thuật Vi xử lí – 2014 Page 10 Start StaSTART Night = Led seg tắt Đèn đỏ 1, đỏ 2, xanh 1, xanh tắt Đèn vàng 1; vàng Tắt , sáng luân phiên 100ms SW = Bật xanh1; đỏ BTL Kỹ thuật Vi xử lí – 2014 Page 25 Chương trình quét led Trễ 1s TX1 = TX1 – TD2 = TD2 - Bật vàng 1; đỏ Chương trình quét led Trễ 1s TV1 = TV1 -1 TD2 = TD2 -1 Bật Đỏ 1; xanh BTL Kỹ thuật Vi xử lí – 2014 Page 26 Chương trình quét led Trễ 1s TD1 = TD1 -1 TX2 = TX2 -1 Bật Đỏ 1; vàng Chương trình quét led Trễ 1s TD1 = TD1 -1 TV2 = TV2 -1 IV Kết luận Trong trình thực đề tài này, chúng em đúc kết nhiều kinh nghiệm cho thân để phục vụ cho việc học tập sau Mặc dù mạch thực tế không chạy thiết kế mô phỏng, chúng em tìm hiểu BTL Kỹ thuật Vi xử lí – 2014 Page 27 - - lỗi mà mắc phải, đồng thời rút ưu, nhược điểm mạch thiết kế nhóm Ưu điểm: + Có thể áp dụng mạch vào thực tế cách dễ dàng, thay đổi thời gian sáng đèn để phù hợp với tình hình giao thông nơi, vào thời điểm + Việc thiết kế mạch đơn giản, linh kiện sử dụng linh kiện phổ biến Nhược điểm: + Mạch thiết kế chưa tối ưu + Mạch chưa chạy thiết kế + Hệ thống điều khiển giao thông ngã tư nơi giao hai đường chiều Với kết trên, chúng em rút số hướng phát triển đề tài Đó là: + Phát triển để áp dụng ngã tư nơi giao đường chiều + Sử dụng cảm biến tốc độ, cảm biến chốt giao thơng để tính mật độ giao thông tốc độ phương tiện giao thông, camera để quan sát tình trạng giao thơng qua có điều khiển giao thơng thích hợp V Tài liệu tham khảo http://www.hocavr.com/ http://www.dientuvietnam.net/forums/forum.php http://www.alldatasheet.com/ http://www.mcusolution.net/ Một số tài liệu từ trang https://www.google.com.vn/ VI Phụ lục Code lập trình cho Vi điều khiển Atmega32: #include #include #define SW PIND.0 #define NIGHT PIND.1 #define LX1 PORTB.3 // CHAN DK LED #define LDV1 PORTB.4 #define LX2 PORTB.6 #define LDV2 PORTB.7 BTL Kỹ thuật Vi xử lí – 2014 Page 28 #define RED1 PORTA.2 // CHAN LED #define YEL1 PORTA.1 #define GRN1 PORTA.0 #define RED2 PORTA.5 #define YEL2 PORTA.4 #define GRN2 PORTA.3 int D1 = 30, D2 = 30, V1 = 5, V2 = 5, X1 = 25, X2 = 25, TD1 = 30, TD2 = 30, TV1 = 5, TV2 = 5, TX1 = 25, TX2 = 25, STATE = 1; unsigned char HEX[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // Bang ma LED int DOWN = 0, UP = 0, BDN = 0, k = 1; // Trinh phuc vu ngat cho Timer1 Timer1 tran interrupt [TIM1_OVF] void timer1_ovf_isr (void) { TCNT1 = 34286; BDN ++; if (BDN > 3) BDN = 0; } // Vector ngat ngoai interrupt [EXT_INT0] void ext_int0_isr (void) { if (SW == 0) ++UP; } interrupt [EXT_INT1] void ext_int1_isr (void) BTL Kỹ thuật Vi xử lí – 2014 Page 29 { if (SW == 0) ++DOWN; } interrupt [EXT_INT2] void ext_int2_isr (void) { if (SW == 0) { k ++; if (k > 5) k = 1; } } void disp_7seg (int TG1, int TG2) { int i; unsigned char CHUC, DONVI; CHUC = TG1/10; DONVI = TG1%10; PORTB = 0b11011111; LX1 = 0; PORTC = HEX[CHUC]; for (i = 0; i < 1000; i ++) {} PORTB = 0b11011111; LDV1 = 0; PORTC = HEX[DONVI]; for (i = 0; i < 1000; i ++) {} CHUC = TG2/10; DONVI = TG2%10; BTL Kỹ thuật Vi xử lí – 2014 Page 30 PORTB = 0b11011111; LX2 = 0; PORTC = HEX[CHUC]; for (i = 0; i < 1000; i ++) {} PORTB = 0b11011111; LDV2 = 0; PORTC = HEX[DONVI]; for (i = 0; i < 1000; i ++) {} } void set_time () { while (SW == 0) { if (k == 1) { GRN1 = 0; X1 = X1 + UP - DOWN; if (X1 > 99) X1 = 0; if (X1 < 0) X1 = 99; D2 = X1 + V1; if (D2 < 99) { TD2 = D2; TX1 = X1; } BTL Kỹ thuật Vi xử lí – 2014 Page 31 X1 = TX1; UP = DOWN = 0; disp_7seg (TX1, 0); } if (k == 2) { PORTA = 0b11111111; YEL1 = 0; V1 = V1 + UP - DOWN; if (V1 > 99) V1 = 0; if (V1 < 0) V1 = 99; D2 = X1 + V1; if (D2 < 99) { TD2 = D2; TV1 = V1; } V1 = TV1; UP = DOWN = 0; disp_7seg (TV1, 0); } if (k == 3) { PORTA = 0b11111111; GRN2 = 0; BTL Kỹ thuật Vi xử lí – 2014 Page 32 X2 = X2 + UP - DOWN; if (X2 > 99) X2 = 0; if (X2 < 0) X2 = 99; D1 = X2 + V2; if (D1 < 99) { TD1 = D1; TX2 = X2; } X2 = TX2; UP = DOWN = 0; disp_7seg (0, TX2); } if (k == 4) { PORTA = 0b11111111; YEL2 = 0; V2 = V2 + UP - DOWN; if (V2 > 99) V2 = 0; if (V2 < 0) V2 = 99; D1 = X2 + V2; if (D1 < 99) { TD1 = D1; TV2 = V2; BTL Kỹ thuật Vi xử lí – 2014 Page 33 } V2 = TV2; UP = DOWN = 0; disp_7seg (0, TV2); } if (k == 5) { PORTA = 0b11111111; RED1 = 0; RED2 = 0; TD1 = D1; TD2 = D2; disp_7seg (TD1, TD2); } } } void GRN1RED2 () { GRN1 = 0; GRN2 = 1; RED1 = 1; RED2 = 0; YEL1 = 1; YEL2 = 1; disp_7seg (TX1, TD2); } void YEL1RED2 () { BTL Kỹ thuật Vi xử lí – 2014 Page 34 GRN1 = 1; GRN2 = 1; RED1 = 1; RED2 = 0; YEL1 = 0; YEL2 = 1; disp_7seg (TV1, TD2); } void RED1GRN2 () { GRN1 = 1; GRN2 = 0; RED1 = 0; RED2 = 1; YEL1 = 1; YEL2 = 1; disp_7seg (TD1, TX2); } void RED1YEL2 () { GRN1 = 1; GRN2 = 1; RED1 = 0; RED2 = 1; YEL1 = 1; YEL2 = 0; disp_7seg (TD1, TV2); } void delay (long ms) { long i; for (i = 0; i < ms; i++) {} } BTL Kỹ thuật Vi xử lí – 2014 Page 35 void main (void) { // Input/Output Ports initialization // Port A initialization // Func7 = Out Func6 = Out Func5 = Out Func4 = Out Func3 = Out Func2 = Out Func1 = Out Func0 = Out // State7 = State6 = State5 = State4 = State3 = State2 = State1 = State0 = PORTC = 0x00; DDRA = 0xFF; // Port B initialization // Func7 = In Func6 = In Func5 = In Func4 = In Func3 = In Func2 = In Func1 = In Func0 = In // State7 = T State6 = T State5 = T State4 = P State3 = P State2 = P State1 = P State0 = P PORTB = 0x00; DDRB = 0xFF; // Port C initialization // Func7 = In Func6 = In Func5 = In Func4 = In Func3 = Out Func2 = Out Func1 = Out Func0 = Out // State7 = T State6 = T State5 = T State4 = T State3 = State2 = State1 = State0 = PORTA = 0x00; DDRC = 0xFF; // Port D initialization // Func7 = In Func6 = In Func5 = Out Func4 = Out Func3 = Out Func2 = Out Func1 = Out Func0 = Out // State7 = T State6 = T State5 = State4 = State3 = State2 = State1 = State0 = PORTD = 0xFC; DDRD = 0xFE; // Thiet lap thuoc tinh cho Timer0, Timer2: BTL Kỹ thuật Vi xử lí – 2014 Page 36 #asm ("cli") // khong cho phep ngat toan cuc TCCR1B = 0x03; // TCCR1B = 0x01; // nguon xung Clock cho Timer1 lay tu System Clock TCNT1 = 34286; // TCNT1 = 10000; // nap gia tri ban dau cho Timer1 la 100 // cho phep ngat Timer0 Timer0 tran va ngat Timer2 Timer2 tran TIMSK = 0b01000101; MCUCR = 0b00001010; MCUCSR = 0x00; GICR = 0b11100000; #asm ("sei") // cho phep ngat toan cuc while (1) { while (NIGHT == 1) { while (1) { LX1 = LX2 = LDV1 = LDV2 = 1; GRN1 = 1; GRN2 = 1; RED1 = 1; RED2 = 1; YEL1 = 0; YEL2 = 0; delay (100); YEL1 = YEL2 = 1; delay (100); }; }; if (SW == 1) BTL Kỹ thuật Vi xử lí – 2014 Page 37 { if (BDN == 3) // sau giay { switch (STATE) { case 1: if (TX1 > 0) {TX1 = TX1 - 1; TD2 = TD2 - 1;} else {TX1 = X1; STATE = 2;} break; case 2: if (TV1 > 0) {TV1 = TV1 - 1; TD2 = TD2 - 1;} else {TV1 = V1; TD2 = D2; STATE = 3;} break; case 3: if (TX2 > 0) { TD1 = TD1 - 1; TX2 = TX2 - 1;} else {TX2 = X2; STATE = 4;} break; case 4: if (TV2 > 0) {TD1 = TD1 - 1; TV2 = TV2 - 1;} else {TV2 = V2; TD1 = D1; STATE = 1;} break; } BDN = 0; } // Goi cac ham de hien thi BTL Kỹ thuật Vi xử lí – 2014 Page 38 switch (STATE) { case 1: GRN1RED2 (); break; case 2: YEL1RED2 (); break; case 3: RED1GRN2 (); break; case 4: RED1YEL2 (); break; } } else { PORTA = 0b11111111; PORTC = 0b11111111; // tat het set_time (); BDN = 0; } } } BTL Kỹ thuật Vi xử lí – 2014 Page 39 ... dụng điều khiển nhúng II Thiết kế mạch II.1 Phân tích yêu cầu, nhiệm vụ đề tài 2.1.1 Vai trị đèn giao thơng sống ngày Trong hệ thống giao thông nước ta, vấn đề an toàn giao thông ùn tắc giao thông. .. ATtiny12, ATtiny15, ATtiny22, ATtiny26, ATtiny28 + ATmega8 /8515/8535, ATmega1 6, ATmega1 61, ATmega1 62, ATmega1 63, ATmega1 69, ATmega3 2, ATmega3 23, ATmega1 03, ATmega6 4/128/2560/2561 + AT86RF401 … Có thể... dụng linh kiện phổ biến Nhược điểm: + Mạch thiết kế chưa tối ưu + Mạch chưa chạy thiết kế + Hệ thống điều khiển giao thông ngã tư nơi giao hai đường chiều Với kết trên, chúng em rút số hướng phát