Đồ án thiết kế thi công đồng hồ thời gian thực dùng PIC16F877A và DS1307

Tổng hợp các đề tài đồ án vi điều khiển tiêu biểu, hướng dẫn thiết kế mạch, lập trình hệ thống nhúng chi tiết và mã nguồn mẫu ứng dụng thực tế.

Chuyên ngành

Tự động hóa

Người đăng

Ẩn danh

Thể loại

Đồ án môn học

2022

57
0
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tổng quan về đồ án vi điều khiển

Đồ án vi điều khiển là dự án học thuật quan trọng trong chương trình đào tạo kỹ thuật điện-điện tử, yêu cầu sinh viên ứng dụng kiến thức lý thuyết vào thiết kế và thi công sản phẩm thực tế. Nội dung đồ án tập trung vào việc xây dựng hệ thống điều khiển bằng vi điều khiển, thường kết hợp các linh kiện phần cứng và phần mềm để tạo ra sản phẩm hoạt động ổn định. Đồ án vi điều khiển giúp sinh viên rèn luyện kỹ năng lập trình nhúng, phân tích mạch điện tử và giải quyết vấn đề kỹ thuật. Tại các trường cao đẳng kỹ thuật, đề tài phổ biến bao gồm hệ thống hiển thị, đo lường thời gian hoặc điều khiển tự động.

1.1. Vai trò của vi điều khiển trong đồ án

Vi điều khiển đóng vai trò trung tâm trong đồ án, xử lý tín hiệu đầu vào và điều khiển hoạt động của toàn bộ hệ thống. Nó kết nối với các linh kiện ngoại vi như cảm biến, bộ hiển thị LED 7 đoạn hay IC thời gian thực để thực hiện chức năng mong muốn. Ví dụ, vi điều khiển PIC16F877A có thể đọc dữ liệu từ IC DS1307, xử lý thông tin thời gian và hiển thị lên màn hình. Khả năng lập trình linh hoạt cho phép điều chỉnh chức năng theo yêu cầu đề tài. Ngoài ra, vi điều khiển còn hỗ trợ giao tiếp chuẩn I2C, UART giúp mở rộng khả năng kết nối với nhiều thiết bị khác.

1.2. Các bước triển khai đồ án vi điều khiển

Quy trình triển khai đồ án vi điều khiển gồm bốn giai đoạn chính: nghiên cứu lý thuyết, thiết kế mạch điện tử, lập trình điều khiển và kiểm thử sản phẩm. Bước đầu tiên là tìm hiểu đặc điểm kỹ thuật của linh kiện như vi điều khiển PIC16F877A, IC 74HC595 hay DS1307. Tiếp theo, sinh viên vẽ sơ đồ khối và sơ đồ nguyên lý mạch điện. Sau đó, lập trình điều khiển bằng ngôn ngữ C (trong trường hợp này là CCS C) và nạp vào vi điều khiển. Cuối cùng, tiến hành kiểm tra chức năng và hiệu chỉnh nếu cần.

II. Phân tích vấn đề trong đồ án vi điều khiển

Vấn đề chính trong đồ án vi điều khiển thường xoay quanh việc đảm bảo độ chính xác, ổn định và khả năng mở rộng của hệ thống. Đối với đề tài đồng hồ đo thời gian thực, thách thức nằm ở việc đồng bộ dữ liệu từ IC thời gian thực DS1307 với vi điều khiển PIC16F877A thông qua giao tiếp I2C. Ngoài ra, hiển thị thời gian trên LED 7 đoạn yêu cầu quản lý xung clock và dữ liệu chính xác để tránh lỗi hiển thị. Việc lựa chọn linh kiện phù hợp cũng là yếu tố quan trọng, vì điện áp hoạt động, dòng tiêu thụ và tốc độ xử lý ảnh hưởng trực tiếp đến hiệu suất hệ thống.

2.1. Khó khăn trong giao tiếp I2C

Giao tiếp I2C là chuẩn phổ biến nhưng đòi hỏi xử lý chính xác tín hiệu clock (SCL) và dữ liệu (SDA). Trong đồ án, việc cấu hình chân SDA và SCL của vi điều khiển PIC16F877A cần tuân thủ thời gian setup và hold để tránh xung đột dữ liệu. Sử dụng thư viện chuẩn I2C có thể đơn giản hóa quá trình lập trình, nhưng sinh viên cần hiểu rõ nguyên lý hoạt động để khắc phục lỗi. Một sai sót phổ biến là quên kéo chân SDA/SCL lên nguồn bằng điện trở pull-up, dẫn đến tín hiệu không ổn định.

