Giới thiệu và mô phỏng thực tế chức năng vi điều khiển AVR, ATmega 16
Trang 1MỤC LỤC
MỤC LỤC 1
Phần I: Lý thuyết 3
I GIỚI THIỆU VỀ AVR 3
1.1 Tổng quan về AVR 3
1.1.1 Khái niệm vi điều khiển 3
1.1.3 Ưu thế của MCU AVR: 4
1.1.4 Một số dòng AVR: 4
1.2 Một số dòng AVR phổ biến: 5
II: ATMEGA16 - KIẾN TRÚC TỔNG QUAN 6
2.1 Ưu điểm: 6
2.2 Cấu trúc ATMEGA16 7
2.2.1 Sơ đồ chân 7
2.2.2 Sơ đồ khối 8
2.3.1 CPU: 10
2.3.3 Memory: 13
2.3.4 Quá trình thực thi lệnh: 14
III: Điều khiển I/O vào ra với LED đơn, LED 7 thanh và LCD 15
3.2 Giao tiếp I/O với LED 7 thanh: 16
Phần II: Bài tập 21
4.1.Bài 1: viết chương trình điều khiển quét 4 LED 7 thanh đếm 1234 dến 4567 .21
4.2 Bài 2: viết chương trình điều khiển quét 6 LED 7 thanh đếm 456789 dến 456666 22
4.4Bài 4: viết chương trình quét 2 matrix 8*8 hiển thị chữ B và G 26
4.5.Bài 5: viết chương trình quét 2 matrix 8*8 hiển thị chữ X và Z 27
4.6.Bài 6: viết chương trình hiển thị lên LCD “well come to”, “dai hoc thanh do”, “khoa dien tu - VT”, “lop”, “CD dien tu 1-K6”, “nien khoa”, “2009 - 2012” .29
4.7.Bài 7: viết chương trình sử dụng timer 1 tạo ra 2 xung PWM có độ rộng xung khác nhau 30
4.8.Bài 8: viết chương trình tạo PWM có độ rộng thay đổi từ 0 dến max 32
4.9.Bài 9: Viết chương trình điều khiển động cơ DC 3 mức độ khac nhau 33
Trang 24.10.Bài 10: Viết chương trình mô phỏng băng truyền đếm sản phẩm sử dụng nút nhấn và hiển thị lên LCD 35
LỜI NÓI ĐẦU
Ngày nay, lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các thiết
bị, sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như máy giặt, đồng hồ báo giờ… đã giúp cho đời sống cuả chúng ta ngày càng hiện đại
và tiện nghi hơn
Trong số những nhà sản xuất MCU 8 bit thì Atmel đã trở nên quá quen thuộc với giới sinh viên, kỹ thuật Việt Nam Nhóm chúng em tìm hiểu về giao tiếp I/O Chúng em rất mong nhận được sự góp ý của Thầy và tất cả các bạn Nhóm chúng em xin gửi lời cảm ơn đến thầy Đặng Văn Hiếu đã hướng dẫn chúng em hoàn thành bài báo cáo này
Chúng em xin trân thành cảm ơn!
Trang 3Phần I: Lý thuyết
I GIỚI THIỆU VỀ AVR
1.1 Tổng quan về AVR
1.1.1 Khái niệm vi điều khiển
Khái niệm vi điều khiển (microcontroller - MC) khá quen thuộc với những người học CNTT, điện tử, điều khiển tự động cũng như cơ điện tử… Nó
là một trong những IC thích hợp nhất để thay thế các IC số trong việc thiết kế mạch logic Ngày nay cũng có các MC tích hợp đủ các chức năng của mạch logic Nói như vậy không có nghĩa là các IC số cũng như các IC mạch số lập trình được khác như PLC… không cần dùng nữa MC cũng có những hạn chế
mà rõ ràng hơn là tốt độ chậm hơn các mạch logic MC cũng là 1 máy tính - máy tính nhúng vì nó có đầy đủ chức năng của một máy tính Có CPU, bộ nhớ chương trình, bộ nhớ dữ liệu, có I/O và các bus trao đổi giữ liệu
1.1.2 Giới thiệu về AVR
vi điều khiển phổ biến như 8051, AT91 ARM7, Atmel AVR 8-bit RISC, và mới đây là DSP dual-CPU AT57 Atmel AVR32 là một vi điều khiển lai DSP với 7 tầng pipeline và khả năng thực thi song song AVR là chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa- RISC(Reduced Instruction Set Computer), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí
+ Hình vẽ:
Trang 4
1.1.3 Ưu thế của MCU AVR:
+ Kết nối phần cứng cho AVR đơn giản với những linh kiện thông dụng như điện trở, tụ điện, thạch anh Dòng ra điều khiển Port lớn và không cần dùng điện trở kéo
+ Thiết kế mạch nạp cho AVR khá đơn giản giao tiếp qua cổng LPT, COM, USB Hỗ trợ ISP lập trình trực tiếp trên mạch
+ Hỗ trợ lập trình trên nền ngôn ngữ ASM, C với nhiều công cụ hỗ trợ như CodeVision, AVR Studio
+ Hầu hết các chip AVR có những tính năng (features) sau:
+ Xung External OSC lên đến 16Mhz và Internal OSC 8Mhz
+ Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn có thể ghi và xóa trên 1000 lần Bên cạnh đó bộ nhớ EEPROM có thể lập trình được
+ 32 Port xuất nhập
+ 8 bits, 16 bits timer/counter tích hợp PWM
+ Các bộ chuyển đối Analog – Digital phân giải 10 bits
+ Analog comparator
+ Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232)
+ Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master
và Slaver
+ Giao diện nối tiếp Serial Peripheral Interface (SPI)
1.1.4 Một số dòng AVR:
Nhìn chung AVR có các dòng chính sau:
* tinyAVR - the ATtiny series
+ 1–8 kB bộ nhớ chương trình
+ 6–32 chân
+ Limited peripheral set
* megaAVR - the ATmega series
Trang 5+ 4–256 kB bộ nhớ chương trình
+ 28–100 chân
+ Extensive peripheral set
* XMEGA — the ATxmega series
+ AT90S2323 and AT90S2343
+ AT90S2333 and AT90S4433
+ AT90S4414 and AT90S8515
+ AT90S4434 and AT90S8535
Trang 6+ Tốc độ xử lý cao, tiêu thụ điện năng thấp
+ Kiến trúc 131 tập lệnh thưc thi hầu hết trong mỗi chu kỳ xung clock
+ 32x8 thanh ghi đa dụng
+ Đạt tốc độ tối đa 16MIPS ở 16Mhz xung clock
+ Dung lượng bộ nhớ: 16Kb Flash, 512 EEPROM, 1kb Internal SRAm
+ Khả năng ghi và xóa có thể đạt đến 10000 lần, lưu trữ trong thời gian dài trên 20 năm/85oC-100 năm 25oC
+ Giao tiếp chuẩn JTAG hỗ trợ debug, Lock, Fuse bit
+ 2 bộ Timer 16 bit, 1 bộ timer 16 bit
+ 4 kênh PWM
+ 8 kênh ADC 10 bit
+ 32 port xuất nhập
+ Hỗ trợ gioa tiếp I2C, USART, SPI
+ Hoạt động tốt ở hiệu điện thế 4.5-5.5
Trang 721 : Cổng nhập xuất dữ liệu song song D ( PORTD ) nó có thể đc sử dụngcác chức năng đặc biệt thay vì nhập xuất dữ liệu- Chân 22 đến 29 : Cổng nhập xuất
dữ liệu song song C ( PORTC ) nó có thể đc sử dụngcác chức năng đặc biệt thay
vì nhập xuất dữ liệu- Chân 30 : AVCC cấp điện áp so sánh cho bộ ADC- Chân
32 : AREF điện áp so sánh tín hiệu vào ADC- Chân 33 đến 40 : Cổng vào ra dữ
Trang 8liệu song song A ( PORTA ) ngoài ra nó còn đc tíchhợp bộ chuyển đổi tín hiệu tương tự sang tín hiệu số ADC ( analog to digital converter).
2.2.2 Sơ đồ khối
Trang 92.2.3 Các Port xuất nhập:
a PORT A:
+ Port A là bên cạnh là Port xuất nhập thông thường 8 bit còn được thiết kế cho bộ ADC chuyển đổi tương tự số Port A thiết kế với điện trở nội treo lên ở mức cao
Trang 102.3 Các khối chính:
2.3.1 CPU:
+ AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ dữ liệu (data memory bus) và đường truyền cho bộ nhớ chương trình (program memory bus) được tách riêng Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với register file Trong khi đó program memory bus có độ rộng 16 bits và chỉ phục vụ cho instruction registers
a ALU:
+ ALU làm việc trực tiếp với các thanh ghi chức năng chung Các phép toán được thực hiện trong một chu kỳ xung clock Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit b Thanh ghi trạng thái:
+ Đây là thanh ghi 8 bit lưu trữ trạng thái của ALU sau các phép tính số học
và logic
Trang 11+ C: Carry Flag - cờ nhớ
+ Z: Zero Flag -Cờ zero
+ N: Negative Flag - kết quả phép toán âm
+ V: Two’s complement overflow - cờ bù 2
+ S For signed tests (S=N XOR V) - kiểm tra 2 cờ N và V
+ H: Half Carry Flag - được sử dụng trong BCD cho một số toán hạng
+ T: Transfer bit used by BLD and BST instructions - được sử dụng làm nơi trung gian trong các lệnh BLD,BST
+ I: Global Interrupt Enable/Disable Flag - đây là bit cho phép toàn cục ngắt Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ
Trang 12b Thanh ghi chức năng chung:
Atmega 16 có 32 thanh ghi chức năng chung thực thi nhiều tác vụ trong đó: + Một 8 bit output toán hạng và một 8 bit cho input kết quả
+ Hai 8 bit output toán hạng và một 8 bit cho input kết quả
+ Hai 8 bit cho output kết quả và một 16 bit cho input kết quả
+ Một 16 bit cho output toán hạng và một 16 bit cho input kết quả
2.3.2 Con trỏ ngăn xếp SP:
Trang 13+ Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit dùng để lưu trữ biến trong quá trình tính toán Stack được hiểu như là 1 “tháp” dữ liệu, dữ liệu được chứa vào stack ở đỉnh “tháp” và
dữ liệu cũng được lấy ra từ đỉnh Kiểu truy cập dữ liệu của stack gọi là LIFO + Khia báo SP tại một vùng nhớ trong SRAM với địa chỉ của SP thiết lập n>$60 Con trỏ giảm địa chỉ xuống 1 khi dữ liệu được đưa vào Stack với lệnh PUSH và hai khi có Subroutine hoặc Interrupt được gọi Con trỏ tăng địa chỉ lên
1 khi có lệnh POP dữ liệu thực hiện và lên hai khi trả dữ liệu về cho chương trình con
2.3.3 Memory:
a Bộ nhớ chương trình Flash:
+ Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình với độ rộng 16 bit Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16
+ Bộ nhớ chương trình chỉ gồm 1 phần là Application Flash Section nhưng trong các chip AVR mới chúng ta có thêm phần Boot Flash section Boot Section Thực chất, application section bao gồm 2 phần: phần chứa các instruction và phần chứa interrupt vectors Các vector ngắt nằm ở phần đầu của application section từ địa chỉ 0x0000 và dài đến bao nhiêu tùy thuộc vào loại chip và phần chứa instruction nằm liền sau đó Các chương trình được viết sau địa chỉ đó
0 đến 255 hoặc các giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31 Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2
Trang 14là các thanh ghi R16 đến R31.
Phần 2: là phần nằm ngay sau SFR bao gồm 64 thanh ghi IO hay còn gọi là vùng nhớ IO Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại
vi Vùng nhớ I/O có thể được truy cập như S
+ RAM hay như các thanh ghi I/O Nếu sử dụng instruction truy xuất SRAM
để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến 0x005F Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F
Phần 3: internal SRAM là vùng không gian cho chứa các biến trong lúc thực thi chương trình
c Bộ nhớ dữ liệu EEPROM:
+ ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một EEPROM được tách riêng và có địa chỉ tính từ 0x0000H
2.3.4 Quá trình thực thi lệnh:
+ Giản đồ xung:
+ Các instruction được chứa trong bộ nhớ chương trình Flash memory dưới dạng các thanh ghi 16 bit Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung clock và 1 instruction chứa trong program memory sẽ được load vào trong instruction register, instruction register tác động và lựa chọn register file cũng như RAM cho ALU thực thi Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi một bộ đếm chương trình – PC (Program counter) Hầu hết các instruction đều được thực thi trong 1 chu kỳ xung clock
Trang 15III: Điều khiển I/O vào ra với LED đơn, LED 7 thanh và LCD
3.1 Điều khiển I/O với LED đơn:
+ Khi xem xét đến các cổng I/O của AVR thì ta phải xét tới 3
thanh ghi bit DDxn,PORTxn,PINxn:
Điều khiển các Port A B C D của IC trong codeWizar
- Các bit DDxn để truy cập cho địa chỉ xuất nhập DDRx, để điều khiển hướng
dữ liệu của các chân của cổng
- Các bit ORTxn để truy cập tại địa chỉ xuất nhập PORTx
- Các bit PINxn để truy cập tại địa chỉ xuất nhập PINx (cổng chỉ để đọc,các cổng này có thể đọc trạng thái logic của PORTx)
Trang 163.2 Giao tiếp I/O với LED 7 thanh:
+ 4 LED 7 thanh anot chung
+ 4 chân anot chung (chân dương) được nối với 4 transitor để ta có thể quét LED sử dụng 4 chân của PORTD
các chân điều khiển sáng các thanh còn lại được nối song song nhau và đưa vào PORT của AVR và có thứ tự như sau:
+ Từ bít 0-6 ứng với từ A-G
Bít thứ 7 là dấu chấm
3.3Giao tiếp I/O với LCD:
+ 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
+ Mỗi ô chỉ có thể hiển thị một ký tự ASCII, bao gồm cá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ị.+ Kích thước của Text LCD đượ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ó Một số kích thước Text LCD thông thường gồm 16x1, 16x2, 16x4, 20x2, 20x4…
Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và song song
Trang 17Các Text LCD theo chuẩn HD44780U 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”
Chức năng các chân của LCD
Thanh ghi và tổ chức bộ nhớ :
+ HD44780U có 2 thanh ghi 8 bits là INSTRUCTION REGISTER (IR) và
DATA REGISTER (DR) Thanh ghi IR chứa mã lệnh điều khiển LCD và là
Trang 18thanh ghi “chỉ ghi” Thanh ghi DR chứa các các loại dữ liệu như ký tự cần hiển thị hoặc dữ liệu đọc ra từ bộ nhớ LCD…Cả 2 thanh ghi đều được nối với các đường dữ liệu D0:7
+ HD44780U có 3 loại bộ nhớ, đó là bộ nhớ RAM dữ liệu cần hiển thị
DDRAM (Didplay Data RAM), bộ nhớ chứa ROM chứa bộ font tạo ra ký tự CGROM (Character Generator ROM) và bộ nhớ RAM chứa bộ font tạo ra các symbol tùy chọn CGRAM (Character Generator RAM)
+ Thanh ghi và tổ chức bộ nhớ :
gồm có 80 ô, mỗi ô có độ rộng 8 bit, mỗi ô nhớ tương ứng với 1 ô trên màn hình LCD
Hình 8 Thanh ghi và tổ chức bộ nhớ LCD
CGROM : là vùng nhớ cố định chứa định nghĩa font cho các ký tự Địa chỉ font
của mỗi ký tự vùng nhớ CGROM chính là mã ASCII của ký tự đó
CGROM và DDRAM được tự động phối hợp trong quá trình hiển thị của LCD
Trang 19Bảng ký tự hiển thị của LCD
+ CGRAM còn là vùng nhớ chứa các symbol do người dùng tự định nghĩa, mỗi symbol được có kích thước 5x8 và được dành cho 8 ô nhớ 8 bit Các symbol thường được định nghĩa trước và được gọi hiển thị khi cần thiết
Điều khiển hiển thị Text LCD :
+ Các chân điều khiển LCD
+ Các chân điều khiển việc đọc và ghi LCD bao gồm RS, R/W và EN
+ RS (chân số 3): Chân lựa chọn thanh ghi RS (Select Register), chân này cho
phép lựa chọn 1 trong 2 thanh ghi IR hoặc DR để làm việc
Trang 20+ Clear display – xóa LCD
+ Cursor home – đưa con trỏ về vị trí đầu, dòng 1 của LCD
+ Set DDRAM address – định vị trí con trỏ cho DDRAM
+ Write to CGRAM or DDRAM – ghi dữ liệu vào CGRAM hoặc DDRAM + Nhóm lệnh màu xanh: nhóm lệnh này thường chỉ thực hiện 1 lần, thường được viết chung trong 1 chương trình con khởi động LCD
+ Entry mode set – xác lập các hiện thị liên tiếp cho LCD
+ Display on/off control – xác lập cách hiện thị cho LCD
+ Function set – xác lập chức năng cho LCD
Điều khiển hiển thị Text LCD :
- Giao tiếp 8 bit và 4 bit
dùng
+ Ưu điểm: của phương pháp giao tiếp này là dữ liệu được ghi và đọc rất nhanh
và đơn giản vì chip điều khiển chỉ cần xuất hoặc nhận dữ liệu trên 1 PORT + Nhược điểm: là tổng số chân dành cho giao tiếp LCD quá nhiều, nếu tính luôn
cả 3 chân điều khiển thì cần đến 11 đường cho giao tiếp LCD
bit Các instruction và data 8 bit sẽ được ghi và đọc bằng cách chia thành 2 phần, gọi là các Nibbles, mỗi nibble gồm 4 bit và được giao tiếp thông qua 4 chân D7:4, nibble cao được xử lí trước và nibble thấp sau
+ Ưu điểm: lớn nhất của phương pháp này tối thiểu số lines dùng cho giao tiếp LCD
+ Nhược điểm: là đọc và ghi từng nibble tương đối khó khăn hơn đọc và ghi dữ liệu 8 bit