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

BÁO CÁO THỰC HÀNH LẬP TRÌNH KỸ THUẬT

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 (194.22 KB, 23 trang )

Bùi Kim Thành & Nguyễn Văn Tân
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP.HCM
KHOA CƠ - ĐIỆN - ĐIỆN TỬ
BÁO CÁO
THỰC HÀNH LẬP TRÌNH KỸ THUẬT
GVHD: TH.S PHẠM QUỐC PHƯƠNG
SVTH : NGUYỄN VĂN TÂN
BÙI KIM THÀNH
MSSV: 107106030
107106032
TP.HCM Ngày 5 tháng 9 năm 2010
1
Bùi Kim Thành & Nguyễn Văn Tân
Mục lục
Trang
Lời nói đầu 2
Phần I: Mạch điện 3
I: Linh kiện 3
II: Sơ đồ mạch điện 3
Phần II: Lập trình 4
I:Lưu đồ giải thuật 4
I: Lập trình cho AVR 6
II: Lập trình VB 9
Kết luận 22
Tài liệu tham khảo 22
2
Bùi Kim Thành & Nguyễn Văn Tân
LỜI NÓI ĐẦU
Trong thời đại ngày nay, khoa học kỹ thuật phát triển rất nhanh. Các hệ
thống dây truyền sản xuất tự động phát triển rất mạnh. Việc áp dụng công nghệ


thông tin vào sản xuất ngày càng nhiều. Mọi dây truyền sản xuất đều được áp dụng
máy tính để điều khiển và giám sát. Các họ vi điều khiển ngày càng nhiều chủng
loại, với nhiều loại chuyên dụng. Các dòng vi điều khiển như 89Cxx, AMR, AVR,
PIC ngày càng được phát triển đa dạng với tốc độ xử lý cao, chuyên dụng.
Sau quá trình học môn lập trình kỹ thuật, chúng em đã có được những kiến
thức cơ bản về truyền thông giữa máy tính và vi điều khiển. Để đúc kết lại những
gì đã học, nhóm chúng em đã làm bài về giao tiếp giữa máy tính và vi điều khiển
AVR. Do còn hạn chế về thời gian và kinh nghiêm nên trong bài làm còn nhiều
thiếu sót. Chúng em rất mong được sự chỉ bảo của thầy và các bạn để bài làm được
tốt hơn.
Xin chân thành cảm ơn

3
Bùi Kim Thành & Nguyễn Văn Tân
Phần I: MẠCH ĐIỆN
Nhóm làm một mạch điện dùng ATMEGA32 để truyền lên máy tính nhiệt độ
đo được từ LM35
I. Linh kiện:
Các linh kiện dùng trong mạch gồm có: ATMEGA32, LM35, điện trở, cổng
RS232, led 7 đoạn, led, 7447, thạch anh, tụ điện
II. Sơ đồ mạch điện:
Phần II: LẬP TRÌNH
4
Bùi Kim Thành & Nguyễn Văn Tân
I.Lưu đồ giải thuật:
5
BEGIN
khái báo các
chương trình
Đọc giá trị ADC

Chương trình con
đọc ADC
Khai báo kênh
đọc ADC
Lặp đến khi nào
thanh ghi ADIF
=1
trả về giá trị của
thanh ghi ADCW
Bùi Kim Thành & Nguyễn Văn Tân
6
xuất led 7 đoạn
chương con
xuất led 7
đoạn
truyền giá trị
ADC lên máy
tính
chương trình
con truyền
lặp cho đến khi
thanh ghi UDRE=0
Đua giá trị truyền
vào thanh ghi UDR
ngắt khi nhận
END
Bùi Kim Thành & Nguyễn Văn Tân
II.Lập trình cho AVR:
#include <avr/io.h>
#include <avr/interrupt.h>

#include <avr/delay.h>
#define VCC (1<<REFS0)
#define giatrithamchieuADC VCC
volatile unsigned char nhan; // khai bao bien nhan 8bit
//chuong trinh con truyen du lieu
void truyendulieu(unsigned char truyen)
{
while (bit_is_clear(UCSRA,UDRE)) {}; //vo lap ket thuc cho den khi bit
UDRE=0
UDR=truyen;// dua gia tri bien truyen vao thanh ghi truyen UDR
}
uint16_t giatriADC;// dat ten bien ADC_val 16bit
// chuong trinh con doc gia tri ADC
uint16_t docADC(unsigned char kenhADC)
{
ADMUX|=kenhADC;// chon kenh doc adc
ADCSRA|=(1<<ADSC);//khoi tao bat dau chuyen doi
loop_until_bit_is_set(ADCSRA,ADIF);// vong lap ket thuc cho den
khi 2 thanh ghi ADCSRA,ADIF =1
7
Bùi Kim Thành & Nguyễn Văn Tân
return ADCW;// gia tri cua thanh gi ADCW duoc tra ve
}
// chuong trinh con xuat led 7 doan
void LED7doan(uint16_t val)
{
uint16_t dvi,chuc,tram,nghin,temp_val;
temp_val=val;
nghin=temp_val/1000;
temp_val-=(1000*nghin);

tram=temp_val/100;
temp_val-=(100*tram);
chuc=temp_val/10;
dvi=temp_val-(10*chuc);
PORTB=(chuc<<4)+dvi;
PORTC=(nghin<<4)+tram;
}
int main(void)
{
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0);//
ADMUX=giatrithamchieuADC;
DDRA=0x00;// khai bao PORTA in
DDRD=0xFE;// khai bao PORTD out
8
Bùi Kim Thành & Nguyễn Văn Tân
DDRB=0xFF;// khai bao PORTB out
DDRC=0xFF;// khai bao PORTC out
//set baud, 57.6k ung voi f=8Mhz,
UBRRH=0;
UBRRL=51;

//set khung truyen va kich hoat bo nhan du lieu
UCSRA=0x00;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);// khai bao truyen ,nhan,ngat
khi nhan
sei();
while(1)
{
giatriADC=docADC(0)/2.05;//dua gia tri ADC vao bien ADC_val

LED7doan(giatriADC);// xuat led
truyendulieu(giatriADC);// truyen ADC len may tinh
_delay_ms(100);// delay 100 ms
}
}
ISR (SIG_UART_RECV)//ngat khi nhan
{
nhan=UDR;// dua gia thanh ghi nhan vao bien nhan
9
Bùi Kim Thành & Nguyễn Văn Tân
PORTD=nhan;// dua gia tri bien nhan vao PORTD
}
III.Lập trình VB:
Giao diện VB:
Code:
Dim a, b, dongco As Variant
Dim c, d, e, f, s, dem, dem2, bdo, i, tat As Integer
'DIEU KHIEN DONG CO CHAY
10
Bùi Kim Thành & Nguyễn Văn Tân
Private Sub chaydc_Click()
dongco = 1
End Sub

'DIEU KHIEN DONG CO DUNG
Private Sub dungdc_Click()
dongco = 0
End Sub

'THOAT CHUONG TRINH

Private Sub exit_Click()
End
End Sub

Private Sub Form_Load()
On Error Resume Next
Timer1.Enabled = True
Timer6.Enabled = True
Timer7.Enabled = True
a = "bui-kim-thanh"
b = "nguyen-van-tan"
c = Len(a)
11
Bùi Kim Thành & Nguyễn Văn Tân
d = Len(b)
e = 1
f = 1
s = 0
dem = 0
tat = 10
dongco = 0
dem2 = 0
i = 1
Text1.Text = 150
'khai bao bieu do
With bieudo
.AutoRedraw = False
.XSpan = 1 / 24 / 60
.XMax = Now
.XMin = .XMax - .XSpan

.SetXDisplay .XMin, .XMax
End With
End Sub
'DONG CONG COM KHI THOAT CHUONG TRINH
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
12
Bùi Kim Thành & Nguyễn Văn Tân
End Sub

'GAN THUOC TINH CHO NUT PAUSE/PLAY
Private Sub pause_Click()
Timer9.Enabled = Not Timer9.Enabled
If Timer9.Enabled = True Then
pause.Caption = "PAUSE"
Else
pause.Caption = "PLAY"
End If
End Sub
'IN BIEU DO
Private Sub Print_Click()
On Error Resume Next
Dim Y As Long
Printer.Print " ";
Printer.ScaleMode = 5
Y = Printer.hDC
bieudo.PrintPic Y, 1.5, 1.5, 5, 3
Printer.EndDoc
End Sub


13
Bùi Kim Thành & Nguyễn Văn Tân
'hien chu tren hang led1
Private Sub Timer1_Timer()
hangled1.AlphaText = Left(a, e)
If e = c Then
Timer2.Enabled = True
Timer1.Enabled = False
e = 0
End If
e = e + 1
End Sub

' HIEN CHU TREN HANG LED 1
Private Sub Timer2_Timer()
hangled1.AlphaText = hangled1.AlphaText + Space(1)
If Len(hangled1.AlphaText) = hangled1.LEDBitNum + 15 Then
Timer3.Enabled = True
Timer2.Enabled = False
End If
End Sub

' HIEN CHU TREN HANG LED 1
Private Sub Timer3_Timer()
14
Bùi Kim Thành & Nguyễn Văn Tân
hangled1.AlphaText = Left(b, f)
If f = d Then
Timer4.Enabled = True
Timer3.Enabled = False

f = 0
End If
f = f + 1
End Sub

' HIEN CHU TREN HANG LED 1
Private Sub Timer4_Timer()
hangled1.AlphaText = hangled1.AlphaText + Space(1)
If Len(hangled1.AlphaText) = hangled1.LEDBitNum + 16 Then
Timer1.Enabled = True
Timer4.Enabled = False
End If
End Sub

' Hien chu "+-+-atmega32-+-+" tren hang led 2
Private Sub Timer5_Timer()
hangled2.AlphaText = "+-+-atmega32-+-+"
If dem = 2 Then
15
Bùi Kim Thành & Nguyễn Văn Tân
Timer5.Enabled = False
Timer6.Enabled = True
dem = 0
End If
dem = dem + 1
End Sub

'HIEN CHU " welcome " TREN HANG LED2
Private Sub Timer6_Timer()
hangled2.AlphaText = " welcome "

If dem2 = 2 Then
Timer6.Enabled = False
Timer5.Enabled = True
dem2 = 0
End If
dem2 = dem2 + 1
End Sub

'DONG MO CONG COM
Private Sub Timer7_Timer()
On Error Resume Next
Select Case congtac.Value
16
Bùi Kim Thành & Nguyễn Văn Tân
Case True
With MSComm1
.CommPort = 2
.Settings = "9600,N,8,1"
.PortOpen = True
.InputLen = 0
End With
If i = 1 Then
Timer9.Enabled = True
pause.Caption = "PAUSE"
End If
i = i + 1
Timer8.Enabled = True
Case False
MSComm1.Output = Chr(0)
bieudo.ClearAll

dongho.HandValue = 0
i = 1
Timer11.Enabled = False
Timer9.Enabled = False
chay.Value = False
dung.Value = False
17
Bùi Kim Thành & Nguyễn Văn Tân
antoan.Value = False
Timer8.Enabled = False
MSComm1.PortOpen = False
End Select
End Sub

Private Sub Timer8_Timer()
Dim gioihan As Integer
gioihan = Val(Text1.Text)
If gioihan > bdo Then
Timer10.Enabled = False
ElseIf gioihan <= bdo Then
Timer10.Enabled = True
End If
If gioihan > bdo And dongco = 0 Then
chay.Value = False
dung.Value = True
antoan.Value = True
canhbao.Value = False
MSComm1.Output = Chr(32)
ElseIf gioihan > bdo And dongco = 1 Then
chay.Value = True

18
Bùi Kim Thành & Nguyễn Văn Tân
dung.Value = False
antoan.Value = True
canhbao.Value = False
MSComm1.Output = Chr(160)
ElseIf gioihan <= bdo And dongco = 0 Then
chay.Value = False
dung.Value = True
antoan.Value = False
canhbao.Value = True
MSComm1.Output = Chr(64)
ElseIf gioihan <= bdo And dongco = 1 Then
chay.Value = True
dung.Value = False
antoan.Value = False
canhbao.Value = True
MSComm1.Output = Chr(192)
End If
End Sub

'//// QUET GIA TRI DE XUAT RA DONG HO VA BIEU DO
Private Sub Timer9_Timer()
Do
19
Bùi Kim Thành & Nguyễn Văn Tân
DoEvents
Loop Until MSComm1.InBufferCount >= 1
bdo = Asc(MSComm1.Input)
dongho.HandValue = bdo

bieudo.AddXY 0, Now, bdo
bieudo.Refresh
End Sub

' HIEN THONG BAO TAT CHUONG TRINH
Private Sub Timer10_Timer()
If congtac.Value = True Then
tat = tat - 1
Label4.Caption = "HE THONG SE DUNG SAU : " & tat
If tat = 0 Then
MSComm1.Output = Chr(0)
canhbao.Value = False
congtac.Value = False
Timer10.Enabled = False
tat = 10
Text1.Text = 150
dongco = 0
Label4.Caption = " HE THONG DUNG HOAT DONG"
20
Bùi Kim Thành & Nguyễn Văn Tân
End If
Else
Label4.Caption = "HE THONG DUNG HOAT DONG"
canhbao.Value = False
congtac.Value = False
Timer10.Enabled = False
tat = 10
Text1.Text = 150
dongco = 0
End If

End Sub
21
Bùi Kim Thành & Nguyễn Văn Tân
KẾT LUẬN
Bài báo cáo của nhóm của nhóm còn khá ngắn gọn, chưa sử dụng hết các
chân của AVR. Trong lập trình dao diện với người sử dụng còn đơn giản nhưng
cũng phần nào cho thấy sự giao tiếp giữa vi điều khiển và máy tính. Bài báo cáo
của nhóm còn nhiều hạn chế mong thầy và các bạn góp ý thêm.
TÀI LIỆU THAM KHẢO
[1].www.hocavr.com
[2].Visual basic 6.0
22
Bùi Kim Thành & Nguyễn Văn Tân
23

×