1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồng hồ kỹ thuật số hiển thị lên LCD

26 453 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 884,03 KB

Nội dung

Đồng hồ kỹ thuật số hiển thị lên LCD sử dụng PIC 16F877A.Bài báo cáo trình bày mạch đồng hồ hiển thị thời gian thông qua việc sử dụng ngôn ngữ lập trình C trên PIC C Compiler và những kiến thức cơ bản về thiết kế hệ thống nhúng. Trước hết, bài báo cáo sẽ trình bày về những đặc tính cơ bản của sản phẩm. Nhìn chung, mạch được tạo thành từ các thành phần linh kiện khá phổ biến trong việc thiết kế hệ thống nhúng như vi xử lý PIC16F877A, màn hình LCD, nút nhấn cùng với các linh kiện cơ bản như điện trở, tụ điện…

Trang 1

Mục Lục

Trang 2

Lời mở đầu

Ngày nay, khoa học công nghệ và kỹ thuật đang đóng một vai trò quan trọng trong đời sốngcon người Bên cạnh đó, thời gian luôn trở thành một tài sản quý giá mà bất kì ai cũng mongmuốn được tận dụng một cách tối đa Tuy nhiên, việc quản lý thời gian một cách hiệu quả vẫn làmột trong những vấn đề nan giải cần được giải quyết một cách triệt để và đây là một đề tài mànhóm luôn muốn tìm cách giải quyết Kết hợp với kiến thức thiết kế và lập trình hệ thống nhúng,nhóm đã quyết định lựa chọn đề tài “Thiết kế đồng hồ và lịch điện tử bằng PIC hay AVR”

Đề tài này nhóm em chọn thực hiện bằng PIC16F877A, được thực hiện trong khoảng thờigian 4 tháng với sự hỗ trợ của những kiến thức về lập trình C, thiết kế và mô phỏng mạch Hơnthế nữa, nhóm cũng tận dụng những khả năng của vi xử lý PIC16F877A để giải quyết những vấn

đề phát sinh trong quá trình thực hiện Kết quả nhận được là khả quan khi thành phẩm có thểhiện thị thời gian một cách chi tiết và có thể được điều chỉnh thông qua các nút nhấn Trongtương lai, sản phẩm này hoàn toàn có thể được phát triển xa hơn với các tính năng mới hơn nhưbáo thức, thiết lập lịch làm việc… nhằm đáp ứng nhu cầu quản lý thời gian mà mỗi người mongmuốn

Giới thiệu chung

Bài báo cáo trình bày mạch đồng hồ hiển thị thời gian thông qua việc sử dụng ngôn ngữ lậptrình C trên PIC C Compiler và những kiến thức cơ bản về thiết kế hệ thống nhúng Trước hết,bài báo cáo sẽ trình bày về những đặc tính cơ bản của sản phẩm Nhìn chung, mạch được tạothành từ các thành phần linh kiện khá phổ biến trong việc thiết kế hệ thống nhúng như vi xử lýPIC16F877A, màn hình LCD, nút nhấn cùng với các linh kiện cơ bản như điện trở, tụ điện…Ngoài ra, bài báo cáo này cũng trình bày về cách thức mô phỏng bằng Proteus cũng như thiết

kế mạch in thông qua ứng dụng Orcad, trong đó, việc thiết kế mạch in đóng vai trò quan trọnghơn hết khi chất lượng sản phẩm phụ thuộc vào yếu tố này Tiếp theo, sơ đồ khối cơ bản cùngvới những thuật toán dành cho sản phẩm sẽ được giới thiệu Về cơ bản, mạch đồng hồ này sửdụng Timer0 của vi xử lý PIC để tạo bộ đếm 1 giây cho các thành phần khác hoạt động Thêmvào đó, thuật toán dành cho màn hình LCD và nút nhấn cũng được chú trọng kĩ càng khi nhữngphần này đóng vai trò quan trọng trong việc khẳng định hiệu năng của thiết bị

Trang 3

Sản phẩm được thiết kế là đồng hồ điện tử có khả năng hiển thị thời gian Cụ thể hơn, mạch

