1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện

144 7 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

Tiêu đề Bài Giảng Ứng Dụng Vi Điều Khiển Trong Kỹ Thuật Điện
Trường học Trường Đại Học Kỹ Thuật
Chuyên ngành Kỹ Thuật Điện
Thể loại bài giảng
Định dạng
Số trang 144
Dung lượng 5,8 MB

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

Nội dung

các bộ định thời như RTC… - Lập trình vi điều khiển thường được sử dụng để làm các thiết bị tự động, còn lập trình vi xử lý thường để làm các hệ điều hành dùng trong máy tính hoặc các sả

Trang 1

CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN

1.1 Giới thiệu chung về vi điều khiển

Vi xử lý (viết tắt là µP hay uP), đôi khi còn được gọi là bộ vi xử lý, là một linh kiện điện tử được chế tạo từ các tranzito thu nhỏ tích hợp lên trên một vi mạch tích hợp hơn Khối xử lý trung tâm (CPU) là một bộ vi xử lý được nhiều người biết đến nhưng ngoài ra nhiều thành phần khác trong máy tính cũng có bộ vi xử lý riêng của nó, ví dụ trên card màn hình (video card) chúng ta cũng có một bộ vi xử lý Trước khi xuất hiện các bộ vi xử lý, các CPU được xây dựng từ các mạch tích hợp

cỡ nhỏ riêng biệt, mỗi mạch tích hợp chỉ chứa khoảng vào chục tranzito Do đó, một CPU có thể là một bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp ngày nay, công nghệ tích hợp đã phát triển, một CPU có thể tích hợp lên một hoặc vài vi mạch tích hợp cỡ lớn, mỗi vi mạch tích hợp cỡ lớn chứa hàng ngàn hoặc hàng triệu tranzito Nhờ đó công suất tiêu thụ và giá thành của bộ vi xử lý đã giảm đáng

kể

Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được

sử dụng để điều khiển các thiết bị điện tử Vi điều khiển, thực chất, là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử

lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số, Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng Nó xuất hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động

Hình 1.1 Cấu trúc của thiết bị vi điều khiển 1.2 Vi xử lý và vi điều khiển

- Nếu ví vi điều khiển như một con người thì vi xử lý chính là bộ não

Trang 2

- Vi điều khiển có thể hoạt động độc lập, tương tác với thế giới bên ngoài bằng các ngoại vi như ADC, các chân IO, các chuẩn giao tiếp I2C, SPI… Còn vi xử lý chỉ có thể tiếp nhận thông tin, phân tích và điều khiển qua các bus dữ liệu

- Vi điều khiển là sự tích hợp của vi xử lý và nhiều các thành phần khác nhau nữa như bộ nhớ, ngoại vi, bộ định thời… Đối với vi xử lý, để hoạt động được chúng cần có các bộ nhớ ngoài như RAM, ổ cứng… các bộ định thời như RTC…

- Lập trình vi điều khiển thường được sử dụng để làm các thiết bị tự động, còn lập trình vi xử lý thường để làm các hệ điều hành dùng trong máy tính hoặc các sản phẩm tương tự máy tính Tuy vậy vi xử lý cũng có thể sử dụng trong các thiết bị như máy tính nhúng, có thể kể đến như Ras PI, Jetson…

- Vi xử lý sẽ quan trọng phần hiệu năng làm việc, vi xử lý càng có hiệu năng tốt thì càng mạnh mẽ, còn vi điều khiển sẽ quan trọng phần tối ưu giữa công xuất

và hiệu năng, bởi các ứng dụng nhúng đôi khi không cần tốc độ làm việc quá cao

mà sẽ quan tâm tới việc tiết kiệm năng lượng và ổn định

Vi điều khiển ra đời mang lại sự tiện lợi đối với người dùng, họ không cần nắm vững một khối lượng kiến thức quá lớn như người dùng vi xử lý, kết cấu mạch điện dành cho người dùng cũng trở nên đơn giản hơn nhiều và có khả năng giao tiếp trực tiếp với các thiết bị bên ngoài Vi điều khiển tuy được xây dựng với phần cứng dành cho người sử dụng đơn giản hơn, nhưng thay vào lợi điểm này là khả năng xử lý bị giới hạn (tốc độ xử lý chậm hơn và khả năng tính toán ít hơn, dung lượng chương trình bị giới hạn) Thay vào đó, Vi điều khiển có giá thành rẻ hơn nhiều so với vi xử lý, việc sử dụng đơn giản, do đó nó được ứng dụng rộng rãi vào nhiều ứng dụng có chức năng đơn giản, không đòi hỏi tính toán phức tạp

Trong tài liệu này, ranh giới giữa hai khái niệm “vi xử lý” và “vi điều khiển” thực sự không cần phải phân biệt rõ ràng Chúng tôi sẽ dùng thuật ngữ “vi xử lý” khi đề cập đến các khái niệm cơ bản của kỹ thuật vi xử lý nói chung và sẽ dùng thuật ngữ “vi điều khiển” khi đi sâu nghiên cứu một họ chip cụ thể

1.3 Các họ vi điều khiển

 Họ vi điều khiển Atmel: Đây là một dòng đã quá quen thuộc khi học vi điều khiển, điển hình của nó là họ 8051 Ngoài ra còn có các dòng như sau:

- Dòng 8051 (8031, 8051, 8751, 8951, 8032, 8052, 8752, 8952)

- Dòng Atmel AT91 (Kiến trúc ARM THUMB)

- Dòng AT90, Tiny & Mega – AVR (Atmel Norway design)

- Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51)

Trang 3

- STM32 (Cortex-Mx)

Hình 1.2 Thiết bị vi điều khiển STMicroelectronics

 Họ vi điều khiển Microchip:

- PIC 8-bit (xử lý dữ liệu 8-bit, 8-bit data bus): Từ lệnh dài 12-bit (Base-line): PIC10F, PIC12F và một vài PIC16F Từ lệnh dài 14-bit (Mid-Range và Enhance Mid-Range): PIC16Fxxx, PIC16F1xxx Từ lệnh dài 16-bit (High Performance): PIC18F

- PIC 16-bit (xử lý dữ liệu 16-bit): PIC điều khiển động cơ: dsPIC30F PIC

có DSC: dsPIC33F Phổ thông: PIC24F, PIC24E, PIC24H

- PIC 32-bit (xử lý dữ liệu 32-bit): PIC32MX

 Các dòng vi điều khiển khác

- Họ vi điều khiển Cypress MicroSystems

- Họ vi điều khiển AMCC (Applied Micro Circuits Corporation)

- Họ vi điều khiển Freescale Semiconductor

- Họ vi điều khiển Intel

- Họ vi điều khiển National Semiconductor

- Họ vi điều khiển Philips Semiconductors

1.4 Phân loại vi điều khiển

 Phân loại theo độ dài thanh ghi: Dựa vào độ dài của các thanh ghi và các lệnh của VĐK mà người ta chia ra các loại vi điều khiển 8 bit, 16 bit hay 32 bit… Các loại VĐK 16 bit do có độ dài lệnh lớn hơn nên các tập lệnh cũng nhiều hơn, phong phú hơn Tuy nhiên bất cứ chương trình nào viết bằng VĐK 16 bit chúng ta đều có thể viết trên vi điều khiển 8 bit với chương trình thích hợp

 Phân loại theo kiến trúc CISC và RISC: Vi điều khiển CISC là vi điều khiển có tập lệnh phức tạp Các VĐK này có một số lượng lớn các lệnh nên giúp cho người lập trình có thể linh hoạt và dễ dàng hơn khi viết chương trình

Vi điều khiển RISC là vi điều khiển có tập lệnh đơn gian Chúng có một số lượng nhỏ các lệnh đơn giản Do đó, chúng đòi hỏi phần cứng ít hơn, giá thành thấp hơn,

và nhanh hơn so với CISC Tuy nhiên nó đòi hỏi người lập trình phải viết các chương trình phức tạp hơn, nhiều lệnh hơn

 Kiến trúc Harvard và kiến trúc Von-Neuman: Kiến trúc Harvard sử dụng

