Bối cảnh và vấn đề nghiên cứu

Đồ án môn học "Dự Án Vi Điều Khiển: Khóa Học Lập Trình C Tại Trường Đại" (tên tiếng Anh: APPLIED MICROCONTROLLER PROJECT, chủ đề: C PROGRAMING AND AVR) được thực hiện trong khuôn khổ học phần Vi điều khiển ứng dụng (Mã học phần: AMIC320133E_23_1_01FIE) tại Khoa Đào tạo Quốc tế (Faculty of International Education - FIE), Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (Ho Chi Minh City University of Technology and Education - HCMUTE).

Trong chương trình đào tạo kỹ thuật điện tử, tự động hóa và công nghệ thông tin, vi điều khiển đóng vai trò là nền tảng cốt lõi cho các hệ thống nhúng và thiết bị điều khiển thông minh. Việc làm chủ ngôn ngữ lập trình C kết hợp với việc hiểu sâu cấu trúc phần cứng của họ vi điều khiển AVR là yêu cầu thiết yếu đối với sinh viên kỹ thuật. Nhóm tác giả thực hiện đồ án nhằm mục đích hệ thống hóa kiến thức lập trình vi điều khiển, chuyển hóa lý thuyết thành các bài toán điều khiển phần cứng cụ thể, từ các khối xuất nhập tín hiệu cơ bản đến các khối ngoại vi nâng cao.

Mục tiêu và nhiệm vụ nghiên cứu cụ thể của đồ án bao gồm:

  1. Nghiên cứu cấu trúc phần cứng, sơ đồ chân và các thanh ghi chức năng của dòng vi điều khiển AVR 8-bit, trọng tâm là vi điều khiển Atmega32.
  2. Thiết kế và hiện thực hóa các giải thuật lập trình bằng ngôn ngữ C để điều khiển các ngoại vi xuất/nhập số cơ bản (GPIO) bao gồm: LED đơn (LEDdon), hiệu ứng dịch LED (LEDdich), hệ thống mô phỏng đèn giao thông (Traffic Light) và nút nhấn điều khiển (Button Led).
  3. Triển khai các module hiển thị dữ liệu kỹ thuật số gồm: hiển thị số trên LED 7 đoạn (LED7doan), kết hợp nút bấm thay đổi giá trị LED 7 đoạn (Button LED7doan), và hiển thị văn bản tĩnh/động trên màn hình tinh thể lỏng (LCD, LCDchuchay).
  4. Khảo sát và lập trình xử lý các sự kiện bất đồng bộ qua ngắt ngoài (External Interrupt) và chuyển đổi tín hiệu tương tự sang số (ADC) từ biến trở tuyến tính (ADCPOT_LIN).
  5. Kiểm thử, đối sánh và chuẩn hóa các bài toán thực hành trên phần cứng vi điều khiển thực tế.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Vi điều khiển AVR Atmega32, ngôn ngữ lập trình C nhúng, các mạch giao tiếp ngoại vi (LED đơn, LED 7 đoạn, nút nhấn, LCD ký tự, cảm biến analog qua chiết áp, mạch ngắt ngoài).
  • Phạm vi không gian: Khoa Đào tạo Quốc tế, Trường Đại học Sư phạm Kỹ thuật TP.HCM, Thành phố Thủ Đức.
  • Phạm vi thời gian: Học kỳ 1, Năm học 2023 - 2024 (hoàn thành và báo cáo vào tháng 12 năm 2023).
  • Nhân sự thực hiện: Nhóm sinh viên 08 (Lớp: AMIC320133E_23_1_01FIE) gồm 05 thành viên: Đoàn Trương Hữu Phước (MSSV: 21145602), Ngô Hải Nam (MSSV: 21145030), Nguyễn Trung Việt (MSSV: 21145061), Lê Hoàng Tiến (Trưởng nhóm - MSSV: 21145617) và Đặng Xuân Quang (MSSV: 21145604), dưới sự hướng dẫn của giảng viên Nguyễn Trung Hiếu.

Cơ sở lý thuyết và phương pháp