có khả năng hiển thị thời gian với các thông số: ngày – tháng – năm và giờ - phút – giây Ngoài

ra, người dùng có thể thực hiện việc điều chỉnh các thông số này thông qua các nút nhấn

Để thực hiện được các tính năng trên, sản phẩm sử dụng giao tiếp với màn hình LCD để hiểnthị thời gian cùng với bộ định thì timer0 trong chip xử lý PIC16F877A để tạo bộ đếm giây.Ngoài ra, như đã đề cập ở trên, sản phẩm có sử dụng các nút nhấn để nhập thông tin về thời gian

mà người dùng mong muốn Sau khi hoàn thành quá trình nhập, thời gian sẽ được hiển thị phùhợp với yêu cầu của người dùng

2. Đặc tính kĩ thuật:

3

Hình 1: Sơ đồ hoạt động tổng quát

Sản phẩm sử dụng đầu các thành phần linh kiện sau đây để thực hiện chức năng:

a. Nút nhấn:

Trong mạch thiết kế, sản phẩm sử dụng bốn nút nhấn với tên gọi lần lượt là SET TIME, UP,DOWN và RESET Mỗi nút nhấn có từng chức năng riêng biệt như sau:

• SET TIME: thiết lập thời gian cho từng thông số hiển thị trên đồng hồ

• UP: tăng giá trị của thông số đang tùy chỉnh lên 1 với giờ phút giây, tháng năm và tang thứ tựngày trong tuần

• DOWN: giảm giá trị thông số đang tùy chỉnh xuống 1 với giờ phút giây, tháng, năm và giảm thứ

tự ngày trong tuần

• RESET: trả về giá trị ban đầu

b. Vi xử lý PIC16F877A:

LCD Hiển thị thời gian

PIC16F877A Nút nhấn

Tạo xung

Trang 4

Hình 2: Sơ đồ chân Vi xử lý PIC16F877A

Về cơ bản, PIC là viết tắt của Programmable Intelligent Computer, do hãng GeneralInstrument đặt tên cho sản phẩm xử lý đầu tiên của họ Hiện nay, trên thị trường có rất nhiều họ

vi điều khiển như 8051, ARM, v.v nhưng họ vi điều khiển PIC được ưa chuộng vì rất nhiều lýdo:

• Họ vi điều khiển này dễ dàng tìm thấy tại thị trường Việt Nam

• Giá thành phù hợp với nhu cầu học hỏi của sinh viên

• Có đầy đủ tính năng của một vi điều khiển hoạt động độc lập

• Là sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi điều khiển mang tính truyềnthống như 8051

Ngoài ra, sự hỗ trợ của các nhà sản xuất về trình biên dịch (PIC C Compiler, MickroC), cáccông cụ lập trình, nạp chương trình dành cho họ sản phẩm này khá đa dạng, chính vì thế PIC làmột lựa chọn hoàn hảo để xây dựng mô hình sản phẩm

Cụ thể hơn, PIC16F877A có tập lận gồm 35 lệnh có độ dài 14 bit Mỗi lệnh đều được thựcthi trong một chu kì xung clock Tốc độ tối đa cho phép là 20MHz với một chu kì lệnh là 200ms

Bộ nhớ chương trình 8k x 14 bit, bộ nhớ dữ liệu là 368 x 8 byte RAM và bộ nhớ dữ liệuEEPROM với dung lượng là 258 x 8 byte Sổ PORT I/O là 5 với 33 chân I/O

Trang 5

Hình 3: Sơ đồ khối Vi xử lý PIC16F877A

Ngoài ra, các đặc tính ngoại vi của sản phẩm này bao gồm các khối chức năng sau:

• 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 xungclock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ ngủ

• Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler

• Hai bộ Capture/so sánh/điều chế độ xung

• Các chuẩn giao tiếp SSP (Synchronous Serial Port), SPI và I2C

• Chuẩn giao tiếp nối USART với 9 địa chỉ bit

• Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS

ở bên ngoài

Ngoài ra, chúng ta cũng có thể nhắc tới các đặc tính Analog như sau:

• 8 kênh chuyển đổi ADC 10bit

• Hai bộ so sánh

Trang 6

• Bộ nhớ flash với khả năng ghi xóa được 100,000 lần

• Bộ nhớ EEPROM với khả năng xóa được 1,000,000 lần

• Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm

• Khả năng tự nạp chương trình với sự điều khiển của phần mềm

• Watchdog Timer với bộ dao động trong

• Chức năng bảo mật mã chương trình

4. Đặc tính phần cứng:

a. Sơ đồ mô phỏng và sơ đồ khối mạch:

Trước tiên, quá trình mô phỏng được thực hiện để kiểm tra hoạt động của mã nguồn chươngtrình Sơ đồ mô phỏng mạch được thiết kế như sau:

Trang 7

Hình 4: Sơ đồ mạch mô phỏng bằng Proteus

Sau đó, để thực hiện sản phẩm, mạch được thiết kế với mô hình nguyên lý hoạt động sau đây:

Hình 5: Sơ đồ hoạt động của mạch

Trang 8

Vi xử lý PIC16F877A có tần số là 20 MHz Ngoài ra, mạch sử dụng bộ định thì timer0 để tạo

bộ đếm 1 giây cho đồng hồ Hơn nữa, mạch nhận thông tin điều chỉnh thời gian thông qua cácnút nhấn và thông tin đầu vào được đưa vào cổng E Thông tin đầu ra sử dụng cổng D để hiển thịlên LCD

Hình 6: Sơ đồ khối hiển thị LCD

Khối LCD sử dụng trong mạch là LCD 16 chân: trong đó, mạch sử dụng các chân 1, 2, 3, 4,

5, 6, 11, 12, 13, 14, 15, 16 để hiển thị thời gian Ngoài ra, thành phần này được tích hợp thêmmột biến trở để điều khiển độ sáng màn hình

Thạch anh với tần số 20MHz đưa vào chân số 13 OSC1/CLKIN và 14 OSC2/CLKOUT tạoxung clock cho đồng hồ

Điện trở sử dụng trong mạch có giá trị là 4.7K

b. Nguồn

Hình 7: Sơ đồ nguồn

Nguyên lý hoạt động cơ bản:

Mạch bắt đầu hoạt động khi được cung cấp nguồn 5V thông qua dây kết nối USB với máytính cá nhân hoặc adapter Khi cấp nguồn cho mạch, vi xử lý PIC16F877A sẽ bắt đầu đếm thờigian Ngoài ra, khi bắt đầu khởi động, các giá trị ban đầu sẽ là 00:00:00 Do đó, để điều chỉnhthời gian, người dùng có thể sử dụng các nút nhấn SET TIME, UP, DOWN Khi đó, mạch sẽ sử

Trang 9

dụng thuật toán điều chỉnh thời gian cũng như xác định năm nhuận để thực hiện xác lập thời gianhiển thị

5. Đặc tính phần mềm

a. Đồng hồ sẽ hoạt động như thế nào?

Về cơ bản, đồng hồ hiển ghị ngày – tháng – năm và giờ – phút – giây bao gồm các thông sốcùng với tầm hoạt động sau đây:

đó, biến phút sẽ được tăng từ 1 đến 59; khi đó, thông số giờ sẽ được tăng lên 1 và thông số phút

sẽ bắt đầu đến lại bằng 0 Tiếp theo, biến giờ sẽ được đếm từ 1 và khi giá trị này đạt 23, ngày và

số ngày được tăng lên một và giờ sẽ đếm lại với giá trị là 0 Ngoài ra, thông số ngày sẽ được tănglên ở mốc tối đa là 7, ứng với thứ 7 và sau đó giá trị này sẽ bắt đầu lại từ 0 (ứng với chủ nhật).Trong khi đó, thông số số ngày sẽ tăng từ 1 tới 28/29/30/31 với cận trên tương ứng với thángtrong năm hoặc năm nhuận hay không Giả sử tháng đang nói tới là tháng 1, 3, 5, 7, 8, 10 hoặc