bộ nhớ riêng biệt cho chương trình và dữ liệu Bus địa chỉ và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn Kiến trúc Von-Neumann

Trang 4

sử dụng chung bộ nhớ cho chương trình và dữ liệu Điều này làm cho VĐK gọn nhẹ hơn, giá thành rẻ hơn

1.5 Cấu trúc tổng quan của vi điều khiển

VCC GND

RAM

MEMORY ROM/EPROM/EEPROM CPU

Hình 1.3 Cấu trúc vi điều khiển CPU (Center Programing Unit) hay bộ xử lý trung tâm là bộ não của vi điều khiển CPU chịu trách nhiệm nạp lệnh, giải mã và thực thi Tất cả những hành vi của vi điều khiển đều là do CPU điều khiển Chúng giao tiếp với các phần khác trong vi điều khiển thông qua hệ thống Bus CPU có cấu tạo gồm có đơn vị xử lý

số học và lôgic (ALU), các thanh ghi, các khối lôgic và các mạch giao tiếp Chức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ,

dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa

ra thông qua các lệnh (Instructions) Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data) và tín hiệu điều khiển (Control) Về mặt vật lý thì các tín hiệu này là các đường nhỏ dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau Tập hợp các đường tín hiệu có cùng chức năng gọi là các bus Như vậy ta có các bus địa chỉ, bus dữ liệu và bus điều khiển

Trang 5

Control bus Addr.busData bus

Data bus driver

Control bus driver

Addr bus driver

BIUInternal bus

ALU

Data registerAddr register

Instruction decoderProgram counter

Hình 1.4 Khối xử lý trung tâm Đây là một đơn vị có nhiệm vụ điều khiển và giám sát tất cả các hoạt động bên trong vi điều khiển và người sử dụng không thể tác động vào hoạt động của nó

Nó bao gồm một số đơn vị con nhỏ hơn, trong đó quan trọng nhất là: Bộ giải mã lệnh có nhiệm vụ nhận dạng câu lệnh và điều khiển các mạch khác theo lệnh đã giải

mã Việc giải mã được thực hiện nhờ có tập lệnh “instruction set” Mỗi họ vi điều khiển thường có các tập lệnh khác nhau

Arithmetical Logical Unit (ALU) Thực thi tất cả các thao tác tính toán số học

và logic

Thanh ghi tích lũy (Accumulator) là một thanh ghi SFR liên quan mật thiết với hoạt động của ALU Nó lưu trữ tất cả các dữ liệu cho quá trình tính toán và lưu giá trị kết quả để chuẩn bị cho các tính toán tiếp theo Một trong các thanh ghi SFR khác được gọi là thanh ghi trạng thái (Status Register) cho biết trạng thái của các giá trị lưu trong thanh ghi tích lũy

Ocscillator Circuit (Mạch tạo dao động): Nếu CPU là bộ não thì Ocscillator Circuit hay còn gọi là Clock được coi là trái tim của vi điều khiển Để mọi thứ có thể hoạt động, bắt buộc chúng ta phải cấp xung, trái tim hoạt động mới có thể bơm máu cho toàn bộ cơ thể hoạt động được Chúng ta thường nghe quảng cáo dòng vi

xư lý có tốc độ bao nhiêu Ghz gì gì đó, chính là tốc độ Clock mà vi xử lý đó có thể đáp ứng được, tốc độ xung càng cao thì tốc độ xử lý của CPU cũng tăng lên

Trang 6

OSC CPU GND

Quartz crystal

LP, XT, HS mode

20-30pF

OSC2 Pin

Hình 1.5 Mạch tạo dao động trong vi điều khiển

Bộ dao động đóng vai trò nhạc trưởng làm nhiệm vụ đồng bộ hóa hoạt động của tất cả các mạch bên trong vi điều khiển Nó thường được tạo bởi thạch anh hoặc gốm để ổn định tần số Các lệnh không được thực thi theo tốc độ của bộ dao động

mà thường chậm hơn, bởi vì mỗi câu lệnh được thực hiện qua nhiều bước Mỗi loại

vi điều khiển cần số chu kỳ khác nhau để thực hiện lệnh

Memory – Bộ nhớ: Bộ nhớ có thể coi là một phần không thể thiếu, chúng là nơi lưu trữ chương trình nạp lên hoặc dùng làm nơi chứa các thông tin tức thời mà CPU cần dùng tới Có 2 kiểu bộ nhớ cơ bản:

- RAM (Random access memory) là bộ nhớ lưu các dữ liệu mà CPU cần dùng

để tính toán, đưa ra quyết định, lưu trữ kết quả tạm thời và kết quả trung gian được tạo ra và được sử dụng trong quá trình hoạt động của bộ vi điều khiển, chúng sẽ bị xóa khi mất điện

- ROM (Read Only Memory): Read Only Memory (ROM) là một loại bộ nhớ được sử dụng để lưu vĩnh viễn các chương trình được thực thi Kích cỡ của chương trình có thể được viết phụ thuộc vào kích cỡ của bộ nhớ này ROM có thể được tích hợp trong vi điều khiển hay thêm vào như là một chip gắn bên ngoài, tùy thuộc vào loại vi điều khiển Cả hai tùy chọn có một số nhược điểm Nếu ROM được thêm vào như là một chip bên ngoài, các vi điều khiển là rẻ hơn và các chương trình có thể tồn tại lâu hơn đáng kể Nhưng đồng thời, làm giảm số lượng các chân vào/ra

để vi điều khiển sử dụng với mục đích khác ROM nội thường là nhỏ hơn và đắt tiền hơn, nhưng lá ghim thêm có sẵn để kết nối với môi trường ngoại vi Kích thước của dãy ROM từ 512B đến 64KB

- EEPROM (Electrically Erasable Programmable ROM): EEPROM là một kiểu đặc biệt của bộ nhớ chỉ có ở một số loại vi điều khiển Nội dung của nó có thể được thay đổi trong quá trình thực hiện chương trình (tương tự như RAM), nhưng vẫn còn lưu giữ vĩnh viễn, ngay cả sau khi mất điện (tương tự như ROM) Nó thường được dùng để lưu trữ các giá trị được tạo ra và được sử dụng trong quá trình hoạt động (như các giá trị hiệu chuẩn, mã, các giá trị để đếm, v.v ), mà cần phải được lưu sau khi nguồn cung cấp ngắt Một bất lợi của bộ nhớ này là quá trình ghi vào là tương đối chậm

Trang 7

- Các thanh ghi chức năng đặc biệt (SFR): Thanh ghi chức năng đặc biệt (Special Function Registers) là một phần của bộ nhớ RAM Mục đích của chúng được định trước bởi nhà sản xuất và không thể thay đổi được Các bit của chúng được liên kết vật lý tới các mạch trong vi điều khiển như bộ chuyển đổi A/D, modul truyền thông nối tiếp… Mỗi sự thay đổi trạng thái của các bit sẽ tác động tới hoạt động của vi điều khiển hoặc các vi mạch

Timer/counter: Một vi điều khiển có thể có nhiều bộ đếm thời gian và bộ đếm Bộ đếm thời gian và bộ đếm có chức năng đếm thời gian tạo ra các sự kiện để

vi điều khiển hoạt động đúng thời điểm Hầu hết các chương trình sử dụng các bộ định thời trong hoạt động của mình Chúng thường là các thanh ghi SFR 8 hoặc 16 bit, sau mỗi xung dao động clock, giá trị của chúng được tăng lên Ngay khi thanh ghi tràn, một ngắt sẽ được phát sinh

Các ngoại vi của vi điều khiển

CPU

Memory

Bus

GPIOADCDACRTCTimerUARTOther Peripherais

On – chip Peripherals

I/O PortAnalog InputAnalog Output

Serial I/O

Hình 1.6 Ngoại vi của vi điều khiển

- Hệ thống Bus: Là các đường tín hiệu song song 1 chiều nối từ CPU đến bộ nhớ, gồm: bus địa chỉ, bus dữ liệu, bus điều khiển CPU gửi giá trị địa chỉ của ô nhớ cần truy nhập (đọc/ghi) trên các đường tín hiệu này

