Đồng hồ đếm ngược kỹ thuật số sử dụng vi điều khiển PIC
Trong bài viết này, tác giả Mithun đã phát triển một bộ đếm ngược từ 0 - 99 phút sử dụng vi điều khiển PIC 16F628A. Điều này là một bộ đếm ngược số kỹ thuật số lý tưởng cho sinh viên kỹ thuật và cao đẳng cho các yêu cầu dự án của họ. Chúng tôi đã cung cấp sơ đồ mạch đầy đủ của bộ đếm ngược số kỹ thuật số cùng với mã nguồn đầy đủ. Ngoài ra, hình ảnh của bảng mạch breadboard cũng được tải lên.
Mỗi vi điều khiển đều có một đơn vị đếm thời gian bên trong. Một bộ đếm thời gian không gì khác ngoài một thiết bị đếm thời gian được sản xuất bên trong đơn vị vi điều khiển. Một loạt các ứng dụng thực tế đòi hỏi một bộ đếm thời gian hoạt động. Ví dụ, chúng ta cần bật một động cơ ON trong 5 phút và sau đó tắt nó OFF như là một phần của một dự án cụ thể; làm thế nào chúng ta sẽ làm điều đó? Một bộ đếm thời gian bên trong một đơn vị vi điều khiển giúp chúng ta triển khai điều này hoàn hảo. Một bộ đếm thời gian có thể được sử dụng để đếm chính xác 5 phút và các bit được ĐẶT tại giới hạn 5 phút có thể được sử dụng để lập trình vi điều khiển để tắt OFF một số thiết bị.
Tôi hy vọng bạn đã hiểu cơ bản về đơn vị đếm thời gian và ứng dụng thực tế của nó. Chúng tôi sẽ thực hiện dự án này bằng cách sử dụng một màn hình LCD, vi điều khiển PIC 16F628A và một tinh thể ngoài 4 MHz để cung cấp clock cần thiết. Chúng tôi sẽ viết mã bằng micro C.
Trong mọi dự án liên quan đến một màn hình LCD, bước đầu tiên là khởi tạo mô-đun LCD. Chúng tôi đã viết các bài viết chi tiết về giao tiếp LCD với MCU trước đó. Bạn có thể tìm hiểu thêm về Giao tiếp một LCD với 8051 và Giao tiếp mô-đun LCD với vi điều khiển AVR trong những bài viết này. Nếu bạn muốn tìm hiểu thêm về màn hình LCD ký tự chi tiết, hướng dẫn này về Màn hình LCD ký tự
Bây giờ chúng ta cần cấu hình rơle và công tắc. Đoạn mã tương tự được đưa ra dưới đây.
Dưới đây, 'sbit' đại diện cho việc đặt bit. Bạn cũng có thể thực hiện cùng một cách khác bằng cách sử dụng lệnh "#define". Dòng này có nghĩa là chân RA3 sẽ được biết đến là chân Relay/RB0 sẽ được biết đến là SS_Select vv.
Mặc dù tên dự án "bộ đếm ngược số kỹ thuật số" nghe có vẻ ngớ ngẩn, nhưng hoạt động của nó không đơn giản như vậy. Chúng tôi đã cung cấp dưới đây một sơ đồ mạch Proteus để giải thích dự án một cách hoàn hảo.
Phân tích sơ đồ mạch, bạn có thể thấy ba nút. Một nút để chức năng Bắt đầu/Dừng và hai nút khác để đếm Đơn vị & Chục. Chúng tôi sẽ cấu hình mô-đun LCD của mình với các thông báo hiển thị tương ứng với cấu hình nút.
Dưới đây là các thông báo mà chúng tôi sẽ hiển thị trên màn hình LCD của chúng tôi. Để điều khiển hệ thống, chúng ta cần một số biến khác nữa. Các biến này được khai báo trong đoạn mã sau đây.
Bây giờ chúng ta hãy hiểu cơ chế đếm. Mạch được kết nối sao cho người dùng sẽ phải chọn giới hạn của việc đếm ban đầu. Nếu người dùng chỉ muốn đếm từ 1 đến 9 phút, thì anh ta chỉ cần nhấn nút Đơn vị. Nếu anh ta muốn đếm từ 1 đến 99 phút, thì anh ta cần nhấn nút Chục cùng với nút Đơn vị. Khi anh ta đã đặt giới hạn, anh ta cần nhấn nút Bắt đầu/Dừng để bắt đầu bộ đếm thời gian (đó là một công tắc nhấn và cùng một công tắc được sử dụng để dừng bộ đếm thời gian).
Ghi chú: Vì hoạt động của bộ đếm thời gian phụ thuộc vào giá trị được chọn bởi người dùng (công tắc đơn vị và chục), chúng ta phải kiểm tra một số điều kiện lỗi có thể xảy ra trước khi bắt đầu bộ đếm thời gian. Giả sử một trường hợp trong đó người dùng quên chọn công tắc đơn vị hoặc chục và nhấn nút bắt đầu/dừng trực tiếp; điều gì sẽ xảy ra trong tình huống này? Đây là một điều kiện lỗi dự kiến mà cần được xử lý bên trong phần mềm. Một cách thông thường để xử lý tình huống này là bắt đầu bộ đếm thời gian chỉ khi giá trị giới hạn lớn hơn không. Đoạn mã dưới đây xử lý điều kiện này.
Tôi hy vọng bạn đã hiểu đoạn mã rõ ràng. Bộ đếm thời gian sẽ chỉ bắt đầu khi giá trị giới hạn được cung cấp lớn hơn không. Điều kiện này được kiểm tra mỗi khi nút SS_select (nút Bắt đầu/Dừng) được nhấn.
Cách hoạt động của hai nút này rất đơn giản. Mỗi lần nhấn vào nút 'Đơn vị' sẽ tăng giá trị biến đơn vị lên 1; khi vượt quá 9, giá trị của nó sẽ được đặt lại. Tương tự, nút 'Chục' sẽ tăng lên theo đơn vị của 10. Hàm Display_Digits() là một phụ trợ để hiển thị các số trên màn hình LCD. Bạn có thể xem đoạn mã của hàm Display_Digits() dưới đây.
Các chữ số được hiển thị ở dòng 2, cột 11 của màn hình LCD. Điều này được thực hiện bởi dòng mã: Lcd_Out(2,11,digit);
Nếu bạn đã chú ý đến một hàm có tên là start_timer(time); đó là một phụ trợ để điều khiển thời gian. Vậy hãy xem hàm đó.
“void start_timer(unsigned short MinVal)
{
unsigned short temp1, temp2;
Relay = 1;
ON_OFF = 1;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,Message2);
Lcd_Out(2,1,Message5);
OPTION_REG = 0x80 ;
INTCON = 0x90;
for (i=0; i
{
temp1 = (MinVal-i)%10 ;
temp2 = (MinVal-i)/10 ;
Lcd_Chr(2, 12, temp2+48);
Lcd_Chr(2, 13, temp1+48);
j=1;
do
{
Delay_ms(1000);
j++;
} while(((j<=60) && (Clear ==0)));
if (Clear)
{
Relay = 0;
Delay_ms(500);
Lcd_Out(1,1,Message3);
INTCON = 0x00;
goto stop;
}
}
stop:
Relay = 0;
ON_OFF = 0;
unit = 0;
ten = 0;
clear = 1;
}
void interrupt(void)
{
if (INTCON.INTF == 1) // Check if INTF flag is set
{
Clear = 1;
INTCON.INTF = 0; // Clear interrupt flag before exiting ISR
}
}”
Hàm con này thực hiện tính toán thời gian cơ bản cần thiết trong việc tạo bộ đếm thời gian. Bạn có thể dễ dàng hiểu hàm con này nếu biết thêm về các thanh ghi OPTION_REG & INTCON.
Các hình ảnh dưới đây là các bản chụp màn hình được lấy từ tài liệu kỹ thuật của PIC16F628A. Hãy lướt qua để có ý tưởng chi tiết về các thanh ghi liên quan.
Trong chương trình của chúng ta, OPTION_REG = 0x80; có nghĩa là: 0b1000 0000; bit 7 là 1, và các bit khác là 0. Và thanh ghi INTCON là:
Trong chương trình của chúng ta, INTCON = 0x90; và khi bộ đếm vượt quá giới hạn đã đặt thì INTCON trở thành 0x00. Điều này có nghĩa là chúng tôi bắt đầu ngắt khi bộ đếm bắt đầu chạy và khi nó vượt quá giá trị đã đặt, chúng tôi tắt tất cả các ngắt.
Chúng tôi sử dụng relay để bật khi thời gian được đặt và khi người dùng nhấn nút Bắt đầu/Dừng. Cùng một relay đóng cắt sẽ được tắt khi bộ đếm thời gian đạt hoặc vượt quá giá trị đã đặt.
Dưới đây là một bộ thiết bị cứng của dự án này.
Mã Nguồn
Chúng tôi đã cung cấp mã nguồn đầy đủ cho dự án bộ đếm ngược số kỹ thuật số này ở đây. Bạn có thể tải mã nguồn bằng cách sử dụng liên kết được cung cấp dưới đây.
Hotline: 0979 466 469