Cơ sở lý thuyết của đồ án dựa trên kiến trúc phần cứng của dòng vi điều khiển AVR do Atmel (nay thuộc Microchip Technology) sản xuất, cụ thể là vi điều khiển 8-bit Atmega32. Đây là dòng vi điều khiển kiến trúc RISC hiệu năng cao với tập lệnh thu gọn, tích hợp sẵn bộ nhớ Flash, SRAM, EEPROM và nhiều khối ngoại vi tích hợp trên chip.

Về mặt phần mềm, đồ án sử dụng ngôn ngữ lập trình C nhúng (Embedded C) tuân thủ các quy chuẩn cấu hình thanh ghi trực tiếp, bao gồm:

  • Thanh ghi cấu hình hướng dữ liệu (DDRx): Xác định chế độ đầu vào (Input) hoặc đầu ra (Output) cho từng chân vi điều khiển.
  • Thanh ghi xuất dữ liệu (PORTx): Điều khiển trạng thái logic mức cao (High) hoặc mức thấp (Low), kích hoạt điện trở kéo lên nội (Pull-up).
  • Thanh ghi đọc dữ liệu (PINx): Đọc trạng thái logic thực tế tại các chân cổng.
  • Thanh ghi điều khiển ngắt (GICR, MCUCR, MCUCSR): Thiết lập cấu hình chế độ kích hoạt ngắt ngoài theo sườn hoặc mức điện áp.
  • Thanh ghi điều khiển bộ chuyển đổi tương tự - số (ADMUX, ADCSRA): Thiết lập kênh điện áp tham chiếu, chọn kênh analog đầu vào và hệ số chia xung nhịp cho khối ADC.

Phương pháp nghiên cứu được áp dụng trong đồ án:

  • Phương pháp thiết kế hệ thống kỹ thuật: Xây dựng sơ đồ nguyên lý ghép nối mạch phần cứng giữa vi điều khiển Atmega32 và các linh kiện ngoại vi tương ứng.
  • Phương pháp thực nghiệm và kiểm thử từng phần (Unit/Module Testing): Xây dựng các bài toán lập trình độc lập (Examples) từ mức độ cơ bản đến phức tạp; nạp mã nguồn vào chip vi điều khiển, quan sát trạng thái đáp ứng thực tế trên kit thí nghiệm để hiệu chỉnh giải thuật.
  • Phương pháp phân tích và xử lý tín hiệu: Xây dựng thuật toán chống rung phím bấm (debouncing), giải thuật quét LED 7 đoạn, thuật toán truyền lệnh/dữ liệu chuẩn 4-bit hoặc 8-bit cho LCD và thuật toán tính toán tuyến tính hóa giá trị đo được từ khối ADC.
  • Nguồn dữ liệu: Tài liệu kỹ thuật chính thức (Datasheet) của vi điều khiển Atmega32, tài liệu bài giảng môn học Applied Microcontroller Project và các hướng dẫn kỹ thuật của giảng viên hướng dẫn.

Thiết kế và triển khai

Hệ thống điều khiển trong đồ án được thiết kế xoay quanh vi điều khiển Atmega32, kết nối với nhiều khối giao tiếp ngoại vi để phục vụ cho các mục tiêu thực hành cụ thể. Cấu trúc phần cứng và chức năng phần mềm được phân chia thành các module rõ ràng.