Độ rộng bus: là số các đường tín hiệu, có thể là 8, 18, 20, 24, 32 hay 64 1 CPU với n đường địa chỉ sẽ có thể địa chỉ hoá được 2n ô nhớ Ví dụ, 1 Cpu có 16 đường địa chỉ có thể địa chỉ hoá được 216 hay 65,536 (64K) ô nhớ

a Bus dữ liệu - Data bus: Là các đường tín hiệu song song 2 chiều, nhiều thiết

bị khác nhau có thể được nối với bus dữ liệu; nhưng tại một thời điểm, chỉ có 1 thiết

bị duy nhất có thể được phép đưa dữ liệu lên bus dữ liệu Độ rộng Bus: 4, 8, 16, 32 hay 64 bits Bất kỳ thiết bị nào được kết nối đến bus dữ liệu phải có đầu ra ở dạng

3 trạng thái, sao cho nó có thể ở trạng thái treo (trở kháng cao) nếu không được sử dụng

b Bus điều khiển - Control bus: Bao gồm 4 đến 10 đường tín hiệu song song CPU gửi tín hiệu ra bus điều khiển để cho phép các đầu ra của ô nhớ hay các cổng

Trang 8

I/O đã được địa chỉ hoá Các tín hiệu điều khiển thường là: đọc/ ghi bộ nhớ - memory read, memory write, đọc/ ghi cổng vào/ra - I/O read, I/O write Ví dụ, để đọc 1 byte dữ liệu từ ô nhớ sẽ cần đến các hoạt động sau: CPU đưa ra địa chỉ của ô nhớ cần đọc lên bus địa chỉ CPU đưa ra tín hiệu đọc bộ nhớ - Memory Read trên bus điều khiển Tín hiệu điều khiển này sẽ cho phép thiết bị nhớ đã được địa chỉ hoá đưa byte dữ liệu lên bus dữ liệu Byte dữ liệu từ ô nhớ sẽ được truyền tải qua bus dữ liệu đến CPU

- I/O Ports – Input/ouput: Có thể coi cổng I/O là tay chân của vi điều khiển, chúng giúp cho vi điều khiển tương tác với các thành phần khác ngoài môi trường Cổng đầu vào/ đầu ra được sử dụng chủ yếu điều khiển hoặc giao tiếp các thiết bị như màn hình LCD, đèn LED, máy in, …cho vi điều khiển Cổng I/O có thể thay đổi chức năng, chiều vào/ra theo yêu cầu của người dùng

- Các chuẩn giao tiếp: Giống như miệng và tai vậy Vi điều khiển sẽ sử dụng các chuẩn giao tiếp khác nhau để liên lạc với nhau hoặc liên lạc với các phâng tử khác trên mạch Có thể kể đến như I2C, SPI, UART, USB, …

- Bộ chuyển đổi analog sang digital (ADC): Bộ chuyển đổi ADC được sử dụng để chuyển đổi tín hiệu analog sang dạng digital Tín hiệu đầu vào trong bộ chuyển đổi này phải ở dạng analog (ví dụ: đầu ra cảm biến) và đầu ra từ thiết bị này

ở dạng digital Đầu ra digital có thể được sử dụng cho các ứng dụng kỹ thuật số (ví dụ: các thiết bị đo lường)

- Bộ chuyển đổi Digital sang Analog (DAC): Hoạt động của DAC là đảo ngược của ADC DAC chuyển đổi tín hiệu digital thành định dạng analog Nó thường được sử dụng để điều khiển các thiết bị analog như động cơ DC, các ổ đĩa…

- Interrupt control hay quản lý sự kiện: Ngoài việc thực thi chương trình,

vi điều khiển còn phải tương tác với các tác nhân bên trong và bên ngoài Các tác nhân này sẽ tạo ra các sự kiện gọi là Ngắt, để quản lý nó cần có một khối quản lý ngắt (Interrupt control)

- Special functioning block: Một số vi điều khiển chỉ được sử dụng cho một

số ứng dụng đặc biệt (ví dụ: hệ thống không gian và rô bốt) các bộ điều khiển này

có chứa các cổng bổ sung để thực hiện các hoạt động đặc biệt đó Đây được coi là khối chức năng đặc biệt

Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC, các mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não của mỗi vi

xử lý chính là CPU, các phần cứng khác chỉ là các cơ quan chấp hành dưới quyền của CPU Mỗi cơ quan này đều có một cơ chế hoạt động nhất định mà CPU phải tuân theo khi giao tiếp với chúng

Khi triển khai cho các ứng dụng, ta cần lựa chọn vi điều khiển liên quan đến tính năng, số chân, và kích thước cần thiết của vi điều khiển Và chúng ta phải lựa chọn được con vi điều khiển chúng ta cần dùng Tùy theo ứng dụng, giá cả, chức

Trang 9

năng, độ ổn định chúng ta cần chọn cho mình một hoặc 2 loại để bắt đầu Để lập trình vi điều khiển thì bắt buộc các bạn phải học ngôn ngữ C, vì ngôn ngữ C có thể can thiệp tới tầng thấp nhất của phần cứng, điều mà các ngôn ngữ khác không làm được Bản chất của lập trình vi điều khiển chỉ là tạo ra các hành động cụ thể cho nó Như việc con người chúng ta tương tác với thế giới xung quanh như thế nào vậy Mọi thao tác đó được lập trình viên viết ra bằng ngôn ngữ lập trình C hoặc ngôn ngữ khác Sau đó ngôn ngữ đó được thông dịch lại cho vi điêu khiển hiểu, quá trình

- Dễ dàng kết nối thêm các cổng RAM, ROM, I/O

- Cần ít thời gian để thực hiện các hoạt động

 Nhược điểm:

- Vi điều khiển có kiến trúc phức tạp hơn so với vi xử lý

- Chỉ thực hiện đồng thời một số lệnh thực thi giới hạn

- Chủ yếu được sử dụng trong các thiết bị vi mô

- Không thể trực tiếp giao tiếp các thiết bị công suất cao

 Ưng dụng của vi điều khiển:

Vi xử lý, chính là chip của các loại máy tính ngày nay, nên hẳn các bạn đã biết rất rõ nó có những ứng dụng gì Ở đây, chỉ nói đên ứng dụng của vi điều khiển

Vi điều khiển có thể dùng trong thiết kế các loại máy tính nhúng Máy tính nhúng

có trong hầu hết các thiết bị tự động, thông minh ngày nay Chúng ta có thể dùng

vi điều khiển để thiết kế bộ điều khiển cho các sản phẩm như:

Trong các sản phẩm dân dụng: Nhà thông minh, Cửa tự động, Khóa số, Tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo cường độ ánh sáng, ), Điều khiển các thiết bị từ xa (qua điều khiển, qua tiếng vỗ tay, ), Điều tiết hơi ẩm, điều tiết nhiệt độ, điều tiết không khí, gió, Hệ thống vệ sinh thông minh

Trong quảng cáo: Các loại biển quảng cáo nháy chữ, Quảng cáo ma trận LED (một màu, 3 màu, đa màu), Điều khiển máy cuốn bạt quảng cáo

Các máy móc dân dụng: Máy điều tiết độ ẩm cho vườn cây, Buồng ấp trứng gà/vịt, Đồng hồ số, đồng hồ số có điều khiển theo thời gian

Trang 10

Các sản phẩm giải trí: Máy nghe nhạc, Máy chơi game, Đầu thu kỹ thuật số, đầu thu set-top-box

Trong các thiết bị y tế: Máy móc thiết bị hỗ trợ: máy đo nhịp tim, máy đo đường huyết, máy đo huyết áp, điện tim đồ, điện não đồ…Máy cắt/mài kính, Máy chụp chiếu (city, X-quang, )

Các sản phẩm công nghiệp: Điều khiển động cơ, Điều khiển số (PID, mờ, ),

Đo lường (đo điện áp, đo dòng điện, áp suất, nhiệt độ, ), Cân băng tải, cân toa xe, cân ô tô, Máy cán thép: điều khiển động cơ máy cán, điều khiển máy quấn thép, Làm bộ điều khiển trung tâm cho RoBot, Ổn định tốc độ động cơ, Đếm sản phẩm của 1 nhà máy, xí nghiệp,…, Máy vận hành tự động (dạng CNC)

