Download - Vi điều khiển
Vi điều khiển
AVRVi điều khiển
AVR
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.
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)
I – Lý do sử dụng AVR:I – Lý do sử dụng AVR:
+ Pic, dsPic (Microchip) (16F877A, 30F4011, 30F3012)
+ MSP430 (TI): MSP430F169, …..
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
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
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.
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ố.
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.
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.
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
- 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:
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
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
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)
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.
II – Kiến trúc AVR:3. Timer:
a. Clock Source:
II – Kiến trúc AVR:3. Timer:
a. Clock Source:
II – Kiến trúc AVR:3. Timer:
b. Counter:
II – Kiến trúc AVR:3. Timer:
b. Counter:
II – Kiến trúc AVR:3. Timer:
c. Normal mode:
II – Kiến trúc AVR:3. Timer:
c. Normal mode:
II – Kiến trúc AVR:3. Timer:
d. CTC mode:
II – Kiến trúc AVR:3. Timer:
d. CTC mode:
II – Kiến trúc AVR:3. Timer:
e. fast PWM mode:
II – Kiến trúc AVR:3. Timer:
e. fast PWM mode:
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
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....
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.
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
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.
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.
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.
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
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
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
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.
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ỉ:
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
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)
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ố)