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

Đồ án vi điều khiển atmega16 (ADC)

47 261 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 47
Dung lượng 1,89 MB
File đính kèm Đồ án vi điều khiển Atmega16 (ADC).rar (2 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong phạm vi của cuốn đồ án này em chỉ nghiên cứ về vi điểu khiển Atmega16 và tìm hiểu về đề tài “ Lập trình analog to digital converter trong vi điều khiển Atmega16 “ chuyển đổi tín

Trang 1

Mục lục

Chương 1 : Tổng quan về vi điều khiển Atmega16 2

1.1 Đặc điểm , tính năng 2

1.2 Cấu trúc tổng quát 9

1.3 Thanh ghi trạng thái 10

1.4 Các thanh ghi chức năng 11

1.5 Con trỏ ngăn xếp ( SP ) 11

1.6 Bộ nhớ chương trình ( Bộ nhớ Flash) 12

1.7 Bộ nhớ dữ liệu ram 13

Chương 2 : Sơ đồ khối , cấu trúc modul analog to digital converter (ADC) 14

2 1 Đặc điểm 14

2 2 Các thanh ghi của ADC 16

2.2.1 Độ chính xác của ADC 16

2.2.2 Kết quả chuyển đổi ADC 18

2.2.3 ADMUX – Multiplexer select register 19

2.2.4 ADCSRA – ADC control and status register 20

2.2.5 ADCL và ADCH – ADC data register 22

2.2.6 SFIOR - Special functionIO register 22

2.3 Bộ đếm và Thời gian chuyển đổi của ADC 23

2.4 Dang tín hiệu đầu vào và đầu ra của ADC 27

Chương 3 : Lập trình ứng dụng ADC 28

3.1 Nội dung lập trình 28

3.2 Lập trình C bằng CodeVisionAVR 30

Trang 2

MỞ ĐẦU

Vi điều khiển là một lĩnh vực khá lý thú Cùng với sự phát triển của ngành điện tử thì họ vi điều khiển cũng được các hãng sản xuất chip cho ra đời như : Z80 của Zilog , AT89 của Almel , Pic của Microchip , AVR của Atmel …

Họ vi điều khiển AVR của Atmel Corp là một bước phát triển trên nền của Vi điều khiển AT89 đã khá quen thuộc Nếu như AT89 có CPU CISC thì AVR là RISC, với kiến trúc Havard do vậy tốc độ sẽ nhanh hơn Ngoài ra AVR cũng tích hợp sẵn trong chip mạch ADC , PWM … cũng như hỗ chợ các chuẩn giao tiếp thông dụng như

UART/USART, I2C , 2-wires , … nên việc thiết kế và thực hiện phần cứng cho những ứng dụng khá thuận tiện, nhanh chóng , nhỏ gọn

Về ngôn ngữ lập trình cho Avr thì có rất nhiều , như : assembly, C , Basic , Pascal ,

… trong đó những phần mềm miễn phí do chính Atmel cung cấp , hay những hãng

khác là rất nhiều , điển hình trong số đó có CodevisionAVR

Hơn thế, chế độ mô phỏng, debug cũng được hỗ chợ các từ A-Z , nhiều phần mềm simulator , emulator như : AVRstudio , proteus, … Trong phạm vi của cuốn đồ án này

em chỉ nghiên cứ về vi điểu khiển Atmega16 và tìm hiểu về đề tài “ Lập trình analog

to digital converter trong vi điều khiển Atmega16 “ ( chuyển đổi tín hiệu tương tự sang tín hiệu số ) do thầy Lê Ngọc Trúc hướng dẫn Trong quá trình tìm hiểu em có sử

dụng tài liệu datasheet của hãng Atmel ( www.atmel.com ), cùng một số tài liệu do thầyhưỡng dẫn cung cấp Tuy vậy, trong quá trình làm làm đồ án này em vẫn còn nhiều

Trang 3

Em rất mong được sự góp ý của các thầy để em có thể hoàn thiện hơn nữa đề tài đồ

án của mình Em xin chân thành cảm ơn !

Chương 1 : Tổng quan về vi điều khiển Atmega16

1.1 Đặc điểm , tính năng

+ Hiệu suất cao , tiết kiệm điện

+ Hoàn thiện cấu trúc RISC

- 131 lệnh hiệu quả - thực thi các chu kỳ đồng hồ đơn

- 32 x 8 Thanh ghi chung đa năng + các thanh ghi điều khiển ngoại vi

- Đầy đủ các quá trình điều khiển tĩnh

- Nâng lên 16 MIPS dữ liệu tại 16 MHz

- Chíp 2 nhân

+ Độ bền , sức chịu đựng cao , không thay đổi phân vùng nhớ

- 16 KBytes bộ nhớ Flash có thể lập trình được trong hệ thống

- 512 Bytes EEPROM

- 1 Kbytes bộ nhớ SRAM bên trong

- Chu kỳ ghi/xóa : 10000Flash / 100000EEPROM

- Độ bền giữ liệu: 20 năm ở / 100 năm ở

- Đoạn mã lựa chọn chế độ khởi động với các bit khóa độc lập trong chương trình hệ thống bởi chương trình khởi động đọc thật trong khi quá trình ghi diễn ra

- Lập trình khóa cho phần mềm bảo mật

+ Giao diện JTAG ( phù hợp với tiêu chuẩn IEEE 1149.1)

- Khả năng quét biên theo tiêu chuẩn JTAG

Trang 4

- 8-kênh , 10-bit ADC:

8 kênh đầu cuối đơn

7 kênh khác nhau (vi phân)

2 kênh khác nhau với bộ khuyếch đại lập trình được tại 1x, 10x , 200x

- Bit định hướng với hai dây giao diện nối tiếp

- Lập trình kép các USARTs nối tiếp

- Giao diện nối tiếp SPI chủ/tớ

- Lập trình timer Watchdog với bộ dao động trên chip

- Bộ so sánh tương tự ( Analog ) trên chip

+ Các tính năng đặc biệt của bộ vi sử lý:

- Thiết lập bật lại nguồn và lập trình lại khi phát hiện nguồn yếu (Brown – out)

- Hiệu chỉnh độ dao động RS bên trong

- Ngắt nguồn trong và ngoài

- Sáu chế độ chờ ( Sleep ): Idle , giảm ồn ADC , tiết kiệm điện ( Power – saver), ngắt điện , chế độ chờ ( Standby) , chế độ chờ mở rộng

+ Cổng vào/ra và dạng đóng gói

- 32 đường vào/ra lập trình được

- 40 chân PDIP, 44 đường dẫn TQFP và 44 khối QFN/MLF

Trang 5

+ Mức độ xung nhịp

- 0 – 8 MHz Atmega 16L

- 0 – 16 MHz Atmega 16

Trang 6

Hình 0.1: Các chân của vi điều khiển Atmega16

Atmega16 là một vi sử lý 8 bit CMOS điên áp thấp dựa trên nền kiến trúc AVR RISC nâng cao Bằng cách thi hành các lệnh một cách mạnh mẽ trong một chu kỳ

đồng hồ duy nhất , Atmega16 có thể cho phép tốc độ đạt được là 1 MPIS/MHz từ đó nógiúp người thiết kế hệ thống có khả năng tối ưu hóa điện năng sử dụng so với tốc độ sử

Trang 7

Hình 0.2: Sơ đồ khối của vi điều khiển

Trang 8

kết quả của cấu trúc này là có nhiều kiểu chế độ hiệu quả hơn trong khi vẫn đạt được tốc độ tối đa nhanh hơn 10 các bộ vi sử lý CISC thông thường

Atmega16 cung cấp những tính năng sau đây : 16 Kbytes của bộ nhớ lập trình Flash trong hệ thống với khả năng đọc trong khi đang ghi , 512 Bytes EEPROM , 1 Kbytes SROM , 32 đường vào/ra đa năng , 32 thanh ghi chung đa năng , giao diện kiểm tra JTAG , 3 bộ timer/counter tiện dụng , bộ đếm thời gian thực , 1 USART, 1 byte định hướng 2 dây giao diện nối tiếp , 8 kênh , 10 bit ADC với các lựa chọn cổng vào riêng biệt với khả năng lập trình khuếch đại , lập trình timer Watchdog với bộ giao động bên trong , 1 cổng SPI nối tiếp , và 6 phần mềm có thể lựa chọn chế độ tiết kiệm điện Chế

độ IDLE dừng CPU trong khi chu phép USART , 2 giao diện , chuyển đổi Tương tự/Số, SRAM , Timer/counter , cổng SPI , và các ngắt hệ thông tiếp tục vận hành Chế độ tắt nguồn tiết kiệm dung lượng của thanh ghi nhưng nó làm đóng băng bộ dao động bên trong , vô hiệu hóa tất cả các chức năng của chip cho đến khi có ngắt kế tiếp hoặc là reset lại phần cứng Trong chế độ tiết kiệm điện , bộ timer vẫn tiếp tục chạy , điều này cho phép người sử dụng bảo dưỡng trong một khoảng thời gian trong khi phần còn lại của thiết bị đang trong quá trình nghỉ ( Sleeping) Kiểu giảm nhiễu ADC dừng CPU vàtất cả các modul vào/ra trừ các timer dị bộ và ADC làm cực tiểu nhiễu chuyển mạch trong xuốt quá trình chuyển đổi ADC Trong chế độ chờ Standby bộ tạo dao động

thạch anh và cộng hưởng đang chạy trong khi phần còn lại của thiết bị đang trong trạngthái ngủ Điều này cho phép rất nhiều các khởi tạo nhanh được tiêu thụ điện áp thấp Trong chế độ chờ mở rộng , cả hai bộ tạo dao động chính và các timer dị bộ vẫn đang chạy

Thiết bị này được sản xuất dựa trên công nghệ chíp nhớ độ đặc cao của ATMEL Bộ nhớ flash ISP trên chip cho phép bộ nhớ chương trình được lập trình lại trong hệ thống thông qua 1 giao diện ISP nối tiếp , bằng một chương trình lập trình bộ nhớ cố định thông thường hoặc bằng một chương trình khởi động đang chạy trong lõi của AVR

Trang 9

vùng này được cập nhật , cung cấp hoạt động đọc trong khi ghi Bằng việc kết hợp 1 CPU- cấu trúc 8 bit RISC với bộ nhớ flash lập trình hệ thống trên 1 chip đơn , Atmega

16 là một vi sử lý mạnh , nó cung cấp 1 sự linh hoạt cao và môi trường làm việc có ích cho rất nhiều các úng dụng điều khiển nhúng

Atmega 16 được hỗ trợ với 1 sự thích hợp đầy đủ của chương trình và các

công cụ phát triển hệ thống bao gồm : trình biên dịch C , các macro Asemmbler , các chương trìnhc hạy thử và mô phỏng , 1 bộ mô phỏng mạch điện , và các công cụ đánh giá so sánh

Trang 10

1.2 Cấu trúc tổng quát

Hình 0.3: Sơ đồ cấu trúc CPU của Atmega16

Thấy rằng 32 thanh ghi trong Register File được kết nối trực tiếp với Arithmetic Logic Unit -ALU (ALU cũng được xem là CPU của AVR) bằng 2 line, vì thế ALU có thể truy xuất trực tiếp cùng lúc 2 thanh ghi RF chỉ trong 1 chu kỳ xung clock

Trang 11

1.3 Thanh ghi trạng thái

C : Carry Flag – Cờ nhớ ( Nếu phép toán có nhớ cờ sẽ được thiết lập )

Z : Zero Flag – Cờ 0 ( Nếu kết quả phép toán bằng không )

N : Negative Flag - ( Nếu kết quả phép toán là âm )

V : Two’s complement overflow indicator - (Cờ này được thiết lập khi chàn số bù 2)

H : Half carry Flag - (Sử dụng trong một số toán hạng)

T : Transfer bit used by BLD and BST instructions - ( Sử dụng làm nơi trung gian trongcác lệnh BLD , BST)

I : Global interrupt Enabal/Disabal Flag - (Đây là bit cho phép toàn cục ngắt Nếu bit này ở trong thái logic 0 thì không có một ngắt nào được phục vụ)

Trang 12

1.4 Các thanh ghi chức năng

1.5 Con trỏ ngăn xếp ( SP )

Là một thanh ghi 16 bit nhưng cũng có thể xem như 2 thanh ghi chức năng đặc biệt 8 bit, có địa chỉ trong các thanh ghi chức năng đặc biệt $3E ( Trong bộ nhớ RAM là $5E) Có nhiệm vụ trỏ tới vùng nhớ RAM có ngăn xếp

Trang 13

1.6 Bộ nhớ chương trình ( Bộ nhớ Flash)

Gồm 2 phần , phần dành cho chương trình Boot và phần dành cho chương trình ứng dụng

Trang 15

Chương 2 : Sơ đồ khối , cấu trúc modul analog to digital

Thời gian chuyển đổi : 65 – 260 µs

8 kênh đầu vào có thể được lựa chọn

Có hai chế độ chuyển đổi Free running và Single conversion

Có nguồn báo ngắt khi hoàn thành chuyển đổi

Loại bỏ nhiễu trong chế độ ngủ

Tám đầu vào của ADC là tám chân của PORTA và chúng được chọn thông qua một MUX

Để điều khiển hoạt động vào ra dữ liệu của ADC và CPU chúng ta có 3 thanh ghi: ADMUX là thanh ghi điều khiển lựa chọn kênh đầu vào cho ADC , ADCSRA là thanh ghi điều khiển và thanh ghi trạng thái của ADC , ADCH và ADCL là hai thanh ghi dữ liệu

Bộ ADC chuyển đổi tín hiệu đầu vào analog sang tín hiệu digital 10-bit thông quaapproxi-mation Giá trị nhỏ nhất đại diện cho chân GND và giá trị lớn nhất đại diện cho điện áp trên chân AREF

Trang 16

Hình 0.4: Sơ đồ bộ biến đổi ADC

Trang 17

2 2 Các thanh ghi của ADC

2.2.1 Độ chính xác của ADC

Một số thông sô mô tả độ lệch của trạng thái lý tưởng

Offset: Độ lệch của quá trình chuyển đổi đầu tiên (0x000 để 0x001) so với quá trình chuyển đổi lý tưởng (0.5 LSB) Giá trị lý tưởng: 0 LSB

Không thể tách rời tuyến tính (INL): Sau khi điều chỉnh bù đắp và đạt được lỗi, INL

là độ lệch tối đa của một quá trình chuyển đổi thực tế so với một quá trình chuyển đổi

lý tưởng cho bất kỳ mã Giá trị lý tưởng: 0 LSB

Trang 18

Không phân tuyến tính (DNL): Chiều rộng độ lệch thực tế (khoảng cách giữa hai quá trình chuyển đổi liền kề) với chiều rộng lý tưởng (1 LSB) Giá trị lý tưởng: 0 LSB.

Lượng Lỗi: Do lượng tử của điện áp đầu vào thành một số hữu hạn các mã số, một loạt các điện áp đầu vào (rộng 1 LSB) sẽ mã với giá trị tương tự Luôn luôn ± 0,5 LSB

Độ chính xác tuyệt đối: Độ lệch tối đa của một thực tế (không điều chỉnh) chuyển đổi so với một quá trình chuyển đổi lý tưởng cho bất kỳ mã Đây là hiệu ứng của hợp chất Offset, Gain lỗi, sai lỗi, không tuyến tính, và Quantization Lỗi Giá trị lý tưởng: ± 0,5 LSB

Trang 19

2.2.2 Kết quả chuyển đổi ADC

Sau khi chuyển đổi hoàn tất (ADIF là cao), kết quả chuyển đổi có thể được tìm thấy trong ADC Kết quả chuyển vào (ADCL, ADCH)

VIN : Điện áp trên chân đầu vào

VREF: Điện áp tham chiếu được lựa chọn 0x000 đến 0x3FF

Trang 20

2.2.3 ADMUX – Multiplexer select register

Đây là thanh ghi điều khiển 8 bit

Lựa chọn điện áp tham chiếu

Chọn kênh ADC

Thanh ghi ADMUX

Các REFS1 , REFS0 chọn điện áp tham chiếu cho ADC :

0 1 AVCC với tụ điện bên ngoài của chân AREF

Điện áp tham chiếu nội , tương ứng với bit REFS=1 :

#define INT_MODE (1<<REFS1)|(1<<REFS0)

Chọn điện áp tham chiếu từ chân AVCC:

#define AVCC_MODE (1<<REFS0) Với 4 bít được định nghĩa là MUX3 , MUX2 , MUX1 , và MUX0 , ứng với các tổ hợp logic ta có thể chọn kênh đầu vào Cụ thể :

Trang 21

2.2.4 ADCSRA – ADC control and status register

Đây là thanh ghi điều khiển và lưu trạng thái của ADC

ADEN – ADC enable :

Đây là bít điều khiển hoạt động của ADC Khi bit này được set lên 1 thì ADC có thể hoạt động và ngược lại Nếu như ta ngừng hoạt động của ADC trong khi nó đang

Trang 22

đổi đầu tiên Bit này được giữ xuốt trong quá trình chuyển đổi và được xóa khi mà chuyển đổi xong.

ADATE – ADC auto trigger enable

Khi bit này được set thi ADC bắt đầu chuyển đổi mỗi khi có một nguồn kích hoạt

xuất hiện Việc lựa chọn nguồn kích hoạt thực hiện bằng cách set các bit trong thanh

ghi SFIOR

ADIF – ADC interrupt Flag

Bit này được Set lên 1 bởi phần cứng khi quá trình chuyển đổi đã hoàn thành và thanh ghi dữ liệu đã cập nhật Bit này được xóa bằng phần cứng nếu như ngắt này

được phép và được phục vụ Hoặc có thể được xóa bằng cách ghi giá trị logic “ 0 “ vào cờ này Cụ thể khi ngắt bị cấm , ta có thể sử dụng các lệnh sbi và cbi để tác dụng lên bít này

ADIE – ADC interrupt enable

Nếu bit này set 1 và ngắt toàn cục được phép phục vụ và nếu bị xóa thì ngược lại

ADPS2…ADPS0 – Bít lựa chọn xung nhịp ( Tốc độ )

Nguồn xung được lấy từ nguồn xung của vi điều khiển ( XTAL ) và được chia tần thông qua bộ chia tần

Các bit ADPS có nhiệm vụ chọn số chia cho bộ chia tần theo bảng sau :

Trang 23

2.2.5 ADCL và ADCH – ADC data register

Thanh ghi này chứa giá trị chuyển đổi từ tương tự sang số

Nếu quá trình chuyển đỗi đã kết thúc, kết quả chuyển đổi sẽ được chứa trong 2 thanh ghi ADCL và ADCH, 2 thanh ghi này được tự động gộp thành thanh ghi 16 bit ADCW (ADC WORD)

Trả về kết quả chuyển đổi , câu lệnh :

return ADCW;

ADLAR = 0 :

ADLAR = 1:

2.2.6 SFIOR - Special functionIO register

Thanh ghi chức năng đặc biệt, 3 bit cao trong thanh ghi này quy định nguồn kích

Trang 24

Nguồn kích ADC trong chế độ Auto Trigger:

Trang 25

Theo mặc định, tần số đầu vào cấp cho mạch trong một chu kỳ lằm trong khoảng từ 50kHz đến 200kHz để đạt độ phân giải tối đa Nếu độ phân giải thấp hơn 10bit là cần thiết , đầu vào của 1 chu kỳ tần số cho ADC có thể cao hơn 200kHz để đạt được 1 tỷ

lệ

Các module của ADC có một bộ đếm gộp, tạo ra bộ ADC có 1 chu kỳ tần số có thể chấp nhận được bất kỳ CPU nào có tần số trên 100kHz Các bộ đếm được thiết lập bởi các bit ADPS và ADCSRA Bộ đếm bắt đầu từ thời điểm bộ ADC thiết lập bit ADEN trong thanh ghi ADCSRA Bộ đếm tiếp tục chay cho đến khi các bít ADEN được thiết lập , và liên tục cho đến khi bit ADEN đạt giá trị thấp nhất Khi bắt đầu kếtthúc quá trình chuyển đổi đầu tiên bằng cách thiết lập bit ADSC trong thanh ghi

ADCSRA Một lần chuyển đổi bình thương mất 13 chu kỳ thời gian ADC

Trên thực tế là 1,5 chu kỳ thời gian sau lần chuyển đổi bình thường và 13,5 chu kỳ thời gian ADC sau lần chuyển đổi đầu tiên Khi quá trình chuyển đổi hoàn tất kết quả được ghi vào bộ ADC dữ liệu và ADIF được thiết lập Khi ở chế độ tự động , bộ đếm

sẽ thiết lập lại những việc đã làm và bắt đầu quá trình chuyển đổi

Trong chế độ chạy Free running , một chuyển đổi mới sẽ được thiết lập ngay lập tứcsau khi sau khi quá trình chuyển đổi trước hoàn tất , trong khi ADSC vần còn ở mức cao

Bảng 1 : Giản đồ thời gian ADC, lần chuyển đổi đầu tiên (Chế độ chuyển đổi đơn)

Trang 26

Bảng 2 : Giản đồ thời gian ADC , chuyển đổi đơn

Bảng 3 : Giản đồ thời gian ADC , tự động hiển thị chuyển đổi

Trang 27

Bảng 4 : Giản đồ thời gian ADC, chế độ chuyển đổi Free Running

Trang 28

Bảng 5 : Thời gian chuyển đổi ADC

Điều kiện Bắt đầu chu kỳ chuyển đổi Thời gian chuyển đổi

(Chu kỳ )

Chuyển đổi bình thường,

Trang 29

2.4.2 Tín hiệu đầu ra

Xung vuông :

Trang 30

Hình 2.3 : Tín hiệu sau khi chuyển đổi từ analog sang digital

Ngày đăng: 24/02/2021, 02:31

TỪ KHÓA LIÊN QUAN

w