Cách lập trình đa dạng với nhiều ngôn ngữ khác nhau như C, basic ,assambly..giúp cho người dùng có thể lựa chọn ngôn ngữ lập trình cho phù hợp Có bộ nhớ chương trình và bộ nhớ dữ liệ
Trang 1Mục lục KẾT LUẬN 56
Mở đầu
Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiềulĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực khácnữa So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do nó đượctích hợp lại và có khả năng lập trình được để điều khiển Nên rất tiện dụng và cơ động.Nằm trong họ vi điều khiển cấp cao, vi điều khiển AVR đuợc ứng dụng rất rộng rãitrong kỹ thuật điều khiển ứng dụng, lĩnh vực đo lường, lĩnh vực quảng cáo Với đề tàinày nhóm chúng em xin làm một mạch ứng dụng khác của vi điều khiển AVR liênquan đến lĩnh vực tính toán là dùng vi điều khiển AVR thiết kế “ THIẾT KẾ MÁYTÍNH ĐIỆN TỬ ” Một máy tính với đầy đủ các chức năng toán học bình thường :cộng, trừ, nhân, chia,tính căn, bình phương và nhiều các phép tính khác với số thực.Đặc biệt còn có phép tính liên quan đến kỹ thuật như tính điện trở tương đương củađoạn mạch Kết quả tính toán hiển thị trên LCD 16x2
Trong quá trình thực hiện đề tài không thể tránh những sai sót, mong thầy hướngdẫn, góp ý kiến để cho đề tài được hoàn chỉnh hơn Cảm ơn Thầy đã giúp đỡ em trongquá trình làm đề tài trên
Máy tính bỏ túi là một công cụ học tập quen thuộc của học sinh, sinh viên, đặtbiệt là sinh viên kỹ thuật Trong đời sống hàng ngày, nó là một vật cần thiết cho việctính tiền trong các vụ mua bán Trong sản xuất, nó được dùng để tính toán số sản phẩmlàm ra Và còn rất nhiều ứng dụng khác của máy tính bỏ túi, cho thấy sự phổ biến, cầnthiết của nó Trên thị trường có nhiều loại máy tính bỏ túi khác nhau, với nhiều tínhnăng dành cho từng đối tượng người dùng riêng Loại đơn giản dùng cho học sinh,nhân viên bán hàng… Loại phức tạp dành cho sinh viên, kỹ sư… Đặc biệt đối với sinhviên kỹ thuật, máy tính bỏ túi là vật dụng rất quen thuộc, cần thiết cho học tập và tínhtoán Nhận thấy sự phổ biến của máy tính bỏ túi đó trong học tập, lao động và đời sống
Trang 2nên nhóm em quyết định chọn đề tài “Ứng dụng vi điều khiển AVR Atmega32 vào thiết
kế máy tính điện tử ”.
Mục tiêu đề tài: Là một đề tài tốt nghiệp mục tiêu của đề tài “Ứng dụng vi điều
khiển AVR Atmega32 vào thiết kế Máy tính điện tử ” em làm là:
Hoàn thành đồ án tốt nghiệp do truờng giao để giúp em có thêm kiến thức về
vi điều khiển AVR
Tạo bước đầu cho sinh viên nghiên cứu những ứng dụng của vi điều khiển nóichung và vi điều khiển AVR nói riêng trong thực tiễn để rồi từ đó tìm tòi, pháttriển nhiều ứng dụng khác trong đời sống hằng ngày cần đến vi điều khiển
Nắm được cách thức giải quyết một đề tài thực tế nói chung và đề tài tốtnghiệp nói riêng cũng như so sánh các giải pháp và lựa chọn phương án thựchiện để tối ưu sản phẩm trên thực tế
Nắm đuợc trình tự thiết kế thi công một ứng dụng dùng vi điều khiển AVR:Cách lập trình, cách thiết kế phần cứng
Lý do mà em lựa chọn phương án này là:
Vi điều khiển AVR là một dòng vi điều khiển tương đối mạnh với nhiều tínhnăng và còn thông dụng trên thị trường hiện nay.Do đó có thể dễ dàng mởrộng thiết kế các ứng dụng khác
Hoạt động hiệu quả và rất ổn định mà giá thành lại tương đối rẻ so với các viđiều khiển khác
Cách lập trình đa dạng với nhiều ngôn ngữ khác nhau như C, basic ,assambly giúp cho người dùng có thể lựa chọn ngôn ngữ lập trình cho phù hợp
Có bộ nhớ chương trình và bộ nhớ dữ liệu tương đối lớn phù hợp với yêu cầulập trình của đề tài
Lý do chọn đề tài : Do trình độ có hạn em mới chỉ dừng lại ở việc lập trình tínhtoán các phép tính đơn giản và thông dụng Nếu còn thời gian và điều kiện cho phép
Em sẽ tìm hiểu và mở rộng những phép tính phức tạp cũng như nghiên cứu các ứngdụng khác của vi điểu khiển AVR Đề tài này chỉ trong giới hạn là đề tài tốt nghiệp và
do trình độ của người làm đề tài còn nhiều hạn chế nên khó tránh khỏi những sai sóttrong nội dung cũng như trong thi công mạch Mong quý thầy cô thông cảm
Trang 3CHƯƠNG 1
CƠ SỞ LÝ THUYẾT VỀ VI ĐIỀU KHIỂN AVR ATMEGA321.1 Giới thiệu về vi điều khiển AVR của Atmel.
Vi điều khiển AVR do hãng Atmel (Hoa Kì) sản xuất được gới thiệu lần đầu
năm 1996 AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR (như AT tiny
13, AT tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR(chẳn hạn AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình vàmạnh hơn là dòng Mega (như ATmega32, ATmega128,…) với bộ nhớ có kích thướcvài Kbyte đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip,cũng có dòng tích hợp cả bộ LCD trên chip (dòng LCD AVR) Tốc độ của dòngMega cũng cao hơn so với các dòng khác
Sự khác nhau cơ bản giữa các dòng chình là cấu trúc ngoại vi, còn nhân thì vẫnnhư nhau, Hình 1 Đặt biệt, năm 2008, Atmel lại tiếp tục cho ra đời dòng AVR mới làAtmegaAVR, với những tính năng mạnh mẽ chưa từng có ở các dòng AVR trước đó
Có thể nói XmegaAVR là dòng MCU 8 bit mạnh mẽ nhất hiện nay
Hính 1 : Các dòng Vi xử lý AVR
Trang 4Cấu trúc cơ bản của vi điều khiển AVR được thể hiện ở hình 2:
HÌnh 2 : Cấu trúc bên trong AVR
Trang 5_ Internal và External Interrupt.
1.2 Vi điều khiển Atmega32.
1.2.1 Sơ đồ khối vi điều khiển AVR Atmega32.
Trang 6Hình 3 : Sơ đồ khối Atmega32Giải thích:
Trang 7Phần cốt lõi là AVR kết hợp với các tập lệnh đa dạng với 32 thanh ghi đanăng 32 thanh ghi được kết nối trực tiếp với bộ số học ALU (Arthmetic Logic Unit),cho phép truy cập 2 thanh ghi độc lập trong một lệnh đơn được thực thi trong mộtxung nhịp Cấu trúc này mang lại nhiều khả năng lập trình có hiệu quả cao đạt trên 10lần nhanh hơn bộ vi xử lý CISC (Complex Instruction Set Computer: máy tính có tậplệnh phức tạp) thông thường.
Atmega32 cung cấp các thông số đặc trưng sau: bộ nhớ Flash 32K byte lậptrình được ngay trên hệ thống với khả năng đọc và ghi, EEPPROM 1024byte, SRAM2K byte, 32 đường vào/ra đa năng, 32 thanh ghi làm việc đa năng, 1 giao diện JTAG,việc lập trình và đáp ứng bộ dò sai trên chip, 3 bộ Timer/Counter làm việc linh hoạtvới chế độ so sánh, các ngắt ngoài và trong, 1 bộ USART lập trình nối tiếp, 1 giaodiện nối tiếp 2 dây byte định hướng, 1 bộ chuyển ADC 8 kênh 10 bit với trạng tháiđầu vào vi sai với độ lợi có thể lập trình, 1 bộ định thời Watchdog có thể lập trình với
bộ dao động bên trong, 1 cổng nối tiếp SPI, và 6 chế độ tiết kiệm năng lượng có thểlựa chọn nhờ phần mềm Chế độ nghỉ làm cho CPU ngừng hoạt động trong khi chophép bộ USART, bộ giao diện 2 dây, bộ chuyển đổi A/D, SRAM, bộ Timer/Counter,cổng SPI, và hệ thống ngắt vẫn tiếp tục làm việc Chế độ làm giảm mức tiêu thụ nănglượng lưu nội dung thanh ghi nhưng lại để bộ dao động hoạt động, cấm tất cả cácchức năng khác trên chip cho đến khi có tín hiệu ngắt ngoài kế tiếp hoặc tín hiệu resetphần cứng Ở chế độ tiết kiệm năng lượng, bộ Timer bất đồng bộ vẫn tiếp tục hoạtđộng và cho phép người sử dụng vẫn tiếp tục duy trì 1 bộ định thời cơ sở trong khicác thiết bị còn lại trong chế độ nghỉ Chế độ giảm nhiễu ADC làm cho CPU ngừnghoạt động và tất cả các môđun vào/ra ngoại trừ bộ Timer bất đồng bộ và bộ ADC, đểnhiễu của việc chuyển mạch đạt cực tiều trong suốt quá trình chuyển đổi ADC Trongchế độ dự phòng, thạch anh/bộ dao động cộng hưởng sẽ hoạt động trong khi các thiết
bị còn lại trong chế độ nghỉ Điều này cho phép việc khởi động nhanh được kết hợpvới việc tiêu thụ năng lượng thấp Ở chế độ dự phòng bên ngoài, cả hai bộ dao độngchính và Timer bất đồng bộ vẫn tiếp tục hoạt động
Các thiết bị được chế tạo bởi công tuy Atmel sử dụng công nghệ bộ nhớ không
tự mất dữ liệu và có mật độ cao Bộ nhớ Flash ISP trên chip cho phép bộ nhớ chương
Trang 8trình có thể lập trình được ngay trên hệ thống qua 1 bộ giao diện nối tiếp SIP hoặcbằng bộ nạp chương trình vào bộ nhớ không tự mất dữ liệu thông thường, hoặc bằng
1 chương trình khởi động trên chip đang chạy trong lõi AVR Chương trình boot cóthể sử dụng một vài giao diện để tải chương trình ứng dụng trong bộ nhớ Flash ứngdụng Phần mềm trong đoạn Flash khởi động sẽ tiếp tục hoạt động trong khi đoạnFlash khởi động được cập nhật, cung cấp hoạt động đọc ghi một cách chính xác Bằngcách kết hợp 1 CPU 8 bit theo cấu trúc RISC với bộ nhớ Flash lập trình ngay trên hệthống trong một chip đơn, ATmega16 của Atmel là bộ vi điều khiển mạnh nó đáp ứng
sự linh hoạt cao và là giải pháp có giá trị hiệu quả để đưa nhiều ứng dụng điều khiểnvào
1.2.2 Sơ đồ và chức năng các chân.
Sơ đồ chân
Hình 4: Sơ đồ chân Atmega32Chức năng
Trang 9 Port A (PA7 ÷ PA0).
Port A ( Chân 33-40 ): Là một cổng vào/ra 2 hướng 8 bit, nếu bộ chuyển đổikhông được dùng Chân Port có các điện trở nối lên nguồn dương (được chọn chomỗi bit) Ngõ ra Port A có những đặc tính điều khiển đối xứng với cả hai khả năngchịu đựng nguồn và nhiệt cao Khi chân PA0 tới chân PA7 được sử dụng như là ngõvào và được đặt xuống mức thấp từ bên ngoài, chúng sẽ là nguồn dòng nếu các điệntrở nối lên cực dương được kích hoạt
Port A cũng được sử dụng khi một tín hiệu tương tự ở ngõ vào đến bộ chuyểnđổi A/D Các chân của Port A sẽ được đặt ở trạng thái 3 (tổng trở cao) khi tín hiệureset ở mức tích cực ngay cả khi tín hiệu xung nhịp không hoạt động
Port B (PB7 ÷ PB0).
Port B( Chân 1-8 ) : Là một cổng vào/ra 2 hướng 8 bit với các điện trở kéo lênnguồn dương bên trong (được chọn cho mỗi bit) Ngõ ra Port B có những đặc tínhđiều khiển đối xứng với cả hai khả năng chịu đựng nguồn và nhiệt cao Cũng như cácchân ngõ vào, các chân Port B được đặt xuống mức thấp từ bên ngoài sẽ là nguồndòng nếu các điện trở nối lên cực dương được kích hoạt
Các chân Port B sẽ được đặt trạng thái thứ 3 khi tín hiệu reset ở mức tích cực,ngay khi xung nhịp không hoạt động
Port C (PC7 ÷ PC0).
Port C ( Chân 22-29 ) : Là một cổng vào/ra 2 hướng 8 bit với các điện trở kéolên nguồn dương bên trong (được chọn cho mỗi bit) Ngõ ra Port C có những đặc tínhđiều khiển đối xứng với cả hai khả năng chịu đựng nguồn và nhiệt cao Cũng như cácchân ngõ vào, các chân Port B được đặt xuống mức thấp từ bên ngoài sẽ là nguồndòng nếu các điện trở nối lên cực dương được kích hoạt Các chân Port C sẽ được đặttrạng thái thứ 3 (tổng trở cao) khi tín hiệu reset ở mức tích cực, ngay khi xung nhịpkhông hoạt động Nếu giao diện JTAG được mức cho phép, những điện trở kéo lêntrên những chân PC5(TDI), PC3(TMS) và PC2(TCK) sẽ được kích hoạt ngay cả khinếu một reset xuất hiện
Trang 10 Port D (PD7 ÷ PD0).
Port D ( Chân 14-21) : Là một cổng vào/ra 2 hướng 8 bit với các điện trở kéolên nguồn dương bên trong (được chọn cho mỗi bit) Ngõ ra Port D có những đặc tínhđiều khiển đối xứng với cả hai khả năng chịu đựng nguồn và nhiệt cao Cũng như cácchân ngõ vào, các chân Port D được đặt xuống mức thấp từ bên ngoài sẽ là nguồndòng nếu các điện trở nối lên cực dương được kích hoạt Các chân Port C sẽ được đặttrạng thái thứ 3 (tổng trở cao) khi tín hiệu reset ở mức tích cực, ngay khi xung nhịpkhông hoạt động
VCC, GND, RESET, XTAL1, XTAL2, AVCC, AREF
_ VCC ( Chân 10,30 ): Nguồn cung cấp
_ XTAL2 ( Chân 13 ): Ngõ ra của bộ khuếch đại dao động đảo
_ AVCC ( Chân 30 ): là chân nguồn cung cấp cho Port A và bộ chuyển đổiA/D Nó nên được kết nối ngoài tới VCC, ngay khi nếu bộ ADC không đượcdùng Nếu bộ ADC được sử dụng thì nó được kết nối tới VCC thông qua mộtmạch lọc thông thấp
_ AREF ( Chân 32 ): là chân tham chiếu cho bộ chuyển đổi A/D
_ Chân INT1 ( Chân 17 ) : Chân ngõ vào ngắt
_ Chân OC1A/B (Chân 19,18) : Chân ra cho chức năng so sánh lối ra bộ địnhthời/đếm 0,1
Trang 111.2.3 Cấu trúc bộ nhớ.
Cũng như mọi vi điều khiển khác AVR có cấu trúc Harvard tức là có bộ nhớ
và đường bus riêng cho bộ nhớ chương trình và bộ nhớ dữ liệu
Bộ nhớ chương trình :Chia làm 2 phần chính
Vùng giành cho các vector ngắt : có địa chỉ từ 0000H tới 0028H Atmega32 cótất cả 20 ngắt
Trang 12Hình 6 : Bộ nhớ chương trình
Hình 7 : Bảng Vector ngắt
Trang 13Tiếp theo là vùng nhớ lưu chương trình : Atmega32 chứa bộ nhớ Flash có thểlập trình lại trong hệ thống trên chip 32KByte cho việc lưu trữ chương trình Bộ nhớFlash chịu được ít nhất 10.000 chu kỳ ghi/xóa
Bộ nhớ dữ liệu :
AVR có 32 thanh ghi chức năng chung và chúng được liên kết trực tiếp với
ALU đây là điểm khác biệt của AVR và tạo cho nó một tốc độ xử lý cực cao Cácthanh ghi được đặt tên từ R0 tới R31 Và đặc biệt cặp 6 thanh ghi cuối (từ R6 tớiR31) từng đôi một tao thành các thanh ghi 16 bit sử dụng làm con trỏ trỏ tới bộ nhớchương trình và dữ liệu Chúng lần lượt có tên là X, Y, Z
Không gian các thanh ghi cổng vào ra bao gồm các thanh ghi dữ liệu và thanhghi điều khiển cho cổng vào ra
Trang 14o Truy Xuất Đọc/Ghi EEPROM: Thanh ghi truy xuất EEPROM được sử dụng
trong không gian vào/ra Thời gian truy xuất ghi dữ liệu là 8,5ms Một chức năng timing cho phép phần mềm người sử dụng dò tìm khi byte kế tiếp có thể được ghi vào.Một ngắt đọc đặc biệt của EEPROM có thể được thiết lập đến kích khi EEPROM sẵnsàng nhận dữ liệu mới Để tránh định trước việc ghi EEPROM, một quá trình ghi cụthể phải được thể hiện Khi đọc EEPROM thì CPU phải được tạm ngưng trong 4 chu
seft-kỳ xung nhịp trước khi lệnh kế tiếp được thực thi Khi EEPROM được ghi thì CPUphải tạm thời ngưng trong 2 chu kỳ xung nhịp trước khi lệnh kế tiếp được thực thi
o Thanh Ghi Địa Chỉ EEPROM – EEARH và EEARL.
Hình 9: Thanh ghi địa chỉ EEPROM – EEARH và EEARLBit 15 9 – Res: Reserved Bits là các bit thụ trong ATmega16 và luôn luôn đượcđặt ở mức [0]
Bit 8 0 – EEAR8 0: EEPROM Address
Thanh ghi địa chỉ EEPROM – EEARH và EEARL chỉ rõ địa chỉ EEPROM trongkhông gian EEPROM 512 byte Những byte dữ liệu EEPROM được định địa chỉ ở
0÷511 Giá trị ban đầu của EEAR thì không được định nghĩa Một giá trị riêng
phải được viết trước khi EEPROM có thể được truy xuất
o Thanh Ghi Dữ Liệu EEPROM – EEDR
Hình 10: Thanh ghi dữ liệu EEPROM- EEDRBit 7 0- EEDR7 0: Dữ liệu EEPROM
Trang 15Đối với thao tác ghi của EEPROM, thanh ghi dữ liệu EEDR chứa dữ liệu đượcghi tới EEPROM trong vùng địa chỉ được định bởi thanh EEAR Đối với thao tác đọccủa EEPROM, thanh ghi EEDR chứa dữ liệu được tạo ra EEPROM trong vùng địa chỉđược định bởi thanh ghi EEAR.
o Thanh Ghi Điều Khiển EEPROM- EECR
Hình 11: Thanh ghi điều khiển EEPROM- EECRBit 7 4 - Res: Resserved Bits là những bít thụ động Các bít này luôn được đặt
ở mức [0]
Bit 3 - EERIE: EEPROM Ready Interrupt Enable
Khi bit I trong thanh ghi SREG và EERIE được đặt lên [1], ngắt EEPROMReady được cho phép và khi xoá xuống [0] thì ngắt bị cấm Ngắt EEPROM Ready phát
ra một ngắt hằng khi EEWE bị xoá xuống [0]
Bit 2- EEMWE: EEPROM Master Write Enable
Việc đặt EEMWE lên [1] sau đó việc thiết lập EEWE sẽ chỉ ghi dữ liệu lên bộnhớ EEPROM tại vùng địa chỉ đã được chọn Nếu EEMWE bị xoá xuống [0] thì thiếtlập EEWE cũng không có tác dụng gì Khi EEMWE được đặt lên [1] bằng phần mềmthì phần cứng sẽ xoá bit này xuống [0] sau 4 chu kỳ xung nhịp
Bit 1- EEWE: EEPROM Write Enable
Khi địa chỉ và dữ liệu được cài đặt một chính xác, bit EEWE phải được thiết lập
để ghi giá trị vào trong EEPROM Khi mức logic [1] được đặt vào bit EEWE thì bitEEMWE phải được thiết lập, nếu không sẽ không thao tác ghi EEPROM được Cáclệnh ghi dữ liệu bộ nhớ EEPROM được viết như sau (bước 3 và 4 không cần thiết):
1 Đợi cho đến khi EEWE trở thành [0]
2 Đợi cho đến khi SPMEN ở SPMCR trở thành [0]
3 Ghi địa chỉ EEPROM mới tới EEAR (không bắt buộc)
4 Ghi dữ liệu EEPROM mới tới EEDR (không bắt buộc)
Trang 165 Ghi mức lôgic [1] tới bit EEMWE trong khi ghi mức [0] tới EEWE ở thanhghi EECR.
6 Trong vòng bốn chu kỳ đồng hồ sau khi EEMWE được thiết lập, ghi lôgic [1]tới EEWE
Chú ý: Một tín hiệu phá vỡ sự liên tục giữa bước 5 và bước 6 sẽ làm hỏng chu
kỳ ghi, khi đó EEPROM Master Write Enable sẽ nghỉ Nếu có một ngắt thường trìnhđăng nhập EEPROM làm gián đoạn một đăng nhập khác vào EEPROM thì sẽ làm chothanh ghi EEAR hay EEDR bị thay đổi Vì vậy nên cần xoá cờ ngắt toàn cục trong tất
cả những bước để tránh những vấn đề này
Khi thời gian truy xuất ghi trôi qua, bit EEWE sẽ bị xoá xuống [0] bằng phầncứng Phần mềm người sử dụng có thể thăm dò và chờ bit này xem đã là [0] chưa trướckhi ghi byte kế tiếp Khi EEWE được thiết lập, CPU tạm nghỉ trong hai chu kỳ xungtrước khi lệnh kế tiếp được thực hiện
Bit 0 - EERE: EEPROM Read Enable
Khi địa chỉ chính xác được cài đặt trong thanh ghi EEAR, bit EERE được ghimức lôgic [1] tới EEPROM kích đọc Truy xuất đọc EEPROM mất một lệnh và dữ liệuyêu cầu được đáp ứng ngay lập tức Khi EEPROM được đọc, CPU tạm nghỉ bốn chu
kỳ xung trước khi lệnh kế tiếp được thực hiện
Người sử dụng nên kiểm tra bit EEWE trước khi bắt đầu thao tác đọc Nếu mộtthao tác ghi được đang hoạt động, nó không thể đọc EEPROM, mà cũng không thayđổi thanh ghi EEAR
Tránh sai sót trong EEPROM : Trong chu kỳ điện áp nguồn VCC thấp, dữ liệuEEPROM có thể bị thất thoát vì điện áp nguồn cung cấp quá thấp cho CPU vàEEPROM để vận hành chính xác Vấn đề đặt ra là làm sao tránh những thất thoát dữliệu đối với các EEPROM trên chíp cũng như tránh thất thoát dữ liệu đối với những vimạch không có EEPROM trên chip.Khi điện áp quá thấp sẽ phát sinh ra hai nguyênnhân dẫn đến dữ liệu trên EEPROM bị sai lệch Thứ nhất, một trình tự ghi thôngthường lên EEPROM cần điện áp nhỏ nhất để hoạt động chính xác Thứ hai, chínhCPU thực thi lệnh không chính xác nếu nguồn cung cấp cho việc thực thi lệnh quáthấp Sự thất thoát dữ liệu EEPROM có thể dễ dàng được tránh khỏi bằng giải pháp
Trang 17giữ cho Reset AVR tích cực (thấp) trong thời gian điện áp nguồn nuôi không đủ Đềunày có thể được làm bởi việc cho phép mạch bảo vệ reset nguồn nuôi mức thấp bênngoài, thông thường hay dùng phát hiện Brown-out (BOD).
1.2.4 Các thanh ghi chức năng đặc biệt.
Bao gồm các thanh ghi dữ liệu và các thanh ghi điều khiển các cổng vào ra
Thanh ghi trạng thái - SREG (STATUS REGISTRY)Nằm trong vùng nhớ I/O,thanh ghi SREG có địa chỉ I/O là 0x003F và địa chỉ bộ nhớ là 0x005F (thường đây là
vị trí cuối cùng của vùng nhớ I/O) là một trong số các thanh ghi quan trọng nhất củaAVR, vì thế mà tôi dành phần này để giới thiệu về thanh ghi này Thanh ghi SREGchứa 8 bit cờ (flag) chỉ trạng thái của bộ xử lí, tất cả các bit này đều bị xóa sau khireset, các bit này cũng có thể được đọc và ghi bởi chương trình
Hình 12 Thanh ghi trạng thái
Bit 0 – C (Carry Flag: Cờ nhớ): là bit nhớ trong các phép đại số hoặc logic, ví
dụ thanh ghi R1 chứa giá trị 200, R2 chứa 70, chúng ta thực hiện phép cộng có nhớ:ADC R1, R2, sau phép cộng, kết quả sẽ được lưu lại trong thanh ghi R1, trong khi kếtquả thực là 270 mà thanh ghi R1 lại chỉ có khả năng chứa tối đa giá trị 255 (vì có 8 bit)nên trong trường hợp này, giá trị lưu lại trong R1 thực chất chỉ là 14, đồng thời cờ Cđược set lên 1 (vì 270=100001110, trong đó 8 bit sau 00001110 =14 sẽ được lưu lạitrong R1)
Bit 1 – Z (Zero Flag: Cờ 0): cờ này được set nếu kết quả phép toán đại số hay
phép Logic bằng 0
Bit 2 – N (Negative Flag: Cờ âm): cờ này được set nếu kết quả phép toán đại số
hay phép Logic là số âm
Bit 3 – V (Cờ tràn của bù 2): hoạt động của cờ này có vẻ sẽ khó hiểu cho bạn vì
nó liên quan đến kiến thức số nhị phân (phần bù), chúng ta sẽ đề cập đến khi nào thấycần thiết
Trang 18 Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XOR giữa 1 cờ N và V, S=N
xor V
Bit 5 – H (Half Carry Flag: Cờ nhờ nữa): cờ H là cờ nhớ trong 1 vài phép toán
đại số và phép Logic, cờ này hiệu quả đối với các phép toán với số BCD
Bit 6 – T (Bit Copy Storage): được sử dụng trong 2 Instruction BLD (Bit LoaD)
và BST (Bit STorage) Tôi sẽ giải thích chức năng Bit T trong phần giới thiệu về BLD
và BST
Bit 7 – I (Global Interrupt Enable) : Cho phép ngắt toàn bộ): Bit này phải đượcset lên 1 nếu trong chương trình có sử dụng ngắt Sau khi set bit này, bạn muốn kíchhoạt loại ngắt nào cần set các bit ngắt riêng của ngắt đó Hai instruction dùng riêng đểSet và Clear bit I là SEI và CLI
Chú ý: Tất cả các bit trong thanh ghi SREG đều có thể được xóa thông qua cácinstruction không toán hạng CLx và set bởi SEx, trong đó x là tên của Bit.Ví dụ CLT làxóa Bit T và SEI là set bit I
Dưới đây là bảng tóm tắt sự ảnh hưởng của các phép toán đại số, logic lên cácBit trong thanh ghi SREG
Hình 13:Ảnh hưởng của các phép toán lên SREG
Trang 19• Con Trỏ Ngăn Xếp(SP).
Ngăn xếp chủ yếu được sử dụng để cất giữ dữ liệu tạm thời, để cất giữ nhữngbiến cục bộ và cho việc cất giữ những địa chỉ trả về sau khi ngắt và gọi những chươngtrình con Thanh ghi con trỏ ngăn xếp thường trỏ vào đỉnh ngăn xếp Chú ý rằng ngănxếp được thực hiện từ những vị trí ô nhớ cao hơn đến những vị trí ô nhớ thấp hơn.Lệnh PUSH ngăn xếp sẽ giảm bớt con trỏ ngăn xếp Nếu phần mềm đọc bộ đếmchương trình từ ngăn xếp sau một lệnh gọi hay một ngắt, không dùng những bit (15:13)cần phải được định mặt nạ ở ngoài
Con trỏ ngăn xếp chỉ tới vùng ngăn xếp dữ liệu SRAM nơi chương trình con vàngăn xếp ngắt được định vị Không gian ngăn xếp này trong dữ liệu SRAM phải đượcđịnh nghĩa bởi chương trình trước khi gọi chương trình con được thực hiện hay ngắtđược cho phép Con trỏ ngăn xếp phải được thiết lập đến điểm phía trên $60 Con trỏngăn xếp giảm xuống 1 giá trị khi dữ liệu được đẩy về phía trên ngăn xếp bằng lệnhPUSH và nó giảm xuống hai khi một địa chỉ được đẩy lên trên ngăn xếp cùng với việcgọi chương trình con hay ngắt Con trỏ ngăn xếp được tăng lên 1 giá trị khi dữ liệuđược kéo ra từ ngăn xếp với lệnh POP và nó được tăng lên 2 khi một địa chỉ được kéo
ra từ ngăn xếp cùng với việc trả về thủ tục con RET hay lệnh ngắt RETI
Con trỏ ngăn xếp AVR được thực hiện như hai thanh ghi 8 bit trong không gianvào/ra Không gian dữ liệu trong một số những sự thực thi của cấu trúc AVR thì nhỏđến nỗi chỉ SPL được cần Trong này trường hợp, thanh ghi SPH sẽ không hiện hữu
Hình 14:Thanh ghi con trỏ ngăn xếp
Tập thanh ghi đa năng là tập lệnh RISC được tối ưu hóa cho AVR được tăngcường Cấu trúc này được yêu cầu có tính hiệu suất và tính linh hoạt, sơ đồ vào/ra sauđây hỗ trợ bởi tập thanh ghi:
Trang 20• Một toán hạng đầu ra 8 bit và một kết quả đầu vào 8 bit.
• Hai toán hạng đầu ra 8 bit và một kết quả đầu vào 8 bit
• Hai toán hạng đầu ra 8 bit và một kết quả đầu vào 16 bit
• Một toán hạng đầu ra 16 bit và một kết quả đầu vào 16 bit
Hình 15: Thanh ghi làm việc đa năng trên CPUTất cả các lệnh điều thanh ghi trong tập lệnh đều có thể truy xuất trực tiếp vàtrong 1 chu kỳ đơn Mỗi thanh ghi được phân một địa chỉ bộ nhớ dữ liệu, ánh xạ chúngmột cách trực tiếp tới 32 vị trí đầu của không gian dữ liệu người dùng Thanh Ghi X,
Y, Z là những thanh ghi R26 R31 có một số chức năng bổ sung đã được sử dụng.Những thanh ghi này là những con trỏ địa chỉ 16 bit dùng cho địa chỉ gián tiếp củakhông gian dữ liệu Ba thanh ghi địa chỉ gián tiếp X, Y và Z được định nghĩa và được
mô tả trong hình dưới
Hình 16 :Thanh ghi X, Y, Z
Trang 21CHƯƠNG 2 :
MÔ TẢ THIẾT KẾ PHẦN CỨNG2.1 Sơ đồ khối
Hình 17: Sơ đồ khối hệ thốngGiải thích chức năng từng khối
• Khối nhập dữ liệu: Là khối có chức năng nhập dữ liệu là các ký tự số, đưa ra cáclệnh điều khiển, các phép toán…đưa đến khối xử lý để thực hiện công việc tính toán vàxuất ra màn hình hiển thị kết quả tính toán.Khối này được chia ra làm 3 nhóm phím vớichức năng như sau:
Nhóm phím số: Nhập dữ liệu dưới dạng các ký tự số để phục vụ các phép tínhđại số.Nhóm phím này gồm các phím từ 0-9
Nhóm phím chức năng: Nhập giá trị và đưa ra các phép tính đại số đơn giản nhưcộng, trừ, nhân, chia,phép lấy căn,lũy thừa…đưa đến khối xử lý để thực hiện
Nhóm phím điều khiển: Nhập giá trị và đưa ra các lệnh điều khiển tới khối xử lýnhư xuất kết quả, lưu kết quả, xóa dữ liệu, mở rộng phép tính toán
• Khối xử lý: Là khối quan trọng nhất, thực hiện chức năng quan trọng nhất là xử
lý dữ liệu từ khối nhập đưa tới, tính toán các phép tính, thực hiện các lệnh và xuất
dữ liệu hiển thị trên khối hiển thị
• Khối hiển thị: Để hiển thị phép tính, kết quả tính toán, các tín hiệu điều khiển
từ khối nhập dữ liệu đưa vào
Trang 222.2 Sơ đồ mạch nguyên lý tổng quát.
Trang 23KHỐI XỬ LÝ
KHỐI
NHẬP DỮ
LIỆU
KHỐI HIỂN THỊ
Trang 24Số lượng nút nhấn của một keypad thay đổi phụ thuộc vào yêu cầu ứng dụng.
Hình 19 : Ma trận phímCách bố trí ma trận hàng và cột là cách chung mà các ma trận phím sử dụng.Cũng giống như các ma trận LED, các nút nhấn cùng hàng và cùng cột được nối vớinhau, vì thế với ma trận phím 6x6 sẽ có tổng cộng 12 ngõ ra (6 hàng và 6 cột)
Trang 25Hình 20 : Mạch điện ma trận phímHoạt động của ma trận phím: Giả sử nhút '2' được nhấn, khi đó đường H0 và C2được nối với nhau Giả sử đường C2 được nối với GND (mass, 0V) thì H0 cũng sẽ làGND Tuy nhiên, câu hỏi đặt ra là bằng cách kiểm tra trạng thái đường H0 chúng ta sẽ
có kết luận nút '2' được nhấn? Giả sử tất cả các đường C0,C1,C2,C3,C4,C5 đều nới vớiGND, nếu H0 = GND thì rõ ràng chúng ta không thể kết luận nút 0,1,2,3,4,5 đượcnhấn Kỹ thuật để khắc phục vấn đề này chính là kỹ thuật "quét" Kỹ thuật quét bànphím bằng AVR được trình bày như sau:Nối tất cả 6 hàng, 6 cột của ma trận phím với
2 port của AVR theo bảng sau
Trang 26Các chân C0,C1,C2,C3,C4,C5 được set như các chân Output và giữ ở mức cao, các chân H0,H1,H2,H3,H4,H5 là Input và có điện trở kéo lên Lần lượt kéo chân C0,C1, C2, C3, C4,C5 xuống thấp ( lần lượt xuất giá trị 0 ra từng chân), đọc trạng thái các chân H0,H1,H2,H3,H4,H5 để kết luận nút nào được nhấn Ví dụ nút '2' được nhấn thì quá trình quét sẽ cho kết quả như sau:
o Bước 1: kéo chân C0 xuống 0 (các chân 2,3,4 vẫn ở mứccao), kiểm tra 6 chân H0, H1, H2, H3, H4, H5 thu được kết quả H0=1, H1=1, H2=1,H3=1.H4=1,H5=1 (giá trị đọc về Portc là 11111100 nhị phân)
o Bước 2: kéo chân C1 xuống 0 (các chân 2,3,4 vẫn ở mứccao), kiểm tra 6 chân H0,H1,H2,H3,H4,H5 thu được kết quả H0=1, H1=1, H2=1,H3=1.H4=1,H5=1 (giá trị đọc về Portc vẫn là 11111100 nhị phân)
o Bước 3: kéo chân C2 xuống 0, kiểm tra lạiH0,H1,H2,H3,H4,H5 kết quả thu được H0=0, H1=1, H2=1, H3=1.H4=1,H5=1 (giá trịđọc về của PortC là 01111100 nhị phân) Chân H0=0 tức có 1 nút ở hàng thứ 1 đượcnhấn, chúng ta lại đang ở Bước thứ 3 tức nút nhấn thuộc cột thứ C2 Đến đây ta có thểkết luận là nút số ‘2’ được nhấn Chúng ta có thể dừng quá trình quét tại đây
Rs(4) Pd0(14) Điều khiển D0-D7 là xuấ dữ liệu hay nhận lệnh từ vi điều khiển
Trang 27E(6) Pd2(16) Chân điều khiển cho phép LCD hoạt động hay ngừng
Ledb(16) Pa0 Điều khiển tắt mở LCD nhằm tiết kiệm điện
Hình 21: Vi xử lý AVR
+ Mạch Reset vi điều khiển :
Trang 28Hính 22: Mạch Reset
2.3.3 LCD 16x2.
Giới thiệu: Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thịcác dòng chữ hoặc số trong bảng mã ASCII Không giống các loại LCD lớn, Text LCDđược chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII Cũng
vì lý do chỉ hiện thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (đểphân biệt với Graphic LCD có thể hiển thị hình ảnh) Mỗi ô của Text LCD bao gồmcác “chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một
ký tự cần hiển thị Trong các Text LCD, các mẫu ký tự được định nghĩa sẵn vì thế việcđiều khiển Text LCD sẽ tương đối dễ dàng hơn các graphic LCD Kích thước của TextLCD được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng màLCD có Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự.Một số kích thước Text LCD thông thường gồm 16x1, 16x2, 16x4, 20x2, 20x4…
Hình 23 : LCD 16x2Giao tiếp : Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và songsong Trong phạm vi đồ án này chúng e chỉ giới thiệu loại giao tiếp song song, cụ thể
là LCD 16x2.LCD có 2 mode giao tiếp là 4 bit và 8 bit Nó chứa sẵn 208 ký tự mẫukích thước font 5x8 và 32 ký tự mẫu font 5x10 (tổng cộng là 240 ký tự mẫu khácnhau)
Trang 29Sơ đồ chân: Các Text LCD thường có 16 chân trong đó 14 chân kết nối với bộđiều khiển và 2 chân nguồn cho “đèn LED nền” Thứ tự các chân thường được sắp xếpnhư sau:
Hình 24 : Sơ đồ chân LCDChân 1 và chân 2 là các chân nguồn, được nối với GND và nguồn 5V
Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với 1biến trở chia áp trong khi hoạt động, điều chỉnh để thay đổi giá trị biến trở để đạt được
độ tương phản cần thiết, sau đó giữ mức biến trở này
Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp với
vi điều khiển Tùy theo chế độ hoạt động 4 bit hay 8 bit mà các chân từ D0 đến D3 cóthể bỏ qua hoặc nối với vi điều khiển