1.7 Các hệ đếm trong vi điều khiển

 Hệ thập phân – Decimal

 Hệ nhị phân – Binary

 Hệ16 – Hexadecimal

 Mã BCD (standard BCD, gray code): (Binary Coded Decimal)

Trong thực tế, đối với một số ứng dụng như đếm tần, đo điện áp, … ngõ ra ở dạng số thập phân, ta dùng mã BCD Mã BCD dùng 4 bit nhị phân để mã hoá cho một số thập phân 0 9 Như vậy, các số hex A F không tồn tại trong mã BCD

Mã BCD gồm có 2 loại:

- Mã BCD không nén (unpacked): biểu diễn một số BCD bằng 8 bit nhị phân

- Mã BCD nén (packed): biểu diễn một số BCD bằng 4 bit nhị phân

Trang 11

CHƯƠNG 2 VI ĐIỀU KHIỂN ARDUINO

2.1 Tổng quan về thiêt bị arduino

Arduino tảng vi mạch thiết kế mở phần cứng và phần mềm Phần cứng Arduino là những bộ vi điều khiển bo mạch đơn, nhằm xây dựng các ứng dụng tương tác với nhau hoặc với môi trường được thuận lợi hơn Arduino được sử dụng nhằm xây dựng các ứng dụng điện tử tương tác với nhau hoặc với môi trường được thuận tiện, dễ dàng hơn Arduino có thể coi như một máy tính thu nhỏ, giúp người dùng lập trình và thực hiện các dự án điện tử mà không cần phải đến các công cụ chuyên dụng để phục vụ việc nạp code Các phần mềm lập trình cho arduino được tương tác với thế giới bên ngoài thông qua các cảm biến điện tử, đèn và động cơ Arduino ra đời tại thị trấn Ivrea, nước Ý và được đặt theo tên của vị vua King Arduin vào thế kỷ thứ IX (1002-1014) Arduino chính thức được đưa ra giới thiệu vào năm 2005, được xem là một công cụ cho sinh viên học tập tại Interaction Design Institute Ivrea (Viện thiết kế tương tác Ivrea) Giáo sư Massimo Banzi là một trong những người phát triển Arduino và cũng là giảng viên tại Ivrea Arduino nổi tiếng trên toàn thế giới, đến nỗi có người còn tìm đến thị trấn Ivrea chỉ để tham quan nơi

2.2 Cấu trúc chung của thiết bị arduino

Có rất nhiều các phiên bản mạch Arduino khác nhau và chúng có thể được sử dụng với nhiều mục đích Nhưng hầu hết các mạch đều giống nhau về các thành phần chính:

 Nguồn (USB / Barrel Jack): Mỗi mạch Arduino đều có cổng kết nối với nguồn điện Cụ thể trên đây mà mạch Arduino UNO có thể được lấy nguồn từ dây cáp USB từ máy tính, hoặc một số nguồn DC khác có Jack DC Trong hình trên nguồn kết nối qua cổng USB được dán nhãn (1) và Jack DC được dán nhãn (2) Chân kết nối USB cũng là chân để tải code lên bo mạch Arduino Điện áp được các nhà sản xuất đề nghị cho hầu hết các bo mạch Arduino là từ 6 – 12V

 Các chân (5V, 3.3V, GND, Digital, Analog, PWM, ISF): Đây là các chân nguồn ra có thể kết nối dây đầu ra với các tải hoặc một số mạch kết nối bên ngoài Với các loại Arduino sẽ có thể một số loại chân khác nhau Ở mỗi chân đều được

in các nhãn và ký tự để người sử dụng có thể phân biệt được, cụ thể:

Trang 12

- GND (3): Viết tắt của ‘Ground’ là mass Có một số chân GND trên Arduino, bất kỳ các chân GND trong số đó có thể được sử dụng để nối mass mạch arduino

- 5V (4) & 3.3V (5): Chân 5V cung cấp năng lượng 5V và chân 3,3V cung cấp 3,3V Hầu hết các thành phần đơn giản được sử dụng với Arduino đều hoạt động bình thường ở mức 5 hoặc 3,3V

- Analog (6): Các chân được dán nhãn ‘Analog In’ (A0 đến A5 trên UNO) là các chân Analog In Các chân này có thể đọc tín hiệu từ các cảm biến tương tự (Analog) và chuyển đổi nó thành một giá trị số (Digital) mà chúng ta có thể đọc được

- Digital (7): Các chân Digital được dán nhãn từ 0 – 13 trên Arduino UNO, các chân này có thể được sử dụng cho cả đầu vào digital nếu như là các nút nhấn và đầu ra digital nếu như cấp nguồn cho LED

- PWM (8): Ta có thể nhìn thấy những dấu (~) nằm ở bên cạnh các chân 3,

5, 6, 9, 10 và 11 trên mạch Các chân này đều có chức năng hoạt động như các chân Digital thông thường, nhưng cũng có thể sử dụng để điều chế độ rộng xung PWM Bạn có thể hình dung các chân này có thể được sử dụng mô phỏng đầu ra tín hiệu Analog

Hình: Cấu tạo cơ bản của Arduino

- ISF (9): Được viết tắt của cụm từ Analog Reference, hầu hết chân này thường không được sử dụng Đôi khi nó được sử dụng để có thể đặt điện áp tham chiếu trong khoảng từ 0 – 5V làm giới hạn cho các chân đầu vào Analog

Trang 13

 Nút Reset (Reset Button): Nút reset (10) có nhiệm vụ khởi động lại bất kỳ đoạn code nào được tải trên Arduino Điều này rất hữu ích khi code chương trình không có vòng lặp mà vẫn kiểm tra đượcchương trình đó nhiều lần

 Đèn LED báo nguồn (Power LED Indicator): Đèn báo được nắp ngay bên phải của chữ UNO, đây là một đèn LED nhỏ được dán nhãn ON (11) Đèn báo này có nhiệm vụ báo khi có nguồn cấp vào Arduino Trong một số trường hợp đèn không sáng thì chắc chắn có vấn đề xảy ra Khi đó phải kiểm tra lại dây cáp USB, nguồn cấp và các mạch

 LED TX và RX (TX RX LEDs): TX là LED hiển thị tín hiệu truyền đi và

RX là hiển thị tín hiệu nhận về Những tín hiệu này xuất hiện khá nhiều trong các thiết bị điện tử để có thể chỉ ra những chân thực hiện nhiệm vụ truyền tải nối tiếp Trong trường hợp này, có 2 vị trí trên Arduino UNO là TX và RX (12) Các LED này có nhiệm vụ thông báo cho người dùng bất cứ khi nào Arduino được nhận hoặc truyền dữ liệu đi Ví dụ như tải một chương trình lên thì đèn sẽ hiển thị

 6 IC chủ (Main IC): IC chủ là vị trí số 13 Đây được coi là bộ não của Arduino IC thường được sử dụng là dòng IC ATmega của công ty ATMEL sản xuất Việc nhận biết được IC chủ cũng là điều rất quan trọng, để có thể nạp chính xác chương trình thích hợp từ phần mềm Arduino Thông tin về tên của IC thường được tìm thấy ở phía mặt trên Nếu bạn muốn tìm hiểu sâu hơn về thông tin của IC bạn có thể đọc thêm tài liệu từ nhà sản xuất

 Bộ điều chỉnh điện áp (Voltage Regulator): Bộ điều chỉnh điện áp (14), không được sử dụng nhiều Nhiệm vụ của nó là điều chỉnh điện áp, kiểm soát nguồn điện áp đưa vào mạch Arduino Bộ phận này sẽ làm biến mất những điện áp phụ có thể gây tổn hại cho các linh kiện trong mạch Tuy nhiên, cần phải chú ý là bộ điều chỉnh điện áp này cũng có giới hạn của nó Vì vậy, tuyệt đối không nên kết nối mạch Arduino với nguồn điện DC lớn hơn 20V

2.3 Phân loại arduino

