Giáo trình Lập trình vi điều khiển nâng cao cung cấp cho người học những kiến thức như: ngôn ngữ lập trình; lập trình giao diện arduino với các linh kiện, cảm biến, board. Mời các bạn cùng tham khảo!
Trang 1TRƯỜNG CAO ĐẲNG NGHỀ ĐỒNG THÁP
KHOA ĐIỆN – ĐIỆN TỬ
GIÁO TRÌNH MÔN HỌC: LẬP TRÌNH VI ĐIỀU KHIỂN NÂNG CAO
NGÀNH, NGHỀ: CN T ĐI N, ĐI N T
TRÌNH ĐỘ: CAO ĐẲNG/TRUNG CẤP
(Ban hành kèm theo Quyết định Số: /QĐ-CĐNĐT ngày… tháng…năm 2018
của Hiệu trưởng Trường Cao đẳng nghề Đồng Tháp)
Trang 3I
Mục lục
LỜI NÓI ĐẦU 1
T NG QUAN 1
1 1 n m 1
1 2 Cấu trú v ứ năn k ố 1
1 3 Cấu trú ủ m t k t r u no 4
1.4 Arduino IDE 8
1 5 C ặt IDE 10
1 6 C ặt driver arduino uno r3 11
NGÔN NGỮ LẬP TRÌNH 14
2 1 Cấu trú n ôn n ữ l p tr n 14
2 2 V o r ữ l u 20
2 2 1 xuất ữ l u r m t p n 20
2 3 C n ắt 23
2.4 ADC 28
2 5 G o t p I2C, UART, SPI 30
3 LẬP TRÌNH GIAO TI P AR UINO VỚI C C LINH KIỆN, C M I N, OAR 46
T N ÀI: G o p d l n o on d no 47
T N ÀI: G o p An lo o p PWM on d no 56
Trang 4II
T N ÀI: G o p n lo np n A d no Uno 62
T N ÀI: G o p Uart, I2C 68
T N ÀI: N on A d no I MỤC TIÊU CỦA BÀI: 73
T N ÀI: Th k hệ hốn đ ề kh ển vớ d no 76
Trang 51
1 T NG QUAN 1.1 Khái niệm
V đ ề kh ểnl m tmáy tính ợ tí ợp tr n m tchíp, n t ờn ợ s ụn
ể ều k ển thi t bị n t V ều k ển, t ự ất, l m t t ốn o ồm m tvi
x lý u suất ủ ùn v t n t ấp (k vớ v x lý năn ùn tron
m y tín ) k t ợp vớ k ố n o v n b nhớ, cácmô un v o/r , mô un n ổ
số s n t ơn tự v t ơn tự s n số, Ở m y tín t mô un t ờn ợ xây
ựn ở íp v m n o
V ều k ển t ờn ợ ùn ể xây ựn h thống nhúng N xuất n k
n ều tron dụng cụ n t , t t ị n,máy giặt,lò vi sóng, n tho i, u c DVD,thi t bị a
p ơn t n,dây chuyền tự ng, v.v
1.2 Cấu trúc và chức năn các khối
1.2.1 Cấu trúc
H n 3 1: ấu trú ủ v ều k ển AVG
Trang 62
1.2.2 chức năng các khối
1.2.2.1 Bộ nhớ
B n ớ ủ v ều k ển AVR ợ tổ ứ n s u:
B n ớ ơn tr n (Pro r m m mory) : n ớ Fl s l p tr n v x ợ
B n ớ ơn tr n ồm 2 p n: v tor n ắt( nt rrupts v tors) v mã l n
ơn tr n ( nstru t on) C nt rrupts v tors nằm ở p n u ủ n ớ ơn
tr n v tùy v o từn lo p T p s u nt rrupts v tors l nstru t on, ây
Trang 73
EEPRO (El tr lly Er s l Pro r mm l RO ) : l n ớ k qu n tr n
ủ v ều k ển AVR, n ớ n y l RO n n k ôn ị x k mất n n n ợ
C nstru t on ợ ứ tron n ớ ơn tr n Fl s m mory ớ n
t n 16 t B n ớ ơn tr n ợ truy p tron mỗ u kỳ xung clock
và 1 nstru t on ứ tron pro r m m mory sẽ ợ lo v o tron nstru t on
r st r, nstru t on r st r t n v lự n r st r f l ũn n RA o A U
t ự t Tron lú t ự t ơn tr n , ị ỉ ủ òn l n n t ự t ợ quy t
ịn ở m t m ơn tr n – PC (Pro r m ount r) Đ ín l t ứ o t
C t DDxn ể truy p o ị ỉ xuất n p DDRx B t DDxn tron t n hi DDRx ùn ể ều k ển ớn ữ l u ủ ân ủ ổn n y trị lo
Trang 8ổn ) N ắt n trở kéo r , PORTx ợ trị 0 oặ ân n n ổn
r C ân ủ ổn l 3 tr n t k 1 ều k n r s t l tí ự t m í xun ồn
ồ k ôn o t n
C t PINxn ể truy p t ị ỉ xuất n p PINx PINx l ổn ỉ ể , ổn n y t ể tr n t lo ủ PORTx PINx k ôn p l t n ,v PINx o p ép t trị lo tr n ân ủ PORTx ú ý PINx
k ôn p l t n ,v PINx o p ép t trị lo tr n ân ủ PORTx
1.2.2.4 Các khối khác
ADC: C o p ép uyển ổ tín u từ t ơn tự s n tín u số
SPI, I2C, Us rt: l k ố ợ xây n o p ép o t p vớ m y tín , mo ul
uy n ụn , … t ôn qu o t ự uẩn Us rt, I2C, SPI
PW : o p ép t o r xun o t n số 50Hz n n rôn xun t ể t y
Trang 95
H n 3 2 Cấu t o ủ r u no uno r3
1 Cáp USB Đây l ây p t ờn ợ n kèm t o o, ây p ùn ể ắm
v o m y tín ể n p ơn tr n o o v ây ồn t ờ ũn lấy n uồn từ n uồn us
Trang 106
5 Nút reset Nút r s t ợ s ụn ể r s t l ơn tr n n y Đô k
ơn tr n y ặp lỗ , n ờ ùn t ể r s t l ơn tr n
6 ICSP củ ATme 6U ICSP l ữ v t tắt ủ In-Circuit Serial
Pro r mm n Đây l ân o t p SPI ủ p Atm 16U2 C ân n y
t ờn ít ợ s tron ự n về Ar u no
7 Chân x ấ ín h ệ C tất 14 ân xuất tín u r tron Ar u no Uno,
n ữn ân ấu ~ l n ữn ân t ể ăm xun (PW ), tứ t ể ều k ển tố
n ơ oặ s n ủ èn H n 2 t ể n rất rõ n ữn ân ể ăm xung này
8 IC ATmega 328 IC Atm 328 l l n ồn ủ o m Ar u no Uno, IC n y
0 Chân lấy ín h ệ An lo C ân n y lấy tín u An lo (tín u t ơn tự)
từ m n ể IC Atm 328 x lý C tất 6 ân lấy tín u An lo , từ A0 n A5
Chân cấp n ồn cho cảm b n C ân n y ùn ể ấp n uồn o t t
ị n n o n rol , m n, RC s rvo,…tr n k u vự n y sẵn ân GND ( ân nố ất, ân âm), ân 5V, ân 3 3V n ợ t ể n ở n 2 N ờ n ữn
ân n y m n ờ s ụn k ôn n t t ị n ổ n k ấp n uồn o m
n, rol , r s rvo,…N o r tr n k u vự n y òn có chân Vin và chân reset, chân IOREF Tuy n n ân n y t ờn ít ợ s ụn n n tron t l u n y x n k ôn sâu về n
Trang 139
B ớ 2: C n mụ ownlo ể l n ơn tr n IDE t í ợp ( n 3 6)
H n 3 6: m n n l n ơn tr n IDE t í ợp
B ớ 3: C n ều n t í ợp
C 2 tùy n o ều n W n ows l W n ows nst ll r v W n ows
z p f l for non m n nst ll Tùy n t ứ n ất ùn o n ờ l m n ủ
m y, tùy n t ứ 2 o n ờ k ôn p m n ủ m y T ôn t ờn số
Trang 1511
6 Cà đặt driver arduino uno r3
T ớn ẫn ặt tr n r v r o r u no o r ã ợ sẵn n n p n
ớn ẫn n y ỉ n o n n o ùn t mụ ặt sẵn tron f l nén ZIP
Chọn Start Menu, click chuột phải "Computer", và chọn "Manage" (hình 3.9)
Hình 3.9: vào trình cài đặt driver
C n "D v n r" p í n tr , t m òn "Unknown v " oặ "Ar u no
*Bo r N m *" p í ớ "Ot r v s" (Hình 3.10)
H n 3 10: n r v r n n ủ r u no
Cl k u t p v o "Unknown v " oặ "Ar u no *Bo r N m *" v n
"Update Driver Software" (hình 3.11)
Trang 1612
H n 3 11: C p n t r v r
S u n "Brows my omput r for Dr v r softw r "
H n 3 12: x ịn ờn ẫn p n t r v r Cuố ùn on Brows v t m n t mụ ứ f l r v r tron t mu
r u no( ví ụ tr n m y ủ tô l F:\Program Files\arduino-1.0.5\drivers) (hình 3.13)
Trang 1814
2 NGÔN NGỮ LẬP TRÌNH 2.1 Cấu trúc ngôn ngữ lập trình
Fun t on t ứ l loop Đây l ốt lõ ủ m ơn tr n Ar u no Ar u no
n y, s u k fun t on s tup ã y xon , fun t on loop sẽ y qu tất o ,
s u t ự n l to n - o n k oặ l ị mất n uồn oặ ôn tắ r s t ợ
n ấn C ều t ờ n n ể o n t n m t loop p ụ t u v o p n o ợ
ứ tron n
D ớ ây l m t sơ ồ m n ớ tron m t ơn tr n :
H n 3 16: ấu trú ủ ơn tr n v ều k ển ùn r u no
Ví ụ 3 1:
Trang 19// initialize the digital pin as an output
// Pin 13 has an LED connected on most Arduino boards:
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
Trang 2016
Dây cáp USB 2 đầu Type A-B
Hãy tu n tự t ự n t o từn ớ t o ớn ẫn s u
Bước 1: Kết nối Arduino UNO R3 vào máy tính
Hình 3.17: kết nối arduino với pc
Bước 2: Tìm cổng kết nối của Arduino Uno R3 với máy tính
Ar u no Uno R3 k t nố vớ m y tín , n sẽ s ụn m t ổn CO (Communication port - ổn ữ l u o) ể m y tín v o m t ể truyền t ữ l u
qu l t ôn qu ổn này W n ows t ể qu n lí n 256 ổn CO Để t m ợ
ổn CO n ợ s ụn ể m y tín v m Ar u no UNO R3 o t p vớ nhau, n p mở ứ năn D v n r ủ W n ows
B n mở sổ Run v õ l n mmc devmgmt.msc
Hình 3.18: khởi động msc
Trang 2117
S u ấm Ent r, sổ Device Manager sẽ n l n
Hình 3.18: cửa sổ msc device manager
ở mụ Ports (COM & LPT), n sẽ t ấy ổn CO Ar u no Uno R3 n k t
nố
Hình 3.19: Xác định tên cổng com giao tiếp với arduino uno
Cổn k t nố ở ây l COM3
Trang 2218
T ôn t ờn , tron n ữn l n k t nố t p t o, W n ows sẽ s ụn l ổn
CO 3 ể k t nố n n n k ôn n t ự n t m t o t t m ổn CO n y nữ Bước 3: Cấu hình phiên làm việc cho Arduino IDE
Vào menu Tools -> Board -> n Arduino Uno
Hình 3.20: chọn loại kit arduino đang sử dụng
Vào menu Tools -> Serial Port -> n ổn Ar u no n k t nố vớ m y tín Ở
m y ủ m n l COM3
Trang 24P n: l ân muôn xuất ữ l u
v lu : trị l 0( OW) oặ 1(HIGHT)
Ví ụ 3 2:
void setup() {
Trang 27Ho t n : t ự n l n n ắt, CPU sẽ t m k m tron n v tor n ắt
ị ỉ ủ ơn tr n p ụ vụ n ắt N ờ s ụn ũn t ể xây ựn môt ơn
T m r 0, 2 l 2 t m r 8 t, y n k n ỉ t ể m từ 0 n 255 v vớ Timer1 là t m r 16 t, n t ể m từ 0 n 65535 mà thôi Arduino UNO có xung
n ịp l 16 Hz, t ơn ơn 1/16000000s, ~63ns N u T m r m xun n ịp
n y t vớ T m r 0,2 ỉ t ể m 256*63ns ~16us v vớ T m r 1 l ~4 ms
uốn ặt n ắt, n p ặt l n tron m setup(){}
Trang 28 pwm( r p n, nt uty, lon m ros on s) // Băm xun r ân p n vớ số
u kỳ l uty Xun r n l microseconds
s l Pwm( r p n) //Hủy ăm xun
const int led = LED_BUILTIN;
// ịn n ĩ ân ED, B n ED_BUI TIN ùn ể ỉ ED ợ // ắn
tr n Bo r m Ví ụ vớ Ar u no UNO t // ED_BUI TIN=13 void setup(void)
Trang 29// x y r n ắt ơn tr n sẽ m l nk ED() }
int ledState = LOW;
volatile unsigned long blinkCount = 0;
Trang 31int ledPin = 13;
void tatled()
{
t lWr t (l P n, OW); // tắt èn l
Trang 32// m t tl l n tụ k òn n ấn nút }
Tron ứn ụn o l ờn v ều k ển ằn v ều k ển uyển ổ
t ơn tự-số (ADC) l m t t n p n rất qu n tr n Dữ l u tron t ớ ủ ún t
l ữ l u t ơn tự ( n lo ) Ví ụ n t k ôn k í uổ s n l 25oC v uổ
Trang 3329
t n 8 t t ể ứ tố 256 (28) trị n uy n từ 0 n 255, n t mứ
n t k ôn n uy n n 28 123 oC sẽ k ôn ợ l N k , ún t ã
“số ” ( t l z ) m t ữ l u n lo t n m t ữ l u t l Qu tr n “số ”
n y t ờn ợ t ự n ở m t t t ị l “ uyển ổ t ơn tự - số y ơn
n l ADC (An lo to D t l Converter)
Tron r u no ể uyển 1 tín u v t ly ớ n tín u n t n tín u số
t s ụn ân từ A0 n A5
Cú pháp
n lo R ([ ân n p]);
N m vụ ủ analogRead() l trị n p từ m t ân An lo (ADC)
Tr n m Ar u no UNO 6 ân An lo In, ợ kí u từ A0 n A5 Tr n
m k ũn n ữn ân t ơn tự n v y vớ t ền tố "A" ứn u, s u l số
Trang 34I²C, vi t tắt ủ từ t n An “Inter-Integrated Circuit”, là m t lo bus nố
t p ợ p t triển ở ãng s n xuất l n k n n t Philips Ban u, lo us n y chỉ ợ ùng trong các linh ki n n t củ P l ps S u , do tính u v t v ơn n
Trang 35C m t l u ý n ỏ về xun lo k B n ất ủ I2C l ữ l u tr n ờn SDA ỉ
ợ n n ở s ờn l n ủ ân C Do v y xun lo k t ể k ôn n ín x
tố l 1 Hz y 3 4 z ợ ụn ểm n y t ể s ụn 2 ân GPIO ể l m
ân o t p I2C mềm m k ôn n ất t t n m t ân C t o xun vớ tố
ín x ( t ể ỉ n ùn l y v t tắt mứ lo , t m k o p n o ở uố bài :D)
SCL và SDA luôn ợ kéo lên n uồn ằn m t n trở kéo lên có giá trị xấp xỉ 4,7 KOhm (tùy vào từn t t ị và chuẩn o t p, ó thể o n tron k o n
Trang 3632
1KOhm n 4 7 o m C ú ý rằn t o ấu ình này, m t t t ị ó thể ở mứ lo
OW y o trở n n ko thể ở n HIGH => C ính trở pull up t o r mứ lo HIGH)
H n 3 28: trị n trở tr o n uồn tron I2C
Lý do là các chân này có d n op n r n ể ó thể hoạ độn ở các mức đ ệnáp
Trang 37Hình 3.29: Hai chân I2C trên arduino
Đ s ụn I2C us tr n Ar u no, ún t sẽ n s ụn t v n W r ( ây l built- n l r ry ủ Ar u no)
n sẽ ớ t u m t số m tron t v n W r :
Wire.begin(address (optional));
Trang 3834
ở t o t v n W r v t m v o I2C us address: 7- t ị ỉ ủ t t ị "Sl v " (opt on l); n u k ôn
Trang 3935
C ún t sẽ lắp mo ul R l t m lo k vớ Ar u no n s u: (trong module real
t m lo k ã sẵn 2 n trở pull-up 3.3k)
H n 3 30: k t nố r u no uno vớ DS1307 Đây l T m k p r r st rs ủ DS1307, ún t sẽ ự v o n n y ể read/write IC DS1307 qua I2C
Trang 41/* C uyển từ form t BCD (B n ry-Coded Decimal) sang Decimal */
int bcd2dec(byte num)
Trang 43n p Tín u từ p UART t ờn t o mứ TT : mứ lo l 5, mứ low l 0V Tron k , tín u t o uẩn RS232 tr n m y tín n ân t ờn l -12V cho
Trang 4440
mứ lo v +12 o mứ low (t m k o n 1) C ú ý l t í tron t
l u n y t o mứ lo TT ủ USART, k ôn t o RS232
Hình 3.31: Tín u t ơn ơn ủ UART v RS232
T yền hôn nố p: s n n xây ựn m t ứn ụn p ứ t p n s
ụn n ều v ều k ển ( oặ v ều k ển v m y tín ) k t nố vớ n u Tron qu
tr n l m v v ều k ển n tr o ổ ữ l u o n u, ví ụ t n uốn st r truyền l n o Sl v r oặ Sl v r ở tín u t u t p ợ về st r x lí…G s
ữ l u n tr o ổ l mã ều 8 ts, n t ể sẽ n ĩ n k t nố ơn
n n ất l k t nố 1 PORT (8 t) ủ mỗ v ều k ển vớ n u, mỗ l n tr n PORT
sẽ ịu tr n m truyền/n n 1 t ữ l u Đây l o t p son son ,
n y l ơn n n ất v ữ l u ợ xuất v n n trự t p k ôn t ôn qu ất kỳ
m t t u t n ổ n o v v t tố truyền ũn rất n n Tuy n n, n n
t ấy, n ợ ểm ủ truyền n y l số ờn truyền qu n ều, n ãy t ởn
t ợn n u ữ l u ủ n trị n lớn t số ờn truyền ũn sẽ n ều t m
H t ốn truyền t ôn son son t ờn rất ồn kền v v t kém u qu Truyền
t ôn nố t p sẽ quy t v n ề n y, tron tuyền t ôn nố t p ữ l u ợ truyền từn t tr n 1 ( oặ m t ít) ờn truyền V lý o n y, o ù ữ l u ủ n lớn
n âu n ũn ỉ ùn rất ít ờn truyền H n 2 mô t sự so s n ữ 2