Bằng cách áp dụng vi điều khiển trong quá trình sản xuất và xử lý, vi điều khiển đã thực sự thể hiện được ưu thế của mình so với các thiết bị điều khiển thông thường.. Ngoài các chức năn
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP
TP.HCM KHOA ĐIỆN
Trần Anh Quang15078131Nguyễn Hoàng Minh Thống 15076471
Phạm Bá Tường15067871
Trang 2TP.HỒ CHÍ MINH – NĂM 2018
LỜI CẢM ƠN
Sau gần 5 tháng thực hiện thiết lập dự án kỹ thuật “CHỐNG ÙN TẮC GIAO THÔNG TẠI CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8” đã hoàn thành một số phần
Lời đầu tiên em muốn nói là em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy Ths Nguyễn Đức Toàn, khoa Điện chuyên
ngành Điều khiển Tự động của trường Đại học công nghiệp TP.HCM
Dù rất bận rộn với công việc những thầy vẫn dành thời gian để giúp
đỡ và động viên cũng như cung cấp các kinh nghiệm thực tế, các tài liệu liên quan cho chúng em trong suốt quá trình thực hiện đề tài nghiên cứu khoa học này
Xin gửi lời cảm ơn đến các thầy cô trong khoa Điện trường Đại Học Công Nghiệp TP.HCM đã tận tình giảng dạy trong suốt quá trình học cũng như nhận được các ý kiến góp ý Chính các thầy cô đã xây dựng cho chúng em những kiến thức nền tảng và những kiến thức chuyên môn để có thể hoàn thiện đồ án này cũng như công việc của mình saunày Em xin chân thành cảm ơn!
Trang 3Lời mở đầu
Ngày nay, cùng với sự phát triển kinh tế, các đô thị hóa cũng giatăng một cách nhanh chóng dẫn đến lượng giao thông của cácphương tiện trong các đô thị cũng tăng theo Vì vậy, việc giải quyếtđảm bảo giao thông trong các đô thị là vô cùng quan trọng Songsong với sự phát triển đó, ngành kĩ thuật điện tử đang đóng một vaitrò rất quan trọng để đưa con người bước sang kỷ nguyên mới Trong
số đó, ta không thể không nói đến kỹ thuật vi điều khiển Kỹ thuật viđiều khiển được ứng dụng rộng rãi trong các lĩnh vực kỹ thuật, đờisống và xã hội Chúng ta có thể biết đến một số các thiết bị kỹ thuậtnhư thiết bị tự động, thiết bị trong văn phòng và các thiết bị dùng ởtrong các hộ gia đình dùng các bộ vi điều khiển Muốn vận hành cácthiết bị một cách tự động này, con người cũng càng hoàn thiện cácchuẩn giao tiếp để kết nối chúng lại với nhau thực hiện việc trao đổithông tin, điều khiển cơ cấu chấp hành một cách thuận lợi hơn
Với những kiến thức đã được học và kiến thức cập nhật, cùng với
sự nghiên cứu, hướng dẫn của thầy giáo Đề tài được chọn là: CHỐNG
ÙN TẮC GIAO THÔNG TẠI CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8
Trang 4Mục Lục
1 DẪN NHẬP 7
1.1 Giới thiệu, các vấn đề bất cập 7
1.1.1 Tổng quan về đề tài 7
1.1.2 Ý tưởng thiết kế hệ thống đèn giao thông 7
1.2 Nguyên lý hoạt động của đèn giao thông tại ngã tư 8
1.2.1 Nguyên tắc hoạt động của đèn giao thông 8
1.2.2 Phương pháp tính toán, đặt thời gian cho tín hiệu giao thông 9
2 TỔNG QUAN URDUINO R3 9
2.1 Thông số cơ bản của Mạch Arduino UNO R3 10
2.2 Nguồn sử dụng 10
2.3 Các chân năng lượng và cổng vào/ra trên Arduino Board 10
2.3.1 Các chân năng lượng 10
2.3.2 Các cổng I/O 11
2.4 Bộ nhớ sử dụng 12
3 TỔNG QUAN STM8 12
3.1.1 GIỚI THIỆU VỀ STM8 12
3.1.2 Core 14
3.1.3 Memories 14
3.1.4 Interrupt management 14
3.1.5 Timers 14
3.1.6 Communication interfaces 15
3.1.7 Analog to digital converter (ADC) 15
3.1.8 Ưu điểm/hạn chế/ứng dụng 15
4 TỔNG QUAN VỀ MODULE LORA SX1278 E32-TTL-100 15
4.1 Giới thiệu Module Lora SX1278 E32-TTL-100 15
4.1.1 Các đặc trưng của module 15
4.1.2 Các công dụng cơ bản của module 16
4.1.3 Các thông số điện 16
4.2 Chức năng 18
4.2.1 Chi tiết các chân trên module 18
4.2.2 Kết nối với vi điều khiển ngoài 19
Trang 54.2.3 Reset 19
4.2.4 Chi tiết chức năng chân AUX 19
4.3 Các chế độ hoạt động 20
5 TẬP LỆNH 22
5.1 Analog 22
5.1.1 uint8_t analogRead(uint8_t pin); 22
5.2 Eeprom 23
5.2.1 uint8_t read(uint16_t address); 23
5.2.2 void write(uint16_t address, uint8_t value); 23
5.2.3 void update(uint16_t address, uint8_t value); 23
5.3 Exti 23
5.3.1 EXTI_Port_TypeDef digitalPinToInterrupt(uint8_t pin); 23
5.3.2 void attachInterrupt(EXTI_Port_TypeDef port, void (*ISR)(), uint8_t in_mode); 24 5.4 Generic 24
5.4.1 delay_us(unsigned int x); //co the thay the delay_us thanh delayMicroseconds 24 5.4.2 void delay_ms(unsigned int x); //co the thay the delay_ms thanh delay 24
5.5 Gpio 25
5.5.1 void pinMode(uint8_t pin, GPIO_Mode_TypeDef mode); 25
5.5.2 void digitalWrite(uint8_t pin, bool val); 25
5.5.3 bool digitalRead(uint8_t pin); 25
5.6 PWM 26
5.6.1 void analogWrite(uint8_t pin, uint8_t val); 26
5.7 Serial 26
5.7.1 void begin(unsigned long baud); 26
5.7.2 uint8_t available(); 26
5.7.3 uint8_t read(); 26
5.7.4 void write(char c); 27
5.8 Spi 27
5.9 Wire 27
6 GIAO TIẾP I2C 27
6.1 Khái quát về i2c 27
6.2 Đặc điểm giao tiếp I2C 27
6.3 Chế độ hoạt động ( Tốc độ truyền) 29
6.3.1 Chế độ tiêu chuẩn: 29
Trang 66.3.2 Chế độ cao tốc (High-Speed): 29
6.3.3 Trình tự truyền bit trên đường truyền: 30
6.4 Điều kiện START và STOP (START and STOP conditions) 30
6.5 Một số ví dụ 31
7 Class 33
8 CÁC PHẦN MỀM SỬ DỤNG 34
8.1 Phần mềm arduino IDE 34
8.1.1 Cài đặt arduino IDE 34
8.1.2 Cài đặt Driver 35
8.1.3 Giao diện khi khởi động Arduino IDE 37
8.1.4 Vùng lệnh 37
8.1.5 Vùng viết chương trình 38
8.1.6 Vùng thông báo (debug) 39
8.1.7 Một số lưu ý 39
8.2 Phần mềm sử dụng là RF_Setting_v3.45 41
8.2.1 Cấu hình các thông số cho Module 41
8.2.2 Định dạng gói tin 46
8.2.3 Truyền cố định (Fixed mode) 47
8.2.4 Truyền lan rộng (Broadcast mode) 47
8.3 Phần mềm IAR Embedded Workbench 48
9 THI CÔNG 57
9.1 Lên ý tưởng làn sóng xanh 57
9.1.1 Cấu tạo 57
9.1.2 Giản đồ thời gian cho từng đèn 57
9.1.3 Phương pháp tính toán, đặt thời gian cho tín hiệu giao thông 58
9.2 Sơ đồ kết nối 58
9.3 Lưu đồ giải thuật 58
9.4 Triển khai ý tưởng, lập trình, chạy mô hình 58
9.5 Kết quả 59
9.6 Đánh giá của giáo viên hướng dẫn 60
9.7 Tổng kết 61
Trang 7Nhờ chính sách đúng đắn này mà Việt Nam đang tiến dần, tiếp cậncác công nghệ hiện đại của thế giới từng bước cải thiện và hoàn thiện tình trạng sản xuất lạc hậu, thủ công, năng suất kém và nhiều lĩnh vực nguy hiểm có tính chất độc hại đến đời sống người lao động, nângcao dần mức sống cho người dân.
Việc tiếp thu những thành tựu khoa học kỹ thuật của thế giới cùng
đi đôi với việc phát triển tầng lớp kế thừa có tri thức về công nghệ hiện đại đồng thời cũng có trách nhiệm phát huy, sáng tạo những kỹ thuật mới góp phần phát triển nền khoa học kỹ thuật nước nhà cũng
là góp phần vào việc thúc đẩy công nghệ hiện đại đang phát trên thế giới
Ngày nay trên thế giới với sự bùng nổ của các ngành công nghệ thông tin , điện tử v.v Đã làm cho đời sống của con người ngày càng hoàn thiện Các thiết bị tự động hóa đã ngày càng xâm lấn vào trong sản xuất và thậm chí là vào cuộc sống sinh hoạt hằng ngày củamỗi con người Là sinh viên khoa Điện chuyên ngành Điều khiển Tự động của trường Đại học công nghiệp TP.HCM, với những kiến thức đã học cùng với mong muốn ứng dụng kiến thức tự động hóa đó để đáp ứng được nhu cầu hằng ngày, chúng em đã chọn đề tài trên
1.1.2 Ý tưởng thiết kế hệ thống đèn giao thông
Trong những năm gần đây cùng với sự phát triển của nền kinh tế làtốc độ gia tăng không ngừng về các loại phương tiện giao thông Sự phát triển nhanh chóng của các phương tiện giao thông đã dẫn đến tình trạng tắc nghẽn giao thông xảy ra rất thường xuyên.Vấn đề đặt
ra ở đây là làm sao để đảm bảo giao thông thông suốt và sử dụng đènđiều khiển giao thông ở những ngã tư, những nơi giao nhau của các làn đường là một giải pháp
Trang 8Để viết chương trình điều khiển đèn giao thông ta có thể viết trên nhiều hệ ngôn ngữ khác nhau Nhưng cùng với sự phát triển mạnh mẽcủa ngành công nghiệp chế tạo linh kiện bán dẫn và vi mạch tổng hợp, một hướng phát triển mới của các vi xử lý đó hình thành đó là các vi điều khiển Với nhiều ưu điểm, vi điều khiển đó được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau Bằng cách áp dụng vi điều khiển trong quá trình sản xuất và xử lý, vi điều khiển đã thực sự thể hiện được ưu thế của mình so với các thiết bị điều khiển thông
thường Vì thế việc sử dụng vi điều khiển mang lại hiệu quả khá cao trong việc điều khiển tín hiệu giao thông
Mục đích của đề tài này là hiểu biết về vấn đề điều khiển giao thông qua họ vi xử lý STM8S và quan trọng nhất là những giải pháp giao thông tại các ngã tư và cụm ngã tư nhằm tiết kiệm thời gian và ách tắc giao, giải pháp điều khiển đèn giao thông tại các nút giao thông quan trọng
1.2 Nguyên lý hoạt động của đèn giao thông tại ngã tư
1.2.1Nguyên tắc hoạt động của đèn giao thông
Hình 2.3: Mô tả một nút giao thông
Trang 9Cơ chế hoạt động của đèn giao thông thật ra rất đơn giản: Khiđèn của làn đường 1(đx1) được bật sáng thì cùng lúc đó đèn đỏ của làn đường 2 (đđ2), đèn đỏ cho người đi bộ ở làn đường
1(đđn1), đèn xanh người đi bộ làn đường 2 (đxn2) cũng được bậtsáng Sau một khoảng thời gian nhất định đx1 tắt,đèn vàng 1(đv1) được bật lên Khi đv1 tắt thì đđ2, đđn1, đxn2 mới tắt cùng lúc đó đèn xanh 2(đx2), đèn 26 đỏ 1(đđ1), đèn đỏ cho người đi bộ 2(đđn2), đèn xanh cho người đi bộ 1(đxn1) được bật sáng Lúc đèn vàng 2(đv2) được bật lên cũng là lúc đx2 tắt, đv2 tắt chu kì được lập lại với đđ2, đx1 Thường thì mỗi cụm ngã tư
sẽ có 2 hướng đường: hướng 1 và 2 Việc hoạt động của các đèn
sẽ có cách tính toán đối xứng với nhau Đèn xanh của hướng này
sẽ đi cùng với đèn đỏ của hướng còn lại Và đèn đỏ sẽ đi với đèn vàng và đèn xanh của hướng còn lại Cứ như vậy nút giao thông
sẽ được vận hành Ngoài ra còn hướng đi cho người đi bộ sẽ chính là đèn đỏ của hướng đó là chiều người đi bộ được tham giatheo chiều đó
1.2.2Phương pháp tính toán, đặt thời gian cho tín hiệu giao
thông
Gọi thoi_gian là khoảng thời gian bằng thời gian phương tiện
đi từ ngã tư này đến ngã tư kia thì ta có :
quang_duong = van_toc x thoi_gianTrong đó:
thoi_gian: thời gian chênh lệch giữa hai nút (s).quang_duong: khoảng cách giữa hai nút (m)
van_toc: là vận tốc xe (m/s)
Dựa vào khoảng cách giữa các nút giao thông ta có thể tính thời gian trung bình của một phương tiện vận chuyển giữa các nút , hay còn gọi là thoi_gian: thời gian chênh lệch giữa hai nút (s)
Trang 102.1 Thông số cơ bản của Mạch Arduino UNO R3
Cường độ dòng điện tối đa trên mỗi
Cường độ dòng điện nguồn 3.3V tối
Trang 110.5KB được sử dụng thêm bootloader
áp giới hạn là 6-20V Thường thì cấp nguồn bằng pin vuông 9V là hợp
lí nhất nếu không có sẵn nguồn từ cổng USB Nếu cấp nguồn vượt quángưỡng giới hạn trên, sẽ làm hỏng Arduino UNO
2.3 Các chân năng lượng và cổng vào/ra trên Arduino Board
2.3.1 Các chân năng lượng
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau
5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA
3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này
là 50mA
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO cóthể được đo ở chân này Và dĩ nhiên nó luôn là 5V Mặc dù vậy không được lấy nguồn 5V từ chân này để sử dụng bởi chức năngcủa nó không phải là cấp nguồn
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ
Trang 122.3.2 Các cổng I/O
Mạch Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối)
Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây Nếu không cần giao tiếp Serial, không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V
→ 5V) bằng hàm analogWrite() Nói một cách đơn giản, có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vìchỉ cố định ở mức 0V và 5V như những chân khác
Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L).Khi bấm nút Reset, sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng,LED sẽ sáng
Trang 13 Arduino UNO Broad có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V Với chân AREF trên board, có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog Tức là nếu cấpđiện áp 2.5V vào chân này thì có thể dùng các chân analog để
đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác
khoảng vài KB trong số này sẽ được dùng cho bootloader
2KB cho SRAM (Static Random Access Memory): Giá trị các biến bạn khai báo khi lập trình sẽ lưu ở đây Khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà phải bận tâm Khimất điện, dữ liệu trên SRAM sẽ bị mất
1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây giống như một chiếc ổ cứng mini – nơi mà
có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM
Trang 14STM8S103F3P6, STM8S103K3T6, Sở dĩ có điều đó bởi giá thành của chúng rất thấp so với mặt bằng chung, nhưng sức mạnh và ngoại vi không hề thua kém và sự hỗ trợ của hãng rất nhiều Ví dụ đối với STM8S003F3P6, thông số cấu hình cơ bản như sau:
UART, ADC(10BIT), SPI, I2C, WDT, BEEP,… 1
Access line, 16 MHz STM8S 8-bit MCU, up to 8
Kbytes Flash, data EEPROM,10-bit ADC, 3
timers, UART, SPI, pcDatasheet - production data
Trang 153.1.2 Core
• 16 MHz advanced STM8 core with Harvard architecture and 3-stage pipeline
• Extended instruction set
• Flexible clock control, 4 master clock sources
• Low power crystal resonator oscillator
External clock input
• Internal, user-trimmable 16 MHz RC
• Internal low-power 128 kHz RC
• Clock security system with clock monitor Power management:
Low-power modes (wait, active-halt, halt)
• Switch-off peripheral clocks individually
• Permanently active, low-consumption poweron and power-down reset
3.1.4 Interrupt management
Nested interrupt controller with 32 interrupts
Up to 27 external interrupts on 6 vectors
3.1.5 Timers
• Advanced control timer: 16-bit, 4 CAPCOM channels, 3 complementary outputs, dead-time insertion and flexible synchronization
February 2017 DoclD15441
This is information on a product in full production.
16-bit general purpose timer, with 3 CAPCOM channels (IC, OC or PWM)
Trang 16• 8-bit basic timer with 8-bit prescaler
• Auto wake-up timer
• Window watchdog and independent watchdog timers
3.1.7 Analog to digital converter (ADC)
• 10-bit, ±1 1-SB ADC with up to 5 multiplexed channels, scan mode and analog watchdog
• Up to 28 1/Os on a 32-pin package including
21 high sink outputs
• Highly robust I/O design, immune against current injection
4.1.1 Các đặc trưng của module
E32-TTL-100 là một loại module truyền nhận dữ liệu không dây với công suất 100mW, sử dụng côngnghệ Lora spread-spectrum, hoạt động ở dãy tần
số từ 410~441MHz (Tần số mặc định là 433MHz) Module được thiết kế dựa trên chip RF (radio frequences) SX1278 của SEMTECH Kiểu truyền dữ liệu minh bạch (Transparent Transmission) được hỗ trợ Các pin logic của module thuộc loại TTL Vì sử dụng công nghệ Lora spread-spectrum nên module
Trang 17có khoảng cách truyền xa, năng lượng truyền theo kiểu tập trung – tránh thất thoát công suất khi truyền, và chống nhiễu tốt.
Module còn có tính năng mã hóa và nén dữ liệu Dữ liệu truyền trong không khí là dữ liệu ngẫu nhiên (dữ liệu sau khi được mã hóa) Và với sự nghiêm ngặt về việc mã hóa và giải mã thì sự tấn công dữ liệu đều trở nên
vô nghĩa
Còn với chức năng nén dữ liệu thì thời gian truyền và sự ảnh hưởng củanhiễu sẽ bị giảm đi đáng kể, trong khi đó vẫn nâng cao được hiệu suất truyền
4.1.2 Các công dụng cơ bản của module
FEC
(Forward
Error
Correction)
Khắc phục lỗi gói tin
FEC tăng hiệu suất mã hóa, độ chính xác cao Nếunhưng có sự cố không mong muốn bất chợt ảnh hưởng tới gói tin gây mất độ chính xác thì FEC chỉnh sửa lại gói tin một cách tựu động.Vì vậy mà
độ tin cậy khi truyền tin được cải thiện
Nếu FEC bị vo hiệu hóa thì các gói dữ liệu lỗi sẽ bị
bỏ qua
Ngủ Khi module hoạt động ở chế độ ngủ thì sẽ không
thể truyền hay nhận tin được nữa Dòng tiêu tốn ởchế độ này là 6.0uA
Module có tích hợp bộ watchdog Khi module xảy
Trang 18WatchDog ra sự cố ngoài ý muốn (bị lỗi chẳng hạn) thì
module sẽ tự reset trong 0.107 giây, sau có mosule lại tiếp tục hoạt động với các thông số được cài đặt trước đó
Nên tháo nguồn sau đó cấp nguồn lại sau khi đã cài đặt các thông số cho module để đảm bảo module hoạt động đúng
Phạm vi hoạt
động 3000m Ở môi trường thông thoáng, 20dBm, độ khuếch đại anten:
5dBi, đặt ở độ cao 2m, tốc độ truyền 2.4kbps
Công suất
truyền 20dBm 4 sự lựa chọn: 20dBm, 17dBm, 14dBm, 10dBm
Tốc độ truyền 2.4kbps 6 sự lựa chọn: 0.3kbps,
1.2kbps, 2.4kbps, 4.8kbps, 9.6kbps, 19.2kbps
Cấu hình chân UART Có thể được cấu hình ở các
Trang 19giao tiếp với
module dạng: đẩy kéo (push-pull), trởkéo lên (high pull), cực thu để
hở (open drain)
Độ dài dữ kiệu
Độ dài dữ kiệu
Số lượng địa chỉ 65536 Thuận tiện cho truyền dữ liệu
kiểu network, broadcast và transparent
WOR (wake on
radio) Có hỗ trợ Dòng tiêu tốn trung bình nhỏ nhất trong chế độ này là
30uA Phù hợp cho các ứng dụng sử dụng pin (battery)
Đo cường độ dữ
liệu truyền Không được hỗ trợ
độ truyền 0.3kbps
Trang 20STT Tên Chiều tín hiệu Mô tả
(trở kéo lên không tốt, nên sử dụng trở ngoài)
Chân chọn chế độKhông được thả nổi chân này, nên dùng trở ngoài kéo lên hoặc kéo xuống
(trở kéo lên không tốt, nên sử dụng trở ngoài)
Chân chọn chế độKhông được thả nổi chân này, nên dùng trở ngoài kéo lên hoặc kéo xuống
AUX OUTPUT Chân hiển thị trạng thái của module
Trang 214.2.2 Kết nối với vi điều khiển ngoài.
4.2.3 Reset
Khi mới cấp nguồn cho module, chân AUX ngay lập tức xuất ra mức thấp, thể hiện rằng module đang khởi động và chuẩn bị vào hoạt động theo các thông số được cài đặt trước đó Chân AUX giữ ở mức thấp cho đến khi module vào hoạt động (vào chế độ hoạt động nào đó dựa trên các mức ở chân M0 và M1) thì chân AUX mới trở về trạng thái cao Vì vậy sau khi cấp nguồn cho module thì người dùng cần chờ cho đến khi phát hiện xung cạnh lên trên chân AUX thì mới được thực hiện truyền nhận với
module
4.2.4 Chi tiết chức năng chân AUX
Chân AUX có thể được sử dụng để hiển thị quá trình truyền nhận dữ liệu không dây hoặc quá trình khởi động của module
Cho biết sắp có tín hiệu ra tại chân TX Có thể dụng thể báo hiệu cho vi điều khiển ngoài chuẩn bị nhận dữ liệu từ module
Biểu hiện đang diễn ra qua trình truyền dữ liệu không dây
Sau khi nhận được dữ liệu từ vi điều khiển ngoài qua chân RX,
module tiến hành quá trình truyền không dây dữ liệu đã được
nhận từ UART, đồng thời khi đó chân AUX giữ ở mức thấp, xong khi
Trang 22truyền xong một gói dữ liệu thì chân AUX mức cao, lúc này vi điều khiển ngoiaf có thể tiếp tục gửi dữ liệu tới module qua đường
đó gói dữ liệu cuối cùng vẫn còn đang được gửi
Thể hiện quá trình khởi động của module
Quá trình này chỉ xảy ra khi:
Cấp nguồn cho module
0 0 UART và kênh truyền không
dây được kích hoạt, mở các chế độ truyền đã được cài đặt trước đó
Module có vai trò nhận nên hoạt động ở chế độ 0, 1Chế độ 1
Đánh thức 0 1 UART và kênh truyền không dây được kích hoạt Sự khác
biệt giữa chế độ 1 với chế độ 0
là nó sẽ tự động thêm vào gói
in truyền đi 1 đoạn thông tin
để đánh thức module nhận đang ở chế độ 2
Module nhận
có thể hoạt động ở chế độ
Module gửi hoạt động ở chế độ 1
Trang 23lượng module chỉ kích hoạt UART sau
khi nhận được dữ liệu không dây và vo hiệu hóa UART sau khi đã truyền xong hết dữ liệu qua UART
Khi module hoạt động ở chế độ này thì chức năng truyền không dây bị vô hiệu hóa
Chế độ 3
Ngủ 1 1 Chế độ cài đặt các thông số cho Module
Trang 24Lora SX1278 E32-TTL-100 USB-TTL CH340G
Trang 25 address: địa chỉ của ô nhớ cần ghi
value: giá trị cần ghi vào
Tham số:
address: địa chỉ của ô nhớ cần ghi
value: giá trị cần ghi vào
Trang 26 port: Port cần bật chức năng ngắt ngoài.
*ISR: Con trỏ dùng để trỏ tới hàm cần thực hiện dịch vụ ngắt
Chế độ ngắt:
o LOW: Đi vào ngắt nếu có mức 0 trên chân ngắt
o CHANGE: Đi vào ngắt nếu có sự thay đổi trạng thái trên chân ngắt (0 lên 1 hoặc 1 xuống 0)
o RISING: Đi vào ngắt nếu có sự thay đổi trạng thái trên chân ngắt từ mức 0 lên 1
o FALLING: Đi vào ngắt nếu có sự thay đổi trạng thái trên chân ngắt từ mức 1 xuống 0
Trả về: Không có.
Ví dụ:
attachInterrupt(digitalPinToInterrupt(PD1), ISR_D1, FALLING); //Ket noi ngat tren chan PD1 toi ham thuc hien phuc vu ngat ISR_D1 khi co su thay doi trang thai tu muc 1 xuong mũ 0 tren chan PD1.
2 digitalWrite(PB5, HIGH); //xuat muc cao ra chan
3 delay_us(1000); //lam tre 1 micro giay
4 digitalWrite(PB5, LOW); //xuat muc thap ra chan
5 delay_us(1000); //lam tre 1 micro giay
Trang 275.4.2 void delay_ms(unsigned int x); //co the thay the delay_ms thanh
2 digitalWrite(PB5, HIGH); //xuat muc cao ra chan
3 delay_ms(1000); //lam tre 1 milli giay
4 digitalWrite(PB5, LOW); //xuat muc thap ra chan
5 delay_ms(1000); //lam tre 1 milli giay
pin: tên chân cần cài đặt
mode: chức năng (chế độ hoạt động) của pin
o OUTPUT: cài đặt chân là ngõ ra
o INPUT: cài đặt chân là ngõ vào thả nổi (không kéo trở lên VCC hay xuống GND)
o INPUT_PULLUP: cài đặt chân là ngõ ra là ngõ vào kéo lên dùng điện trở nội (điện trở có sẵn bên trong vi điều khiển)
Trả về: Không có.
Ví dụ:
1 pinMode(PB5, OUTPUT); //Cai dat chan PB5 la ngo ra
2 pinMode(PC1, INPUT); //Cai dat chan PC1 la ngo vao tha noi (floating input)
3 pinMode(PC2, INPUT_PULLUP); //Cai dat chan PB5 la ngo vao keo len
5.5.2 void digitalWrite(uint8_t pin, bool val);
Chứ năng:
Xuất mức tín hiệu ra chân ‘pin’
Tham số:
pin: chân cần xuất tín hiệu
val: mức tín hiệu cần xuất
Trang 28 pin: chân cần xuất xung
val: giá trị xung cần xuất (0->255 tương ứng từ 0->100% duty cycle)
Trang 296 GIAO TIẾP I2C
6.1 Khái quát về i2c
Đầu năm 1980 Phillips đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được gọi là I2C I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit Đây
là đường Bus giao tiếp giữa các IC với nhau I2C mặc dù được phát triển bới Philips, nhưng nó đã được rất nhiều nhà sản xuất IC trên thế giới sử dụng I2C trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển,
có thể kể ra đây một vài tên tuổi ngoài Philips như: Texas Intrument(TI), MaximDallas, analog Device, National Semiconductor Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR, ARM chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự(DAC), IC điểu khiển LCD, LED
Trang 30Bus I2C và các thiết bị ngoại vi
6.2 Đặc điểm giao tiếp I2C
Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL).SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng
hồ để đồng bộ và chỉ theo một hướng Như ta thấy trên hình vẽ trên, khi một thiết bị ngoại vi kết nối vào đường bus I2C thì chân SDA của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL
Kết nối thiết bị vào bus I2C ở chế độ chuẩn (Standard mode) và chế độ
nhanh (Fast mode)
Mỗi dây SDA hãy SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor) Sự cần thiết của các điện trở kéo này là vì chân giao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector) Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1K đến 4.7k
Trang 31Trở lại với hình 1, ta thấy có rất nhiều thiết bị (ICs) cùng được kết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởỉ một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối Mỗi thiết bị có thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa nhận Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ(master) hãy tớ (slave).
Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để phân biệt, nó còn được cấu hình là thiết bị chủ hay tớ.Tại sao lại
có sự phân biệt này? Đó là vì trên một bus I2C thì quyền điều khiển thuộc
về thiết bị chủ Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiết bị chủ-tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạoxung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốt quá trình giao tiếp Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong việc giao tiếp
Nhìn hình trên ta thấy xung đồng hồ chỉ có một hướng từ chủ đến tớ, còn luồng dữ liệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ
6.3 Chế độ hoạt động ( Tốc độ truyền)
Các bus I2C có thể hoạt động ở ba chế độ, hay nói cách khác các dữ liệu trên bus I2C có thể được truyền trong ba chế độ khác nhau
1 Chế độ tiêu chuẩn (Standard mode)
2 Chế độ nhanh (Fast mode)
3 Chế độ cao tốc High-Speed (Hs) mode
6.3.1 Chế độ tiêu chuẩn:
1 Đây là chế độ tiêu chuẩn ban đầu được phát hành vào đầu những năm 80
2 Nó có tốc độ dữ liệu tối đa 100kbps
3 Nó sử dụng 7-bit địa chỉ, và 112 địa chỉ tớ
Tăng cường hoặc chế độ nhanh:
1 Tốc độ dữ liệu tối đa được tăng lên đến 400 kbps
2 Để ngăn chặn gai tiếng ồn, Ngõ vào của thiết bị Fast-mode là
Schmitt-triggered
Trang 323 chân SCL và SDA của một thiết bị tớ I ² C ở trạng thái trở kháng caokhi không cấp nguồn.
6.3.2 Chế độ cao tốc (High-Speed):
Chế độ này đã được tạo ra chủ yếu để tăng tốc độ dữ liệu lên đến 36 lần nhanh hơn so với chế độ tiêu chuẩn Nó cung cấp 1,7 Mbps (với Cb
= 400 pF), và 3.4Mbps (với C> b = 100pF)
Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau:
- Một chủ một tớ (one master - one slave)
- Một chủ nhiều tớ (one master - multi slave)
- Nhiều chủ nhiều tớ (Multi master - Multi slave)
Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan hệ chủ/tớ Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau:
- Thiết bị A (Chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việcxác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ
- Thiết bị A gửi dữ liệu tới thiết bị B
- Thiết bị A kết thúc quá trình truyền dữ liệu
Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là
A sẽ nhận dữ liệu từ B Trong giao tiếp này, A là chủ còn B vẫn là tớ Chi tiết việc thiết lập một giao tiếp giữa hai thiết bị sẽ được mô tả chi tiết trong các mục dưới đây
6.3.3 Trình tự truyền bit trên đường truyền:
Thiết bị chủ tạo một điều kiện start Điều kiện này thông báo cho tất
cả các thiết bị tớ lắng nghe dữ liệu trên đường truyền
Thiết bị chủ gởi địa chỉ của thiết bị tớ mà thiết bị chủ muốn giao tiếp
và cờ đọc/ghi dữ liệụ (nếu cờ thiết lập lên 1 byte tiếp theo được truyền từthiết bị tớ đến thiết bị chủ, nếu cờ thiết lập xuống 0 thì byte tiếp
theo truyền từ thiết bị chủ đến thiết bị tớ)
Khi thiết bị tớ trên bus I2C có địa chỉ đúng với địa chỉ mà thiết bị chủ gửi sẻ phản hồi lại bằng một xung ACK
Trang 33Giao tiếp giữa thiết bị chủ và tớ trên bus dữ liệu bắt đầu Cả chủ và
tớ đều có thể nhận hoặc truyền dữ liệu tùy thuộc vào việc truyền thông
là đọc hay viết Bộ truyền gửi 8 bit dữ liệu tới bộ nhận, Bộ nhận trả lời vớimột bit ACK
Để kết thúc quá trình giao tiếp, thiết bị chủ tạo ra một điều kiện stop 6.4 Điều kiện START và STOP (START and STOP conditions)
START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủmuốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C START là điềukiện khởi đầu,báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp Hình dưới đây mô tả điều kiện START và STOP
Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH) Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếp giữa các thiết bị I2C với nhau
Điều kiện START: Một sự chuyển đồi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1; thấp = 0) báo hiệu một điều kiện START
Đỉều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao Cả hai điều kiện START
và STOP đều được tạo ra bởi thiết bị chủ Sau tín hiệu START, bus I2C coi như đang trong trạng thái làm việc (busy) Bus I2C sẽ rỗi, sẳn sàng cho một giao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ
Sau khi có một điều kiện START, trong quá trình giao tiếp, khi có một tín hiệu START được lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng thái bận Tín hiệu START và lặp lại START (Repeated START)đều có chức năng giống nhau là khởi tạo một giao tiếp
Truyền dữ liệu:
Mỗi xung clock có một bit dữ liệu được truyền Mức tín hiệu SDA chỉ được thay đổi khi xung clock đang ở mức thấp, và ổn định khi xung clock ởmức cao Thiết bị tớ có thể lấy mẫu dữ liệu khi xung clock ở mức cao