chuong 4- cac chuc nang cua atmega16

41
Chương 4: CÁC CHỨC NĂNG CỦA ATMEGA16 Th.S Lê Quốc Đán [email protected]

Upload: hoang-vuong

Post on 24-Apr-2015

381 views

Category:

Documents


14 download

DESCRIPTION

VI XU LY

TRANSCRIPT

Page 1: Chuong 4- Cac Chuc Nang Cua ATmega16

Chương 4: CÁC CHỨC NĂNG CỦA ATMEGA16

Th.S Lê Quốc Đán

[email protected]

Page 2: Chuong 4- Cac Chuc Nang Cua ATmega16

Nôi dung

4.1 BỘ BIẾN ĐỔI ADC

4.2 BỘ SO SÁNH TƯƠNG TỰ

4.3 HOẠT ĐỘNG NGẮT

4.4 NGẮT NGOÀI

4.5 LẬP TRÌNH BỘ NHỚ

4.6 BỘ THU PHÁT USART

4.7 BỘ ĐỊNH THỜI VÀ BỘ ĐẾM

Page 3: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Các đặc tính

• Độ phân giải 10 bít

• Chính xác tuyệt đối ±2 LSB

• Thời gian chuyển đổi 65 đến 260 us

• 8 kênh ngõ vào bộ dồn kênh

• 7 kênh ngõ vào vi sai

• 2 kênh ngõ vào vi sai với độ lợi ở 10x và 200x

• Dải điện áp vào ADC: 0 đến VCC

• Điện áp tham chiếu ADC có thể chọn 2,56V

• ADC bắt đầu chuyển đổi bằng việc kích tự động trên nguồn ngắt

Page 4: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Hìn

h 5-

1: s

ơ đ

ồ kh

ối b

ộ A

DC

Page 5: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Hoạt động Bộ ADC biến đổi một tín hiệu điện áp ngõ vào sang một giá trị 10 bit

thông qua mạch xấp xĩ liên tục. Giá trị thấp nhất tương ứng với GND và giá trị cao nhất bằng với điện áp chân AREF trừ đi 1 LSB.

Kết quả biến đổi ADC được lưu vào các thanh ghi dữ liệu ADC là ADCH và ADCL

Bộ ADC có thể hoạt động ở 2 chế độ: Single Conversion và Free Running. Ở chế độ Single Conversion, người sử dụng phải kích hoạt chuyển đổi. Ở chế độ Free Running, bộ ADC tự lấy mẫu và cập nhật vào thanh ghi dữ liệu ADC. Bit ADFR ở thanh ghi ADCSR sẽ cho phép lựa chọn giữa 2 chế độ hoạt động này.

Bộ ADC có ngắt riêng, ngắt này được kích hoạt ngay khi hoàn tất việc chuyển đổi. Khi việc truy xuất ADC vào các thanh ghi dữ liệu (đọc từ ADCH và ADCL) bị cấm, ngắt này sẽ kích hoạt.

Page 6: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Cấp nguồn ADC

Hình 5‑2: Sơ đồ khối bộ chia ADC

Page 7: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Bộ chia tỷ lệ Prescale

Mạch xấp xĩ liên tục cần có một tần số xung nhịp ngõ vào (khoảng 50Khz-200Khz) để đạt được độ phân giải cao nhất. Nếu cần độ phân giải thấp hơn 10 bit, tần số xung nhịp ngõ vào có thể cao hơn 200Khz để đạt được tốc độ lấy mẫu cao hơn. Bộ ADC ó một bộ chia, dùng để tạp ra xung clock ADC. Tần số bộ chia được đặt bằng các bit ADPS trong thanh ghi ADCSRA.

Hình 5‑3: Sơ đồ khối bộ chia ADC

Page 8: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Điều chỉnh thời gian ADC Một quá trình chuyển đổi ADC thông thường cần 13 chu kỳ clock. Sau khi

ADC cho phép (bit ADEN trong ADCSRA được đặt), lần chuyển đổi ADC đầu tiên cần 25 chu kỳ clock để khởi tạo hệ thống mạch tương tự.

