37
Vi điều khiển AVR

Vi điều khiển

Embed Size (px)

Citation preview

Page 1: Vi điều khiển

Vi điều khiển

AVRVi điều khiển

AVR

Page 2: Vi điều khiển

IndexIndex

I – Lý do sử dụng AVR ?

II – Kiến trúc của AVR.

+ Kiến trúc CPU.

+ Các khối của AVR:(Timer, ADC, ...)

III – Ngôn ngữ lập trình C trên vi điều khiển

IV – Thiết kế sử dụng vi điều khiển AVR.

Page 3: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

- Các vi điều khiển hiện có ở trên thị trường VN:

+ 89C51,89S51 (Philips,atmel)

+ AVR(Atmel) (atmega8...,atmega128,Atiny)

Page 4: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

+ Pic, dsPic (Microchip) (16F877A, 30F4011, 30F3012)

+ MSP430 (TI): MSP430F169, …..

Page 5: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

+ PSoC (Crypess): CY8C29466

+ Một số dòng ARM của Philips, Samsung, TI: LPC2148, LPC,2292, LPC2378...

S3C44b0x

Page 6: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

+ Phân cấp vi điều khiển: |-> AVR

MCS51 |-> PIC -> MSP430 -> PSoC ->dsPIC -> ARM

Page 7: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

MSC 51:

+ 4 Port Vào ra (I/O), 1 UART, 2 timer.

*)Ưu điểm:

- Rẻ tiền (khoảng 15k),dễ lập trình.

*)Nhược điểm:

- Nạp phức tạp..., No SPI, No I2C, No WDT, No ADC, No DAC, No Tristate Out. No PWM. Low frequency (2 MIPS), No JTAG.

Tuy dễ nhưng không thích hợp để học.

Page 8: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:Pic & AVR:

+ 8 bit uC RICS ( 8 MIPS – 16MIPS )

+ Các Port I/O, có các bus SPI, I2C, USART

+ Tristate – out

+ Timer với nhiều mode hoạt động (PWM),WDT.

+ ADC, Comparator,Low power mode (sleep), low voltage( 3V3 để dùng pin);

+ Ram rom nhiều. ( Tương đối đủ ), Có chân cho c/n debugger.

Ưu điểm: Phần cứng ngoại vi tương đối đủ,tốc độ khá nhanh đủ dùng cho các ứng dụng. Dễ dùng, nhiều thư viện sẵn + chương trình, trình complier miễn phí.

Nhược điểm: Không có DAC, ADC chỉ là 10bit, kiến trúc 8 bit, không có DSP, tốc độ không đủ để sử lý số.

Page 9: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

AVR vs- Trình complier sẵn có của nhà sx.

(AVR studio + Winavr) miễn phí.- Mạch nạp đơn giản, dễ làm

thường dưới dạng project mở. Trình nạp tích hợp sẵn trong AVR studio đa dạng.

- Mạch nạp rẻ 40k – 100k :Nạp USB, tốc độ nhanh, không cần cài driver.

PIC- Trình complier của nhà sx (Mplab +

C16,C18) chỉ hỗ trợ bản student.- Mạch nạp chuẩn ICD2 tích hợp

trong MPLAB, còn GTP-USB phải dùng WinPIC 800.

- Mạch nạp khá phức tạp, giá thành còn chưa hợp lý. Mạch mua về còn khó chạy.

Page 10: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:

MSP430:- Là chip của TI (Texas instruments). (thích hợp với u/d

sensor...)- Siêu tiết kiệm năng lượng... (0.1–400 µA/1 MHz, 1,8 – 3,6 V)

- Có DAC 12 bit, ADC 12 bit, Gain amplifier thay đổi được gain.- Bộ sử lý 16bit RISC, max 16 MIPS.- Nhược điểm: Chưa nhiều người sử dụng. Nhưng hiện nay

phòng Mems đã khai thác thành công MSP430. Nguồn cung cấp chip MSP còn hạn chế.

- Các chíp MSP thường là linh kiện dán SMD có kích thước chân nhỏ => phải có kinh nghiệm trong thiết kế và hàn mạch.

Page 11: Vi điều khiển

I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:Device Flash

(Kbytes)EEPROM (Kbytes)

SRAM (Bytes)

Max I/O Pins

F.Max(MHz)

Vcc (V)

10-bit A/D Channels

AnalogComparator

16-bit Timers

ATmega128 128 4 4096 53 16 2.7-5.5 8 Yes 2

ATmega16 16 0.5 1024 32 16 2.7-5.5 8 Yes 1

ATmega32 32 1 2048 32 16 2.7-5.5 8 Yes 1

ATmega48 4 0.25 512 23 20 1.8-5.5 06-th8 Yes 1

ATmega64 64 2 4096 54 16 2.7-5.5 8 Yes 2