2.2. Xử lý ngắt và hiển thị thời gian

Chức năng hiển thị thời gian trên LED 7 đoạn đòi hỏi quản lý ngắt timer để tạo xung quét ổn định. Trong đồ án, ngắt Timer1 được cấu hình để tạo chu kỳ 100ms, giúp cập nhật dữ liệu thời gian liên tục. Sử dụng IC 74HC595 làm bộ dịch nối tiếp-song song giúp giảm số chân vi điều khiển sử dụng. Tuy nhiên, việc đồng bộ dữ liệu giữa các thanh ghi LED 7 đoạn và dữ liệu thời gian từ DS1307 cần được xử lý cẩn thận để tránh hiển thị nhấp nháy hoặc sai lệch.

III. Giải pháp thiết kế và phương pháp triển khai

Giải pháp cho đồ án vi điều khiển tập trung vào việc tối ưu hóa phần cứng và phần mềm để đạt hiệu suất cao nhất. Đối với phần cứng, lựa chọn vi điều khiển PIC16F877A phù hợp nhờ khả năng xử lý nhanh và tích hợp nhiều ngoại vi. Sử dụng IC 74HC595 để mở rộng chân xuất dữ liệu cho LED 7 đoạn giúp tiết kiệm tài nguyên vi điều khiển. Phần mềm được lập trình bằng CCS C, tận dụng thư viện sẵn có cho DS1307 và I2C. Phương pháp triển khai bao gồm lập trình module hóa, chia nhỏ chức năng như đọc thời gian, xử lý ngắt và hiển thị để dễ bảo trì.

3.1. Thiết kế mạch điện tử

Mạch điện tử được thiết kế dựa trên sơ đồ khối gồm bốn khối chính: xử lý trung tâm (PIC16F877A), hiển thị (LED 7 đoạn + 74HC595), thời gian thực (DS1307) và điều khiển (nút nhấn). Vi điều khiển kết nối với DS1307 qua chân SDA/SCL, trong khi 74HC595 nhận dữ liệu nối tiếp từ vi điều khiển và xuất song song ra LED. Cấu hình chân vi điều khiển theo chế độ ngắt cho phép xử lý song song các tác vụ. Điện trở pull-up 4.7kΩ được sử dụng cho chân SDA/SCL để đảm bảo tín hiệu ổn định.

3.2. Lập trình điều khiển

Chương trình điều khiển được viết dưới dạng module, bao gồm hàm đọc thời gian từ DS1307, hàm xử lý ngắt timer, hàm hiển thị LED và hàm xử lý nút nhấn. Sử dụng ngắt Timer1 để tạo chu kỳ quét LED 100ms, đảm bảo hiển thị không nhấp nháy. Dữ liệu thời gian được lưu trữ trong bộ nhớ EEPROM của vi điều khiển để giữ nguyên khi mất nguồn. Chương trình chính vòng lặp vô hạn kiểm tra trạng thái nút nhấn và cập nhật hiển thị theo chế độ hiển thị (giờ, phút, giây).

IV. Kết luận và ứng dụng thực tế

Đồ án vi điều khiển thành công khi hệ thống hoạt động ổn định, đáp ứng yêu cầu đề ra về độ chính xác và tính thẩm mỹ. Kết quả đạt được là một đồng hồ đo thời gian thực hiển thị rõ ràng trên LED 7 đoạn, có thể điều chỉnh thời gian bằng nút nhấn. Ứng dụng thực tế của sản phẩm bao gồm làm đồng hồ hiển thị trong phòng thí nghiệm, hệ thống giám sát thời gian trong sản xuất hoặc thiết bị đo thời gian cho các thí nghiệm khoa học. Đồ án cũng rèn luyện kỹ năng làm việc nhóm, giải quyết vấn đề và tư duy hệ thống cho sinh viên.

4.1. Đánh giá kết quả đạt được