Việc lấy mẫu và xử lý mẫu thực chất cần 1,5 chu kỳ đồng hồ ADC đối với một quá trình chuyển đổi thông thường và cần 13,5 chu kỳ đồng hồ ADC đối với quá trình chuyển đổi đầu tiên. Các kết quả sau khi hoàn tất quá trình chuyển đổi sẽ được ghi vào các thanh ghi dữ liệu ADC và cờ ADIF được set. Bit ADSC cũng được xoá ngay lúc đó đối với chế độ Single Conversion, sau đó bit này được set lại bằng phần mềm và một quá trình chuyển đổi mới được hoạt động.

Page 9: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Hình 5‑4: giản đồ thời gian ADC cho lần chuyển đổi đầu tiên (chế độ chuyển đổi đơn)

Page 10: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Hình 5‑5: giản đồ thời gian ADC ở chế độ chuyển đổi đơn

Page 11: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Công thức tính toán ADC Sau khi chuyển đổi hoàn tất (bit ADIF = “1”), kết quả chuyển đổi có thể

được tìm thấy trong thanh ghi ADC (ADCL, ADCH).

Chuyển đổi đơn, kết quả là:

VIN: điện áp ngõ vào

VREF: điện áp tham chiếu

Nếu kênh vi sai được sử dụng, thì kết quả là:

VPOS: điện áp ngõ vào dương

VNEG: điện áp ngõ vào âm

Page 12: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Thanh ghi ADMUX (ADC Multiplexer Select Register)

• Bit 7:6 – REFS1:0: các bit lựa chọn điện á tham chiếu

• Bit 5 – ADLAR (ADC Left Adjust Result)

• Bit 4:0 – MUX4:0: các bit chọn kênh tương tự và độ lợi

Page 13: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Thanh ghi điều khiển và trạng thái ADC (ADCSRA- ADC Control and Status Register A)

• Bit 7 – ADEN: ADC Enable

ADEN = “1” cho phép thực hiện ADC

• Bit 6 – ADSC: ADC Start Conversion

ADSC = “1” để bắt đầu mỗi chuyển đổi. Khi mỗi chuyển đổi hoàn tất thì ADSC = “0”

• Bit 5 – ADATE: ADC Auto Trigger Enable

• Bit 4 – ADIF: ADC Interrupt Flag

ADIF = “1” khi chuyển đổi ADC hoàn tất và dữ liệu được cậ nhật. Ngắt chuyển đổi hoàn tất ADC được thi hành khi bit ADIE và bit I trong SREG bằng 1.

Page 14: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

• Bit 3 – ADIE: ADC Interrupt Enable

Khi ADIE và bit I trong SREG bằng 1, ngắt hoàn tất chuyển đổi ADC sẽ được kích hoạt.

• Bit 2:0 – ADPS2:0: ADC Prescaler Select

Các bit này xác định hệ số chia giữa tần số thạch anh và tần số clock ngõ vào ADC

Page 15: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Thanh ghi dữ liệu ADC (ADCL và ADCH)

Thanh ghi dữ liệu ADC khi bit ADLAR = 0 (mặc định)

Thanh ghi dữ liệu ADC khi bit ADLAR = 1

Page 16: Chuong 4- Cac Chuc Nang Cua ATmega16

4.1 BỘ BIẾN ĐỔI ADC

Thanh ghi vào/ra chức năng đặc biệt SFIOR (Special Function I/O Register)

• Bit 7:5 – ADTS2:0: chọn nguồn trigger tự đông ADC

Khi ADATE và ADCSRA bằng 1, giá trị các bit ADTS2:0 để chọn nguồn trigger

• Bit 4 – ADHSM: ADC High Speed Mode

ADHSM = 1: cho phép ADC hoạt đông ở tốc đô cao

Page 17: Chuong 4- Cac Chuc Nang Cua ATmega16

4.2 BỘ SO SÁNH TƯƠNG TỰ

Bộ so sánh tương tự so sánh giá trị ngõ vào trên chân dương AIN0 với chân âm AIN1. Khi điện áp trên AIN0 cao hơn điện áp trên AIN1, đầu ra bộ sánh tương tự là ACO được đặt. Ngõ ra này có thể được set để kích chức năng chụp (capture) ngõ vào bộ định thời Timer/Counter1. Ngoài ra, bộ so sánh có thể kích một ngắt chia - ngắt này chỉ có ở bộ so sánh tương tự. Kiểu kích ngắt có thể là tích cực cạnh lên (rise), cạnh xuống (fall) hoặc chốt (toggle).