12 thì số ngày tối đa là 31; tháng hiện tại là 4, 6, 9, 10 hoặc 11 thì số ngày sẽ là 30 Nếu thánghiện tại là tháng 2 năm thường thì số ngày là 28 và tháng 2 năm nhuận là 29 ngày Khi số ngàycủa tháng đạt mức tối đa, giá trị tháng sẽ tăng lên 1 và số ngày sẽ bắt đầu lại từ 0 Cuối cùng, nếutháng hiện tại là 12 thì sau đó, số năm sẽ tăng lên 1 và giá trị tháng bắt đầu lại là 1

b. Cách tạo bộ đếm thời gian?

Để đồng hồ hoạt động, ta cần tạo ra một đếm thời gian cũng như cập nhật thời gian để liêntục đếm cũng như hiển thị lên màn hình LCD Có rất nhiều cách thực hiện nhiệm vụ này, trong

đó nổi bật là hai cách thức : sử dụng Real Time Clock IC (IC thời gian thực) hoặc sử dụng Timercủa PIC16F877A Dựa trên yêu cầu của đồ án , phương án thứ hai được lựa chọn để thực hiện

 Sử dụng Timer của PIC16F877A :

Trang 10

Hình 8: Sơ đồ khối của Timer0

Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), khi đógiá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào Timer0 bằng ¼ tầnsố oscillator) Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện

Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định thời điểm ngắt Timer0 xuấthiện một cách linh động

Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>) Khi đóxung tác động lên bộ đếm được lấy từ chân RA4/TOCK1 Bit TOSE (OPTION_REG<4>) chophép lựa chọn cạnh tác động vào bộ đếm Cạnh tác động sẽ là cạnh lên nếu TOSE = 0 vàcạnh tác động sẽ là cạnh xuống nếu TOSE = 1 Khi thanh ghi TMR0 bị tràn, bit TMR0IF(INTCON<2>) sẽ được set Đây chính là cờ ngắt của Timer0 Cờ ngắt này phải được xóabằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm Ngắt Timer0 khôngthể “đánh thức” vi điều khiển từ chế đo sleep Ngoài ra, bộ chia tần số (prescaler) được chiasẻ giữa Timer0 và WDT (Watchdog Timer) Điều đó có nghĩa là nếu prescaler được sử dụngcho Timer0 thì WDT sẽ không có được hỗ trợ của prescaler và ngược lại Prescaler được điềukhiển bởi thanh ghi OPTION_REG Bit PSA (OPTION_REG<3>) xác định đối tượng tácđộng của prescaler Các bit PS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần số củaprescaler Xem lại thanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điềukhiển trên

Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler.Khi đối tượng tác động là Timer0, tác động lên giá trị thanh ghi TMR0 sẽ xóa prescalernhưng không làm thay đổi đối tượng tác động của prescaler Khi đối tượng tác động là WDT,lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT

Trang 11

Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:

• TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0

• INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)

• OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler

Timer1 :

Hình 9: Sơ đồ khối của Timer1

Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi(TMR1H:TMR1L) Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>) Bit điều khiển củaTimer1 sẽ là TMR1IE (PIE<0>)

