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 1Mụ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 2MỞ ĐẦ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 3Em 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 6Hì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ử
lý
Trang 7Hình 0.2: Sơ đồ khối của vi điều khiển
Trang 8kế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 9vù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 101.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 111.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 121.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 131.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 15Chươ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 16Hì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 18Khô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 192.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 202.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 212.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 232.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 24Nguồn kích ADC trong chế độ Auto Trigger:
Trang 25Theo 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 26Bả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 27Bảng 4 : Giản đồ thời gian ADC, chế độ chuyển đổi Free Running
Trang 28Bả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 292.4.2 Tín hiệu đầu ra
Xung vuông :
Trang 30Hình 2.3 : Tín hiệu sau khi chuyển đổi từ analog sang digital