DTCN_DOAN_TN_006_CHUONG II_ATMEGA32

18 726 39
Tài liệu đã được kiểm tra trùng lặp
DTCN_DOAN_TN_006_CHUONG II_ATMEGA32

Đ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

Đồ án tốt nghiệp điện tử

Đồ án tốt nghiệp Trang 2 CHƯƠNG II GIỚI THIỆU VI ĐIỀU KHIỂN ATMEGA32 GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 3 2 .1 Giới thiệu AVR Atmega32 Atmega32 là bộ vi điều khiển thuộc họ AVR do hãng Atmel sản xuất, là bộ vi điều khiển CMOS 8 bit tiêu thụ điện năng thấp dựa trên kiến trúc RISC (Reduced Instruction Set Computer). Công nghệ này cho phép hầu hết các lệnh được thực thi chỉ trong một chu kỳ xung nhịp, vì thế tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số 1 MHz. Vi điều khiển này cho phép người thiết kế có thể tối ưu hoá mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc đô xử lý. Đặc điểm, tính năng: • Hiệu suất cao và điện năng tiêu thụ thấp. • Được chế tạo theo cấu trúc RISC.  Bộ lệnh gồm 131 lệnh, hầu hết đều được thực thi trong 1 chu kỳ xung nhịp.  32 x 8 thanh ghi làm việc đa dụng. • Độ bền cao, không thay đổi phân vùng nhớ.  32K Bytes Flash có khả năng lập trình được trên hệ thống.  1024 Bytes EEPROM.  2K Bytes bộ nhớ SRAM nội.  Chu kỳ ghi/xoá : 10.000 Flash / 100.000 EEPROM.  Độ bền dữ liệu : 20 năm ở 85 0 C / 100 năm ở 25 0 C.  Giao diện SPI cho lập trình hệ thống.  Lập trình khoá chip bảo mật phần mềm. • Giao diện JTAG (phù hợp tiêu chuẩn IEEE 1149.1). • Tính năng On-chip debug. • Đặc điểm ngoại vi.  2 bộ Timer/ Counter 8 bit, 1 bộ Timer/ Counter 16 bit.  Bộ counter thời gian thực với bộ dao động riêng biệt.  4 kênh PWM.  8 kênh ADC 10 bit.  Giao diện nối tiếp Two-Wire-Serial (tương thích chuẩn I2C).  Giao diện nối tiếp UART (tương thích chuẩn nối tiếp RS-232).  Giao diện nối tiếp SPI (Serial Peripheral Interface).  Hỗ trợ lập trình Wacthdog timer. • Các tính năng đặc biệt của bộ vi xử lý.  Thiết lập lại nguồn và phát hiện nguồn yếu (brown-out).  Dao động nội RC.  6 chế độ chờ: Idle, giảm nhiễu ADC, Power-save, Power-down, Standby và Standby mở rộng. • Cổng vào/ra và đóng gói:  32 ngõ I/O lập trình được.  Dạng PDIP 40 chân, dạng TQFP và QFN/MLF 44 chân. • Điện áp và xung nhịp hoạt động.  4,5V – 5,5V Atmega32 / 0 – 16MHz.  2,7V – 5,5V Atmega32A/ 0 – 8MHz. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 4 2.1.1 Sơ đồ chân Sơ đồ chân Atmega32: Hình 2.1 Sơ đồ chân của Atmega32. Mô tả sơ lược chức năng các chân: • VCC : Là chân cấp điện áp nguồn cung cấp Vcc. • GND : Là chân nối mass. • PortA (PA7:PA0) :  Ngõ vào chuyển đổi ADC.  Ngõ vào/ra song hướng 8 bit nếu không dùng như bộ chuyển đổi ADC. • PortB (PB7:PB0) :  Ngõ vào/ra song hướng 8 bit.  PortB cũng có chức năng đặc biệt: PB7 (SCK) : Ngõ ra xung clock Master, ngõ vào xung clock Slave cho SPI. PB6 (MISO) : Ngõ vào data Master, ngõ ra data Slave cho SPI. PB5 (MOSI) : Ngõ ra data Master, ngõ vào data Slave cho SPI. PB4 (SS\) : Ngõ vào lựa chọn Slave cho SPI, tích cực mức thấp. PB3 (AIN1/OC0) : Ngõ vào so sánh tương tự / Nngõ ra Timer/Counter. PB2 (AIN0/INT2) : Ngõ vào so sánh tương tự / Ngắt ngoài thứ 2. PB1 (T1) : Timer/Counter1. PB0 (T0/XCK) : Timer/Counter0 / Xung ngoài USART. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 5 • PortC (PC7:PC0) :  Ngõ vào/ra song hướng 8 bit.  PortB cũng có chức năng đặc biệt: PC7 (TOSC2) : Ngõ vào kết nối đồng bộ với bộ dao động Timer/Counter2. PC6 (TOSC1) : Ngõ vào kết nối đồng bộ với bộ dao động Timer/Counter2. PC5 (TDI) : Chân kiểm tra dữ liệu vào chuẩn JTAG. PC4 (TDO) : Chân kiểm tra dữ liệu ra theo chuẩn JTAG. PC3 (TMS) : Chân chọn mode kiểm tra theo chuẩn JTAG. PC2 (TCK) : Chân xung kiểm tra theo chuẩn JTAG. PC1 (SDA) : Chân data theo chuẩn Two-Wire-Serial. PC0 (SCL) : Chân xung clock theo chuẩn Two-Wire-Serial. • PortD (PD7:PD0) :  Ngõ vào/ra song hướng 8 bit.  PortD cũng có chức năng đặc biệt: PD7 (OC2) : Timer/Counter2. PD6 (ICP1) : Timer/Counter1. PD5 (OC1A) : Timer/Counter1A out. PD4 (OC1B) : Timer/Counter1B out. PD3 (INT1) : Ngắt ngoài 1. PD2 (INT0) : Ngắt ngoài 0. PD1 (TXD) : Ngõ ra truyền thông USART. PD0 (RXD) : Ngõ vào truyền thông USART. • Reset\ : Ngõ vào reset, tích cực mức thấp. • XTAL1 : Ngõ vào bộ khuếch đại dao động. • XTAL2 : Ngõ ra bộ khuếch đại dao động. • AVCC : Chân cấp nguồn cho PortA và bộ chuyển đổi ADC. Khi không sử dụng ADC chân này nên được nối nguồn VCC. Khi sử dụng ADC, chân này nên được nối qua bộ lọc thấp tần (tụ điện). • AREF : Chân điện áp tham chiếu cho bộ chuyển đổi ADC. 2.1.2 Tổng quan • Cấu trúc bên trong Atmega32: Phần lõi của AVR kết hợp phong phú về cấu trúc lệnh với 32 thanh ghi làm việc đa năng. Toàn bộ 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic Unit), cho phép truy cập 2 thanh ghi độc lập trong cùng 1 chu kỳ xung nhịp. Kiến trúc đạt được có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC thông thường. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 6 Hình 2.2 Sơ đồ cấu trúc của AVR Atmega32. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 7 Lõi AVR sử dụng kiến trúc Harvard – với các bus riêng biệt cho chương trình và dữ liệu. Lệnh từ bộ nhớ chương trình thực thi thông qua một ống đơn cấp. Khi một lênh đang thực thi, lệnh tiếp theo sẽ được nhốt (pre-fetch) từ bộ nhớ chương trình, cho phép các lệnh được thực thi trong mỗi chu kì clock. 32 thanh ghi làm việc 8-bit cho phép truy xuất nhanh trong 1 chu kỳ clock. Trong hoạt động thông thường của ALU, 2 toán hạng xuất ra từ thanh ghi làm việc, lệnh thực thi, và kết quả lưu ngược lại thanh ghi làm việc chỉ trong 1 chu kì clock. 6 trong số 32 thanh ghi được dùng như con trỏ địa chỉ gián tiếp 16-bit sử dụng cho địa chỉ không gian dữ liệu. 1 trong 3 thanh ghi địa chỉ này có thể dùng như con trỏ địa chỉ look-up table trong bộ nhớ Flash. Bộ ALU hỗ trợ các hoạt động tính toán số học và logic giữa thanh ghi với nhau, hay giữa thanh ghi với hằng số. Các hoạt động từng thanh ghi đơn cũng được thực hiện trong ALU. Sau khi tính toán, thanh ghi trạng thái (Status Register) cập nhật thông tin liên quan đến kết quả tính toán. Dòng chương trình (Program Flow) được cung cấp bởi các lệnh nhảy có điều kiện hoặc không điều kiện, và có thể định địa chì trực tiếp đến toàn bộ không gian địa chỉ. Hầu hết các lệnh trong AVR đều ở dạng 16-bit. Mỗi địa chỉ bộ nhớ chương trình chứa một lệnh 16 hoặc 32-bit. Bộ nhớ chương trình chia ra làm 2 phần: Boot Loader và vùng ứng dụng. Cả 2 đều sử dụng các lockbit để bảo vệ đọc/ghi. Lệnh SPM thực thi việc ghi dữ liệu vào vùng flash ứng dụng phải được đặt trong vùng Boot Loader. Trong quá trình ngắt hay hàm/chương trình con được gọi, địa chỉ trả về của bộ đếm chương trình lưu trong ngăn xếp (stack). Stack được phân bố hiệu quả trong 1 phần bộ nhớ SRAM, vì vậy, độ lớn của stack chỉ phụ thuộc vào SRAM và việc sử dụng SRAM. Chương trình người dùng cần phải khởi tạo giá trị này cho SP – Con trỏ ngăn xếp (Stack Pointer) trong chương trình sau khi reset và trước khi thực hiện bất kì việc gọi hàm hay chương trình ngắt được thực thi. Module ngắt linh hoạt có thanh ghi điều khiển riêng trong không gian IO và có bit cho phép ngắt toàn cục trong thanh ghi trạng thái (Status Register). Tất cả các ngắt đều có vector ngắt riêng trong bảng vector ngắt. Các ngắt có ưu tiên ngắt theo đúng vị trí ngắt của nó. Địa chỉ ngắt càng thấp thì độ ưu tiên ngắt càng cao. 2 . 2 Giao tiếp UART trên Atmega32 2.2.1 Giới thiệu Thuật ngữ USART (Universal Synchronous & Asychronous serial Reveiver and Transmitter) nghĩa là bộ truyền nhận nối tiếp đồng bộ và không đồng bộ. Trong đó UART nói đến truyền nhận không đồng bộ, thường để chỉ thiết bị phần cứng, không phải chỉ một chuẩn giao tiếp. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 8 USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó (ví dụ chuẩn RS232). Truyền thông nối tiếp: Trong các ứng dụng phức tạp cần sử dụng nhiều vi điều khiển (hoặc vi điều khiển và máy tính) kết nối với nhau. Khi làm việc, các vi điều khiển này cần trao đổi dữ liệu với nhau, việc sử dụng giao tiếp song song là đơn giản nhất vì dữ liệu được xuất và nhận trực tiếp không thong qua bất kỳ một giải thuật biến đổi nào và vì thế tốc độ truyền cũng rất nhanh. Tuy nhiên, nhược điểm của cách truyền này là số đường truyền quá nhiều. Hệ thống truyền song song thường rất cồng kềnh và kém hiệu quả. Truyền thông nối tiếp sẽ giải quyết vấn đề này, trong truyền thông nối tiếp dữ liệu được truyền từng bit trên 1 (hoặc một ít) đường truyền. Khác với cách truyền đồng bộ, truyền thông “không đồng bộ” chỉ cần 1 đường truyền cho một quá trình. “Khung dữ liệu” đã được chuẩn hoá bởi các thiết bị nên không cần đường xung nhịp báo trước dữ liệu đến. Do đó, việc tuân thủ các tiêu chuẩn truyền là rất quan trọng. Các khái niệm quan trọng trong phương pháp truyền thông này. • Baud rate (tốc đô Baud): Để việc truyền và nhận không đồng bộ xảy ra thành công thì các thiết bi tham gia phải thông nhất với nhau về khoảng thời gian dành cho 1 bit truyền, hay nói cách khác tốc độ truyền phải được cài đặt từ trước phải giống nhau, tốc độ này gọi là tốc độ Baud. Theo định nghĩa, tốc độ baud là số bit truyền trong 1 giây. Ví dụ tốc độ Baud là 19200 thì thời gian dành cho 1 bit truyền là 1/19200 ~52.083us. • Frame (khung truyền): Khung truyền là yếu tố quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit báo như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một data cũng được quy định bởi khung truyền. Đối với AVR, khung truyền phổ biến nhất thường là: Start bit + 8 bit data + 1 stop bit. • Start bit: là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu được truyền tới. Ở module USART trong AVR, đường truyền luôn ở trạng thái cao khi nghỉ (idle), nếu một chip AVR muốn thực hiện việc truyền dữ liệu, nó sẽ gửi một bit start băng cách kéo đường truyền xuống mức “0”. Như vậy, với AVR bit start mang giá trị “0” và có giá trị điện áp 0V (với chuẩn RS232 giá trị điện áp của bit start là ngược lại). Start bit là bit bắt buộc phải có trong khung truyền. • Data: data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận. Data không nhất thiết phải là gói 8 bit, với AVR chúng ta có thể quy định số lượng bit của data là 5, 6, 7, 8 hoặc 9. Trong truyền thông nối tiếp UART, bit có trọng số nhỏ nhất (LSB – Least Significant Bit, bit bên phải) của data sẽ được truyền trước và cuối cùng là bit có trọng số lớn nhất (MSB – Most Significant Bit, bit bên trái). • Parity bit: là bit dùng để kiểm tra dữ liệu truyền có đúng không (một cách tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity chẵn nghĩa GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 9 là tổng số lượng số 1 là số chẵn. Ngược lại tổng số lượng số 1 trong parity lẻ luôn là số lẻ. Parity khong phải là bit bắt buộc, vì thế chúng ta có thể loại bỏ bit này ra khỏi khung truyền. • Stop bits: là một hoặc các bit báo cho thiết bị nhận biết rằng một gói dữ liệu đã được gửi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bit bắt buộc phải có trong khung truyền, đối với AVR có thể là 1 hoặc 2 bits. 2.2.2 Truyền thống UART trên Atmega32 Vi điều khiển Atmega32 có 1 module truyền thông nối tiếp USART. Có 3 chân chính liên quan đến module này, đó là chân xung nhịp – XCK (chân số 1), chân truyền dữ liệu – TxD (Transmitted Data) và chân nhận dữ liệu – RxD (Received Data). Trong đó chân XCK chỉ được sử dụng như là chân phát hoặc nhận xung nhịp trong chế độ truyền đồng bộ. Tuy nhiên, trong đề tài này nhóm thực hiện không khảo sát chế độ truyền thông đồng bộ, do đó không quan tâm đến chân XCK. Để kết nối các chịp AVR với nhau (hoặc kết nối AVR với các thiết bị hỗ trợ UART khác), chúng ta phải đấu chéo 2 chân này với nhau, TxD của thiết bị này kết nối với RxD của thiết bị thứ 2 và ngược lại. Module USART trên chip Atmega32 hoạt động song công (Full Duplex Operation), nghĩa là quá trình truyền và nhận dữ liệu có thể xảy ra đồng thời. Sau đây là sơ đồ khối UART bên trong Atmega32. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 10 2.2.3 Các thanh ghi Các hoạt động và trạng thái của module USART được điều khiển và quan sát thông qua các thanh ghi trong vùng nhớ I/O. Có 5 thanh ghi được thiết kế riêng cho hoạt động và điều khiển của USART là: UDR: là thanh ghi dữ liệu 8 bit chứa giá trị nhận được và phát đi của USART. Thanh ghi này có thể coi như 2 thanh ghi TXB (Transmit data Buffer) và RXB (Receive data Buffer) có chung địa chỉ. Đọc UDR thu được giá trị thanh ghi đệm dữ liệu nhận, viết giá trị vào UDR có thể xem là viết dữ liệu vào thanh ghi đệm phát, chuẩn bị để gửi đi. Đối với các khung truyền sử dụng 5, 6, 7 bit dữ liệu, các bit cao của thanh ghi UDR sẽ không được sử dụng. UCSRA (USART Control and Status Regisster A): là 1 trong 3 thanh ghi điều khiển hoạt động của module USART. Thanh ghi USART chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết thúc (RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống (UDRE), khung truyền có lỗi (FE), dữ liệu tràn (DOR), kiểm tra parity có lỗi (PE)… trong đó các bit các bit quan trọng cần chú ý: • UDRE (USART Data Register Empty) khi bit này bằng 1 nghĩa là thanh ghi dữ liệu UDR đang trống và sẵn sàng cho một nhiệm vụ truyền hay nhận dữ liệu tiếp theo. • U2X là bit chỉ định gấp đôi tốc độ truyền, khi bit này được set lên 1 thì tốc độ truyền cao gấp 2 lần so với khi bit này mang giá trị 0. • MPCM là bit chọn chế độ hoạt động đa xử lý (Multi – processor). UCSRB (USART Control and Status Register B): Đây là thanh ghi quan trọng điều khiển USART. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp Trang 11 • RXCIE (Receive Complete Interupt Enable) là bit cho phép ngắt khi quá trình nhận kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp không đồng bộ thường được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi USART được dùng để nhận dữ liệu. • TXCIE (Transmit Complete Interupt Enable) là bit cho phép ngắt khi quá trình truyền kết thúc. • UDRIE (USART Data Register Empty Interupt Enable) là bit cho phép ngắt khi thanh ghi dữ liệu UDR trống. • RXEN (Receive Enable) là một bit quan trọng điều khiển bộ nhận của USART, khi bit này bằng 1 chức năng nhận dữ liệu sẽ được kích hoạt. • TXEN (Transmit Enable) là bit điều khiển bộ phát, khi bit này được set lên 1 sẽ khởi động bộ phát của USART. • UCSZ2 (Character size) bit này kết hợp với 2 bit khác trong thanh ghi UCSRC để quy định độ dài của dữ liệu truyền/nhận. • RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. AVR hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ được chứa trong thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ 9, RXB8 chính là bit thứ 9. • TXB8 (Transmit Data Bit 8) tương tự bit RXB8, bit này đóng vai trò bit thứ 9 trong truyền thông, nhưng bit này được dùng trong lúc truyền. UCSRC (USART Control and Status Register C): thanh ghi này chủ yếu quy định khung truyền và chế độ truyền nhận. Tuy nhiên, thanh ghi này trùng địa chỉ với thanh ghi UBRRH (thanh ghi chứa byte cao dùng để xác lập tốc độ baud), hay 2 thanh ghi này là 1. Vì thế bit 7 trong thanh ghi này, tức là bit URSEL là bit chọn thanh ghi. Khi URSEL=1, thanh ghi này được AVR hiểu là thanh ghi điều khiển UCSRC, ngược lại nếu bit URSEL=0 thì thanh ghi UBRRH sẽ được sử dụng. Các bit còn lại trong thanh ghi UCSRC được mô tả như sau: • UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền đồng bộ và không đồng bộ. Nếu UMSEL=0, chế đô không đồng bộ được chọn, ngược lại nếu UMSEL=1, chế độ đồng bộ được kích hoạt. • Hai bit UPM1 và UPM0 (Parity Mode) được dùng để quy định kiểm tra parity. Nếu UPM1:0=00, parity không được sử dụng (mode khá thông dụng), UPM1:0=01 không được sử dụng, UMP1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ được sử dụng. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 . tốt nghiệp Trang 2 CHƯƠNG II GIỚI THIỆU VI ĐIỀU KHIỂN ATMEGA32 GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ án tốt nghiệp. động.  4,5V – 5,5V Atmega32 / 0 – 16MHz.  2,7V – 5,5V Atmega32A/ 0 – 8MHz. GVHD: Ths. Nguyễn Văn Nga Chương II: Giới thiệu vi điều khiển Atmega32 Đồ

Ngày đăng: 23/04/2013, 14:00

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan