Trong khoảng thời gian này bộ nhớ process sẽ đẩy lên trên Stack.Vector ngắt nhảy đến ngắt trong process con và lệnh ngắt này sẽ đưa ra 3 chu kỳ xung.Nếu một ngắt xuất hiện trong khi thực
Trang 1KHOA CƠ KHÍ
ĐỒ ÁN VI ĐIỀU KHIỂN
chạy chữ ”
Giảng viên hướng dẫn : Hoàng Thế Phương
Sinh viên thực hiện: 1 Trần Trọng Tùng
2 Đỗ Quang Diện
3 Lương Tiến Dũng
Lớp : 73DCCO22 Khoá: K73
Hệ : Chính quy
Hà Nội - 2024
Trang 2LỜI NÓI ĐẦU
Tóm tắt: Ngày nay, với sự phát triển mạnh mẽ của khoa học kỹ thuật, đặc biệt
trong lĩnh vực cơ điện tử đã tạo nên một động lực thúc đẩy và phát triển các ngànhcông nghiệp khác nhằm phục vụ và đáp ứng được nhu cầu của con người trong cuộcsống Con người với sự trợ giúp của máy móc, những công cụ thông minh đã khôngphải trực tiếp làm việc, hay những công việc mà con người không thể làm được vớikhả năng của mình mà chỉ việc điều khiển chúng hay chúng làm việc hoàn toàn tựđộng đã mang lại những lợi ích hết sức to lớn, giảm nhẹ và tối ưu hóa công việc Với
sự tiến bộ này đã đáp ứng được những nhu cầu của con người trong cuộc sống hiện đạinói chung và trong sự phát triển của khoa học kỹ thuật nói riêng
Đối với những sinh viên cơ điện tử chúng ta thì việc nghiên cứu, tìm hiểu cácđặc tính của các loại cảm biến, nghiên cứu thiết bị giao tiếp cảm biến trong thực tế có
ý nghĩa thực tế hết sức quan trọng Nó không những trang bị cho chúng ta kỹ năng làmviệc trong lĩnh vực điều khiển tự động, điện tử mà còn giúp chúng ta theo kịp với sựphát triển của khoa học kĩ thuật ngày nay khi tốt nghiệp ra trường
Do vậy, trong đề tài ĐỒ ÁN này em xin tìm hiểu và khảo sát các đặc tính củamột hệ tự động hóa với đề tài: “Thiết kế đồng hồ thời gian thực LED ma trận chạy chữ” Đây là cơ sở để thiết kế những hệ thống tự động hóa đơn giản, cũng như phứctạp được ứng dụng rộng rãi trong khoa học và đời sống
Trang 3LỜI CẢM ƠN
Trước hết em xin gửi lời cảm ơn chân thành đến thẩy Hoàng Thế Phương làngười trực tiếp định hướng giảng dạy và hướng dẫn em từ các môn học cho đến khihoàn thành đồ án
Em xin gửi lời cảm ơn đến thầy cô trường Công Nghệ Giao Thông Vận Tải nóichung và các thầy cô trong ngành cơ điện tử nói riêng đã tận tình giảng dạy trang bịnhững kiến thức bổ ích trong thời gian học tại trường
Em xin cảm ơn tất cả các bạn bè đã động viên, góp ý và giúp đỡ em rất nhiềutrong quá trình học tập và thực hiện đồ án
Trong quá trình thực hiện đồ án và làm bài báo cáo đồ án môn học, khó tránhkhỏi sai sót rất mong quý thầy cô thông cảm và bỏ qua Đồng thời do trình độ lý luậncùng như kinh nghiệm thực tế còn hạn chế nên bài báo cáo sẽ còn những thiếu sót, emrất mong nhận được ý kiến đóng góp của quý thầy cô để em có thể tích lũy được thêmkinh nghiêm cho bản thân
Em xin chân thành cảm ơn!
Hà Nội, ngày… tháng… năm 2024 Sinh viên thực hiện
Trang 4MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Đặt vấn đề
1.2 Vấn đề cần giải quyết
1.3 Mục tiêu của đồ án
CHƯƠNG 2: SƠ LƯỢC VỀ ATEMGA16
2.1 Giới thiệu ATMEGA16
2.2 AVR CPU
2.3 Bộ nhớ AVR ATMEGA16
2.4 Cảm biến siêu âm SR04
2.5 Các vector ngắt và các cổng i/o
CHƯƠNG 3: GIỚI THIỆU VỀ CodeVisionAVR
3.1 Môi trường tích hợp phát triển CodeVisionAVR 3.2 Làm việc với Files
3.3 Làm việc với Project
3.4 Tạo một chương trình bằng cách tự sinh mã trong CodeVisionAVR
CHƯƠNG 4: PHÂN TÍCH VÀ THIẾT KẾ MẠCH
4.1 Sơ đồ nguyên lý
4.1.1 Khối Reset
4.1.2 Khối cảm biến
4.1.3 Khối cảnh báo
4.1.4 Khối nguồn
4.1.5 Khối LED Matrix
4.1.6 Khối INPUT
4.1.7 Khối thời gian thực DS1307
4.2 Thiết kế mạch in
4.2.1 Mạch vẽ 2D
4.2.2 Mạch vẽ 3D
4.2.3 Mạch thật
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
PHỤ LỤC
Trang 5DANH MỤC HÌNH ẢNH
Hình 2 1 Vi điều khiển Atmega16 4
Hình 2 2 Sơ đồ chân của Atmega16 6
Hình 2 3 Cảm biến siêu âm SR04 9
Hình 2 4 Sơ đồ chân của LED Matrix 11
Hình 2 5 Sơ đồ mạch hiển thị LED Matrix 12
Hình 2 6 LED 13
Hình 2 7 Điện trở 14
Hình 2 8 Vòng màu điện trở 14
Hình 2 9 Cách mắc điện trở 15
Hình 2 10 Transistor PNP 15
Hình 2 11 Cấu tạo transistor 15
Hình 2 12 Nguyên lý hoạt đông Transistor 16
Hình 2 13 Nút bấm 17
Hình 2 14 Nút bấm thường 6mm và 12mm 18
Trang 6Hình 2 15 Nút bấm dán 19
Hình 2 16 Nút bấm PLC 19
Hình 3 1 Sơ đồ khối của thiết bị 20
Hình 3 2 Sơ đồ nguyên lý khối nguồn 21
Hình 3 3 Sơ đồ nguyên lý khối nút bấm 22
Hình 3 4 Sơ đồ nguyên lý khối xử lý trung tâm 23
Hình 3 5 Sơ đồ nguyên lý khối cảm biến 24
Hình 3 6 Sơ đồ nguyên lý khối hiển thị 25
Hình 3 7 Sơ đồ nguyên lý khối chấp hành 26
Hình 3 8 Sơ đồ nguyên lý toàn mạch 26
Hình 3 9 Sơ đồ mạch in lớp TOP 27
Hình 3 10 Sơ đồ mạch in lớp BOTTOM 28
Hình 3 11 Sơ đồ mạch dạng 3D 29
Hình 3 12 Lưu đồ thuật toán 30
Hình 3 13 Hình ảnh sản phẩm 31
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1 Đặt vấn đề
Ngày nay, với sự phát triển của khoa học kỹ thuật, trong cuộc sống hẳng ngày việc đo và đặt nhiệt độ theo mong muốn trong một hông gian giới hạn nào đó như: trong nhà máy, xí nghiệp, trong bệnh viện, trong công ty, nhà ở, là rất cần thiết theo nhu câu của con người Điều đó chứng tỏ con người ngày càng muốn giao tiêp nhiêu hơn với môi trường Vì vậy điêu khiên nhiệt độ là điêu rất cân thiết và với sự phát triển của khoa học kỹ thuật, việc thực hiện một mô hình điều khiến nhiệt độ hiển thi trên led ma trận với độ chính xác cao mà không mất nhiều chi phí
Giúp sinh viên củng cố lý thuyết môn học Vi xử lý trong điều khiển Hiểu thêm về cấu trúc của các đòng vi điều khiến nói chung và ARDUINO nói riêng Biết
về cách lập trình cho vi điều khiển và thực hiện được một số bài toán điều khiển cơ bản Giúp sinh viên có thêm kỹ năng giải quyết một số bài toán điều khiển đơn giản ứng dụng các dòng vi điều khiến Có khả năng phân tích bài toán điều khiển để tìm biện pháp giải quyết vấn đề, biết lựa chọn giải pháp hợp lý và biết cách chọn lựa thiết bị vật tư sử dụng cho công việc Ken them tư duy thực hiện và cách thức trinh bày đê sinh viên tiếp cận dễ dàng hơn đối với các đồ án môn học khác và đặc biệt là
đồ án tốt nghiệp sau này khi sinh viên làm Khóa luận tốt nghiệp
Trang 72 Vấn đề cần giải quyết
Điều khiển được nhiệt độ thông qua cảm biến và vi sử lý hiển thị lên led ma trậnmắc nối tiếp và thực hiện theo đúng tiền độ đã đặt ra Kết cấu đồ án được trình bàytheo 4 phần chính :
• Chương 1: Tổng quan về để tài
• Chương 2: Cơ sở lý thuyết
• Chương 3: Thiết kế và thi công
• Chương 4: Đánh giá và kết luận
3 Mục tiêu của đồ án
Trong quá trình nghiên cứu và thực hiện đề tài này nhắm giúp người học: - Tăng khảnăng tự nghiên cứu cũng như tự học - Bước đầu tiếp xúc với thực tế - Vận dụngnhững kiến thức đã có đồng thời tìm tỏi những kiến thức mới để hiểu sâu sắc hơntrong lĩnh vực này Để thiết kế được một hệ thống như đã nêu ở trên thì ngườinghiên cứu phải nắm vững kiến thức chuyên ngành điện tử, tìm hiêu, nghiên cứuqua sách vở, tài liệu nước ngoài và dạng mạch thực tế để thi công phần cứng
CHƯƠNG 2: SƠ LƯỢC VỀ ATMEGA16
Atmega16 là bộ vi điều khiển CMOS 8 bit tiêu thụ điện năng thấp dựa trênkiến trúc RISC (Reduced Intruction Set Computer) Vào ra Analog – digital và ngượclại Với công nghệ này cho phép các lệnh thực thi chỉ trong một chu kì xung nhịp, vìthế tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số 8 Mhz Vi điềukhiển này cho phép người thiết kế có thể tối ưu hoá chế độ độ tiêu thụ năng lượng màvẫn đảm bảo tốc độ xử lí
Sơ đồ khối
Trang 8Atmega16 có tập lệnh phong phú về số lượng với 32 thanh ghi làm việc đanăng Toàn bộ 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic Unit),cho phép truy cập 2 thanh ghi độc lập bằng một chu kì xung nhịp Kiến trúc đạt được
có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC (Complex Intruction SetComputer) thông thường
Khi sử dụng vi điều khiển Atmega16, có rất nhiều phần mềm được dùng để lậptrình bằng nhiều ngôn ngữ khác nhau đó là: Trình dịch Assembly như AVR studio củaAtmel, Trình dịch C như win AVR, CodeVisionAVR C, ICCAVR C - CMPPILER củaGNU… Trình dịch C đã được nhiều người dụng và đánh giá tương đối mạnh, dễ tiếpcận đối với những người bắt đầu tìm hiểu AVR, đó là trình dịch CodeVisionAVR C.Phần mềm này hỗ trợ nhiều ứng dụng và có nhiều hàm có sẵn nên việc lập trình tốthơn
1.1 ĐẶC TRƯNG
- Được chế tạo theo kiến trúc RISC, hiệu suất cao và điện năng tiêu thụ thấp.
Bộ lệnh gồm 131 lệnh, hầu hết đều thực thi chỉ trong một chu kì xung nhịp
Bộ nhân 2 chu kỳ
32x8 thanh ghi làm việc đa dụng
Trang 9Hoạt động tĩnh.
16MIPS với thông lượng 16 MHz
8KB Flash ROM lập trình được ngay trên hệ thống.+ Giao diện nối tiếp SPI enable lập trình ngay trên hệ thống.+ Enable 1000 lần ghi/xoá
Bộ EEPROM 512 byte Cho phép 100.000 ghi/xoá
16 K Byte bộ nhớ chương trình in-System Self-programmable Flash
Chu kỳ Write/Erase : 10,000 Flash/100,000 EEPROM
Độ bền dữ liệu 20 năm ở 85°C và 100 năm ở 25°C
Tốc độ làm việc: 8 MHz đối với Atmega16L, 16MHz đối với Atmega16 tối đa
Tốc độ xử lí lệnh đến 8 MIPS ở 8 MHz nghĩa là 8 triệu lệnh trên giây
Bộ định thời gian thực (RTC) với bộ dao động và chế độ đếm tách biệt
2 bộ Timer 8 bit và 1 bộ Timer 16 bit với chế độ so sánh và chia tần số tách biệt vàchế độ bắt mẫu
- 4 kênh điều chế độ rộng xung PWM
- Có đến 13 interrupt ngoài và trong
- Bộ so sánh Analog
- Bộ lập trình Watch dog timer
- 6 chế độ ngủ : Idle, ADC Noise Reduction, Power-save, Power-down, Standby
và Extended Standby
- Giao tiếp nối tiếp Master/Slave SPI
Trang 10a b Hình 1.1 a,b cấu trúc Atmega16
- VCC: Điện áp nguồn nuôi.
- GND: Nối mass.
- PortA (PA7…PA0): PortA nhận vào tín hiệu Analog và chuyển đổi qua tín hiệu
Digital Ngoài ra PortA có thể được tách ra làm vào ra 2 hướng 2 bit nếu bộ chuyểnđổi A/D không được sử dụng Khi các chân PA0 đến PA7 là các lối vào và được đặtxuống chế độ thấp từ bên ngoài, chúng sẽ là nguồn dòng nếu các điện trở nối lênnguồn dương được kích hoạt Các chân của Port A ở vào trạng thái có điện trở cao khitín hiệu Reset ở chế độ tích cực hoặc ngay cả khi không có tín hiệu xung đồng hồ.Port A cung cấp các đường địa chỉ/ dữ liệu vào/ ra hoạt động theo kiểu đa hợp kênh khidùng bộ nhớ SRAM ở bên ngoài
- PortB,D : tương tự như PortA.
- PortC (PC7…PC0): tương tự như PortA Nhưng nếu enable giao diện JTAG,
thì các chân PC5, PC3, PC2 sẽ hoạt động ngay cả khi Reset lại tín hiệu
- Reset: Lối vào đặt lại Bộ vi điều khiển sẽ được đặt lại khi chân này ở chế độ
thấp trong hơn 50ns, các xung ngắn hơn không tạo ra tín hiệu đặt lại
- XTAL1: Lối vào bộ khuếch đại đảo và lối vào mạch tạo xung nhịp bên trong.
- XTAL2: Lối ra bộ khuếch đại đảo XTAL1 và XTAL2 lần lượt là lối vào và lối
ra của một bộ khuếch đại đảo Bộ khuếch đại này được bố trí để làm bộ tạo dao độngtrên chip Một bộ tinh thể thạch anh hoặc một bộ cộng hưởng gốm có thể được sửdụng Để điều khiển bộ vi điều khiển từ một nguồn xung nhịp bên ngoài, chân XTAL2
để trống, còn chân XTAL1 được nối với bộ dao động bên ngoài
Trang 11- AREF: Là chân chuyển đổi tín hiệu analog cho bộ chuyển đổi A/D.
- AVCC : là chân nguồn cho PortA và cho bộ chuyển đổi A/D Nó có thể tự kết
nối với nguồn chính ngay cả khi ADC không được sử dụng
1.2 AVR CPU
Kiến trúc AVR nói chung, các chức năng chính của CPU đảm bảo sự thực thichính xác process CPU phải có khả năng truy xuất bộ nhớ, thực hiện tính toán, điềukhiển thiết bị ngoại vi và các kênh ngắt
Trong thứ tự thực hiện song song, AVR sử dụng kiến trúc Harvard với bộ nhớtách rời giữa hai luồng process và dữ liệu Các chỉ lệnh trong bộ nhớ process đượcthực hiện với những mức đơn pipeline Trong khi một lệnh dang thực thi, lênh tiếptheo sẽ được tìm nạp trước từ bộ nhớ process Khái niệm này enable các lệnh sẽ đượcthực hiện trong mọi chu kỳ xung Bộ nhớ process là hệ thống bộ nhớ Flash lập trình lạiđược Truy xuất nhanh thanh ghi File chứa 32*8 bit thanh ghi làm việc đa năng vớimột chu kỳ xung đơn truy xuất thời gian Điều này enable bộ tính toán ALU làm việcđơn chu kỳ
6 trong 32 thanh ghi có thể sử dụng như 3 địa chỉ gián tiếp thanh ghi con trỏcho không gian địa chỉ dữ liệu Nó cũng có thể được sử dụng như con trỏ của bộ nhớprocess Flash
Một lệnh AVR có 16 bit đơn định dạng word
Mỗi địa chỉ bộ nhớ process chứa 16 hoặc 32 lệnh
Bộ nhớ process Flash được chia ra làm 2 khu vực, khu vực khởi động process
và khu vực ứng dụng process Cả hai khu vực được thiết kế bảo vệ các bit ghi vàđọc/ghi
Trong khi các ngắt và process con được gọi, địa chỉ trả về của Counter process(PC) được lưu trữ trong Stack Stack được định phần trong dữ liệu tổng quát SRAM,
vì vậy kích thước STACK được hạn chế bởi kích thước SRAM tổng và cách sử dụngcủa nó Tất cả các process sử dụng phải khởi tạo giá trị đầu cho Stack Poiter trước khiprocess con hoặc ngắt được gọi Stack Poiter được đọc/ghi được sử dụng trong khônggian I/O Dữ liệu SRAM có thể dễ dàng được truy xuất qua 5 cách đánh địa chỉ khácnhau hộ trợ trong kiến trúc AVR Không gian bộ nhớ trong kiến trúc AVR là tất cảnhững bản đồ bộ nhớ phổ biến tuyến tính Một mô đun ngắt linh hoạt có những thanhghi điều khiển trong không gian I/O với một ngắt toàn cục enable ngắt trong thanh ghi
Trang 12trạng thái Tất cả các ngắt đều có vector ngắt riêng biệt trong bảng vector ngắt Địa chỉvector ngắt càng thấp quyền ưu tiên ngắt càng cao.
Không gian bộ nhớ I/O chứa 64 địa chỉ cho các chức năng ngoại vi CPU nhưthanh ghi điều khiển,SPI, và một số chức năng I/O khác
Hình 1.2: Lược đồ khối kiến trúc AVR MCU
Trang 131.2.1 ALU – Arithmetic Logic Unit
Thực thi cao AVR ALU hoạt động trong sự kết nối trực tiếp với tất cả 32 thanhghi hỗ trợ làm việc Hoạt động trong ALU được chia thành 3 chức năng chính : số học,logic và chức năng bit
1.2.2 STATUS REGISTER
Chứa thông tin về kết quả của các tính toán được thực thi gần nhất Chú ýStatus Register được thay đổi sau tất cả các phép tính toán trong ALU
- Bit 7-I : enable ngắt toàn cục Không enable người sử dụng tự ý xóa Chỉ bị xóa khi
có ngắt mới xuất hiện và được chỉ dẫn bởi RETI cho những ngắt kế tiếp Có thể đượcđặt hoặc được xóa bởi SEI và CLI
- Bit 6-T : bit lưu trữ Có thể chép từ BST sang BLD và ngược lại
- Bit 5-H : Cờ nhớ nửa H sử dụng để nhớ nửa hữu ích trong phép tính số BCD
-Bit 4-S : tín hiệu bit S = N ⊕ V
- Bit 3-D : 2 cờ tràn
- Bit 2-N : cờ phủ định
- Bit 1-Z : cờ zero
- Bit 0-C : cờ nhớ
1.2.3 Thanh ghi mục đích chung
Thanh ghi file được tối ưu hóa cho AVR tăng cường lập tập tin Trong mệnhlệnh để đạt được sự thực hiện đòi hỏi và tính tối ưu hóa những sơ đồ vào ra đây được
hỗ trợ :
● Một toán hạng ngõ ra 8 bit và một kết quả ngõ vào 8 bit
● Hai toán hạng ngõ ra 8 bit và một kết quả ngõ vào 8 bit
● Hai toán hạng ngõ ra 8 bit và một kết quả ngõ vào 16 bit
● Một toán hạng ngõ ra 16 bit và một kết quả ngõ vào 16 bit
Trang 14Hình 1.2.3: Các thanh ghi hỗ trợ làm việc AVR CPU
Thanh ghi Stack Poiter luôn trỏ đến đỉnh của ngăn xếp
Stack Poiter trỏ đến ngăn xếp dữ liệu SRAM lưu trữ những process con và những ngắtcục bộ Khoảng trống trong SRAM phải được định nghĩa bởi process trước bất kỳprocess con nào gọi nó thực thi hoặc ngắt nào được hoạt động Stack Poiter giảm đi 1khi dữ liệu được đẩy lên trên Stack với lệnh PUSH, và giảm đi 2 khi trả về địa chỉđược đẩy lên trên Stack với sự gọi process con hoặc ngắt được gọi Stack Poiter tănglên 1 khi dữ liệu được đưa ra khỏi Stack với lệnh POP, và tăng lên 2 khi dữ liệu đượcđưa ra khỏi Stack trả về từ process con RET hoặc trả về từ ngắt RETI
Stack Poiter AVR được bổ xung như 2 thanh ghi 8 bit trong không gian I/O Số lượng cácbít được sử dụng là sự thi hành phụ thuộc Chú ý không gian dữ liệu trong bổ xung của kiếntrúc AVR nhỏ nên chỉ sử dụng thanh ghi SPL, trong trường hợp này không có thanh ghi SPH
1.2.4 STACK POITER (con trỏ ngăn xếp )
Thanh ghi Stack Poiter luôn trỏ đến đỉnh của ngăn xếp
Stack Poiter trỏ đến ngăn xếp dữ liệu SRAM lưu trữ những process con và nhữngngắt cục bộ Khoảng trống trong SRAM phải được định nghĩa bởi process trước bất kỳprocess con nào gọi nó thực thi hoặc ngắt nào được hoạt động Stack Poiter giảm đi 1khi dữ liệu được đẩy lên trên Stack với lệnh PUSH, và giảm đi 2 khi trả về địa chỉđược đẩy lên trên Stack với sự gọi process con hoặc ngắt được gọi Stack Poiter tăng
Trang 15lên 1 khi dữ liệu được đưa ra khỏi Stack với lệnh POP, và tăng lên 2 khi dữ liệu đượcđưa ra khỏi Stack trả về từ process con RET hoặc trả về từ ngắt RETI.
Stack Poiter AVR được bổ xung như 2 thanh ghi 8 bit trong không gian I/O Sốlượng các bít được sử dụng là sự thi hành phụ thuộc Chú ý không gian dữ liệu trong
bổ xung của kiến trúc AVR nhỏ nên chỉ sử dụng thanh ghi SPL, trong trường hợp nàykhông có thanh ghi SPH
1.2.5 Reset và xử lý ngắt
AVR cung cấp vài nguồn ngắt khác nhau Các ngắt này có vector Reset riêng biệtvới vector process Tất cả các ngắt ghi ở mức logic 1 cùng với ngăt toàn cục Trongthanh ghi trạng thái các bit enable ngắt phụ thuộc giá trị Counter process Các ngắt cóthể tự động bị disable khi khởi động khóa bit BLB02 hoặc BLB12
Khi một ngắt xuất hiện, ngắt toàn cục enable I-bit xóa và tất cả các ngắt còn lại bịdisable Sử dụng phần mềm có thể ghi logic 1 cho I-bit enable ngắt Tất cả các ngắtđược enable có thể ngắt thường trình I-bit tự động được lập khi một lệnh ngắt trở lạithực thi từ RETI
Có hai kiểu ngắt cơ bản
● Kiểu 1 : hoạt động bởi 1 sự kiện lập bởi cờ ngắt Với mỗi ngắt Counter process là mộtvector tới vector ngắt hiện tại trong thứ tự thực thi, phần cứng sẽ xóa cờ ngắt Các cờngắt có thể bị xóa bởi ghi logic 1 tới vị trí bit cờ để xóa Nếu điều kiện một ngắt xuấthiện trong khi enable ngắt bit bị xóa thì cờ ngắt sẽ được lập và nhớ đến khi ngăt enablehoặc cờ ngắt bị xóa bởi phần mềm Tương tự, điều kiện để các ngắt xuất hiện trong khibit GIE(Global Interrupt Enable) bị xóa thì cờ nhớ sẽ lập và nhớ đến khi bit GIE đượclập
● Kiểu 2 : các ngắt sẽ được hoạt động nếu điều kiện để ngắt có mặt Những ngắt nàykhông cần có cờ ngắt Nếu điều kiện ngắt không xuất hiện trước khi ngắt enable ngắt
sẽ không được hoạt động
Khi AVR thoát khỏi 1 ngắt, nó sẽ luôn trả về process chính và thực thi hơn mộtlệnh trước khi tạm dừng ngắt Chú ý thanh ghi trạng thái không tự động lưu trữ khi vào
Trang 16một thủ tục ngắt và cũng không tự phục hồi khi thoát ra khỏi thủ tục Khi sử dụng lệnhCLI để disable các ngắt thì ngắt sẽ không trực tiếp bị disable Không có ngắt đượcthực thi sau lệnh CLI ngay cả khi xuất hiện đồng thời với lệnh.
1.2.6 Ngắt đáp ứng lại thời gian
Ngắt thực thi đáp ứng cho tất cả các ngắt cho phép của AVR là 4 chu kỳ xung tốithiểu Sau 4 chu kỳ xung vector process thêm địa chỉ cho ngắt đang hoạt động trongprocess con thực thi Trong khoảng thời gian này bộ nhớ process sẽ đẩy lên trên Stack.Vector ngắt nhảy đến ngắt trong process con và lệnh ngắt này sẽ đưa ra 3 chu kỳ xung.Nếu một ngắt xuất hiện trong khi thực thi nhiều chu trình lệnh, thì lệnh sẽ được trước
Trang 17khi ngắt được thực hiện Nếu một ngắt xuất hiện khi MCU ở chế độ ngủ, ngắt thực thiyêu cầu thời gian tăng bởi 4 chu kỳ xung
Trở về từ ngắt process con đưa rad 4 chu kỳ xung bộ đếm chương trình sẽ được đưa ra
từ Stack, Stack Poiter tăng thêm 2 và I-bit trong SREG được lập
1.3 BỘ NHỚ AVR ATMEGA16
Phần này mô tả các bộ nhớ khác nhau trong Atmega16 Kiến trúc AVR có 2 bộnhớ chính : bộ nhớ dữ liệu và bộ nhớ process Bổ xung thêm vào đặc tính AVR một bộnhớ EEPROM lưu trữ dữ liệu
1.3.1 Hệ thống bộ nhớ lập trình lại flash
Atmega16 chứa 16 K bytes On-Chip trong hệ thống bộ nhớ lập trình lại Flash đểlưu trữ process Cho AVR 16 hoặc 32 bit thì bộ nhớ flash là 8K*16 Bộ nhớ Flash cókhả năng ghi/ xóa 1000 lần cho mỗi vòng Atmega16 có Counter 13 bit cùng với 8Kđịa chỉ process
Hình 1.3.1 : Sơ đồ bộ nhớ process
1.3.2 Bộ nhớ dữ liệu SRAM
Có tới 1120 địa chỉ ô nhớ cho bộ nhớ nhập xuất, thanh ghi file và SRAM nội
96 đường địa chỉ đầu tiên dành riêng cho thanh ghi file và bộ nhớ vào ra và còn 1024đường địa chỉ còn lại cho SRAM nội
Trang 191.4 Các vector ngắt và các cổng i/o
1.4.1 Các vector ngắt của atmega16
Bảng 1.4.1: bảng vector ngắt của Atmega16Ngắt ngoài được khởi tạo bởi các trạng thái INT0, INT1, INT2 Quan sát thấy rằngkhi được enable, các ngắt sẽ được khởi tạo nếu các trạng thái INT0, INT1, INT2 đượccấu hình là ngõ ra Chức năng này thường được cung cấp bởi các phần mềm sinh mã
tự động Các ngắt ngoài này được khởi tạo là kéo lên hay kéo xuống hoặc là mức thấp(INT2 chỉ giới hạn 1 mức ngắt) Điều này được thiết lập bởi thanh ghi điều khiển đặcbiệt MCUCR và thanh ghi điều khiển trạng thái MCUCSR Khi được enable và đượccấu hình bởi các trạng thái bắt đầu (chỉ dành cho INT0, INT1), các ngắt sẽ có hiệu lựcvới các chân được giữ mức thấp Chú ý rằng để có sự nhận biết kéo lên hay kéo xuốngcủa ngắt cần có sự hiện diện I/O clock Trạng thái mức thấp của INT0, INT1 và mứckích cạnh của INT2 đều là không đồng bộ Tóm lại các ngắt này dùng để đánh thứccác chế độ đang ở trạng thái sleep hơn là để chạy không Xung I/O được chia đôi trongtất cả các trạng thái sleep và chạy không
Thanh ghi điều khiển vector ngắt GICR
Trang 20● Bit 1 – IVSEL: Interrupt Vector Select
Khi bit IVSEL được xóa về 0 thì những vector ngắt được đặt tại điểm bắt đầu của bộnhớ Flash Khi được đưa lên 1 thì những vector này sẽ được đưa về điểm bắt đầu củađoạn khởi động bộ nhớ Flash
● Bit 0 – IVCE: Interrupt Vector Change Enable
Bit IVCE phải ghi bởi logic 1 enable sự thay đổi IVSEL bit.IVCE được xóa bởi phần cứng 4chu trình sau nó được ghi hoặc bởi IVSEL được ghi Thiết lập bit IVCE sẽ ngăn chặn ngắt
1.4.2 CÁC PORT I/O
Tất cả các Port của AVR đều có các hàm Read- Modify- Write khi sử dụng cácPort I/O thông thường Điều này có nghĩa trực tiếp đến một Port có thể thay đổi khônglường trước, thay đổi trực tiếp của bất kỳ chân nào với những chỉ dẫn SBI và CBI.Cùng ứng dụng khi thay đổi điều khiển (nếu định cấu hình tương tự đầu ra) hay enable/ disable sự tăng giá trị trên những điện trở (nếu định cấu hình tương tự như đầu vào).Trình điều khiển chân đủ mạnh để điều khiển hiển thị led trực tiếp Tất cả các chân cóthể được chọn lựa riêng lẻ tăng điện trở lên với chế độ điện áp không đổi cho điện trở
3 địa chỉ bộ nhớ I/O được cấp phát cho mỗi Port, mỗi từng cái cho bộ thanh ghi dữ liệuPortx, thanh ghi điều khiển dữ liệu DDRx và chân Port vào PINx Những chân ngõnhập được định vị I/O chỉ đọc , trong khi thanh ghi dữ liệu và thanh ghi điều khiển dữliệu là đọc/ ghi
Trang 21CHƯƠNG 3: GIỚI THIỆU VỀ CodeVisionAVR
CodeVisionAVR là một trình biên dịch ngang,môi trường phát triển tích hợpsẵn và tự động sinh mã chương trình thiết kế cho họ vi điều khiển AVR
Chương trình này chạy trên các hệ điều hành có 32 bit ví dụ như Windows95,NT,98,2000 và XP
Trình biên dịch ngang C thực thi gần với tất cả các thành phần của ngôn ngữANSI C, mà được cho phép với kiến trúc AVR, với một vài chức năng được thêm vào
để thích ứng đặc biệt với kiến trúc của AVR và hệ thống phần mềm nhúng cần
Các file COFF có thể là nguồn debugged, với các biến xem, với cộng cụ debugAtmel AVR Studio
Môi trường tích hợp sẵn (IDE) đã xây dựng trong phần mềm AVR Chip System Programmer để có thể khởi tạo quá trình truyền tự động chương trình đến viđiều khiển sau khi bên dịch thành công chuyển sang mã assembly Phần mềm In-System Programmer được thiết kế để làm việc liên kết với các board phát triểnAtmelSTK500, Kanda Systems STK200+/300, Dontronics DT600, Vogel Elektronik VTEC-ISP, Futurlec JRAVR và MicroTronics’ATCPU/Mega2000, AVR910
In-Ngoài thư viện C chuẩn, trình biên dịch CodeVisionAVR còn hỗ trợ thư viện cho
:
● Modul Alphanumeric LCD
● Philips I2C bus
● Natrional Semiconductor LM75 Temperature Sensor
● Philips PCF8563,PCF8583,Dallas Semiconductor Ds1302 và DS 1307Real Time Clocks
● Dallas Semiconductor 1 Wire protocol
● Dallas Semiconductor DS 1820/DS 18S20/DS 18B20 TemperatureSensors
● Dallas Semiconductor DS 1621 Thermometer/Thermostat
● Dallas Semiconductor DS 2430 và DS 2433 EEPROMs
● SPI
● Power management
Trang 22● Delays.
● Gray code conversion
CodeVisionAVR cũng chứa đụng quá trình sinh mã tự động ,cho phép bạn viếtmột chương trình nhanh chóng ,tất cả các code này thực thi cho các chức năng dướiđây:
● Mở rộng bộ nhớ truy cập
● Sự nhận ra nguồn khởi động lại chip
● Khởi tạo các giá trị ban đầu cho Port nhập/xuất
● Khởi tạo các ngắt ngoài
● Khởi tạo Timer/Counters
● Khởi tạo Watchdog Timer
● Khởi tạo UART và các ngắt chạy trên bộ đệm truyền thông nối tiếp
● Khởi tạo Analog Comparator
● Khởi tạo ADC
● Khởi tạo giao diện SPI
● Khởi tạo I2C bus,cảm biến nhiệt độ LM75, nhiệt kế /điều khiển nhiệtDS1621 và PCF8563,PCF8583, đồng hồ đo thời gian thực DS1302,DS1307
● Khởi tạo đường truyền 1 dây và cảm biến nhiệt độ DS 1820/DS18S20/DS 1820
Khởi tạo modul LCD
3.1 Môi trường tích hợp phát triển CodeVisionAVR
3.1.1 Làm việc với Files
Sử dụng CodeVisionAVR IDE bạn có thể xem và hiệu chỉnh 1 file sử dụng và cung cấp bởi trình biên dịch C hoặc assembler.
❖ Tạo ra một File mới
- Bạn có thể tạo ra một file mới sử dụng File|New trên thanh lệnh hoặc nhấn nút
Create new file trên thanh Toolbar
Trang 23- Hộp thoại xuất hiện,trong đó bạn phải chọn File Type|Source và nhấn nút Ok:
- Một cửa sổ soạn thảo mới xuất hiện để mà tạo ra một files
- Một file mới có tên là untitled.c.Bạn có thể lưu file này dưới tên mới sử dụng trình đơn File|Save As
❖ Mở 1 file đã tồn tại
- Bạn có thể mở 1 file đã tồn tại sử dụng trình đơn File|Open hoặc nhấn Open file trên thanh Toolbar Cửa sổ hộp thoại Open xuất hiện :
- Bạn phải chọn tên và các loại file mà bạn muốn mở
- Phải nhấn nút Open bạn sẽ mở file trong cửa sổ trình đơn mới
❖ Tiến trình Files
- CodeVisionAVR IDE lưu trữ lịch sử quá trình các file đã mở
Trang 24- Chứa được 8 files gần đây nhất mà sử dụng mà được mở lại sử dụng trình đơn
File|Reopen.
❖ Soạn thảo file
- Để mở lại hoặc tạo ra file mới có thể soạn thảo trong trình soạn thảo của
window sử dụng các phím Tab,Arrows,Backspace và Delete.
- Nhấn phím Home di chuyển con trỏ đến nơi bắt đầu của dòng văn bản hiện
hành
- Nhấn phím End di chuyển con trỏ đến nơi kết thúc của dòng văn bản hiện hành.
- Nhấn tổ hợp phím Ctrl+Home di chuyển con trỏ đến nơi bắt đầu của file
- Nhấn tổ hợp phím Ctrl+End di chuyển con trỏ đến nơi kết thúc của file.
- Một phần văn bản có thể được chọn bởi kéo chuột
- Bạn có thể copy 1 đoạn văn bản đến bảng ghi tạm bằng cách sử dụng trình đơn
Edit|Copy bằng cách nhấn tổ hợp phím Ctrl+C hoặc nhấn nút Copy trên thanh
Toolbar
- Bằng cách sử dụng trình đơn Edit|Cut hoặc nhấn tổ hợp phím Ctrl+X hoặc nhấn nút Cut trên thanh Toolbar ,bạn có thể sao chép 1 đoạn văn bản đến bảng
ghi tạm và sau đó xóa nó khỏi file
- Đoạn văn bản trước khi lưu vào bảng ghi tạm có thể đặt nơi mà con trỏ hiện
hành trỏ đến bằng cách sử dụng trình đơn Edit|Paste hoặc nhấn tổ hợp phím Ctrl+V hoặc nhấn nút Paste trên thanh Toolbar.
- Đoạn văn bản chọn có thể bị xóa bằng cách sử dụng trình đơn Edit|Delete hoặc nhấn tổ hợp phím Ctrl+Delete.
- Trình đơn Edit|Print Selection cho phép in 1 đoạn văn bản được chọn.
- Nhấn tổ hợp phím Ctrl+Y để xóa 1 dòng văn bản ở nơi mà dấu caret ở vị trí
hiện hành
- Chọn vị trí dòng văn bản thụt lề ,tương ứng không thụt lề ,sử dụng Edit|Indent Block,tương ứng Edit|Unindent Block trình đơn ,hoặc nhấn tổ hợp phím Ctrl+I,tương ứng Ctrl+U.
Trang 25- Bạn có thể tìm vị trí của đoạn văn bản trong file soạn thảo bằng cách sử dụng
trình đơn Edit|Find hoặc nhấn tổ hợp phím Ctrl+F hoặc nhấn nút Find trên
thanh Toolbar
- Bạn có thể thay thế vị trí của đoạn văn bản trong file soạn thảo bằng cách sử
dụng trình đơn Edit|Replace hoặc nhấn tổ hợp phím Ctrl+R hoặc nhấn nút Replace trên thanh Toolbar.
- Thay đổi trong trình soạn thảo để có thể hủy tác vụ ,tương ứng là không
hủy ,bằng cách sử dụng Edit|Undo,tương ứng với không hủy là Edit| Redo,trong trình đơn hoặc nhấn tổ hợp phím Ctrl+Z,tương ứng với không là Shift+Ctrl+Z,hoặc nhấn nút Undo ,tương ứng Redo tren thanh Toolbar.
- Bạn có thể nhảy đến 1 dòng có số đặc biệt nào đó trong file soạn thảo,bằng cách
sử dụng trình đơn Edit|GotoLine hoặc nhấn tổ hợp phím Ctrl+G.
- Làm dấu có thể thêm hoặc loại bỏ 1 dòng nào đó khi con trỏ ở vị trí ,bằng cách
sử dụng trình đơn Edit|Toggle Bookmark hoặc nhấn tổ hợp các phím Shift+Ctrl+0…9.
- Trình đơn Edit|Jump to Bookmark hoặc tổ hợp phím Ctrl+0…9 sẽ đưa con
trỏ đến nơi bắt đầu của nơi phù hợp đã làm dấu trong dòng văn bản
Sửa lại tên 1 file
- Các file soạn thảo hiện hành có thể lưu trữ dưới tên mới bằng cách sử dụngtrình đơn
File|Save As.Cửa sổ hộp thoại Save sẽ mở
Trang 26❖ In ra 1 file
- Bạn có thể in ra 1 file hiện hành sử dụng trình đơn File|Print hoặc nhấn nút Print trên thanh Toolbar.
- Nội dung của file sẽ được in đến máy in mặc định của Window
- Các lề trang sử dụng có thể set sử dụng trình đơn File|Page Setup,mở trong hộp thoại Page Setup:
Trang 27- Bấm Yes sẽ lưu sự thay đổi và đóng file.
- Bấm No sẽ lưu file mà không lưu sự thay đổi
- Bấm Cancel sẽ làm mất quá trình đóng file
- Tất cả các file hiện hành có thể được đóng khi sử dụng trình đơn File|Close All
❖ Sử dụng Navigator
Cửa sổ Navigator cho phép dễ dàng hiển thị và mở các file Source Bằng cách nhấn
chuột vào tên file tương thích là lớn hoặc mở
❖ Sử dụng Code TemplatesCửa sổ Code Templates cho phép dễ dàng chèn các đoạncode mẫu vào trong chương trình soạn thảo bằng cách kích chuột phải vào đoạncode mẫu bất kì và chọn Copy to the Edit Window
Trang 283.1.2 Làm việc với Project
❖ Tạo ra 1 Project mới
- Bạn có thể tạo ra file source sử dụng trình đơn File|New hoặc nhấn nút tạo file mới Create trên thanh Toolbar.
- Một hộp hội thoại xuất hiện ,ở đây bạn phải chọn File Type|Source và nhấn nút
OK Một cửa sổ trình đơn mới xuất hiện để tạo một file mới:
- Một file mới có tên là untitled.c.Bạn có thể lưu file dưới tên mới sử dụng trình đơn File|Save As.
❖ Mở một file đã tồn tại
- Bạn có mở các file tồn tại bằng cách sử dụng trình đơn File|Open hoặc nhấn nút Open file trên thanh toolbar Cửa sổ hộp thoại Open xuất hiện:
Trang 29- Bạn phải chọn tên và các loại file bạn hy vọng sẽ mở.
❖ Cấu hình Project
Thêm và bỏ file từ Project
- Để thêm và bỏ bớt file từ Project bạn phải sử dụng trình đơn Project| Configure.
- Cấu hình nhãn cửa sổ hộp thoại Project sẽ mở Bạn phải chọn nhãn Files.
- Bằng cách nhấn nút Add bạn có thể thêm các file nguồn đến project
- File đầu tiên này sẽ là file chính được đưa vào Maked
Trang 30- Những file tiếp theo được thêm vào sẽ tự động kết nối đến file chính củaprokect trong Make.
- Nhiều file được thêm vào bằng cách giữ phím Ctrl khi chọn Add File từ hộp
thoại Project
- Khi project được mở bằng cách nhấn nút Open ,tất cả các file Project sẽ được
mở trong trình soạn thảo
- Bằng cách chọn 1 file ,và sau đó nhấn nút Remove ,bạn sẽ loại bỏ file này ra khỏi Project
- Các file project kết hợp này có thể được thay đổi bằng cách nhấn trên file và di chuyển nó lên,tương ứng xuống ,sử dụng nút Move Up ,tương ứng Move Down
- Thay đổi có thể lưu ,tương ứng với hủy ,sử dụng nút OK, tương ứng với nút Cancel
Khi tạo một project với nhiều file phải theo luật như sau :
● Chỉ có file “.C” mới được thêm vào danh sách các File của project
● Ở đây không cần phải #include các file có đuôi C từ danh sách các file khi
đó các file này sẽ tự động liên kết các loại dữ liệu đã được định nghĩa và cáchàm khởi tạo phải được đặt ở trong file H, điều này sẽ được #include –edkhi những file C cần
● Các biến toàn cục khởi tạo phải được đặt ở trong file.C ở nơi cần
Trang 31● Ở đây không cần phải khởi tạo biến toàn cục ,biến tĩnh,trong file H bởi vìnếu các file này #include -ed nhiều hơn 1 lần ,trình biên dịch sẽ phát sinhlỗi về các biến được khởi tạo lại
❖ Khởi động sự chọn lựa trong C Compiler
- Bạn có thể chọn vi điều khiển AVR bằng cách sử dụng hộp kết hợp Chip
- Bạn cũng phải chỉ định tần số CPU Clock trong MHz,khi cần bởi hàm Delay,hàm 1 Wire Protocol and hàm Maxim/Dallas Semiconductor DS1820/DS18S20Temperature Sensors
- Các mẫu bộ nhớ đáp ứng có thể được chọn bởi cách sử dụng hộp danh sáchMemory Model
- Chương trình dịch có tối ưu cho kích cỡ nhỏ nhất ,tương ứng với tốc độ thực thi
lớn nhất,sử dụng Optimize for|Size, tương ứng Optimize for|Speed.
- Số lượng code tối ưu có thể được chỉ định bằng cách sử dụng Optimization Level.
- Mức tối ưu Maximal có thể làm khó khăn khi debug với AVR Studio.
- Cho thiết bị mà cho phép chương trình tự động có thể chọn Program Type:
·Application hoặc ·Boot Loader.