Thứ Sáu, 24 tháng 9, 2010

AVR

Đây là bài đầu tiên của loạt bài về AVR. Sau khi kết thúc bài đầu tiên bạn dễ dàng lập trinh input và output cho AVR

Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN và PORT ,cách dùng thư viện delay.h của codevision.


Giới thiệu:



Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài uA .
Để điều khiển các chân này chúng ta có 2 thanh ghi
->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n
->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và 0 là vào .



Ví dụ 1 : Nhấp nháy lần lượt đèn xanh và đèn đỏ , khi ấn nút bấm chỉ có đèn đỏ sáng.
Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7

Chú ý :
định nghĩa 1 chân là chân vào PIN x.x
#define nut_bam PINB.7
định nghĩa 1 chân là chân vào PORT x.x
#define den_do PORTB.5

Trong bài này PORT B có 2 biến đầu ra là PB5 và PB6
DDRB=0b00110000 =0x30
Khởi tạo chân PB7 cần được treo lên 5V , khi ấn nút bấm sẽ thông GND(0V) nên ta có PORTB=0b10000000=0x80;
Sau khi định nghĩa , nếu bạn den_do=1; đèn led đỏ sẽ tắt
den_do=0; đèn sẽ sáng .
( do cách thiết kế mạch đầu dương led nối 5V còn đầu âm nối vào VĐK)

delay.h có 2 cách gọi là trễ theo ms và us
delay_ms(time);
delay_us(time);


c code

1.

2.
/*****************************************************
3.
This program was produced by the
4.
CodeWizardAVR V1.24.8d Professional
5.
Automatic Program Generator
6.
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7.
http://www.hpinfotech.com
8.

9.
Project :
10.
Version :
11.
Date : 12/27/2007
12.
Author : LENGOCTUAN
13.
Company : VAGAM
14.
Comments:
15.

16.

17.
Chip type : ATmega16
18.
Program type : Application
19.
Clock frequency : 8.000000 MHz
20.
Memory model : Small
21.
External SRAM size : 0
22.
Data Stack size : 256
23.
*****************************************************/
24.

25.
#include
26.
#include
27.

28.
// Declare your global variables here
29.

30.
#define den_xanh PORTB.5
31.
#define den_do PORTB.6
32.
#define nut_bam PINB.7
33.

34.
void main(void)
35.
{
36.

37.
// Port B initialization
38.
// Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
39.
// State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T State0=T
40.
PORTB=0x80;
41.
DDRB=0x30;
42.

43.

44.

45.
while (1)
46.
{
47.
// Place your code here
48.
//khi nut bam chua duoc bam logic nut_bam=1
49.
if(nut_bam)
50.
{
51.
den_xanh=1;den_do=0;
52.
delay_ms(500);
53.
den_xanh=0;den_do=1;
54.
delay_ms(500);
55.
}
56.
//khi nut bam duoc an nut_bam=0 chi den do sang
57.
else
58.
{den_xanh=1;den_do=0;}
59.
};
60.
}
61.

62.

63.







Bạn gặp phải vấn đề dội nút nhấn. Điều gì xảy ra khi bạn nhấn nút ?

- Đặc tính dội: Thời gian dội nút từ 10ms đến 50ms (tùy loại nút)

Từ giản đồ, suy nghĩ hồi lâu wink , người ta nghĩ ra chiến thuật chống lại hiện tượng này:


Lưu đồ của bài toán bạn đặt ra như sau:

Không có nhận xét nào:

Đăng nhận xét