Tên bài toán / Module Ngoại vi ghép nối Chức năng kỹ thuật và giải thuật điều khiển
Example 1: LEDdon LED đơn kết nối qua điện trở hạn dòng Xuất tín hiệu nhị phân điều khiển trạng thái bật/tắt (ON/OFF) độc lập và đồng thời trên các cổng I/O.
Example 2: LEDdich Dãy LED đơn kết nối với 1 cổng (Port) Ứng dụng các toán tử dịch bit (<<, >>) và định thời trễ để tạo chuỗi hiệu ứng ánh sáng di chuyển tuần tự.
Example 3: Traffic Light Cụm LED màu (Đỏ, Vàng, Xanh) Lập trình máy trạng thái (FSM) mô phỏng chu kỳ đèn tín hiệu giao thông ngã tư với khoảng thời gian trễ xác định.
Example 4: LED7doan Màn hình LED 7 đoạn (Anode chung / Cathode chung) Thuật toán giải mã số nhị phân sang mã 7 đoạn để hiển thị các ký tự số từ 0 đến 9.
Example 5: Button Led Nút nhấn cơ học và LED đơn Đọc trạng thái tín hiệu đầu vào từ cổng số (Digital Input), xử lý trạng thái đóng/ngắt để chuyển đổi trạng thái LED.
Example 6: Button LED7doan Nút nhấn và LED 7 đoạn Lập trình đếm tiến/lùi hoặc thay đổi giá trị số trên LED 7 đoạn thông qua thao tác bấm phím.
Example 7: LCD & LCDchuchay Màn hình LCD ký tự (16x2 / 20x4) Khởi tạo giao tiếp LCD, gửi mã lệnh điều khiển, xuất chuỗi ký tự cố định và thuật toán dịch vị trí con trỏ tạo hiệu ứng chữ chạy liên tục.
Example 8: External Interupt Nút nhấn/Xung kích ngoại vi Cấu hình vector ngắt ngoài (INT0/INT1/INT2) nhằm thực thi các tác vụ khẩn cấp độc lập với vòng lặp chính.
Example 10: ADCPOT_LIN Biến trở tuyến tính (Potentiometer) Khởi động bộ chuyển đổi ADC 10-bit, đọc giá trị điện áp tương tự biến thiên và chuyển đổi sang dải giá trị số tương ứng.

Nội dung chính theo từng chương

PART 1: Tổng quan và Thiết lập Môi trường Lập trình

Nội dung phần đầu tiên của tài liệu (từ trang 3 đến trang 22) tập trung vào các nội dung nền tảng phục vụ cho môn học:

  • Trình bày tổng quan về cấu trúc tập lệnh và nguyên lý hoạt động của vi điều khiển AVR.
  • Hướng dẫn cấu hình môi trường phát triển tích hợp (IDE), cài đặt trình biên dịch ngôn ngữ C và quy trình nạp chương trình xuống phần cứng.
  • Định nghĩa các kiểu dữ liệu, toán tử logic, toán tử thao tác bit trên thanh ghi và các cấu trúc điều khiển trong lập trình C nhúng.

PART 2: Thiết kế và Lập trình Ứng dụng trên Atmega32

Phần thứ hai là trọng tâm kỹ thuật của đồ án (từ trang 23 đến trang 44), bao gồm chuỗi 10 ví dụ thực hành triển khai trực tiếp trên vi điều khiển Atmega32:

  • Example 1 (LEDdon): Thiết lập cấu hình thanh ghi xuất/nhập để điều khiển nhấp nháy LED đơn với chu kỳ định trước.
  • Example 2 (LEDdich): Xây dựng các hàm dịch bit luân phiên, tạo ra các chuỗi hiệu ứng quét sáng trên thanh LED.
  • Example 3 (Traffic Light): Triển khai hệ thống đèn tín hiệu giao thông hoàn chỉnh với việc phân chia thời gian hiển thị giữa các pha đèn Đỏ, Vàng và Xanh.
  • Example 4 (LED7doan): Xây dựng mảng hằng số lưu trữ bảng mã 7 đoạn và thực hiện thuật toán giải mã hiển thị số thực tế.
  • Example 5 (Button Led): Xử lý tín hiệu đầu vào từ nút nhấn, tích hợp kỹ thuật chống rung cơ học (debounce) bằng phần mềm để điều khiển LED.
  • Example 6 (Button LED7doan): Ghép nối nút bấm với LED 7 đoạn, hiện thực hóa hệ thống đếm số tương tác trực tiếp theo thời gian thực.
  • Example 7 (LCD & LCDchuchay): Lập trình khởi tạo màn hình LCD ký tự, hiển thị thông tin tĩnh và thuật toán dịch vòng chuỗi ký tự (LCDchuchay) trên màn hình.
  • Example 8 (External Interupt): Khởi tạo ngắt ngoài, viết chương trình con phục vụ ngắt (ISR) để bắt các tín hiệu tác động từ bên ngoài ngay lập tức.
  • Example 10 (ADCPOT_LIN): Cấu hình kênh ADC, đọc điện áp đầu vào từ biến trở xoay và xử lý dữ liệu đo đạc tuyến tính.

