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.
Trang 1BÀI GIẢNG
VI ĐIỀU KHIỂN AVR
Trang 2LỜ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.
Trang 3MỤ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
Trang 4Bà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:
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
Trang 5Thí 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.
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ừ
Trang 6dâ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
Trang 7Xé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
…
….
Trang 8Như 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
1 2
3 5
1 0 1 2 7
Trang 9Bướ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
Trang 10Bà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
Trang 11#define PORT_LED PORTC
#define PORT_Ctr PORTG
Trang 123 Hiển thị tăng giảm giá trị LED 7 thanh sử dụng 2 nút bấm tăng, giảm
Mục đích: Giúp sinh viên làm quen với việc điều khiển đầu ra dựa vào dữ liệu nhận được
từ đầu vào.
Lý thuyết: Lý thuyết về LED 7 thanh đã trình bày ở mục 2 Phần này chỉ trình bày
lý thuyết về nút bấm tăng - giảm.
Phím tăng, giảm được thiết kế với sơ đồ nguyên lý như sau:
Trang 13Hình 8: Nguyên lý nút bấm tăng giảm
Theo sơ đồ nguyên lý trên, ở trạng thái không bấm nút, giá trị đưa về vi điều khiển có giá trị 1 (5V), khi bấm nút, giá trị đưa về được nối trực tiếp với GND nên có giá trị 0 (0V) Như vậy, khi vi điều khiển nhận được giá trị 0 sẽ hiểu là phím vừa được bấm.
Bài thực hành số 4: Viết chương trình hiển thị số bất kì trên LED 7 thanh, mỗi lần bấm phím giảm thì số giảm 1 đơn vị, bấm phím tăng thì tăng 1 đơn vị.
#include <mega128.h>
#include <delay.h>
#define PORT_LED PORTC
#define PORT_Ctr PORTG
#define Inc PINB.1
#define Dec PINB.2
Trang 15Bài thí nghiệm số 2 Điều khiển hiển thị LED ma trận
Yêu cầu:
- Hiển thị lần lượt bảng chữ cái lên trên LED ma trận (từ A->Z)
Mục đích: Giúp sinh viên làm quen với màn hình hiển thị LED ma trận.
Lý thuyết về LED ma trận:
Ma trận LED tức là Dot Matrix LED là tập hợp nhiều đèn LED được bố trí thành dạng ma trận hìn chữ nhật hoặc hình vuông với số cột là b và số hàng là a Để giảm số đường điều khiển, trong các ma trận LED, các LED đã được nối với nhau theo hàng và theo cột Số lượng LED trên ma trận LED là axb trong khi số lượng ngõ ra bằng tổng số hàng và cột: a+b Việc điều khiển 1 ma trận LED kích thước lớn đòi hỏi phải thiết kế một mạch driver và diều khiển rất phức tạp Với mục đích giúp bạn đọc làm quen khái niệm
ma trận LED, trong phạm vi bài thí nghiệm chỉ trình bày thao tác với ma trận LED nhỏ 8x8 (hoặc 7x5), thường được dùng để hiển thị các kí tự Cấu trúc của một ma trận LED đơn giản nhất là 7x5 như sau:
Hình 9: Cấu trúc ma trận LED đơn giản 5x7
Bên trong ma trận LED là các LED phát sáng Trong mô hình trên, Cathode của các LED trên mỗi hàng được nối chung với nhau và ngõ ra chung là các ngõ ra data Các Athode
Trang 16của các LED trên mỗi cột được nối chung tạo thành các đường điều khiển Để hiển thị sáng một kí tự bất kì ta có thể tham khảo thí dụ dưới đây (hiển thị số 4).
Hình 10: LED ma trận hiển thị sô 4
Theo hình trên, để hiển thị LED ma trận, tại mỗi thời điểm ta sẽ cho hiển thị một cột của LED Mỗi cột được hiển thị trong một khoảng thời gian, sau đó tắt đi để cột khác hiển thị Như vậy, nếu tần số đạt 24Hz (hiệu ứng 24 hình/giây) thì mắt người sẽ có cảm giác như
số 4 được hiển thị một cách liên tục.
Bài thực hành số 1: Hiển thị kí tự A tĩnh lên LED ma trận
unsigned char data[8] = {0x18,0x18,0x24,0x24,0x24,0x7E,0x42,0x4},//A
#include <mega128.h>
#include <delay.h>
#include "data.c"
#define PORT_LED PORTC
#define PORT_Ctr PORTG
void display_char(unsigned char * ch)
{
//Hang1
PORT_LED = ~ch[0];
PORT_Ctr = 0x01;
Trang 18{0x18,0x18,0x24,0x24,0x24,0x7E,0x42,0x42,//A 0x78,0x44,0x44,0x78,0x44,0x44,0x44,0x78,//B
0x1E,0x20,0x40,0x40,0x40,0x40,0x20,0x1E,//C
0x78,0x44,0x42,0x42,0x42,0x42,0x44,0x78, //D
0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x7C, //E 0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40, //F 0x1E,0x20,0x40,0x40,0x4E,0x42,0x22,0x1E, //G 0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,
#include <mega128.h>
#include <delay.h>
#include "data.c"
#define PORT_LED PORTC
#define PORT_Ctr PORTG
unsigned int char_index = 0;
unsigned int timer1_counter = 0;
void display_char(unsigned char * ch)
Trang 19// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
Trang 21Bài thí nghiệm số 3: Điều khiển LCD và bàn phím 3x4
Yêu cầu:
- Hiển thị được LCD
- Điều khiển quét ma trận phím, hiển thị LCD
Mục đích: Giúp sinh viên làm quen với công cụ giao tiếp cơ bản LCD và keypad
1 Hiển thị LCD.
Lý thuyết:
Giống như LED 7 thanh, LCD cũng là thiết bị ngoại vi để giao tiếp với người sử dụng Khác với LED 7 thanh ở điểm LCD có thể hiển thị được tất cả các kí tự của bảng mã ASCCI, tuy nhiên chỉ có thể nhìn được ở khoảng cách gần và giá thành lại tương đối cao Hình dạng của LCD 16x2 được sử dụng trong bo thí nghiệm như sau:
Hình 11: Hình ảnh thực của LCD 16x2
Các chân chức năng của LCD như sau:
Trang 22Hình 12: Các chân chức năng của LCD
Trang 23// Declare your global variables here
unsigned char str[64] = " BO THI NGHIEM VI DIEU KHIEN AVR "; unsigned char lcd_str[16];
Trang 242 Quét ma trận phím 3x4
Việc có nhiều nút nhấn cũng như tiết kiệm được chân vi điều khiển là một bài toán đặt ra đối với 1 bài tập vi điều khiển lớn Việc ghép nối giao tiếp với bàn phím với vi xử lý được ghép nối thành 1 ma trận hay gọi là ma trận phím! Một ma trận n hàng và m cột có thể ghép với nhau tối đa m*n phím chức năng Hôm nay tôi post bài này lên cho các pác tham khảo cách quét ma trận phím đầu vào.
1) Cấu tạo của 1 ma trận phím 3x4
Nói đến ma trận là ai cũng tưởng tưởng đến hàng và cột Và các pác cũng bít khi đó nó sẽ
có lợi như thế nào khi ghép kiểu ma trận này Cấu tạo nó được như hình vẽ dưới:
Hình 14: Sơ đồ nguyên lý mạch quét phím
3 4
3 4
3 4
S W 1 5
B U T T O N _ 4 P I N
1 2
3 4
3 4
3 4
S W 1 1
B U T T O N _ 4 P I N
1 2
3 4
3 4
3 4
3 4
S W 6
B U T T O N _ 4 P I N
1 2
3 4
3 4
S W 7
B U T T O N _ 4 P I N
1 2
3 4
3 4
3 4
3 4
Trang 25Phím bấm được nối thành ma trận 4 hàng x 4cột, các hàng và cột được nối với các chân cổng vào ra của vi điều khiển Psoc Khi một phím được bấm, nó sẽ nối một hàng và một cột tương ứng.Như vậy ta sẽ có 16 nút nhấn mà chỉ mất có 8 chân vi điều khiển còn muốn tiếp kiệm hơn nữa là các pác dùng còn giải mã 3 >> 8 (74138) hay dùng 74ls154 (Cái này cũng không cần bit đâu vì bài của mình đâu lớn như thế) nên nối trực tiếp vào chân vi điều khiển cho nó nhanh Khi nút 0 được nhấn thì nó nối giữa cột 1 hàng 1 CÒn nút 1 được nhấn thì cột 2 và hàng 1 được nối hay nút 2 được nhấn thì nối giữa cột 3 và hàng 1 cứ như vậy đến nút thứ 12.
Nói thế này cũng khó hiểu nhỉ nhưng mà chỉ cần hiểu sơ qua thuật toán quét LED như thế này:
+ Đầu tiên cho các hàng ở mức 1 và các cột ở mức 0
+ Kiểm tra xem nào hàng nào đựoc nhấn (khi nút được nhấn) tức là đựoc nhận tín hiệu từ các cột
+ Nếu mà có 1 hàng bất kỳ đựoc nhấn sau đó ta lại chuyển giá trị 0 vào hàng đựoc nhấn
và giá trị 1 vào các cột Khi đó cột lại nhận nhiệm vụ làm tín hiệu vào Nếu mà 1 trong các cột đựoc nhấn (Khi nút được nhấn) trong các trường hợp này thì cho ra các giá trị tương ứng.
Bài thực hành số 2: Thực hiện quét ma trận phím, hiển thị giá trị phím bấm lên LCD (thí dụ: ấn phím 1 hiện số 1 lên LCD)
Trang 26// Declare your global variables here
unsigned char str[64] = " BO THI NGHIEM VI DIEU KHIEN AVR "; unsigned char lcd_str[16];
case 0: PORTD.4 = 0; PORTD.5 = 1; PORTD.6 = 1; PORTD.7 = 1; break;
case 1: PORTD.4 = 1; PORTD.5 = 0; PORTD.6 = 1; PORTD.7 = 1; break;
case 2: PORTD.4 = 1; PORTD.5 = 1; PORTD.6 = 0; PORTD.7 = 1; break;
case 3: PORTD.4 = 1; PORTD.5 = 1; PORTD.6 = 1; PORTD.7 = 0; break; default: break;
Trang 28lcd_putnum(key_value);
};
}
Trang 29Bài thí nghiệm số 4: Đo nhiệt độ hiển thị LCD theo thời gian thực
Yêu cầu:
- Đo nhiệt độ sử dụng cảm biến LM35, hiển thị LCD
- Đọc thời gian thực từ IC thời gian thực DS1307
Mục đích: Giúp sinh viên làm quen với các ứng dụng nhỏ trong thực tế.
Lý thuyết:
1 Đo nhiệt độ sử dụng LM35, hiện thị LCD
Việc hiển thỉ LCD đã được đề cập đến ở bài thí nghiệm số 3, ở đây chỉ tập trung trình bày về việc đo nhiệt độ sử dụng LM35
- LM35 là một dạng cảm biến nhiệt độ, chuyển hóa từ sự thay đổi nhiệt độ môi trường sang sự thay đổi về điện áp, vi điều khiển sẽ nhận biết giá trị điện áp, từ đó ánh xạ sang nhiệt độ Giá trị điện áp đầu ra tuyến tính với 10mV/oC.
Sơ đồ nguyên lý của LM35 như sau:
Hình 15: Sơ đồ nguyên lý của LM 35
- ADC là thiết bị ngoại vi được tích hợp bên trong vi điều khiển, chức năng của nó là chuyển đổi từ tín hiệu tương tự sang tín hiệu số CPU của vi điều khiển sẽ nhận biết giá trị trả về từ ADC, từ đó tính ra giá trị điện áp đầu vào ADC và suy ra nhiệt độ.
Bài thực hành số 1: Hiển thị giá trị nhiệt độ được đọc về từ cảm biến LM35 lên LCD