Sản phẩm hoàn thiện có khả năng hiển thị thời gian theo định dạng 24 giờ, hỗ trợ chế độ hiển thị giờ, phút và giây. Độ chính xác của thời gian phụ thuộc vào độ ổn định của thạch anh 32.768kHz kết nối với DS1307. Quá trình thử nghiệm cho thấy hệ thống hoạt động ổn định trong khoảng thời gian dài mà không xảy ra lỗi hiển thị hay mất dữ liệu. Khả năng tùy chỉnh chế độ hiển thị thông qua nút nhấn cũng đáp ứng yêu cầu đề tài.

4.2. Hướng phát triển trong tương lai

Có thể nâng cấp sản phẩm bằng cách thêm module giao tiếp không dây (Bluetooth, WiFi) để điều khiển từ xa hoặc hiển thị thời gian trên màn hình LCD. Thêm cảm biến nhiệt độ để hiển thị nhiệt độ môi trường cùng thời gian cũng là một cải tiến hữu ích. Ngoài ra, tối ưu hóa mã nguồn bằng cách sử dụng ngôn ngữ lập trình cấp cao hơn như Python để quản lý hệ thống từ xa. Việc thương mại hóa sản phẩm cũng có tiềm năng khi kết hợp với các ứng dụng IoT.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

04/06/2026
Đồ án vi điều khiển

Trích đoạn nội dung tài liệu

Chương 1: Giới thiệu đề tài 1 + Chương 2: Cơ sở lý thuyết + Chương 3: Thiết kế sơ đồ khối và sơ đồ nguyên lý + Chương 4: Chương trình điều khiển + Chương 5: Thi công mô hình + Chương 6: Kết luận và hướng phát triển 1.4 Kế hoạch thực hiện Bảng 1.1: Kế hoạch thực hiện đề tài Thời gian Công việc 5/10/2022 Tìm hiểu đề tài 10/10/2022 Mua linh kiện 12/10/2022 Thiết kế mạch 15/10/2022 In mạch 20/10/2022 Thiết kế vỏ hộp 1/11/2022 Viết chương trình 20/11/2022 Thử nghiệm và sửa lỗi 25/11/2022 Viết báo cáo 15/12/2022 Làm PowerPoint 20/12/2022 Hoàn Thành 2 Chương 2: Cơ Sở Lý Thuyết 2.1Tổng quan về vi điều kiển Pic16F877A Vi điều khiển PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là“máy tính thông minh khả trình” do hãng Genenral Instrument chế tạo. Hiện nay trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR, ARM,.1 Sơ đồ khối vi điều khiển PIC16F877A Hình 2.1: Sơ đồ khối vi điều khiển Các khối bên trong vi điều khiển bao gồm: • Có khối thanh ghi định cấu hình cho vi điều khiển. • Có khối bộ nhớ chương trình có nhiều dung lượng cho 5 loại khác nhau. • Có khối bộ nhớ ngăn xếp 8 cấp (8 level stack).

• Có khối bộ nhớ Ram cùng với thanh ghi FSR để tính toán tạo địa chỉ cho 2 cách truy xuất gián tiếp và trực tiếp. • Có thanh ghi lệnh (Instruction register) dùng để lưu mã lệnh nhận về từ bộ nhớ chương trình.3 Một vài thông số của PIC16F877A 3 -Tốc độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns. -Bộ nhớ chương trình 8Kx14 bit, Bộ nhớ flash với khả năng ghi xóa được 100. -Bộ nhớ dữ liệu 368x8 byte RAM -Bộ nhớ dữ liệu EEPROM với dung lượng 256x8 byte, với khả năng ghi xóa được 1.000 lần và có thể lưu trữ trên 40 năm.

-Số PORT I/O là 5 với 33 chân I/O -Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit. -Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep. -Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postscaler. -Chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.

-Chuẩn giao tiếp nối tiếp USART. -Khả năng tự nạp chương trình với sự điều khiển của phần mềm. -Chức năng bảo mật mã chương trình.c -Có thể hoạt động với nhiều dạng Oscillator khác nhau.2 Sơ đồ chân vi điều kiển Pic16F877A Hình 2.2: Vi điều khiển PIC16F877A 4 2.4 Các cổng nhập xuất của PIC16F877A • Port B: PORTB (RPB) gồm 8 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISB.

Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình. Các thanh ghi SFR liên quan đến PORTB bao gồm: -PORTB (địa chỉ 06h,106h): chứa giá trị các chân trong PORTB -TRISB (địa chỉ 86h,186h): điều khiển xuất nhập -OPTION_REG (địa chỉ 81h,181h): điều khiển ngắt ngoại vi và bộ Timer0.