PART 3: Mở rộng và Tối ưu hóa Ứng dụng

Nội dung phần thứ ba (từ trang 45 đến trang 50) mở rộng và tái kiểm tra các module điều khiển:

  • Tái cấu trúc và tối ưu hóa mã nguồn cho các bài toán: Example 1: LEDdon, Example 2: LEDdich, Example 3: Traffic Light, Example 4: LED7doan và Example 5: Button Led.
  • Đánh giá tính ổn định của giải thuật khi kết hợp nhiều tác vụ điều khiển trên cùng một hệ vi điều khiển Atmega32.

Kết quả và đóng góp

Kết quả chính

  • Triển khai thành công toàn bộ các module phần mềm bằng ngôn ngữ C điều khiển phần cứng vi điều khiển Atmega32 theo đúng yêu cầu học phần.
  • Hiện thực hóa đầy đủ các khối chức năng từ giao tiếp I/O cơ bản (LED đơn, nút nhấn), giao tiếp hiển thị (LED 7 đoạn, LCD có hiệu ứng chữ chạy), đến các khối chức năng nâng cao (ngắt ngoài và bộ chuyển đổi ADC 10-bit).
  • Ghi nhận mức độ tham gia và hoàn thành công việc của các thành viên trong nhóm nghiên cứu:
STT Họ và tên sinh viên Mã số sinh viên (MSSV) Tỷ lệ hoàn thành nhiệm vụ Vai trò trong nhóm
1 Đoàn Trương Hữu Phước 21145602 100% Thành viên
2 Ngô Hải Nam 21145030 100% Thành viên
3 Nguyễn Trung Việt 21145061 100% Thành viên
4 Lê Hoàng Tiến 21145617 100% Trưởng nhóm (Leader)
5 Đặng Xuân Quang 21145604 100% Thành viên

Đóng góp của đồ án

  • Chuẩn hóa quy trình lập trình vi điều khiển AVR bằng ngôn ngữ C thông qua hệ thống ví dụ bài bản, bám sát khung chương trình đào tạo của Khoa Đào tạo Quốc tế (FIE - HCMUTE).
  • Cung cấp tài liệu kỹ thuật có cấu trúc rõ ràng, tổng hợp mã nguồn mẫu và phương pháp giao tiếp với các linh kiện ngoại vi tiêu chuẩn trong ngành kỹ thuật nhúng.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

  • Nội dung đồ án chỉ tập trung khảo sát trên dòng vi điều khiển 8-bit Atmega32 thuộc họ AVR, chưa mở rộng đối sánh trên các vi điều khiển 32-bit (như ARM Cortex-M, ESP32).
  • Các ví dụ thực hành mới chỉ dừng lại ở việc giao tiếp ngoại vi rời rạc (từng bài toán độc lập), chưa tích hợp thành một hệ thống nhúng điều khiển liên tục quy mô lớn.
  • Báo cáo chưa đề cập đến việc giao tiếp qua các chuẩn truyền thông nối tiếp phức tạp (như UART, SPI, I2C) hoặc kết nối mạng không dây trong danh mục các bài thực hành đã thực hiện.

Hướng nghiên cứu tiếp

  • Tích hợp các giao thức truyền thông công nghiệp và cảm biến số môi trường vào vi điều khiển Atmega32.
  • Xây dựng mô hình hệ thống nhúng đa nhiệm ứng dụng hệ điều hành thời gian thực (RTOS).
  • Mở rộng ứng dụng kết nối IoT (Internet of Things) để giám sát và điều khiển thiết bị từ xa qua giao diện web/ứng dụng di động.

Giá trị tham khảo