ATmega8 8 0.5 1024 23 16 2.7-5.5 06-th8 Yes 1

ATmega8535 8 0.5 512 32 16 2.7-5.5 8 Yes 1

Device 8-bit Timer

Brown Out Detector

Ext IRQ

IRQ ISP On Chip Oscillator

PWM RTC Self Program Memory

SPI TWI UART WDT

ATmega128 2 Yes 8 34 Yes Yes 8 Yes Yes 1 Yes 2 Yes

ATmega16 2 Yes 3 20 Yes Yes 4 Yes Yes 1 Yes 1 Yes

ATmega32 2 Yes 3 19 Yes Yes 4 Yes Yes 1 Yes 1 Yes

ATmega48 2 Yes 26 26 Yes Yes 6 Yes Yes 1+USART Yes 1 Yes

ATmega64 2 Yes 8 34 Yes Yes 8 Yes Yes 1 Yes 2 Yes

ATmega8 2 Yes 2 18 Yes Yes 3 Yes Yes 1 Yes 1 Yes

ATmega8535 2 Yes 3 20 Yes Yes 4 -- Yes 1 Yes 1 Yes

Page 12: Vi điều khiển

- Là uC có CPU kiểu RISC và kiến trúc Hardvard. Và là uC 8 bit.

+ Vậy RISC và Hardvard là gì ???

Harvard vs Von Neumann

II – Kiến trúc AVR:1. CPU:

II – Kiến trúc AVR:1. CPU:

Page 13: Vi điều khiển

II – Kiến trúc AVR:2. Memory:

II – Kiến trúc AVR:2. Memory:

Do có kiến trúc Hardvard nên memory của AVR được tổ chức như sau:

bộ nhớ ctrình bộ nhớ dữ liệu EEPROM dữ liệu

0x0000 tệp thanh ghi 0x000x00

0x1F

thanh ghi 0x20vào/ra 8BIT

16 bit

Sram trong

địa chỉ cuốiSram ngoài

8 bit

địa chỉ cuối địa chỉ cuối

Page 14: Vi điều khiển

II – Kiến trúc AVR:2. Memory:

a. Flash (bộ nhớ ctrình)

II – Kiến trúc AVR:2. Memory:

a. Flash (bộ nhớ ctrình)- Độ rộng 16bit- 16 bit địa chỉ nên quản lý

64k Word- Cho nên atmega128có 128kB flash = 64k x 16bit- Flash (bộ nhớ ctrinh): dùng

để chứa chương trình. Cũng có thể dùng để chứa các hằng số các tham số không thay đổi bao giờ trong quá trình hoạt động.

( do flash có số lần rewrite hạn chế )

0x00

0x01

0x02

0x03

0x04

0x05

......

0x12

------

0x....

Reset Handler

IRQ0 Handler

IRQ1 Handler

Timer2 Compare Handler

Timer2 Overflow Handler

Timer1 Capture Handler

...............

Store Program Memory Ready Handler

----------------------------------------------------

Start main program (chương trình bắt đầu chạy từ đây) tùy vào vi xử lý mà địa chỉ bắt đầu này khác nhau

Page 15: Vi điều khiển

II – Kiến trúc AVR:2. Memory:

b. Sram (bộ nhớ dữ liệu)

II – Kiến trúc AVR:2. Memory:

b. Sram (bộ nhớ dữ liệu)- Độ rộng 8 bit.- 16 bit địa chỉ, chỉ quản lý

được 64kB

- Sram(bộ nhớ dữ liệu): dùng để chứa các dữ liệu thay đổi liên tục, như các biến số, các tham số, stack, rồi các giá trị của các I/O vào ra. Các thanh ghi cũng là một phần của Sram.(Sram có độ bền lớn nhất nhưng không lưu trữ khi mất điện)

0x00 – 0x1F

0x20 – 0x5F

0x60 – 0xFF

0x0010

0x10FF

0x1100

0x.........

32 thanh ghi

64 thanh ghi vào ra I/O

160 thanh ghi I/O mở rộng

SRAM trong

( từ 128B – 4kB)

SRAM ngoài

(up to 64kB)

Page 16: Vi điều khiển

II – Kiến trúc AVR:2. Memory:

Ví dụ về thanh ghi I/O

II – Kiến trúc AVR:2. Memory:

Ví dụ về thanh ghi I/OVí dụ: PORT A: có 3 thanh Ghi: DRRA, PORTA, PINA.

Page 17: Vi điều khiển

II – Kiến trúc AVR:3. Timer:

a. Clock Source:

II – Kiến trúc AVR:3. Timer:

a. Clock Source:

Page 18: Vi điều khiển

II – Kiến trúc AVR:3. Timer:

b. Counter:

II – Kiến trúc AVR:3. Timer:

b. Counter:

