Tải bản đầy đủ (.doc) (11 trang)

giáo trình codevisionavr ard 2.5 cho người mới học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.02 KB, 11 trang )


Khởi tạo Project mới.
Để bắt đầu một dự án mới (project) đối với
CodeVision cần có 1 thư mục mới để lưu toàn bộ các tệp
tin có trong dự án. Có nhiều cách để bắt đầu một dự án
mới trong CodeVision, nhưng sử dụng trình hỗ
trợ CodeWinzardAVR giúp người dùng tiết kiệm khá
nhiều thời gian set bit cho các thanh ghi.
Trong các cách set bit tuyền thống người lập trình
khi cần dùng đến tài nguyên nào của chip cần xem
datasheet về các thanh ghi của chip. Sau đó sử dụng
đến bit nào thì set bit đó. Tiếp đến là tính toán các thông
số cho phù hợp. Điều này có thể dễ gây nhầm lẫn cho
người lập trình. Nhìn chung set bit theo cách truyền
thống khá phức tạp, đòi hỏi người lập trình phải am hiểu
về cấu trúc chip AVR. Nên trong phạm vi đề tài chỉ giới
thiệu cách khởi tạo một dự án mới đơn giản bằng cách
sử dụng trình hỗ trợ CodeWinzardAVR. Trong trình hỗ
trợ này tất cả các tài nguyên của chip đuợc xắp xếp khoa
học, khi người dùng cần đến tài nguyên nào chỉ cần chọn
trong các bảng thông số, trình hỗ
trợ CodeWinzardAVR sẽ tự động tính toán và ghi vào các
thanh ghi. Ngoài ra trình hỗ trợ còn có các thư viện viết
sẵn cho việc ứng dụng các chuẩn giao tiếp khác nhau
như: I2C, SPI, UART… và các thiết bị ngoại vi như:
LCD, đồng hồ thời gian thực,… Sau khi thiết lập trình hỗ
trợ đưa ra cho người dùng một đoạn code mẫu, nếu
đoạn nào thừa không cần thiết người dùng có thể xoá đi
hoặc thêm vào theo cách truyền thống. Nhưng khi sử
dụng trình hỗ trợ CodeWinzardAVR người dùng dễ tạo
thói quen không am hiểu sâu về cấu trúc của chip. Vì vậy


nên sử dụng trình hỗ trợ này sau khi đã thành thạo cách
làm truyển thống.
Khởi tạo một dự án mới.
Mở trình dịch CodeVision -> chọn New -> tích vào
project -> chọn OK -> Tiếp tục chọn OK -> Chọn OK. Sau
đó xuất hiện một hộp giao diện như hình…. Sau đó chọn
loại chíp cần sử dụng và giá trị thạch anh tại vùng vòng
tròn đỏ.
Trong trình hỗ trợ có hỗ trợ thiết lập các tài
nguyên trên chip như:
External IRQ: Ngắt ngoài.
Timers: Khởi tạo timer, counter, xung PWM.
USART0, USART0: Giao diện nối tiếp USART
(tương thích chuẩn nối tiếp RS-232).
Analog Comparator:
ADC: Chuyển đổi tương tự sang số.
SPI: Giao diện nối tiếp 4 dây do hãng Motorola
đề xướng.
I2C: Giao diện nối tiếp 2 dây do hãng Intel đề
xướng.
1 Wire: Giao diện nối tiếp 1 dây.
TWI (I2C): Truyền thông đã chip chủ dựa trên
giao diện nối tiếp 2 dây.
Alphanumeric LCD: Hỗ trợ LCD 16x2 hoặc 8x2.
Project Information: Thông tin về dự án.
External SRAM: Ngắt khi tràn SRAM (giới hạn
tràn SRAM do người lập trình quy định).
Chip: Chọn loại chíp, giá trị thạch anh.
Ports: Chọn đầu ra xuất nhập I/O cho các
PORT.