• Port C: PORTC (RPC) gồm 8 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART. Các thanh ghi điều khiển liên quan đến PORTC: -PORTC (địa chỉ 07h): chứa giá trị các chân trong PORTC.

-TRISC (địa chỉ 87h): điều khiển xuất nhập. • Port D: PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port. Các thanh ghi liên quan đến PORTD bao gồm: -Thanh ghi PORTD: chứa giá trị các chân trong PORTD -Thanh ghi TRISD: điều khiển xuất nhập.

• Port E: PORTE (RPE) gồm 3 chân I/O. Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân của PORTE có ngõ vào analog. Bên cạnh đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP.

Các thanh ghi liên quan đến PORTE bao gồm: 5 -PORTE: chứa giá trị các chân trong PORTE. -TRISE: điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP. -ADCON1: thanh ghi điều khiển khối ADC 2.5 Các hàm I/O • OUTPUT_LOW(PIN), OUTPUT_HIGH(PIN), OUTPUT_BIT(PIN, VALUE): -Output_low (chân), output_high(chân): dùng thiết lập mức 0 (low) hay mức 1 (high) cho chân chip, chân chỉ vị trí chân. -Output_bit(chân,value): cũng dùng để thiết lập mức 0/1 cho chân chip.

Với chân là tên chân, value là giá trị 0/1. Thường dùng hàm này khi giá trị 0/1 của chân theo một biến nào đó. • OUTPUT_X(VALUE)/ INPUT_X(VALUE): -Output_x(value): dùng để xuất giá trị 1 byte ra port. x là tên port, value là giá trị.

Ví dụ: output_b(0xff); //xuất ra port b giá trị 0xff - input_x(): dùng để đọc giá trị 1 byte của port. x là tên port. Ví dụ: Int8 value; value=input_b(); • SET_TRIS_X(VALUE): -Định nghĩa các chân của một port là ngỏ vào hay ngỏ ra. x là tên port, value là giá trị 8 bit.

Với 0 là ngỏ ra, 1 là ngỏ vào. Ví dụ: Thiết lập chân B0, B1 là ngỏ vào, các chân còn lại là ngỏ ra: set_tris_b(0b00000011); Chú ý: set_tris_b(0); // cả port b là output set_tris_b(1); // b0 là input, các chân còn lại là output 2.6 Ngắt TIMER 6 Để sự kiện ngắt Timer xảy ra phải thỏa mãn đồng thời các điều kiện sau: Xảy ra sự kiện tràn khi cho phép Timer đếm xung. Cho phép ngắt Timer bằng phần mềm. Các hàm liên quan đến ngắt: Bảng 2.1: Các hàm ngắt TÊN HÀM CÚ PHÁP CHỨC NĂNG #INT_xxx #INT_xxx Với XXX: Khai báo hàm ngắt #INT_RTCC: khai báo của các Timer tương ngắt hàm ngắt của ứng.

Chú ý các hàm Timer 0 con phục vụ ngắt phải #INT_TIMER1: khai được đặt liền sau khai báo hàm ngắt củaTimer báo này. 1 #INT_TIMER2: khai báo hàm ngắt của Timer 2 enable_interrupts() enable_interrupts(level) Hàm này được dùng Với level: để Khởi tạo ngắt tại INT_RTCC mức quy định bởi INT_TIMER1 level. Một thủ tục ngắt INT_TIMER2 (interrupt procedure) GLOBAL cần được định nghĩa. Mức toàn cục (GLOBAL level) không khởi tạo bất kỳ ngắt chỉ định nào mà chỉ khởi tạo các biến ngắt đươc đã khởi tạo trước đó disable_interrupts() disable_interrupts(level) Hàm này được dùng để tắt 2.2 Chuẩn giao tiếp I2C I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”.

Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa master với nhiều slave trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu. 7 I2C chỉ sử dụng 2 dây để truyền dữ liệu: • SDA (Serial Data): dây truyền nhận dữ liệu giữa master và slave • SCL (Serial Clock): dây mang tín hiệu clock Hình 2.3: Sơ đồ kết nối I2C tổng quát Đây là một loại giao thức giao tiếp nối tiếp đồng bộ. Có nghĩa là các bit dữ liệu được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi một tín hiệu đồng hồ được điều khiển bởi master Hoạt động của I2C: dữ liệu được truyền theo gói tin. Gói tin được chia thành các khung dữ liệu như sau: • Start condition: đường SDA chuyển từ mức điện áp cao xuống thấp trước khi đường SCL chuyển cao xuống thấp • Stop condition: đường SDA chuyển từ mức điện áp thấp lên cao trước khi đường SCL chuyển thấp lên cao • Data frame: 8 bits dữ liệu cần truyền nhận giữa master và slave • Address frame: khung chứa địa chỉ của slave cần kết nối gồm 7 hoặc 10 bit nhị phân • Read/ Write bit: bit xác nhận quá trình là master gửi dữ liệu hay nhận dữ liệu từ slave 8 • ACK/NACK (acknowledge/no-acknowlegde): Nếu khung địa chỉ hoặc khung dữ liệu được nhận(gửi) thành công thì 1 bit ACK được trả lại đến nơi gửi từ thiết bị nhận 2.3 I2C với PIC16F877A Khối MSSP: Khối MSSP ở chế độ truyền nhận I2C có thể cấu hình cho cả 7b bit và 10 bit địa chỉ.

Để chọn bất kỳ chế độ I2C nào trên PIC16F887, các chân SCL và SDA phải được cấu hình là open-drain.4: Sơ đồ khối I2C master mode Sơ đồ khối của I2C slave mode với PIC: 9 Hình 2.5: Sơ đồ khối của I2C slave mode với PIC 2.4 Tổng quan về IC 74HC595 2.1 Giới thiệu về IC 74HC595 74HC595 là IC ghi dịch 8 bits kết hợp chốt dữ liệu, đầu vào nối tiếp, đầu ra song song. Thường dùng trong các mạch điều khiển LED 7 đoạn, quét LED ma trận,… để tiết kiệm số chân Vđk tối đa (chỉ dùng 3 chân). Có thể mở rộng số ngõ ra của vđk bao nhiêu tùy thích bằng việc mắc nối tiếp đầu vào dữ liệu các IC với nhau.2 Sơ dồ chân của IC 74HC595 Bảng 2.2: Thông số chân IC 74HC595 TÊN CHỨC NĂNG VCC Nguồn 5V GND Nguồn 0V DS Ngõ vào dữ liệu nối tiếp SH_CP Xung dịch dữ liệu ST_CP Xung xuất dữ liệu ra ngõ ra OE Cho phép ngõ ra, tích cực mức thấp. Mức 0 là cho phép ngõ ra, mức 1 là không cho phép ngõ ra.

MR Chân Reset. Khi chân này ở mức 0 thì dữ liệu sẽ bị xóa.Q7 Ngõ ra dữ liệu song song Q7′ Ngõ ra dữ liệu nối tiếp. Khi dùng nhiều 74595 mắc nối tiếp nhau thì chân này đưa vào đầu vào (DS) của con tiếp theo khi đã dịch đủ 8 bit Chú thích: DS: Data Shift SH_CP: SHift Clock Pulse ST_CP: STorage Clock Pulse OE: Output Enable MR: Master Reset 2.3 Nguyên lý hoạt động 11 Ta đặt dữ liệu vào chân DS, và tạo một xung SHCP thì dữ liệu tại chân DS sẽ được dịch vào thanh ghi 8-STAGE SHIFT REGISTER. Lần lượt làm như trên 8 lần (dịch bit cao trước), thì ta được 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER.

Sau đó ta tạo một xung STCP thì 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER sẽ được sao chép sang thanh ghi 8-BIT STORAGE REGISTER. Lúc này nếu chân OE ở mức thấp thì ngõ ra sẽ bằng với giá trị thanh ghi 8-BIT STORAGE REGISTER, còn nếu chân OE ở mức cao thì ngõ ra ở trạng thái tổng trở cao. Chú ý : Khi dịch dữ liệu vào thanh ghi 8-STAGE SHIFT REGISTER, và chưa tạo xung STCP thì thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái. Khi chân MR ở mức 0 thì dữ liệu trên thanh ghi 8-STAGE SHIFT REGISTER sẽ bị xóa, còn thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái.

➢ Để mở rộng nhiều hơn 8 ngõ ra ta dùng nhiều IC 74HC595 như sau: 12 Hình 2.7: Mở rộng IC 74HC595 Nối song song các chân SHCP và STCP.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