Page 19: Vi điều khiển

II – Kiến trúc AVR:3. Timer:

c. Normal mode:

II – Kiến trúc AVR:3. Timer:

c. Normal mode:

Page 20: Vi điều khiển

II – Kiến trúc AVR:3. Timer:

d. CTC mode:

II – Kiến trúc AVR:3. Timer:

d. CTC mode:

Page 21: Vi điều khiển

II – Kiến trúc AVR:3. Timer:

e. fast PWM mode:

II – Kiến trúc AVR:3. Timer:

e. fast PWM mode:

Page 22: Vi điều khiển

II – Kiến trúc AVR:4. Interrupt:(Ngắt)

a. Hoạt động của Ngắt

II – Kiến trúc AVR:4. Interrupt:(Ngắt)

a. Hoạt động của Ngắt

Page 23: Vi điều khiển

II – Kiến trúc AVR:4. Interrupt:(Ngắt)

b. Bảng vector ngắt

II – Kiến trúc AVR:4. Interrupt:(Ngắt)

b. Bảng vector ngắtReset Handler

IRQ0 Handler

IRQ1 Handler

Timer2 Compare Handler

Timer2 Overflow Handler

Timer1 Capture Handler

...............

Store Program Memory Ready Handler

----------------------------------------------------

Start main program (chương trình bắt đầu chạy từ đây) tùy vào vi xử lý mà địa chỉ bắt đầu này khác nhau

0x00

0x01

0x02

0x03

0x04

0x05

......

0x12

------

0x....

Page 24: Vi điều khiển

II – Kiến trúc AVR:II – Kiến trúc AVR:

Với mục đích ghép nối với Sensor, RTC, Các bộ điều khiển, truyền thông => tìm hiều các Cổng giao tiếp ( Các Bus ):

+ SPI: realtime, sensor đo W...

+ I2C (TWI): realtime, sensor nhiệt,...

+ UART: Dao tiếp với PC, 2 thiết bị ...

Đối với các bộ sensor lối ra là tương tự thì cần đến ADC.

Page 25: Vi điều khiển

II – Kiến trúc AVR:5. SPI:(Serial Peripheral Interface)

II – Kiến trúc AVR:5. SPI:(Serial Peripheral Interface)

Giao diện SPI gồm có 4 chân:

+ MISO ( Master in slave out) dữ liêu shift sang Master

+ MOSI ( Master out slave in) dữ liệu shift sang slave

+ SCK ( Master clock ) clock đồng bộ do Master cấp

+ SS ( Select slave)

- Chỉ có Master mới có quyền cấp Clock- Khi đã bị Select như là slave ( SS xuống thấp) thì không

có quyền cấp clock.- Master phải tự điều khiển SS bằng phần mềm

Page 26: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Bus I2C: là bus sử dụng ít chân nhất chỉ có 2 chân SDA(Serial Data) và SCL(Serial Clock), và chân đất GND.

- Các chân của bus I2C hoạt động ở mode Open Colector (Colector hở), do đó bus có trở kéo.

Page 27: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Phân biệt: Open colector & Tri-state.

Page 28: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Phân biệt: Open colector & Tri-state.

Page 29: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Truyền 1 Byte từ Master sang Slave

Page 30: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Nhận 1 Byte từ Slave về Master

Page 31: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Trạng thái khi truyền 1 bit: dữ liệu chuyển khi SCL thấp. Dữ liệu chấp nhận tại giữa SCL cao

Page 32: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Để đánh dấu đầu và cuối khung truyền, dùng các trạng thái Start và Stop

Start: sườn xuống SDA trong khi SCL cao.

Stop: sườn lên SDA trong khi SCL cao.

Page 33: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Do bus I2C không có các chân chọn slave. Nên master của I2C chọn slave bằng cách truyền địa chỉ của slave. Đó luôn là byte đầu tiên sau Start. Định dạng của byte địa chỉ:

Page 34: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Địa chỉ của Slave luôn có 7 bit nên 1 Master có thể có đến 128 Slave. Bit cuối trong byte địa chỉ là bít đánh dấu để báo cho slave biết tiếp theo nó sẽ nhận hay là truyền 1 byte

Page 35: Vi điều khiển

II – Kiến trúc AVR:6. I2C:(Two wire interface)

II – Kiến trúc AVR:6. I2C:(Two wire interface)

Truyền nhận mặc định có các bước như sau:Start => Adress+R/W => Trans/Rec 1 byte =>Stop

(đợi ACK bit) (đợi ACK bit nếu truyền)

(trả ACK nếu là nhận)

Page 36: Vi điều khiển

II – Kiến trúc AVR:7.ADC:(chuyển đổi Tương tự - Số)

II – Kiến trúc AVR:7.ADC:(chuyển đổi Tương tự - Số)

Page 37: Vi điều khiển