Bai thuc hanh lap trinh avr co ban Với mong muốn nhanh chóng giúp các bạn học viên có thể chủ động và nhanh chóng làm việc được với vi điều khiển AVR, chúng tôi tổng hợp và biện soạn tài liệu “giáo trình vi điều khiên AVR”. Giáo trình cung cấp cái nhìn từ chi tiết đến tổng thể những ứng dụng, và tài nguyên của vi điều khiển AVR.Đặc điểm của tài liệu này là học viên có thể bắt tay vào thực hành ngay lập tức, đẩy nhanh quá trình tiếp thu kiến thức và khơi gợi sự đam mê của học viên qua các bài thực hành.Chú ý, đây là tài liệu tổng hợp những kiến thức căn bản nhất về vi điều khiển AVR, để có hiệu quả trong quá trình sử dụng tài liệu cho các mục đích học tập, nghiên cứu, mong độc giả nên đọc hết các phần lý thuyết mở đầu, sau đó hãy làm các bài thực hành theo đúng hướng dẫn.Tập 1 bao gồm Bài 1: Điều khiển IO, hiển thị LED đơn, Bài 2. Hiển thị LED 7 Thanh. IC 7447, Bài 3.Hiển thị LCD, Bài 4.Giao tiếp máy tính, chuẩn RS232, Bài 5.Giao tiếp I2C với DS1307 (nâng cao), Bài 6. ADC và LM35. Đo lường kết nối máy tính. (nâng cao).Tập 2 gồm các bài: Bài 7 Timer Counter. Bài 8 PWM điều khiển động cơ (nâng cao).Để tăng hiệu quả, tài liệu này nên sử dụng cùng với bộ giáo trình: Cấu trúc vi điều khiển AVR, Ngôn ngữ lập trình C cho vi điều khiển, Hướng dẫn sử dụng Codevision, Hướng dẫn sử dụng proteous, Các linh kiện điện tử cơ bản.
BÀI GIẢNG VI ĐIỀU KHIỂN AVR -1- LỜI NÓI ĐẦU Với mong muốn nhanh chóng giúp các bạn học viên có thể chủ động và nhanh chóng làm việc được với vi điều khiển AVR, chúng tôi tổng hợp và biện soạn tài liệu “giáo trình vi điều khiên AVR”. Giáo trình cung cấp cái nhìn từ chi tiết đến tổng thể những ứng dụng, và tài nguyên của vi điều khiển AVR. Đặc điểm của tài liệu này là học viên có thể bắt tay vào thực hành ngay lập tức, đẩy nhanh quá trình tiếp thu kiến thức và khơi gợi sự đam mê của học viên qua các bài thực hành. Chú ý, đây là tài liệu tổng hợp những kiến thức căn bản nhất về vi điều khiển AVR, để có hiệu quả trong quá trình sử dụng tài liệu cho các mục đích học tập, nghiên cứu, mong độc giả nên đọc hết các phần lý thuyết mở đầu, sau đó hãy làm các bài thực hành theo đúng hướng dẫn. Tập 1 bao gồm Bài 1: Điều khiển I/O, hiển thị LED đơn, Bài 2. Hiển thị LED 7 Thanh. IC 7447, Bài 3.Hiển thị LCD, Bài 4.Giao tiếp máy tính, chuẩn RS232, Bài 5.Giao tiếp I2C với DS1307 (nâng cao), Bài 6. ADC và LM35. Đo lường kết nối máy tính. (nâng cao). Tập 2 gồm các bài: Bài 7 Timer/ Counter. Bài 8 PWM điều khiển động cơ (nâng cao). Để tăng hiệu quả, tài liệu này nên sử dụng cùng với bộ giáo trình: Cấu trúc vi điều khiển AVR, Ngôn ngữ lập trình C cho vi điều khiển, Hướng dẫn sử dụng Codevision, Hướng dẫn sử dụng proteous, Các linh kiện điện tử cơ bản. -2- MỤC LỤC LỜI NÓI ĐẦU 2 MỤC LỤC 3 Danh sách hình vẽ 3 Bài thí nghiệm số 1. Led đơn, Led 7 thanh, hiển thị tăng giảm theo nút bấm 4 1. Điều khiển Led đơn 4 2. Điều khiển Led 7 thanh hiển thị số từ 0 đến 9999 5 3. Hiển thị tăng giảm giá trị LED 7 thanh sử dụng 2 nút bấm tăng, giảm 12 Lý thuyết về LED ma trận: 15 Bài thí nghiệm số 3: Điều khiển LCD và bàn phím 3x4 21 1. Hiển thị LCD 21 2. Quét ma trận phím 3x4 24 Bài thí nghiệm số 4: Đo nhiệt độ hiển thị LCD theo thời gian thực 29 1. Đo nhiệt độ sử dụng LM35, hiện thị LCD 29 2. IC thời gian thực DS1307 31 Nguyên lý hoạt động của DS1307 31 Bài thí nghiệm số 5: Điều khiển động cơ bước theo 2 nút tăng, giảm 35 Lý thuyết: 35 Danh sách hình vẽ Hình 1: Sơ đồ nguyên lý của Led đơn 4 Hình 2: Led đơn sáng byte 0xAA 5 Hình 3: Hình ảnh Led 7 thanh 6 Hình 4: Nguyên lý Led 7 thanh 6 Hình 5: Led 7 thanh dương chung 7 Hình 6: Sơ đồ nguyên lý quét LED 7 thanh 8 Hình 7: Bảng sự thật của 74hc154 9 Hình 8: Nguyên lý nút bấm tăng giảm 13 Hình 9: Cấu trúc ma trận LED đơn giản 5x7 15 Hình 10: LED ma trận hiển thị sô 4 16 Hình 11: Hình ảnh thực của LCD 16x2 21 Hình 12: Các chân chức năng của LCD 22 Hình 13: Bảng lệnh của LCD 22 Hình 14: Sơ đồ nguyên lý mạch quét phím 24 Hình 15: Sơ đồ nguyên lý của LM 35 29 Hình 16: Sơ đồ nguyên lý khối thời gian thực 31 Hình 17: Phân loại động cơ bước theo góc quay 35 Hình 18: Cấu trúc motor bước 36 Hình 19: Các dạng chuỗi xung điều khiển motor bước 36 Hình 20: Sơ đồ nguyên lý động cơ bước 37 -3- Bài thí nghiệm số 1. Led đơn, Led 7 thanh, hiển thị tăng giảm theo nút bấm Yêu cầu: - Điều khiển được Led đơn. - Điều khiển Led 7 thanh hiển thị số từ 0 đến 9999. - Hiển thị tăng giảm giá trị LED 7 thanh sử dụng 2 nút bấm tăng – giảm Yêu cầu cụ thể: 1. Điều khiển Led đơn Mục đích: Giúp sinh viên làm quen với việc điều khiển tín hiệu ra của vi điều khiển và hiển thị trực quan lên LED đơn. Bo thí nghiệm được thiết kế với 8 LED đơn sử dụng để kiểm tra tín hiệu đầu ra của vi điều khiển. Bài thí nghiệm điều khiển LED đơn được đưa ra với mục đích giúp sinh viên làm quen với khái niệm vào ra của vi điều khiển. Sơ đồ nguyên lý của khối được thiết kế như sau: L E D _ 5 D 3 L E D L E D _ 4 D 7 L E D D 6 L E D D 2 L E D L E D _ 3 L E D _ 8 L E D _ 2 L E D _ 7 D 8 L E D D 4 L E D L E D _ 1 D 5 L E D L E D _ 6 D 1 L E D Hình 1: Sơ đồ nguyên lý của Led đơn Nhiệm vụ của sinh viên là hiển thị 1 byte bất kì lên trên Led đơn với quy ước: • Bit 1: Led sang • Bit 0: Led tắt -4- Thí dụ: Muốn hiển thị 1 byte 0xAA, 8 Led đơn sẽ hiển thị như sau: Hình 2: Led đơn sáng byte 0xAA Bài thực hành số 1: Hiển thị lên LED đơn các byte tự động chạy từ 0x00 đến 0xFF với bước chạy là 0.5s. Khi chạy đến 0xFF sẽ tự động quay trở lại 0x00. #include <mega128.h> #include <delay.h> // Declare your global variables here void main(void) { DDRC = 0xFF; while (1) { for(i = 0; i < 256; i ++) { PORTC = i; delay_ms(500); } }; } 2. Điều khiển Led 7 thanh hiển thị số từ 0 đến 9999. Mục đích: Giúp sinh viên làm quen với việc hiển thị số lên LED 7 thanh. Lý thuyết về Led 7 thanh: Led 7 thanh là linh kiện hiển thị các số từ 0 đến 9 và một số ký tự. Ưu điểm của led 7 thanh là phần cứng đơn giản, khoảng các nhìn rõ lớn, có nhiều kích thước. Nên LED 7 thanh hay được dùng để hiển thị các nội dung trên các loại máy trong nhiều lĩnh vực từ -5- dân dụng (đồng hồ, lịch vạn niên), các thiết bí đo lường, máy công nghiệp, thương mại (bảng chứng khoán, bảng tỷ giá…). LED 7 thanh có 2 loại: Anot chung và Catot chung. Hình 3: Hình ảnh Led 7 thanh Hình 4: Nguyên lý Led 7 thanh Bản chất của LED 7 thanh thực chất là trong mỗi LED 7 thanh có 8 con LED đơn chung một đầu hoặc Anot hoặc Catot. Nguyên lý hoạt động của 2 loại này là tương tự nhau. -6- Xét hoạt động của LED 7 thanh Anot chung (dương chung): Hình 5: Led 7 thanh dương chung Số/ chữ hiển thị Thanh sáng Thanh tắt Giá trị PORT 0 A,B,C,D,E,F Các thanh còn lại 1100 000 1 B, C Các thanh còn lại 1111 1001 2 A,B,D,E,G Các thanh còn lại 1010 0100 … 9 A,B,C,D,F,G Các thanh còn lại 1001 0000 A A,B,C,E,F,G Các thanh còn lại 1000 1000 …. -7- Như vậy, việc hiển thị LED 7 thanh hoàn toàn tương tự việc hiển thị LED đơn, khác biệt là khi hiển thị số cần lựa chọn các thanh LED sáng tương ứng. Lý thuyết về quét LED 7 thanh: Sơ đồ nguyên lý quét LED 7 thanh như sau: Hình 6: Sơ đồ nguyên lý quét LED 7 thanh Theo sơ đồ trên, mạch gồm 4 LED 7 thanh được nối chung đường dữ liệu. Như vậy, nếu các đầu Anode chung được nối với nguồn, 4 LED sẽ hiển thị cùng giá trị. Vì vậy, để có thể hiển thị được các số với các chữ số khác nhau đòi hỏi phải có thuật toán quét LED. Thuật toán quét LED được thực hiện như sau: Giả sử cần hiển thị số có giá trị 1234, tương ứng với LED 1 hiển thị số 1, LED 2 hiển thị số 2, LED 3 hiển thị số 3, LED 4 hiển thị số 4. Để thưc hiện việc này, ta thực hiện thuật toán quét LED như sau: Bước 1: Cho LED 1 sáng số 1 bằng cách bật điều khiển cấp nguồn cho LED 1 và tắt điều khiển cấp nguồn cho 3 LED còn lại, đồng thời cấp dữ liệu hiển thị của số 1 ra port dữ liệu chung. Như vậy, thời điểm này, LED 1 sẽ sáng số 1 còn 3 LED còn lại sẽ tắt. Duy trì trạng thái này trong một thời gian Bước 2: Tắt điều khiển cấp nguồn của LED 1, cấp dữ liệu sáng số 2 vào port dữ liệu đồng thời bật điều khiển cấp nguồn cho LED 2. Như vậy, LED 2 sẽ sáng số 2 còn 3 LED còn lại sẽ tắt. Duy trì trạng thái này trong một thời gian -8- L E D _ 5 P G 2 Q 1 3 A 1 0 1 5 R 3 1 1 0 K L E D _ 1 V C C L E D _ 2 U 7 7 - S E G x 4 6 8 9 1 2 3 5 1 0 1 2 4 7 1 1 A 1 A 2 A 3 A 4 D B G F E D C B A L E D _ 4 V C C R 3 0 1 0 K V C C Q 1 2 A 1 0 1 5 U 2 5 7 4 H C 1 5 4 1 2 3 4 5 6 7 8 9 1 0 1 1 1 3 1 4 1 5 1 6 1 7 2 4 1 2 2 3 2 2 2 1 2 0 1 8 1 9 Y 0 Y 1 Y 2 Y 3 Y 4 Y 5 Y 6 Y 7 Y 8 Y 9 Y 1 0 Y 1 1 Y 1 2 Y 1 3 Y 1 4 Y 1 5 V C C G N D A B C D G 1 G 2 Q 1 0 A 1 0 1 5 L E D _ 3 L E D _ 6 L E D _ 7 V C C L E D _ 8 R 3 2 1 0 K V C C P G 3 Q 1 1 A 1 0 1 5 R 3 3 1 0 K P G 0 P G 1 Bước 3: Tắt điều khiển cấp nguồn của LED 2, cấp dữ liệu sáng số 3 vào port dữ liệu đồng thời bật điều khiển cấp nguồn cho LED 3. Như vậy, LED 3 sẽ sáng số 3 còn 3 LED còn lại sẽ tắt. Duy trì trạng thái này trong một thời gian Bước 4: Tắt điều khiển cấp nguồn của LED 3, cấp dữ liệu sáng số 4 vào port dữ liệu đồng thời bật điều khiển cấp nguồn cho LED 4. Như vậy, LED 4 sẽ sáng số 4 còn 3 LED còn lại sẽ tắt. Duy trì trạng thái này trong một thời gian Quá trình được lặp đi lặp lại từ bước 1 đến bước 4. Nếu tần số đạt lớn hơn 24Hz (hiệu ứng 24 hình/giây) thì mắt người sẽ có cảm giác 4 LED sáng liên tục số 1234. Đó là nguyên tắc của thuật toán quét LED. Trong nguyên lý trên, IC 74HC154 làm nhiệm vụ giải mã, điều khiển cấp nguồn cho LED 7 thanh. Bảng sự thật của IC 74HC154 như sau: Hình 7: Bảng sự thật của 74hc154 -9- Bài thực hành số 2: Viết hàm hiển thị số tự nhiên n bất kì (thí dụ, n = 1234) #include <mega128.h> #include <delay.h> #define PORT_LED PORTC #define PORT_Ctr PORTG unsigned char m[11]= { 0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x1F, 0x01,0x09}; void hienthison(int n) { unsigned char ma[4]; ma[0] = n/1000; ma[1] = (n%1000)/100; ma[2] = ((n%1000)%100)/10; ma[3] = ((n%1000)%100)%10; //LED1 PORT_LED = m[ma[0]]; PORT_Ctr = 0x08; delay_ms(2); PORT_Ctr = 0x00; //LED2 PORT_LED = m[ma[1]]; PORT_Ctr = 0x04; delay_ms(2); PORT_Ctr = 0x00; //LED3 PORT_LED = m[ma[2]]; PORT_Ctr = 0x0C; delay_ms(2); PORT_Ctr = 0x00; //LED4 PORT_LED = m[ma[3]]; PORT_Ctr = 0x02; delay_ms(2); PORT_Ctr = 0x00; } Void main() -10- . động của LED 7 thanh Anot chung (dương chung): Hình 5: Led 7 thanh dương chung Số/ chữ hiển thị Thanh sáng Thanh tắt Giá trị PORT 0 A,B,C,D,E,F Các thanh còn lại 1100 000 1 B, C Các thanh còn lại. tỷ giá…). LED 7 thanh có 2 loại: Anot chung và Catot chung. Hình 3: Hình ảnh Led 7 thanh Hình 4: Nguyên lý Led 7 thanh Bản chất của LED 7 thanh thực chất là trong mỗi LED 7 thanh có 8 con LED. chọn các thanh LED sáng tương ứng. Lý thuyết về quét LED 7 thanh: Sơ đồ nguyên lý quét LED 7 thanh như sau: Hình 6: Sơ đồ nguyên lý quét LED 7 thanh Theo sơ đồ trên, mạch gồm 4 LED 7 thanh được