Hình 4- : sơ đồ khối bộ so sánh tương tự

Page 18: Chuong 4- Cac Chuc Nang Cua ATmega16

4.2 BỘ SO SÁNH TƯƠNG TỰ

Thanh ghi SFIOR

• Bit 3 – ACME: Analog Comparator Mutiplexer Enable

Khi ACME = 1 và ADC bị cấm (các bit ADEN = ADCSRA = 0), bô dồn kênh ADC chọn ngõ vào âm tới bô so sánh. Khi ACME = 0, AIN1 được chọn là ngõ vào âm của bô so sánh.

Thanh ghi ACSR (Analog comparator Control and Status Register)

• Bit 7 – ACD: Analog Comparator Disable

• Bit 6 – ACBG: Analog Comparator Bandgap Select

Page 19: Chuong 4- Cac Chuc Nang Cua ATmega16

4.2 BỘ SO SÁNH TƯƠNG TỰ

• Bit 5 – ACO: Analog Comparator Output

• Bit 4 – ACI: Analog Comparator Interrupt Flag

• Bit 3 – ACIE: Analog Comparator Interrupt Enable

• Bit 2 – ACIC: Analog Comparator Input Capture Enable

• Bit 1:0 – ACIS1:0: Analog Comparator Interrupt Select Mode

Page 20: Chuong 4- Cac Chuc Nang Cua ATmega16

4.2 BỘ SO SÁNH TƯƠNG TỰ

Bộ so sánh tương tự có ngõ vào dồn kênh

Có thể chọn bất kỳ các chân ADC7..0 để làm ngõ vào âm cho bô so sánh tương tự nhờ chức năng của của bô dồn kênh ADC (lúc này chức năng ADC bị cấm). Các bit MUX2:0 trong thanh ghi ADMUX sẽ chọn ngõ vào âm cho bô so sánh tương tự.

Page 21: Chuong 4- Cac Chuc Nang Cua ATmega16

4.3 HOẠT ĐỘNG NGẮT

Vec

tor

ngắt

rese

t

Page 22: Chuong 4- Cac Chuc Nang Cua ATmega16

4.3 HOẠT ĐỘNG NGẮT

Hầu hết các chương trình tiêu biểu và tổng quát cho các địa chỉ vectơ ngắt và reset trong ATmega16:

Page 23: Chuong 4- Cac Chuc Nang Cua ATmega16

4.3 HOẠT ĐỘNG NGẮT

Thanh ghi điều khiển ngắt – GICR (General Interrupt Control Register)

• Bit 1- IVSEL: Interrupt Vector Select (Lựa chọn vectơ ngắt)

Khi bit IVSEL bị xoá (0), những vectơ ngắt được đặt tại vùng bắt đầu của bộ nhớ Flash. Khi bit này được set [1], những vectơ ngắt được di chuyển tới vùng bắt đầu

Boot Loader của Flash. Vùng địa chỉ thực bắt đầu của Boot Flash được xác định bởi các bit cầu chì BOOTSZ. Để tránh không có ý định thay đổi bảng vectơ ngắt, một thủ tục ghi đặc biệt sau đây để thay đổi bit IVSEL:

1. Ghi vectơ bit cho phép thay đổi vectơ ngắt (IVCE) lên [1].

2. Bên trong bốn chu kỳ clock, ghi giá trị mong muốn tới IVSEL trong khi ghi [0] tới IVCE.

Page 24: Chuong 4- Cac Chuc Nang Cua ATmega16

4.3 HOẠT ĐỘNG NGẮT

• Bit 0- IVCE: Interrupt Vector Change Enable (Cho phép thay đổi vectơ ngắt)

Bit IVCE phải được ghi lôgic [1] để cho phép sự thay đổi của bit IVSEL. IVCE bị xoá bởi phần cứng bốn chu kỳ sau nó được ghi hoặc khi IVSEL được ghi. Sự cài đặt bit IVCE sẽ cấm các ngắt.

Page 25: Chuong 4- Cac Chuc Nang Cua ATmega16

4.4 NGẮT NGOÀI

ATmega16 có 3 chân thực hiện ngắt ngoài INT0, INT1 và INT2. Các ngắt ngoài có thể được kích bằng cạnh lên hoặc xuống và mức thấp (riêng INT2 chỉ kích bằng cạnh). Kiểu kích này được set bằng thanh ghi điều khiển MCU và thanh ghi điều khiển và trạng thái MCUCSR

Thanh ghi điều khiển MCU – MCUCR

• Bit 3,2 – ISC11, ISC10: Interrupt Sense Control 1

Hai bit này điều khiển cảm biến ngắt ngoài 1 cho chân INT1

Page 26: Chuong 4- Cac Chuc Nang Cua ATmega16

4.4 NGẮT NGOÀI

• Bit 1,0 – ISC01, ISC00: Interrupt Sense Control 0

Hai bit này điều khiển cảm biến ngắt ngoài 0 cho chân INT0

Thanh ghi điều khiển và trạng thái MCU – MCUCSR

• Bit 6 – ISC2: Interrupt Sense Control 2

Ngắt ngoài 2 bất đồng bô được kích hoạt bởi chân INT2 nếu bit I trong SREG và ngắt che tương ứng trong GICR được set. Nếu ISC2 = 0 thì tác đông cạnh xuống, ISC2 = 1 thì tác đông cạnh lên.

Page 27: Chuong 4- Cac Chuc Nang Cua ATmega16

4.4 NGẮT NGOÀI

Thời gian xung tác đông ở INT2 phải rông hơn đô rông xung tối thiểu trong bảng sau:

Thanh ghi điều khiển ngắt tổng quát – GICR (General Interrupt Control Register)

• Bit 7 – INT1: Cho phép yêu cầu ngắt ngoài 1

Khi bit INT1 = 1 và I (SREG) = 1 thì chân ngắt ngoài INT1 được cho phép.

• Bit 6 – INT0: Cho phép yêu cầu ngắt ngoài 0

Khi bit INT0 = 1 và và I (SREG) = 1 thì chân ngắt ngoài INT0 được cho phép.

• Bit 5 – INT2: Cho phép yêu cầu ngắt ngoài 2

Khi bit INT2 = 1 và và I (SREG) = 1 thì chân ngắt ngoài INT2 được cho phép.

Page 28: Chuong 4- Cac Chuc Nang Cua ATmega16

4.4 NGẮT NGOÀI

Thanh ghi cờ ngắt tổng quát – GIFR (General Interrupt Flag Register)

• Bit 7 – INTF1: External Interrupt Flag 1

Khi có sự thay đổi cạnh hay mức logic thì tạo ra một yêu cầu ngắt, bit cờ INTF1 = 1. Khi bit INT1 và bit I (SREG) bằng 1 thì MCU sẽ nhảy tới vector ngắt tương ứng, cờ ngắt sẽ xoá khi thủ tục ngắt thi hành xong.

• Bit 6 – INTF0: External Interrupt Flag 0

• Bit 5 – INTF2: External Interrupt Flag 2

Page 29: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6 BỘ ĐỊNH THỜI VÀ BỘ ĐẾM

ATmega16 có 3 bộ Timer/Counter: hai bộ 8 bit là Timer/Counter0 và Timer/Counter2; 1 bộ 16 bit là Timer/Counter1

4.6.1 Timer/Counter0 và Timer/Counter2Hai bô Timer/Counter này sử dụng cùng môt bô chia tỷ lệ, nhưng có thể set giá trị khác nhau

Bô Timer/Counter1 và 0 có thể được cung cấp clock trực tiếp bởi clock hệ thống (bằng cách đặt các bit CSn2:0 = 1). Điều này cung cấp hoạt đông nhanh nhất, với môt tần số clock cho Timer/Counter cực đại bằng tần số clock hệ thống (fCLK_I/O). Có 4 lựa chọn: fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, fCLK_I/O/1024.

Cũng có thể sử dụng nguồn clock bên ngoài, bằng cách cung cấ clock tới các chân T0/T1.

Page 30: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.1 Timer/Counter0 và Timer/Counter2

Bộ chia

Page 31: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.1 Timer/Counter0 và Timer/Counter2

Thanh Ghi I/O Chức Năng Đặc Biệt – SFIOR

• Bit 0- PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0

Khi bit này được ghi lên một, bộ chia Timer/Counter1 và Timer/Counter0 sẽ được reset. Bit sẽ bị xoá bởi phần cứng sau khi thao tác được thực hiện.

Page 32: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Sơ đồ khối Timer/Counter 8 bit