Hiện nay, arduino được tạo ra với rất nhiều các phiên bản khác nhau Ngoài

ra, một phần của phần cứng có thể được mở rộng để người khác có thể sửa đổi và sản xuất ra các dẫn xuất của mạch để có thể cung cấp ra nhiều các chức năng hơn Dưới đây là một số mạch Arduino thường được sử dụng

- Mạch Arduino Uno phù hợp với những người mới tiếp cận và có đam mê

về điện tử, lập trình… dễ dàng sử dụng, xây dựng dự án cho mình một cách nhanh nhất

Trang 14

- Arduino Uno được dùng trong lập trình Robot, xe tự hành, điều khiển bật tắt led…

- Tính năng hấp dẫn của Arduino Nano chọn công suất lớn nhất với hiệu điện thế của nó

 Arduino Lilypad

- Arduino LilyPad là phiên bản Arduino sử dụng chip ATmega328P, được thiết kế và phát triển bởi Leah Buckley và SparkFun Electronics

- Phiên bản Arduino LilyPad được dùng cho các ứng dụng trang trí cho quần

áo các sản phẩm thời trang balo…

 Arduino Mega 2560

- Arduino Mega2560 là vi điều khiển sử dụng ATmega2560

- Mega 2560 có nhiều bộ nhớ và nhiều chân I/ O hơn bất kỳ nền tảng Arduino nào khác

- Mega 2560 là Arduino lớn nhất, tốt nhất, đắt nhất hiện nay

Trang 15

- Làm lò nướng bánh biết tweet thông báo khi bánh đã chín

- Arduino có khả năng đọc các thiết bị cảm biến, điều khiển động cơ… Chính

vì thế mà mã nguồn mở này được dùng để làm bộ xử lý trung tâm của rất nhiều loại robot

- Dùng để chế tạo ra máy bay không người lái

- Điều khiển đèn giao thông, làm hiệu ứng đèn Led nhấp nháy trên các biển quảng cáo…

- Ngoài ra, Arduino còn rất nhiều ứng dụng hữu ích khác tùy thuộc vào sự sáng tạo của người sử dụng

 Khả năng kết nối của Arduino

- Arduino hoạt động độc lập

- Kết nối với một máy tính, cho phép truy cập dữ liệu cảm biến từ thế giới bên ngoài và cung cấp thông tin phản hồi

- Các Arduino có thể liên kết với nhau

- Mạch điều khiển Arduino có thể kết nối với các thiết bị điện tử khác

- Arduino có khả năng kết nối với các chip điều khiển

 Các tính năng Arduino trên Board

- Arduino Uno đi kèm với giao diện USB tức là cổng USB được thêm vào bo mạch Arduino để phát triển giao tiếp nối tiếp với máy tính

Trang 16

- Bộ vi điều khiển Atmega328 sử dụng trên bo mạch đi kèm với một số tính năng như hẹn giờ, bộ đếm, ngắt, chân PWM, CPU, chân I/O và dựa trên xung nhịp

16 MHz giúp tạo ra nhiều tần số và số lệnh hơn trong mỗi chu kỳ

- Arduino đi kèm với một tính năng điều chỉnh tích hợp giúp giữ điện áp trong tầm kiểm soát khi thiết bị được kết nối với thiết bị bên ngoài

- Chân reset trên Arduino để thiết lập lại toàn bộ và đưa chương trình đang chạy trở về ban đầu Chân reset này hữu ích khi Arduino bị treo khi đang chạy chương trình

- Có 14 chân I / O digital và 6 chân analog được tích hợp trên Arduino cho phép kết nối bên ngoài với bất kỳ mạch nào với Arduino Các chân này cung cấp

sự linh hoạt và dễ sử dụng cho các thiết bị bên ngoài có thể được kết nối thông qua các chân này

- 6 chân analog được đánh dấu là A0 đến A5 và có độ phân giải 10 bit Các chân này đo từ 0 đến 5V, tuy nhiên, chúng có thể được cấu hình ở phạm vi cao bằng cách sử dụng chức năng analogReference () và chân ISF

- Bộ nhớ flash 13KB được sử dụng để lưu trữ số lượng hướng dẫn dưới dạng

- Chỉ cần nguồn 5V để sử dụng với Arduino, hoặc lấy nguồn trực tiếp từ cổng USB Arduino có thể hỗ trợ nguồn điện bên ngoài lên đến 12 V có thể được điều chỉnh và giới hạn ở mức 5 V hoặc 3,3 V dựa trên yêu cầu của projects

- Có sẵn các nền tảng dự án để tự thiết kế hệ thống theo ý muốn

2.5 Quy trình thiết kế hệ thống làm việc với arduino

Quy trình thiết kế truyền thống với vi xử lý:

Trang 17

- Hình thành ý tưởng

- Xây dựng sơ đồ tổng quát cho hệ thống, sơ đồ khối thể hiện sự kết nối của

arduino với các thiết bị ngoại vi

- Xây dưng sơ đồ nguyên lý (có thể sử dụng sự hỗ trợ của các phần mềm

chuyên dụng)

- Tìm kiếm linh kiện theo sơ đồ nguyên lý

- Kết nối linh kiện với thiết bị arduino

- Lập trình chương trình điều khiển cho thiết bị

- Nạp chương trình cho thiết bị và thực nghiệm chạy thử, kiểm nghiệm và

hiệu chỉnh chương trình hoạt động

Nhược điểm: phải thực hiện nhiều công đoạn, mất nhiều thời gian, phải biết

nhiều phần mềm hỗ trợ, phải biết cách làm mạch, phải hiểu chức năng của linh kiện,

phải biết được cách hàn mạch, nắm được ngôn ngữ lập trình để hoàn thành thiết kế

 Quy trình thiết kế với arduino:

Trang 18

- Xây dựng sơ đồ tổng quát cho hệ thống, sơ đồ khối thể hiện sự kết nối của arduino với các thiết bị ngoại vi

- Xây dưng sơ đồ nguyên lý (có thể sử dụng sự hỗ trợ của các phần mềm chuyên dụng)

- Tìm kiếm linh kiện theo sơ đồ nguyên lý

- Kết nối linh kiện với thiết bị arduino

- Lập trình chương trình điều khiển cho thiết bị

- Nạp chương trình cho thiết bị và thực nghiệm chạy thử, kiểm nghiệm và hiệu chỉnh chương trình hoạt động

Ưu điểm: Chỉ cần thực hiện trên module có sẵn và tìm hiểu nó Sau đó kết nối với arduino, sau đó sử dụng ngôn ngữ lập trình arduino, chương trình có thể tự viết hay tham khảo trên công đồng arduino Các bước thực hiện giảm, thời gian thực hiện rất nhanh, hoàn thành công việc đơn giản Có sự hỗ trợ bởi nhiều các moddule bên ngoài, nó có khả năng rất lớn để triển khai các ứng dụng

So sánh ưu điểm và nhược điểm của phương pháp thiết kế truyền thống và phương pháp thiết kế với arduino

TT Phương pháp thiết kế truyền thống Phương pháp thiết kế với arduino Đòi hỏi nhiều kỹ năng

- Hiểu biết chuyên sâu về

linh kiện

- Vẽ mạch, hàn mạch

- Lập trình (không có sự hỗ

trợ sẵn)

Không đòi hỏi nhiều kỹ năng

- Tập trung vào tư duy hệ thống

- Lập trình được hỗ trợ bởi nhiều thư viện chuẩn hóa của các midule

Thực hiện ý tưởng mất nhiều thời

gian, chi phí cao, kỹ thuật phức

tạp, dễ sai sót

Thực hiện ý tưởng dễ dàng, ít thời gian

Phải làm chi tiết tất cả các khâu từ

lựa chọn linh kiện đến hàn mạch

in… ảnh hưởng dến thời gian phát

triển hệ thống

Tập trung vào hệ thống, có thể thực hiện được các hệ thống phức tạp, toàn diện

Phát triển được các kỹ năng thiết

kế mạch, hàn mạch, kỹ năng hàn

mạch, sửa lỗi

Phát triển tư duy lập trình, hệ thống

Sử dụng nhiều cho những người có