Khởi tạo PORT xuất nhập I/O.
Trong AVR trên bất kì
một chân nào, khi người lập
trình muốn sử dụng chân đó
là nhập hay xuất cũng cần
phải khai báo. Khi muốn sử
dụng đến PORT nào chỉ cần
chọn PORT đó, sau đó nếu
chân nào là chân nhập (đưa
tín hiệu vào) thì vẫn để
nguyên (In), nếu là chân xuất
(đưa tín hiệu ra) chỉ cần kích
vào đó và chọn là Out.
Sang cột bên phải, nếu là
Out: Có 2 mức là 0 hoặc 1, là
mức mặc định của chân đó.
Nếu là In: Có 2 mức là T và P.
T là không sử dụng điện trở
kéo nội, nguợc lại P là sử
dụng điện trở kéo nội.
Khởi tạo PWM.
Trên chip Atmega 128 gồm
có 4 bộ timer và một bộ định
thời Watchdog.
Trong ví dụ về Timer1:
Clock Source: Nguồn cấp
xung.
Clock Value: Giá trị xung
clock đưa vào bộ timer là 1000

kHz.
Mode: Chế độ Fast PWM
giá trị top đuợc lấy từ thanh ghi
ICR1 (các mode có trong
datasheet của chip).
Out A: Xung ra trên chân
OCR1A là xung không đảo,
OCR1A càng lớn t-on càng lớn.
Out B: Xung ra trên chân
OCR1B là xung đảo, OCR1B
càng lớn t-on càng nhỏ.
Input Capt: Chống nhiễu
PWM.
Interupt on: Ngắt tràn
timmer.
Comp. A,B,C: Ngắt so
sánh.
Khởi tạo ngắt.
Chip Atmega 128 gồm có 8 ngắt
ngoài.
INT0, INT1,…, INT7.
Mỗi ngắt có các Mode sau:
+ Falling Edge: Ngắt suờn
xuống.
+ Rising EDGE: Ngắt suờn lên.
+ Low level: Ngắt khi ở mức
thấp.
Ví dụ đọc encoder bằng ngắt
ngoài:
interrupt [EXT_INT0] voidext_int0

_isr(void) {
if(ngat1==0) {
if(IN1==0) encoder_phai ;
else encoder_phai++;
ngat0=0;
ngat1=1;
}}

Khởi tạo LCD.
Kích chọn Enable
Alphanumeric LCD Support. Sau
đó chọn số kí tự trên 1 hàng.
Trong các phiên bản
CodeVision cũ chỉ cho phép
chọn một PORT cố định. Nhưng
trong những phiên bản đời cao
hơn ví dụ v2.05.0 cho phép chọn
từng bit. Điều này giúp việc thiết
kế mạch thuận tiện hơn, và tận
dụng được những chân đơn lẻ.
Cột bên trái là kí hiệu các
chân trên LCD, cột giữa để chọn
PORT trên vi điều khiển, cột bên
phải để chọn chân tương ứng
trên mỗi PORT.
Thư viện alcd: Trong thư viện này đã có những
hàm hiển thị lcd được trình hỗ trợ viết sẵn. Khi người
dùng muốn sử dụng chỉ cần lấy ra và điền các thông số
thích hợp sau và hiển thị lên lcd.
- Cách sử dụng các hàm trong thư viện alcd:

void char lcd_init
(unsigned
char lcd_columns)
Khởi tạo số kí tự trên 1 hàng
void lcd_clear
(void)
Xoá màn hình
void lcd_gotoxy
(unsigned char x,
unsigned char y)
Dịch chuyển con trỏ đến 1 vị
trí trên màn hình.
x: Hàng(0,1), y: cột(0-15)
(2 hàng, 16 cột)
void lcd_putchar
(char c)
Hiển thị một kí tự trong bảng
mã ASCII
VD hiển thị số “1”:
lcd_putchar(1+48);
void lcd_puts
(char *str)
Hiển thị một chuỗi kí tự đuợc
lưu trongSRAM
void lcd_putsf
(char flash *str)
Hiển thị một chuỗi kí tự được
lưu trong bộ nhớ flash
void lcd_putse
(char eeprom *str)

Hiển thị một chuỗi kí tự được
lưu trong bộ nhớ eeprom
VD: hiển thị chương trình: “ VDNT Group!” đếm
ngược từ 1000 đến 0:
#include <mega128.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <alcd.h>
#include <delay.h>
unsigned int z;
unsigned char MyName []={“VDNT Group!”}; //
Lưu từ “VDNT Group!” vào chuỗi MyName trong SRAM
////////////////// Hàm hiển thị 4 số///////////////////
void lcd_putnum(long so){
unsigned int j,t;
unsigned char s[9];
long so1, so2, so3;
so1 = so/10000;
so2= so-(so1*10000);
for(j=1;j<=8;j++){
if(j<5) {so3=so1, t=0;}
else {so3=so2; t=4;}
s[1+t]= so3/1000;
s[2+t]= (so3%1000)/100;
s[3+t]= ((so3%1000)%100)/10;
s[4+t]= ((so3%1000)%100)%10;}
for(j=0;j<8;j++){
lcd_putchar(s[j+1]+48);
}}

//////////////////////////////////////////
void main(void){
lcd_init(16);
while (1){
lcd_gotoxy(0,0); // Di chuyển con trỏ đến đầu
dòng thứ nhất
lcd_puts(MyName[]); // xuất chữ “VDNT Group!”
từ trong SRAM
lcd_gotoxy(1,0); // Di chuyển con trỏ đến đầu
dòng thứ hai
for(z=1000; z>0;z ){
lcd_putnum(z); // Hiển thị giá trị hiện thời của biến
z lên LCD
delay_ms(10);}
}
}

Khởi tạo ADC:
Điện áp tham chiếu
cho ADC trên AVR có thể
được tạo bởi 3 nguồn:
dùng điện áp tham chiếu
nội 2.56V (cố định), dùng
điện áp AVCC hoặc điện
áp ngoài đặt trên chân
VREF.
Kích vào ADC
Enabled thấy bảng như
hình bên cạnh.
Interupt: Cho phép

ngắt, một ngắt sẽ xảy ra
khi một quá trình chuyển
đổi ADC kết thúc và các
giá trị chuyển đổi đã được
cập nhật (các giá trị
chuyển đổi chứa trong 2
thanh ghi ADCL và ADCH).
Use 8 bits: Chọn độ
phân giải 10bits hoặc 8
bits.
Volt. Ref: Chọn điện
áp tham chiếu.
Clock: Chọn tần số
xung đưa vào ADC.
Automâticlly Scan
Inputs: Chế độ tự động
chuyển đổi nếu giá trị ADC
vượt giới hạn đuợc thiết
lập trong ô First và Last.
Ngoài ra còn khá
nhiều chức năng của ADC
mà trình hỗ trợ không đề
cập đến có trong
datasheet của chip.

Dưới đây là ví dụ chương trình đọc ADC đơn kênh
sử dụng trong robot tự động 1, khi cần đọc đến kênh
ADC nào chỉ cần truyền vào hàm như sau:
ADC=read_adc(0); khi này giá trị của ADC ở kênh 0 sẽ
được lưu vào biến ADC.

unsigned int read_adc(char cb)
{
ADMUX = 0x20 | cb;// Dich ket qua sang ben trai,
Chon sensor doc
delay_us(10);
ADCSRA |= 0x40; // Toc do doc ADC chia cho 16
while((ADCSRA&0x10)==0);// Cho den khi doc
compelete
ADCSRA|=0x10;
return ADCH; // Doc gia tri 8 bit ADC tu thanh
ADCH
}
Sau khi hoàn tất quá trình khởi tạo với trình hỗ trợ Code
Winzard AVR:
Chọn program -> Genarate, Save and Exit -> Tiếp
tục nhấn OK đến khi hiện ra bảng “Save C Compliler
Source File” -> Tạo tiệp tin mới để lưu dự án -> Vào
trong tập tin mới -> Đặt tên cho tệp tin C (.c) -> Đặt tên
cho dự án (.prj) -> Đặt tên cho tệp tin lưu quá trình khởi
tạo với trình hỗ trợ CodeWinzardAVR (.cwp) -> Bắt đầu
viết chương trình.
Chương trình có thể có những chú thích hoặc
những tài nguyên không cần sử dụng đến, người dùng
có thể xoá hoặc thiết lập lại theo ý muốn.

×