Tài liệu đồ án này có giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Kỹ thuật Điện - Điện tử, Kỹ thuật Máy tính, Cơ điện tử và Tự động hóa: Đặc biệt là sinh viên theo học chương trình đào tạo quốc tế hoặc các học phần liên quan đến vi điều khiển (Applied Microcontroller Project, Microcontroller Systems).
  • Người học bắt đầu tiếp cận lập trình C nhúng: Tài liệu cung cấp trình tự logic từ xuất nhập chân GPIO, giải mã hiển thị, xử lý ngắt cho đến đọc giá trị cảm biến qua ADC.
  • Các phần đáng tham khảo: Toàn bộ nội dung của PART 2 (các ví dụ từ Example 1 đến Example 10) là tài liệu mẫu trực quan cho việc viết mã nguồn và thiết kế thuật toán điều khiển ngoại vi trên dòng chip Atmega32.

Câu hỏi thường gặp

1. Đồ án này được thực hiện tại đơn vị nào và do ai chịu trách nhiệm hướng dẫn?

Đồ án do Nhóm 08 sinh viên thuộc Khoa Đào tạo Quốc tế (Faculty of International Education - FIE), Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) thực hiện trong Học kỳ 1 năm học 2023 - 2024, dưới sự hướng dẫn chuyên môn của giảng viên Nguyễn Trung Hiếu.

2. Vi điều khiển trọng tâm được sử dụng trong đồ án là loại nào?

Vi điều khiển chính được sử dụng để thiết kế phần cứng và viết mã nguồn lập trình trong đồ án là vi điều khiển 8-bit Atmega32 thuộc họ vi điều khiển AVR.

3. Danh sách thành viên nhóm và mức độ đóng góp của từng người được ghi nhận như thế nào?

Nhóm gồm 05 thành viên: Lê Hoàng Tiến (Trưởng nhóm, MSSV: 21145617), Đoàn Trương Hữu Phước (MSSV: 21145602), Ngô Hải Nam (MSSV: 21145030), Nguyễn Trung Việt (MSSV: 21145061) và Đặng Xuân Quang (MSSV: 21145604). Tất cả các thành viên đều được ghi nhận mức độ tham gia và hoàn thành là 100%.

4. Trong phần thực hành trên Atmega32 (PART 2), nhóm đã triển khai những bài toán ngoại vi cụ thể nào?

PART 2 bao gồm các bài toán: điều khiển LED đơn (Example 1: LEDdon), dịch LED (Example 2: LEDdich), mô phỏng đèn giao thông (Example 3: Traffic Light), hiển thị LED 7 đoạn (Example 4: LED7doan), đọc nút nhấn điều khiển LED (Example 5: Button Led), nút nhấn điều khiển LED 7 đoạn (Example 6: Button LED7doan), giao tiếp màn hình LCD và chữ chạy (Example 7: LCD, LCDchuchay), xử lý ngắt ngoài (Example 8: External Interupt) và đọc biến trở qua ADC (Example 10: ADCPOT_LIN).

5. Module "ADCPOT_LIN" trong đồ án có chức năng gì?

Module ADCPOT_LIN đảm nhiệm chức năng đọc tín hiệu điện áp tương tự biến thiên tuyến tính từ một chiết áp/biến trở (Potentiometer) thông qua bộ chuyển đổi Analog-to-Digital Converter (ADC) tích hợp của vi điều khiển Atmega32, từ đó xử lý và chuyển đổi sang dạng dữ liệu số.


Kết luận

Đồ án "Dự Án Vi Điều Khiển: Khóa Học Lập Trình C Tại Trường Đại" (Mã môn: AMIC320133E_23_1_01FIE) của Nhóm 08 đã hoàn thành đầy đủ các mục tiêu thiết kế và lập trình ứng dụng trên nền tảng vi điều khiển AVR Atmega32. Báo cáo đã hệ thống hóa từ nền tảng lý thuyết ngôn ngữ C nhúng đến việc triển khai thực nghiệm 10 bài toán kỹ thuật cụ thể bao gồm xuất nhập số, hiển thị LED 7 đoạn, màn hình LCD, ngắt ngoài và biến đổi tương tự - số ADC. Đây là tài liệu học tập và thực hành mang tính ứng dụng kỹ thuật cao, đáp ứng chuẩn mực của chương trình đào tạo kỹ sư tại Trường Đại học Sư phạm Kỹ thuật TP.HCM.