chuyên môn sâu

Sử dụng nhiều cho các đối tượng từ chuyên nghiệp đến không chuyên, dễ dàng phát triển các ứng dụng theo sở thích

Trang 19

Trong phạm vi giáo trình, sẽ sử dụng arduino uno R3, do phù hợp với người mới bắt đầu tiếp cận với arduino, dễ dàng triển khai các ý tưởng phù hợp với kỹ thuật điện ứng dụng thực tế, có ngôn ngữ lập trình đơn giản, dễ thực thi

Cấu tạo của arduino uno R3:

Các công cụ làm việc với arduino

Bài tập

Trang 20

CHƯƠNG 3 NGÔN NGỮ LẬP TRÌNH VÀ GIAO TIẾP NGOẠI VI CỦA ARDUINO

3.1 Giới thiệu về các dạng ngôn ngữ lập trình cho arduino

Để lập trình được cho arduino, thì chúng ta phải sử dụng phần mềm chuyên dụng cho arduino, đó là phần mềm arduino IDE (Intergrated Development Environment (IDE) Công cụ này được đội ngũ kĩ sư của Arduino phát triển và có thể chạy trên Windows, MAC OS X và Linux

Các bước tải phần mềm:

1 Truy cập Website arduino.cc

2 Vào mục software/download chọn Download arduino IDE Sau đó tải phiên bản mới nhất ADUINO IDE 1.8.11

3 Sau đó tải phiên bản Window EX và cao hơn (mục Windown installer, for Window EP anh up) Sau đó kích vào mục Just download (chỉ tải xuống)

4 Khi tải phần mềm xong thì cài đặt

Hướng dẫn cài đặt:

1 Cài đặt Java Runtime Environment (JRE)

Vì Arduino IDE được viết trên Java nên bạn cần phải cài đặt JRE trước Arduino IDE Link tải: http://www.oracle.com/technetwork/ja

Nếu không cài JRE trên máy trước thì sau khi cài Arduino IDE sẽ không chạy được

2 Cài đặt Arduino IDE

Bước 1: Sau khi download xong, các bạn bấm chuột phải vào file vừa download arduino-1.6.4-windows.zip và chọn “Extract here” để giải nén

Bước 3: Copy thư mục arduino-1.6.4 vừa giải nén đến nơi lưu trữ

Bước 4: Chạy file trong thư mục arduino-1.6.4\ để khởi động Arduino IDE

Hình Cửa sổ phần mềm lập trình sau khi cài đặt

3 Cài đặt Driver

Trang 21

Để máy tính và board Arduino giao tiếp được với nhau, chúng ta cần phải cài đặt driver trước tiên Yêu vầu của máy tính là phải có Windows ở chế độ Disable driver signature enforcement thì mới cài được driver Đầu tiên, các bạn chạy file arduino-1.6.4\drivers\dpinst-x86.exe (Windows x86) hoặc arduino-1.6.4\drivers\dpinst-amd64.exe (Windows x64) Cửa sổ “Device Driver Installation Wizard” hiện ra, các bạn chọn Next để tiếp tục

Khi có yêu cầu xác nhận cài đặt driver, chọn “Install”

Đợi khoảng 10 giây trong lúc quá trình cài đặt diễn ra …

Trang 22

Quá trình cài đặt đã hoàn tất Bấm “Finish” để thoát

4 Giao diện Arduino IDE

Trang 23

- Vùng thông báo (debug):

Trang 24

Những thông báo từ IDE sẽ được hiển thị tại đây Để ý rằng góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng Luôn chú ý tới mục này bởi nếu chọn sai loại board hoặc cổng COM thì sẽ không thể upload được code vào arduino

- Lưu ý: Khi lập trình, cần chọn port (cổng kết nối khi gắn board vào) và board (tên board mà bạn sử dụng) Giả sử, bạn đang dùng mạch Arduino Uno, và khi gắn board này vào máy tính bằng cáp USB nó được nhận là COM4 thì phải chỉnh cổng kết nối cho hợp lý

3.2 Tập lệnh cơ bản sử dụng lập trình arduino

Phần mềm Arduino được viết trên môi trường đa nền tảng được viết trên nền tảng Java, được viết bằng ngôn ngữ lập trình C hoặc C++, và đi kèm các thư viên phần mềm tích hợp sẵn để tạo ra chương trình một cách dễ dàng, đây là ngôn ngữ

có tính logic cao và rất dễ để thuận lợi trong việc viết chương trình, hai ngôn ngữ này hiên nay được vận dụng rất là phổ biến

Về cấu trúc chương trình của arduino luôn bắt buộc phải có hai hàm cơ bản

để tạo ra một vòng thực thi có thể chay được, có nghĩa là chương trình của Arduino luôn bắt buộc phải có hai hàm cơ bản này, nếu thiếu một trong hai hàm cơ bản này thì chương trình sẽ không chạy được gồm hai hàm cơ bản sau đâu:

1) Setup(): hàm này chạy mỗi khi khởi động một chương trình dùng để thiết lập các cài đặt;

2) Loop(): hàm này được gọi lặp đi lặp lại một cách vô hạn cho đến khi tắt nguồn board mạch hoặc reset phần cứng

Trang 25

Sơ đồ cấu trúc lập trình của arduino:

Arduino được cấp nguồn

Setup () { // Các lệnh }

Loop () { // Các lệnh }

Bấm nút Reset

Hình 3.1 Sơ đồ cấu trúc chương trình lập trình của arduino

Trước khi arduino được cấp nguồn thì hàm đầu tiên được chạy đó là hàm setup(), các câu lệnh trong hàm setup này chỉ được chay một lần, sau đó đến hàm loop(), các câu lệnh trong hàm loop sẽ được chạy lặp đi lặp lại một cách vô hạn và

nó chỉ dừng khi ta bấm reset hặc tắt nguồn, khi đó chương trình sẽ được chạy lại từ đầu

Ví du:

int led = 13;

void setup () pinMode ( led, OUTPUT ) ; }

void loop () digitalWrite ( led, HIGH ) ; delay ( 1000 ) ; digitalWrite ( led, LOW ) ; delay ( 1000 ) ;

}Giải thích: Khi cấp nguồn cho Arduino, lệnh “pinMode(led, OUTPUT);”

sẽ được chạy 1 lần để khai báo Sau khi chạy xong lệnh ở setup(), lệnh ở loop() sẽ được chạy và được lặp đi lặp lại liên tục, tạo thành một chuỗi:

digitalWrite ( led, HIGH ) ; delay ( 1000 ) ; digitalWrite ( led, LOW ) ; delay ( 1000 ) ;

digitalWrite ( led, HIGH ) ; delay ( 1000 ) ; digitalWrite ( led, LOW ) ; delay ( 1000 ) ;

digitalWrite ( led, HIGH ) ; delay ( 1000 ) ; digitalWrite ( led, LOW ) ; delay ( 1000 ) ;

……

Trang 26

3.2.1 Các khái niệm cơ bản trong lập trình arduino

Kiểu dữ liệu: Trong arduino có các kiểu dữ liệu cơ bản là: char, int, float, double

TT Kiểu dữ liệu

(Type)

Kích thước (Length)

Miền giá trị

1 Unsigned char 1 byte 0 đến 255

4 Unsigned int 2 bytes 0 đến 65,535

5 Short int 2 bytes -32,768 đến 32,767

11 Long double 10 bytes 3.4*10-4932 đến 1.1*104932

+ Kiểu Booleab: Một biến được khai báo kiểu Boolean sẽ chi nhận một trong hai giá trị: true hoặc false Chỉ mất 1 byte bộ nhớ

Về bản chất có những cặp giá trị tương đương với true - false như: LOW hoặc 1-0

HIGH-+ Kiểu string: là kiểu chuỗi ký tự

Ví dụ: char Str5[8] = “arduino”; //chuỗi 8 bytes có 8 giá trị

3.2.2 Khái niệm biểu thức, toán hạng, toán tử

Biểu thức: là sự kết hợp các toán hạng và toán tử để tạo ra được kết quả

Ví dụ: a = b + c; // đây là một biểu thức gồm các toán hạng a, b, c và các toán tử =, +