Tương tự như Timer0, Timer1 cũng có hai chế độ hoạt động: chế độ định thời (timer) vớixung kích là xung clock của oscillator (tần số của timer bằng ¼ tần số của oscillator) vàchếđộ đếm (counter) với xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoàithông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên) Việc lựa chọn xung tácđộng (tương ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiểnbởi bit TMR1CS (T1CON<1>)

Ngoài ra, Timer1 còn có chức năng reset input bên trong được điều khiển bởi một tronghai khối CCP (Capture/Compare/PWM) Khi bit T1OSCEN (T1CON<3>) được set, Timer1 sẽlấy xung clock từ hai chân RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm Timer1sẽ bắt đầu đếm sau cạnh xuống đầu tiên của xung ngõ vào Khi đó PORTC sẽ bỏ qua sự tácđộng của hai bit TRISC<1:0> và PORTC<2:1> được gán giá trị 0 Khi clear bit T1OSCENTimer1 sẽ lấy xung đếm từ oscillator hoặc từ chân RC0/T1OSO/T1CKI

Timer1 có hai chế độ đếm là đồng bộ (Synchronous) và bất đồng bộ (Asynchronous)

Chế độ đếm được quyết định bởi bit điều khiển T1SYNC (T1CON<2>) Khi T1SYNC =1 xung

đếm lấy từ bên ngoài sẽ không được đồng bộ hóa với xung clock bên trong, Timer1 sẽ tiếp

Trang 12

tục quá trình đếm khi vi điều khiển đang ở chế độ sleep và ngắt do Timer1 tạo ra khi bị tràncó khả năng “đánh thức” vi điều khiển Ở chế độ đếm bất đồng bộ,

Timer1 không thể được sử dụng để làm nguồn xung clock cho khối CCP

(Capture/Compare/Pulse width modulation) Khi T1SYNC =0 xung đếm vào Timer1 sẽ được

đồng bộ hóa với xung clock bên trong Ở chế độ này Timer1 sẽ không hoạt động khi vi điềukhiển đang ở chế độ sleep

Các thanh ghi liên quan đến Timer1 bao gồm:

• INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)

• PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF) PIE1( địa chỉ 8Ch): cho phép ngắtTimer1 (TMR1IE)

• TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1

• TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1

• T1CON (địa chỉ 10h): xác lập các thông số cho Timer1

Timer2:

Hình 10: Sơ đồ hoạt động của Timer2

Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler và postscaler.Thanh ghi chứa giá trị đếm của Timer2 là TMR2 Bit cho phép ngắt Timer2 tác động làTMR2ON (T2CON<2>) Cờ ngắt của Timer2 là bit TMR2IF (PIR1<1>) Xung ngõ vào (tầnsố bằng ¼ tần số oscillator) được đưa qua bộ chia tần số prescaler 4 bit (với các tỉ số chia tầnsố là 1:1, 1:4 hoặc 1:16 và được điều khiển bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).Timer2 còn được hỗ trợ bởi thanh ghi PR2 Giá trị đếm trong thanh ghi TMR2 sẽ tăng từ00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h Khi reset thanh ghi PR2được nhận giá trị mặc định FFh Ngõ ra của Timer2 được đưa qua bộ chia tần số postscalervới các mức chia từ 1:1 đến 1:16 Postscaler được điều khiển bởi 4 bitT2OUTPS3:T2OUTPS0 Ngõ ra của postscaler đóng vai trò quyết định trong việc điều khiểncờ ngắt Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 còn đóngvai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP

Trang 13

Các thanh ghi liên quan đến Timer2 bao gồm:

• INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và PEIE)

• PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer2 (TMR2IF)

• PIE1 (địa chị 8Ch): chứa bit điều khiển Timer2 (TMR2IE)

• TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2

• T2CON (địa chỉ 12h): xác lập các thông số cho Timer2

• PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2

Ta có một vài nhận xét về Timer0, Timer1 và Timer2 như sau:

• Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là bộ đếm 16bit (giá trị đếm tối đa là FFFFh)

• Timer0, Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter Xung clock cótần số bằng ¼ tần số của oscillator

• Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độkhác nhau (tần số tác động, cạnh tác động) trong khi các thông số của xung tác động lênTimer1 là cố định Timer2 được hỗ trợ bởi hai bộ chia tần số prescaler và postcaler độc lập,tuy nhiên cạnh tác động vẫn được cố định là cạnh lên

• Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP

Khi đó, nếu sử dụng Timer, mã nguồn chương trình cần phải tạo hàm tạo thời gian 1 giâycũng như cập nhật liên tục thời gian Sau đó, hoạt động còn lại dựa trên các nút nhấn cùngvới vi xử lý PIC

c. Sơ đồ khối và các hàm quan trọng.

Để đồng hồ hoạt động, ta sử dụng sơ đồ khối cũng như các đoạn mã sau đây:

Ngày đăng: 14/04/2016, 09:35

TỪ KHÓA LIÊN QUAN

w