Page 33: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Khối đếm

Phần chính của Timer/Counter 8 bit là khối đếm hai chiều có thể lập trình

count: tăng hay giảm TCNT0 bởi 1

clear: xoá tất cả các bit trong thanh ghi TCNT0 bằng 0

derection: lựa chọn tăng hoặc giảm

TOP: giá trị TCNT0 đạt lớn nhất

BOTTOM: giá trị TCNT0 đạt nhỏ nhất

TOV: Timer/Counter Overflow – Báo tràn Timer/Counter

đồ

khối

đếm

Page 34: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Khối so sánh ngõ ra

Bô so sánh 8 bit sẽ so sánh liên tục thanh ghi TCNT0 với thanh ghi OCR0. Khi giá trị 2 thanh ghi bằng nhau, nó sẽ set bit cờ OCF0. Nếu bit OCIE0 = 1 và bit I (SREG) được set, cờ so sánh ngõ ra sẽ tạo ra môt ngắt so sánh ngõ ra. Cờ OCF0 sẽ tự đông bị xoá khi ngắt đã thi hành xong. Bô phát sóng dao đông sẽ dùng các bit WGM01:0 và COM01:0 để tạo dạng sóng ngõ ra OC0.

TCNT: thanh ghi Timer/CounterOCR: Output Compare RegisterOCF: Output Compare FlagOC: Output Compare (chân ra tương ứng của ATmega16)COM: Compare Output ModeFOC: Force Output CompareWGM: Waveform Generation Mode

Page 35: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Tín hiệu Max và Bottom được sử dụng trong trường hợp đặc biệt.

FOC: trong các chế đô tạo sóng không phải dạng điều biến đô rông xung (PWM), ngõ ra phối hợp của bô so sánh có thể bị ép buôc bằng cách ghi 1 vào bit FOC0

Khối ra phối hợp so sánh

Page 36: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Các chế độ hoạt động:

Chế độ bình thường (Normal Mode):

Hoạt động ở chế độ này khi các bit WGM01:0 = 0. Trong kiểu này, chiều đếm luôn gia tăng và xoá bộ đếm không thể được thiết lập, khi vượt quá TOP = 0xFF thì tự khởi động lại BOTTOM = 0x00.

Chế độ CTC (Clear Timer on Compare Match Mode)

Ở chế độ CTC khi các bit WGM01:0 = 2, thanh ghi OCR0 thường được chỉnh tay độ phân giải bộ đếm. Bộ đếm sẽ được xoá về 0 khi giá trị bộ đếm trong thanh ghi TCNT0 giống với thanh ghi OCR0. Thanh ghi OCR0 xác định giá trị TOP cho bộ đếm.

Page 37: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Giải thích: môt ngắt được tạo ra ở mỗi thời điểm khi giá trị bô đếm bằng với giá trị TOP bằng cách dùng cờ OCF0. Nếu ngắt được cho phép, thủ tục xử lý ngắt có thể sử dụng để cập nhật giá trị TOP.

Dạng sóng ra ở OC0 được chốt các mức logic của nó ở mỗi thời điểm so sánh phù hợp bằng cách đặt các bit COM01:0 = 1. Lưu ý, chân OC0 phải định là ngõ ra.

Giản đồ chỉnh thời gian ở chế độ CTC

Page 38: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Dạng sóng ra có tần số lớn nhất là fOC0 = fclk_I/O/2 khi OCR0 được đặt bằng 0x00.

Tần số dao động tổng quát :

N là các hệ số chia (1, 8, 64, 256, 1024)

Chế độ PWM nhanh (Fast PWM Mode): Tự xem Chế độ PWM chỉnh pha (Phase Correct PWM Mode): Tự xem

Page 39: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Thanh ghi TCCR0 (Timer/Counter Control Register)

• Bit 6 – FOC0: Force Output Campre

• Bit 6, 3 – WGM00:1: Waveform Generation Mode

• Bit 5, 4 – COM01:0: Comre Match Output Mode

• Bit 2, 0 – CS02:0: Clock Select

Page 40: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Thanh ghi TCNT0 (Timer/Counter Register)

Thanh ghi OCR0 (Output Compare Register)

Page 41: Chuong 4- Cac Chuc Nang Cua ATmega16

4.6.2 Timer/Counter0 với điều biến độ rộng xung

Thanh ghi