Toán hạng: là bao gồm bất kỳ các kiểu dữ liệu

Ví dụ: read a, b, c;

c = a – b; // a, b, c được khai báo dưới dạng các số thực

Toán tử: tác động lên các toán hạng để tạo ra kết quả mong muốn

Ví dụ: a = b + c;// toán tử + tác động lên hai toán hạng b và c để tạo ra được kết quả như mong muốn là a

Trang 27

Cách 2: Chú thích viết trên nhiều hàng thì bắt đầu chú thích với ký hiệu “/*”

Nếu thiếu dấu chấm phẩy thì chương trình arduino sẽ báo lỗi

+ Dấu đóng mở ngoặc nhọn {}: Dùng để nhóm các câu lệnh cho các cấu trúc đặc biệt như: Setup, loop, if, while, for…

Ví dụ: if (điều kiện)

{ lệnh 1;

lệnh 2;

} Lưu ý:

- Đã mở ngoặc nhọn ({) thì phải đóng ngoặc nhọn (})

- Nếu nhóm câu lệnh chỉ có 1 câu lệnh duy nhất thì không cần đặt trong dấu {}

Ví dụ: #define pi 3.14; // trong toàn bộ chương trình pi bằng 3.14

+ Chỉ thị #include: cho phép gọi các thư viện đã có sẵn

Ví dụ: #include <LiquidCrystal_12C.h>

3.2.5 Giá trị thiết lập và hằng số

+ Giá trị thiết lập:

0 Mức không, hoặc điều kiện không thỏa

1 Mức một, hoặc điều kiện đúng + Hằng số:

HIGH: Trong lập trình trên Arduino, HIGH là một hằng số có giá trị nguyên là 1

Trong mạch điện tử, HIGH là một mức điện áp 5V

LOW: Trong lập trình trên Arduino, LOW là một hằng số có giá trị nguyên

Trang 28

+ Toán tử một ngôi (unary operators): toán tử chỉ đi cùng với một toán hạng

để tạo thành biểu thức có nghĩa

Ví dụ: a để tạo thành biểu thức có nghĩa ta có hai toán tử  -a và +a + Toán tử hai ngôi (binary operators): là toán tử đi kèm với hai toán hạng

để tạo thành một biểu thức có nghĩa

Ví dụ: a = b + c; // + đi cùng hai toán tử b và c để tạo ra biểu thức có nghĩa Gồm:

4 – 2 = 2 5/2 = 2 5%2 = 1 Thứ tự ưu tiên: Đảo dấu +, -; (); *,/,%; +,-

b Toán tử quan hệ (so sánh):

Các toán tử so sánh thường dùng để so sánh 2 số có cùng một kiểu dữ liệu

< So sánh bé (a < b) trả về TRUE nếu a bé hơn

b và FALSE nếu ngược lại

<= Bé hơn hoặc bằng (a <= b) tương đương với ((a < b)

or (a = b))

>= Lớn hơn hoặc bằng (a >= b) tương đương với ((a > b)

or (a = b)) Thứ tự ưu tiên: >; >=; <; <=, == !=

Kết quả của phép toán quan hệ là số nguyên kiểu int, bằng 1 nếu đúng, bằng

0 nếu sai Phép toán quan hệ ngoài toán hạng được sử dụng là số còn được sử dụng với kiểu dữ liệu char

Thứ tự ưu tiên giữa toán tử số học và toán tử quan hệ

Trang 29

Toán tử số học; toán tử quan hệ

! : NOT (phép phủ định)

&&: AND (phép và)

|| : OR (phép hoặc)

Lưu ý:

- Là toán tử được thực hiện trên các toán hạng

- Luôn trả kết quả 1 bit

Ví dụ:

!(2<=1)  1 5&&10  1

!6  0 1&&0 0 1||0  1 Thứ tự ưu tiên: !; toán tử số học; toán tử quan hệ; &&; ||

- Là toán tử thực hiện bít – bít trên hai toán hạng

Bảng trạng thái:

Bít a Bít b ~a a&b a|b a^b

Trang 30

a&&b = 1 a||b = 1

!a = 1

!b = 0 Toán tử trên bít

3.2.7 Các phép toán thao tác trên hệ nhị phân

Nếu trong hệ thập phân ta có các phép toán như cộng, trừ, nhân, chia,… thì trong hệ nhị phân chúng ta có các phép toán and, or, xor, not, dịch trái (bits shift left) và dịch phải (bits shift right)

Trang 31

Phát biểu bằng lời: nếu có một trong 2 điều kiện là đúng thì kết quả là đúng

sẽ cho ra kết quả 0 Từ đó ta thấy nếu A xor B = 0 thì A = B

Phát biểu bằng lời: nếu 2 điều kiện mang giá trị đúng – sai khác nhau thì kết quả trả về là đúng

Trang 32

4/ NOT (~)

Phép toán not thay đổi bit 0 thành bit 1 và ngược lại, bit 1 thành bit 0

Tức là:

not 0 = 1 not 1 = 0 Phép toán này còn được gọi là phép đảo bit

Ví dụ:

5/ Dịch trái – Bits shift left ( << ) và Dịch phải – Bits shift right ( >> )

- Phép dịch trái hay dịch phải được gọi chung là phép dịch bit

- Khi dịch một dãy bit A được đánh số từ bit 0 đến bit n, chỉ số của các bit sẽ thay đổi còn giá trị của mỗi bit sẽ vẫn giữ nguyên Như vậy giá trị của A sẽ thay đổi

- Khi dịch dãy bit A sang phải n đơn vị tức là chỉ số của mỗi bit trong A sẽ bị trừ đi n đơn vị Ngược lại, khi dịch sang trái n đơn vị tức là chỉ số của mỗi bit sẽ được cộng thêm n đơn vị

- Sau khi dịch bit, các bit có chỉ số âm sẽ bị bỏ đi

Ví dụ:

Sign extension khi dịch bit:

Khi dịch một chuỗi bit x sang phải y bit mà bit cao nhất trong x là "1", có thể gặp phải một số sự cố không mong muốn Điều này còn tùy vào việc lưu trữ x trong một biến với kiểu dữ liệu là gì

Trong lập trình Arduino, giả sử ta có đoạn chương trình sau:

Trang 33

mô tả là "esoteric historical" (tạm dịch: "bí ẩn lịch sử")

Để khắc phục hiện tượng này, bạn phải khai báo biến x ở kiểu "unsigned int" Hãy thử lại để kiểm tra nhé

i*=3  i=9 <-> i=i*3

+ Phép toán tăng, giảm: ++,

Toán tử ++ sẽ công thêm 1 vào toán hạng của nó, toán tử sẽ trừ đi 1

7/ Cộng một, trừ một

Tăng hoặc trừ một biến đi 1 đơn vị

Cú pháp

x++; // tăng x lên 1 giá trị và trả về giá trị cũ của x

++x; // tăng x lên 1 giá trị và trả về giá trị mới của x

x ; // trừ x lên 1 giá trị và trả về giá trị cũ của x

x; // trừ x lên 1 giá trị và trả về giá trị mới của x

Trang 34

y = ++x;// x bây giờ có giá trị là 3, và y cũng có giá trị là 3

y = x ;// x bây giờ đã trở lại với giá trị 2, nhưng y không đổi vẫn là 3\

8/ Các phép toán rút gọn += , -= , *= , /=

Cung cấp một số phép toán rút gọn để bạn gõ code trong đẹp hơn Và nó cực

kỳ dễ nhớ nữa chứ!

Cú pháp

x += y; // giống như phép toán x = x + y

x -= y; // giống như phép toán x = x - y

x *= y; // giống như phép toán x = x * y

x /= y; // giống như phép toán x = x / y

Tham số

x: mọi kiểu dữ liệu

y: mọi kiểu dữ liệu hoặc hằng số

Ví dụ

x = 2;

x += 4 // x bây giờ có giá trị là 6

x -= 3 // x bây giờ có giá trị là 3

x *= 10; // x bây giờ có giá trị là 30

x /= 2 // x bây giờ có giá trị là 15 9/ Trình tự ưu tiên của các loại toán tử

Trang 35

3.3.1 Cấu trúc rẽ nhánh có điều kiện

- Từ khóa if phỉ viết bằng chữ thường

- Kết quả của biểu thức luận lý phải là đúng (khác 0) hoặc sai (bằng 0)

- Nếu biểu thức luận lý đúng thì thực hiện khối lệnh và toát khỏi if, ngược lại không làm gì cả và thoát khỏi if

- Nếu khối lệnh bao gồm từ 2 lệnh trở lên thì phải đặt trong dấu {}

Lệnh 2;

… }

Ví dụ:

Trang 36

- Từ khóa if, else phải viết bằng chữ thường

- Kết quả của biểu thức luận lý phải là đúng (khác 0) hoặc sai (bằng 0)

- Nếu biểu thức luận lý dúng thì thực hiện khối lệnh 1 và thoát khỏi if

- Ngược lại thực hiện khối lệnh 2 và thoát khỏi if

- Nếu khối lệnh 1, khối lệnh 2 bao gồm 2 lệnh trở lên thì phải đặt trong dấu {}

Trang 37

Khối lệnh 2;

… else if (biểu thức luận lý n-1)

Khối lệnh n – 1;

else

Khối lệnh n;

- Từ khóa if, else if, else phải viết thường

- Kết quả của biểu thức luận lý 1, 2 … n phải là đúng (khác 0) hoặc sai (bằng 0)

- Nếu khối lệnh 1, 2…n bao gồm từ 2 lệnh trở lên thì phải đặt trong dấu {}

break;

case giá trị 2 : lệnh 2;

break;

… case giá trị n : lệnh n;

[ break;]

} Chú ý: break để thoát khỏi lệnh

- Từ khóa switch, case, break phải viết bằng chữ thường

- Biểu thức phải có kết quả là giá trị hằng nguyên (char, int, long…)

- Lệnh 1, 2… n có thể gồm nhiều lệnh, nhưng không cần đặt trong dấu {}

Trang 38

VàoBiểu thức

break;

case giá trị 2 : lệnh 2;

break;

… case giá trị n : lệnh n;

break;

default : lệnh;

[break]

} Chú ý: Break để thoát khỏi lệnh

- Từ khóa switch, case, break, default phải viết bằng chữ thường

Trang 39

- Biểu thức phải có kết quả là giá trị hằng nguyên (char, int, long…)

- Lệnh 1, 2 n có thể gồm nhiều lệnh, nhưng không cần đặt trong dấu {} 3.3.2 Cấu trúc vòng lặp

3.3.2.1 Lệnh for

Cú pháp lệnh:

for (biểu thức 1; biểu thức 2; biểu thức 3) Khối lệnh;

- Từ khóa for phải viết bằng chữ thường

- Nếu khối khối lệnh bao gồm từ 2 lệnh trở lên thì phải đặt trong dấu {} Giải thích:

- Biểu thức 1: khởi tạo giá trị ban đầu cho biến điều khiển

- Biểu thức 2: là quan hệ logic thể hiện điều kiện tiếp tục vòng lặp

- Biểu thức 3: phép gán dùng thay đổi giá trị điều khiển

Lưu ý:

- Biểu thức 1, 2, 3 phải phân cách bằng dấu chấm phẩy (;)

Ví dụ:

For i = 1; i < = 10; i = i +1 {

Serial.println ( ) ; }

Ví dụ: Lập trình điều khiển 01 đèn LED và 10 đèn LED

Với 1 đèn LED, đoạn code như sau:

digitalWrite ( led1,HIGH ) ; delay ( 1000 ) ;

digitalWrite ( led1,LOW ) ; delay ( 1000 ) ;

Với 10 đèn LED, nếu không dùng for, đoạn code nó sẽ dài hơn, như sau:

digitalWrite ( led1,HIGH ) ; delay ( 1000 ) ;

digitalWrite ( led1,LOW ) ; delay ( 1000 ) ;

digitalWrite ( led2,HIGH ) ;

Trang 40

delay ( 1000 ) ; digitalWrite ( led2,LOW ) ; delay ( 1000 ) ;

digitalWrite ( led10,HIGH ) ; delay ( 1000 ) ;

digitalWrite ( led10,LOW ) ; delay ( 1000 ) ;

Từ ví dụ cụ thể trên, thấy rằng hàm for có tác dụng rút gọn được cách lập trình, làm cho đoạn code ngắn hơn mà chức năng của chương trình không thay đổi

Ví dụ: Xuất 10 chữ số (từ 1 - 10) ra Serial khi không sử dụng hàm for và khi

sử dụng hàm for

- Khi không sử dụng hàm for:

void setup () Serial.begin ( 9600 ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( ) ; Serial.println ( 10 ) ; }

void loop () // không làm gì cả;

for i = 1;i<=10;i=i+1 Serial.println ( ) ; }

} void loop (){

}

Ta thấy rằng đoạn code khi sử dụng hàm for thì cấu trúc đã được rút gọn đi rất nhiều

Lưu ý:

Ngày đăng: 03/01/2024, 13:24

HÌNH ẢNH LIÊN QUAN

Hình 1.1. Cấu trúc của thiết bị vi điều khiển  1.2. Vi xử lý và vi điều khiển - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 1.1. Cấu trúc của thiết bị vi điều khiển 1.2. Vi xử lý và vi điều khiển (Trang 1)
Hình . Sơ đồ kết nối arduino với một led đơn thông qua nút nhấn - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
nh Sơ đồ kết nối arduino với một led đơn thông qua nút nhấn (Trang 61)
Hình 1.6: Lưu đồ điều khiển 8 LED sáng dồn và tắt dồn từ phải sang trái - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 1.6 Lưu đồ điều khiển 8 LED sáng dồn và tắt dồn từ phải sang trái (Trang 92)
Hình 1.8: Lưu đồ điều khiển 8 LED sáng dồn và tắt dồn từ trong ra 2 bên - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 1.8 Lưu đồ điều khiển 8 LED sáng dồn và tắt dồn từ trong ra 2 bên (Trang 95)
Hình 2.2. Lưu đồ điều khiển bật tắt LED bằng nhấn giữ nút - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 2.2. Lưu đồ điều khiển bật tắt LED bằng nhấn giữ nút (Trang 99)
Hình 2.3: Lưu đồ điều khiển bật tắt LED bằng nhấn nhả nút - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 2.3 Lưu đồ điều khiển bật tắt LED bằng nhấn nhả nút (Trang 100)
Hình 3.1: Sơ đồ nguyên lý điều khiển đèn led bằng biến trở - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 3.1 Sơ đồ nguyên lý điều khiển đèn led bằng biến trở (Trang 102)
Hình 4.4: Lưu đồ điều khiển đèn bằng cảm biến ánh sáng - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 4.4 Lưu đồ điều khiển đèn bằng cảm biến ánh sáng (Trang 107)
Hình 6.6: Lưu đồ điều khiển LED 7 đoạn (Kathode chung) - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 6.6 Lưu đồ điều khiển LED 7 đoạn (Kathode chung) (Trang 115)
3. Sơ đồ nguyên lý - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
3. Sơ đồ nguyên lý (Trang 119)
Hình 7.2: Sơ đồ nguyên lý điều khiển LCD - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 7.2 Sơ đồ nguyên lý điều khiển LCD (Trang 120)
Hình 7.4: Lưu đồ hiển thị con trỏ và in, hướng in văn bản ra màn - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 7.4 Lưu đồ hiển thị con trỏ và in, hướng in văn bản ra màn (Trang 122)
Hình 7.5: Lưu đồ hiển thị, xóa dữ liệu hiển thị trên LCD - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 7.5 Lưu đồ hiển thị, xóa dữ liệu hiển thị trên LCD (Trang 123)
3. Sơ đồ nguyên lý - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
3. Sơ đồ nguyên lý (Trang 129)
Hình 5.2. Sơ đồ nguyên lý mô đun L298 - Bài giảng Ứng dụng vi điều khiển trong kỹ thuật điện
Hình 5.2. Sơ đồ nguyên lý mô đun L298 (Trang 133)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm