Slide Powerpoint IPST Microbox2

Download Report

Transcript Slide Powerpoint IPST Microbox2

การพัฒนาโปรแกรมบน IPST-MICROBOX
กฤษดา ใจเย็น
นคร ภักดีชาติ
วรพจน์ กรแก้ววัฒนกุล
บริษทั อินโนเวตีฟ เอ็กเพอริเมนต์ จำกัด
www.inex.co.th
ชุดที่ 5
กำรทดลอง
แผงวงจรแสดงผลและพอร์ตเอนกประสงค์
ตัวต้ำนทำน
ปรับค่ำได้ PA7
คอนเน็กเตอร์
สำหรับสื่อสำรอนุกรม
สวิตช์ PB5 PB6 และ PB7
จอแสดงผล LCD
K1
MCU
I/O
วงจรของแผงวงจรแสดงผล
+5V
+5V
10
VCC
AVCC 30
RC2 24
4
25
6
RC3
RC7
RC6
RC5
RC4
DSP1
LCD 16x2
RS
E
Vo
D7 D6 D5 D4 D3 D2 D1 D0 R/W
14 13 12 11 10
9
8
7
5
29
1
VR1
3
LCD
contrast
GND
2
K1
MCU I/O
28
1
27
40
26
+5V
R1
2.2k
RC1 23
K1
SDA
RC0 22
K2
SCL
RA6 34
K3
PA6
RA7
+V
+5V
PD1/TxD 15
PD0/RxD 14
2
C4
R2
150R
5
R3
150R
RB6 7
RB7 8
R4
150R
R6
150R
R8
150R
R5
10k
R7
10k
1
C3
3
10
7
9
8
6
1
2
3
4
RxD
TxD
DTR
GND
C5
R9
10k
SW1
SW2
SW3
31
GND
GND 11
21
C1-C5
10/50V
16
IC1
MAX232
15
+5V
RB5 6
4
C2
ATMega16
บนแแผงวงจรหลัก
MicroBOX
20
C1
VR2
10k
KNOB
33
คอนเน็กเตอร์ ตัวเมีย
ด้ านข้ าง ATMega16 บน
แผงวงจรหลัก MicroBOX
K4
RS-232
• ใช้พอร์ต PC2 ถึง PC7 ในกำรติดต่อ
กับโมดูล LCD
• PC0 และ PD1 สำหรับกำรสื่อสำรอนุกรม
แบบ I2C บัส
• PD0 และ PD1 สำหรับกำรสื่อสำรอนุกรม
• PB5,PB6 และ PB7 สำหรับเชื่อมต่อ
กับสวิตช์
• PA7 สำหรับอ่ำนค่ำแรงดันอะนำลอก
จำกตัวต้ำนทำนปรับค่ำได้
• PA6 เป็ นจุดต่อเอนกประสงค์
ชุดคำสั่งสำหรับแสดงผลข้ อควำมที่โมดูล LCD แบบ 16*2
ฟั งก์ชนั่ lcd หรื อ LCD สำหรับกำรแสดงผลข้ อควำมที่โมดูล LCD แบบ 16*2
รู ปแบบฟั งก์ ช่ ัน void lcd(char *p,...)
พำรำมิเตอร์ p ทำหน้ ำที่รับกำรกำหนดกลุม่ ข้ อควำมที่ต้องกำรแสดงผลที่โมดูล LCD
โดยสำมำรถกำหนดรูปแบบกำรแทรกสัญลักษณ์พิเศษเพื่อร่ วมแสดงผลค่ำข้ อมูลตัวเลข
รูปแบบอื่นๆ อันได้ แก่
รหัสบังคับ
กำรทำงำน
%c หรือ %C
%d หรือ %D
%l หรือ %L
ใช้รบั ค่าการแสดงผลตัวอักษร 1 ตัว
ใช้รบั ค่าการแสดงผลตัวเลขฐานสิบช่วงตัง้ แต่ –32,768 ถึง +32,767
ใช้รบั ค่าการแสดงผลตัวเลขฐานสิบช่วงตัง้ แต่ –2,147,483,648 ถึง +2,147,483,647
%f หรือ %F
#c
#n
ใช้รบั ค่าเพือ่ แสดงผลข้อมูลแบบจานวนจริง(แสดงทศนิยม 3 หลัก)
คียค์ าสังพิ
่ เศษเพือ่ สังเคลี
่ ยร์ขอ้ ความก่อนแสดงผลในครัง้ ถัดไป
คียค์ าสังพิ
่ เศษเพือ่ สังตั
่ ดข้อความไปแสดงทีบ่ รรทัดที่ 2
ชุดคำสั่งสำหรับแสดงผลข้ อควำมที่โมดูล LCD แบบ 16*2
ตัวอย่ำง 1
lcd(“Hello LCD”); // แสดงข้ อควำม “Hello LCD” ที่โมดูล LCD
ผลลัพธ์ ท่ โี มดูล LCD
H e l
l o
L C D
ตัวอย่ำงที่ 2
lcd("abcdefghijklmnopqrstuvwxyz");
// แสดงผลข้ อควำมเมื่อสำยอักขระเกิน 16 ตัวอักษร
// อักขระตัวถัดไปจะขึน้ บรรทัดที่ 2 ทันที
ผลลัพธ์ ท่ โี มดูล LCD
a
b
c
d
e
f
g
h
i
j
q
r
s
t
u
v
w
x
y
z
k
l
m
n
o
p
ชุดคำสั่งสำหรับแสดงผลข้ อควำมที่โมดูล LCD แบบ 16*2
ตัวอย่ำง 3
lcd(“Value: %d unit ”,518);
// แสดงข้อความร่วมกับข้อมูลตัวเลข(518)ทีโ่ มดูล LCD
ผลลัพธ์ที่โมดูล LCD
V
a
l
u
e
:
5
1
8
u
n
i
ตัวอย่ำง 4
lcd(“Value: %d ”,analog(4));
// อ่านค่าอะนาลอกทีช่ อ่ ง 4 (ตรงกับพอร์ต PA4) มาแสดงผลทีโ่ มดูล LCD
ผลลัพธ์ที่โมดูล LCD
V
a
l
u
e
:
1
0
2
3
t
ชุดคำสั่งสำหรับแสดงผลข้ อควำมที่โมดูล LCD แบบ 16*2
ตัวอย่ำง 5
char c_test=’j’;
lcd(“abcd%cxyz”,c_test);
//
แสดงข้อควำมอักระ “j” ร่วมกับข้อควำมอื่นๆ
ผลลัพธ์ที่โมดูล LCD
a
b
c
d
j
x
y
z
ตัวอย่ำง 6
lcd(“Value: %f ”,125.450);
// แสดงข้อควำมร่วมกับข้อมูลตัวเลขจำนวนจริงที่โมดูล LCD (แสดงทศนิยม 3 หลัก)
ผลลัพธ์ที่โมดูล LCD
V
a
l
u
e
:
1
2
5
.
4
5
0
กำรทดลองที่ 12 กำรแสดงผลออกจอ LCD อย่ำงง่ำย
เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
#include <ipst.h>
void main()
{
while(1)
{
lcd("Hello LCD");
}
}
กำรทดลองที่ 13 กำรแสดงผลออกจอ LCD 2 บรรทัด
เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
#include <ipst.h>
void main()
{
new line
while(1)
{
lcd("Line1#nLine2");
}
}
กำรทดลองที่ 14 กำรแสดงผลตัวเลข แบบจำนวนเต็ม
เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
#include <ipst.h>
void main()
{
int x = 1568;
while(1)
{
lcd("Integer: %d ",x);
}
}
กำรทดลองที่ 15 กำรแสดงผลตัวเลขแบบทศนิยม
#include <ipst.h>
void main()
{
float x = 238.592;
while(1)
{
lcd("Float: %f ",x);
}
}
กำรทดลองที่ 16 ใช้งำนสวิตช์บนแผงวงจรแสดงผล
สวิตช์ PB5, PB6 และ PB7
#include <ipst.h>
void main()
{
lcd("Test switch");
while(1)
{
if(sw1()==0)
{
while(sw1()==0);
lcd("SW1 Active!");
sleep(1000);
lcd_clear();
}
else if(sw2()==0)
{
while(sw2()==0);
lcd("SW2 Active!");
sleep(1000);
lcd_clear();
}
else if(sw3()==0)
{
while(sw3()==0);
lcd("SW3 Active!");
sleep(1000);
lcd_clear();
}
}
}
บททดสอบ 4
เขียนโปรแกรมแสดงค่ำกำรนับขึน้ ทีละ 1 ค่ำทุกๆ 1 วินำทีโดยประมำณ
และแสดงค่ำกำรนับที่โมดูล LCD ซึ่งรูปแบบข้อควำมที่หน้ ำจอ LCD
รูปแบบ
Time: xxx sec
โดยที่ xxx คือค่ำเวลำที่นับได้ ณ ปัจจุบนั
t i me
:
300
s ec
บททดสอบ 5
เครื่องตัง้ เวลำ 30 วินำทีแบบนับลง
เขียนโปรแกรมแสดงค่ ำกำรนับลงครัง้ ละ 1 ค่ ำทุกๆ 1 วินำทีโดยประมำณ
ค่ ำเริ่มต้ นถูกตัง้ ค่ ำไว้ ท่ ี 30 วินำทีและแสดงค่ ำกำรนับที่โมดูล LCD
รูปแบบ
Count Down!
Time: 30 sec
เมื่อนับค่ ำถึง 0 ให้ แสดงข้ อควำม
Complete
Co u n t Do wn !
t i me : 3 0 s e c
Time: 0 sec
บททดสอบ 6
เครื่องตัง้ เวลำแบบนับลงสำมำรถกำหนดค่ำได้
เขียนโปรแกรมแสดงค่าการนับลงครัง้ ละ 1 ค่าทุกๆ 1 วินาทีโดยประมาณ
โดยค่าเริม่ ต้นสามารถถูกตัง้ ค่าได้จากผูใ้ ช้งานจากการกดสวิตช์ SW1,SW2 และ SW3
ช่วงเริม่ ต้นของโปรแกรมจะเป็นการรับค่าการกาหนดเวลาการนับในหน่วยวินาทีโดยมีเงือ่ นไขคือ
เมื่อกดสวิตช์ SW1 ค่ำที่ถกู ตัง้ จะเพิ่มขึ้นครัง้ ละ 1 ค่ำ
เมื่อกดสวิตช์ SW2 ค่ำที่ถกู ตัง้ จะลดลงครัง้ ละ 1 ค่ำ
ซึง่ ในช่วงระหว่างการตัง้ ค่านี้ทห่ี น้าจอ LCD จะแสดงค่าการตัง้ ค่าเวลานับลงเป็ น
set:xxx sec
Time:0 sec
เมื่อกดสวิตช์ SW3 จะเข้ำสู่ขนั ้ ตอนกำรนับลงทันที
ซึง่ ในช่วงระหว่างการนับลงทีห่ น้าจอ LCD จะแสดงรูปแบบข้อความทีห่ น้าจอ LCD เป็ น
Countdown
Time:59 sec
Time:xxx sec
เมือ่ นับลงมาจนถึงค่า 0 แล้วทีห่ น้าจอ LCD จะต้องปรากฏข้อความว่า
Complete
Time: 0 sec
ชุดที่ 6
กำรทดลองอุปกรณ์ กลุ่ม
5V
10W
10.5 cm
0V
25 C
วงจรแปลง
อะนำลอก
เป็ นดิจิตอล
0-5V
bit
byte
ฐำนสอง
ฐำนสิบหก
ลอจิก
0-1023 (10 bit)
กระบวนกำรแปลค่ำดิจิตอล (Quantization)
Vdigital = Data x V
Full Data
Vdigital = 512 x 5
1024
Vdigital = 2.5 V
8 บิต หมำยถึงข้อมูลไบนำรี่ 8 บิต
เกิดค่ำที่เปลี่ยนแปลงได้จำก 0 ถึง 255 28
10 บิต หมำยถึงข้อมูลไบนำรี่ 10 บิต
เกิดค่ำที่เปลี่ยนแปลงได้จำก 0 ถึง 1023 210
ควำมละเอียดเพิ่มขึน้ 2 บิต
ควำมละเอียดเพิ่มขึน้ 4 เท่ำ
ควำมละเอียดในกำรแปลค่ำ
(Resolution)
ฟังก์ชนั ่ analog สำหรับกำรอ่ำนค่ำอะนำลอกควำมละเอียดขนำด 10 บิต
ทีข่ ำสัญญำณใดๆของพอร์ต A
รูปแบบฟังก์ชนั ่
unsigned int analog(unsigned char channel)
channel ทำหน้ ำที่กำหนดช่องอะนำลอกที่ต้องกำรใช้งำนโดยมีค่ำตัง้ แต่ 0 ถึง 7 ซึ่งจะตรง
กับพอร์ต PA0 ถึง PA7 ตำมลำดับ
ตัวอย่ำงที่ 7
int adc_val=0;
adc_val = analog(2);
อ่ำนค่ำข้อมูลจำกเซนเซอร์อะนำลอกทีต่ ่ออยู่กบั ขำ RA2 เก็บไว้ในตัวแปร adc_val
+V
LDR
ใช้ตรวจจับแสงสว่าง เลือกเอาต์พตุ ได้ 2 แบบคือ
OUT
R2
4k7
GND
แรงดันเอำต์พตุ เพิ่ม เมื่อแสงตกกระทบมำกขึน้
แรงดันเอำต์พตุ ลดลง เมื่อแสงตกกระทบมำกขึ้น
+5V
LDR
OUT
Analog
0-5V
R2
4k7
Analog to Digital
Converter
Digital Value
Microcontroller
0-1023 (10 bit)
0-255 (8 bit)
GND
ได้รบั แสง มำก ค่ำที่ตรวจวัดได้ มำก
ได้รบั แสง น้ อย ค่ำที่ตรวจวัดได้ น้ อย
+5V
R2
4k7
OUT
Analog
0-5V
LDR
Analog to Digital
Converter
Digital Value
Microcontroller
0-1023 (10 bit)
0-255 (8 bit)
GND
ได้รบั แสง น้ อย ค่ำที่ตรวจวัดได้ มำก
ได้รบั แสง มำก ค่ำที่ตรวจวัดได้ น้ อย
+5V
VR1
VLDR
R1
4k7
OUT
LDR
GND
VLDR = +5V(RLDR/(RLDR+R1))
VR1 = +5V(R1/(RLDR+R1))
กำรทดลองที่ 17 อ่ำนค่ำจำกแผงวงจรตรวจจับแสง
อ่ำนค่ำอะนำลอกจำกกำรวัดปริมำณแสงจำกแผงวงจรตรวจจับแสง
จำกพอร์ต PA5 และนำค่ำทีอ่ ่ำนได้ไปแสดงผลทีโ่ มดูล LCD
©inex
ZX-02 LDR-Light
1. ต่อแผงวงจร ZX-LDR เข้ำกับบอร์ด IPST ที่ตำแหน่ ง PA5
Li ght
:
699
กำรทดลองที่ 17 อ่ำนค่ำจำกแผงวงจรตรวจจับแสง
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
#include<ipst.h>
void main()
{
while(1)
{
lcd("Light: %d
sleep(100);
}
}
",analog(5));
3. ดำวน์ โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์
4. ดูผลกำรเปลี่ยนแปลงค่ำของ LDR เมื่อสภำวะแสงแตกต่ำงกัน
บททดสอบ 7
สวิตช์เปิดไฟกลำงคืน
©inex
ZX-02 LDR-Light
เขียนโปรแกรมควบคุมการเปิด/ปิดไฟ (แทนด้วย LED ทีต่ าแหน่ง PD0 ) จากปริมาณแสงที่
ได้จากแผงวงจรตรวจจับแสงตาแหน่ง PA5
ถ้ำแสงน้ อย LED จะต้องติดสว่ำงเพือ่ แทนกำรเปิดไฟ
ถ้ำหำกแสงสว่ำงปกติ LED จะต้องดับซึง่ แทนกำรปิดไฟ
นำค่ำอะนำลอกของปริมำณแสงทีอ่ ่ำนได้ไปแสดงผลทีโ่ มดูล LCD
Light : 900
Light : 500
Li ght
:
699
Light : 100
S
-
+
ZX-LED2C
Bi-color LED
+
S
-
1023
512
+V
LDR
LED1
OUT
R1
220
R2
4k7
GND
0
ใช้ LED แบบควำมสว่ำงสูงเป็ นตัวกำเนิดแสง
แล้วใช้ LDR เป็ นตัวรับแสงสะท้อนกลับมำ
ค่ำทีอ่ ่ำนได้จำก LDR เป็ นควำมเข้มแสง
ทีส่ ะท้อนจำกวัตถุต่ำง ๆ
ใช้แผงวงจรตรวจจับกำรสะท้อนเป็ น Encoder อย่ำงง่ำย
START
Robot move = 30 cm
Counter
= 300
Motor
ON
Read Decoder
Counter = 0
Yes
Motor
OFF
No
จำนวนช่องเท่ำกับ 9 ช่อง
เส้นผ่ำนศูนย์กลำง 10 CM
เส้นรอบวง = pD
เส้นรอบวง = 31.4 CM
D = 10 CM
ช่องกำรนับ 1 ช่อง = 31.4 / 9 = 3.5 CM / ช่อง
กำรทดลองที่ 18 อ่ำนค่ำจำกแผงวงจรตรวจจับแสงสะท้อน
อ่ำนค่ำอะนำลอกจำกแผงวงจรตรวจจับแสงสะท้อน
จำกพอร์ต PA5 และนำค่ำทีอ่ ่ำนได้ไปแสดงผลทีโ่ มดูล LCD
©inex
Zx-Reflect
1. ต่อแผงวงจร ZX-Reflect เข้ำกับบอร์ด IPST ที่ตำแหน่ ง PA1
Li ght
:
699
กำรทดลองที่ 18 อ่ำนค่ำจำกแผงวงจรตรวจจับแสงสะท้อน
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
#include<ipst.h>
void main()
{
while(1)
{
lcd("Light: %d
sleep(100);
}
}
",analog(1));
3. ดำวน์ โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์
4. นำแผงวงจร ZX-Reflect ไปวำงในตำแหน่ งต่ำง ๆ สังเกตผลที่จอ LCD
A
Temperature sensor
S
+
10k
+
+
S
T
+
อุณหภูมิสงู ขึน้ แรงดันลดลง
อุณหภูมิสงู ขึน้ แรงดันมำกขึน้
กำรทดลองที่ 19 อ่ำนค่ำอุณหภูมิพร้อมแจ้งเตือน
เมือ่ อุณหภูมิสงู กว่ำ 30 องศำเซลเซียส จะแจ้งเตือนด้วยเสียงจำกลำโพงเปี ยโซ
และแสดงค่ำอะนำลอกจำกแผงวงจรวัดอุณหภูมิทีห่ น้ ำจอ LCD
กำหนด ที่อณ
ุ หภูมิ 30 องศำเซลเซียส เทอร์มิสเตอร์ของแผงวงจรวัดอุณหภูมิจะมีค่ำควำม
ต้ำนทำนไฟฟ้ ำประมำณ 8 กิโลโอห์ม
Rt
D

1024 10  Rt
โดยที ่
1024 * 8
D
 455 .11
10  8
D คือค่าข้อมูลดิจติ อลทีไ่ ด้
Rt คือค่าความต้านทานทีอ่ ุณหภูมขิ องเงือ่ นไข (k Ohm)
ดังนัน้ เมือต้
่ องการตรวจวัดทีอ่ ุณหภูม ิ 30 องศาค่าทีอ่ ่านได้จะมี
ค่าเท่ากับ 455 โดยประมาณ
กำรทดลองที่ 19 อ่ำนค่ำอุณหภูมิพร้อมแจ้งเตือน
©inex
Zx-Thermister
1. ต่อแผงวงจร ZX-Thermister เข้ำกับบอร์ด IPST ที่ตำแหน่ ง PA1
2. ต่อแผงวงจรลำโพงเปี ยโซเข้ำที่ตำแหน่ ง PD6
Te mp
=
:
455
SPEAKER
กำรทดลองที่ 19 อ่ำนค่ำอุณหภูมิพร้อมแจ้งเตือน
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
#include<ipst.h>
void main()
{
unsigned int value;
while(1)
{
value = analog(1);
lcd("Temp: %d
",value);
if(value<455)
{
beep_d(6);
}
sleep(100);
}
}
3. ดำวน์ โหลดโปรแกรมไปยัง
ไมโครคอนโทรลเลอร์
4. ทดสอบกำรทำงำน
แผงวงจรตัวต้ำนทำนปรับค่ำได้
ตัวต้ำนทำนปรับค่ำได้แบบตัวนอน
ตัวต้ำนทำนปรับค่ำได้แบบเลื่อน
สัญลักษณ์
แผงวงจรตรวจจับเสียง
เอำต์พตุ ที่ได้จำกแผงวงจรตรวจจับเสียง
จะเป็ นระดับแรงดัน 0 ถึง 5 โวลต์
เปลี่ยนแปลงตำมระดับควำมดังของเสียง
เสียงดังมำกก็ให้ระดับแรงดันมำก
เสียงค่อยก็ให้ระดับแรงดันน้ อย
C2
0.1uF/50V
MIC1
3
R2 2
100k
R6
1k
R5
68k
6
8
+
+
IC1/1
1
5
IC1/2
-
R4
R3 100k
1k
4
R7
12R
7
C3
22uF
+
R1
22k
C1
470uF/16V
IC1 : TLC272
S
แผงวงจร LED อินฟรำเรด และ PHOTO TRANSISTOR
LED Infrared
Photo Transistor
แผงวงจรโมดูลรับแสงอินฟรำเรด
D
INFRARED RECEIVER
38kHz OUT
IRM
GND
S
+
+V
0.1/50V
แผงวงจรโมดูลรับแสงอินฟรำเรด
แผงวงจรโมดูลรับแสงอินฟรำเรด
แผงวงจรตรวจจับและวัดสนำมแม่เหล็ก : MAGNETIC FIELD
+Vcc
GND Vout
• ใช้วดั ควำมเข้มของสนำมแม่เหล็ก
• ถ้ำทิศสนำมแม่เหล็กพุ่งออก ให้ผลลัพธ์เป็ นแรงดันบวก
• ถ้ำสนำมแม่เหล็กพุ่งเข้ำ จะให้ผลลัพธ์เป็ นแรงดันลบ
• เมื่อไม่มีสนำมแม่เหล็กจะได้ค่ำกลำง 2.5V
• ควำมไวในกำรวัดคือ 1.3 mV ต่อควำมเข้มสนำมแม่เหล็ก 1 เกำส์ (Gauss)
ค่าแรงดันทีไ่ ด้ = 2.5 + (0.0013 x ความเข้มสนามแม่เหล็กในหน่วยเกาส์ : Gauss)
A
Magnetic field
0.1/50V
+V
GND
S
UGN3503
Hall-effect
sensor
+
UGN3503
OUT
แผงวงจรตรวจจับและวัดสนำมแม่เหล็ก : MAGNETIC FIELD
สำหรับแผงวงจรวัดสนำมแม่เหล็กสำมำรถวัดควำมเข้มสนำมแม่เหล็กอ่อนๆได้ในหน่ วยเก๊ำส์(G)
โดยคำนวณได้จำกสมกำร
BG  3.756 Aout  Ainit 
โดยที่
BG
Ainit
Aout
คือควำมเข้มสนำมแม่เหล็กในหน่ วยเก๊ำส์(G)
คือค่ำอะนำลอกที่อ่ำนได้ในสภำวะปลอดสนำมแม่เหล็ก
คือค่ำอะนำลอกที่อ่ำนได้ในสภำวะใดๆจำกแผงวงจรวัดสนำมแม่เหล็ก
กำรทดลองที่ 20 อ่านค่าอะนาลอกจากแผงวงจรวัดสนามแม่เหล็ก
100n
©inex
Zx-Megnetic
1. เชื่อมต่อแผงวงจรวัดสนำมแม่เหล็กเข้ำกับ PA2
Ma n e t i c
:
455
กำรทดลองที่ 20 อ่านค่าอะนาลอกจากแผงวงจรวัดสนามแม่เหล็ก
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
3. ดำวน์ โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์
4. สังเกตค่ำอะนำลอกที่อ่ำนได้จำกแผงวงจรวัดสนำมแม่เหล็กในขณะปลอดสนำมแม่เหล็ก
เก็บค่ำนี้ เพื่อใช้ในกำรคำนวณหำควำมเข้มสนำมแม่เล็กในหน่ วยเกำส์(G) (หำค่ำ Ainit )
#include<ipst.h>
void main()
{
unsigned int value;
while(1)
{
lcd("Magnatic: %d
sleep(100);
}
}
",analog(2));
กำรทดลองที่ 21
อ่ำนค่ำสนำมแม่เหล็กจำกแผงวงจรวัดสนำมแม่เหล็ก
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
3. ดำวน์ โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์
4. นำแม่เหล็กถำวรมำวำงในทิศทำงต่ำง ๆ เพื่อทดสอบอ่ำนค่ำ Aout ใช้ในกำรคำนวณหำค่ำ BG
#include<ipst.h>
void main()
{
unsigned int value;
while(1)
{
lcd("Magnatic: %d
sleep(100);
}
}
",analog(2));
โมดูลวัดระยะทำง GP2D120
ค่ำแรงดันเอำต์พตุ ของ GP2D120 ที่ระยะทำง 30 เซนติเมตรที่ไฟเลี้ยง +5V
อยู่ในช่วง 0.25 ถึง 0.55V โดยค่ำกลำงคือ 0.4V
ช่วงของกำรเปลี่ยนแปลงแรงดันเอำต์พตุ ที่ระยะทำง 4 เซนติเมตรคือ 2.25V ±0.3V
โมดูลวัดระยะทำง GP2D120
กำรใช้งำนโมดูลวัดระยะทำง GP2D120 จะต้องทำกำรผนวกไลบรำรี
gp2d120_lib.h
แล้วใช้ฟังก์ชนั ่ getdist เพื่ออ่ำนค่ำระยะทำงในหน่ วยเซนติเมตร
ตัวอย่ำง
dis = getdist(0);
เป็ นกำรอ่ำนค่ำระยะทำงจำก GP2D120 ที่ต่ออยู่กบั ขำ PA0
ขอบเขตกำรทำงำนจะอยู่ในช่วง 4 ถึง 32 เซนติเมตรตำมคุณสมบัติของผูผ้ ลิต
ดังนัน้ ค่ำทีอ่ ่ำนได้ทีอ่ ยู่นอกขอบเขตจะถือว่ำไม่สำมำรถนำมำประเมิณได้
กำรทดลองที่ 22 GP2D120 วัดระยะทำงแสดงผลที่ LCD
1. ต่อ GP2D120 เข้ำกับขำ PA0
RAW DATA =
Di s t a n c e =
115
2 0 CM
กำรทดลองที่ 22 GP2D120 วัดระยะทำงแสดงผลที่ LCD
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
#include<ipst.h>
#include<gp2d120_lib.h>
void main()
{
int dis=0;
while(1)
{
dis = getdist(0);
if(dis>=4 && dis<=32)
{
lcd("Distance: %d
",dis);
}
else
{
lcd("Out of Range!");
}
sleep(100);
}
}
แผงวงจรวัดค่ำควำมต้ำนทำน
RESISTANCE
1
LM334
constant
current source
2
3
0.1/63V
68R
OUT
1mA set
5
R ที่ต้องการวั ด
8
7
6
4
TLC2272
Input 4000 Max.
(Current source 4V. limited)
จุดวัด
S
+
A
Output
1mV./
แผงวงจรวัดควำมต้ำนทำนจะสำมำรถวัดควำมต้ำนทำนได้สงู สุด 4 กิโลโอห์ม
โดยอัตรำส่วนใน 1mV/1ohm
เทียบบัญญัติไตรยำงค์
5000 มิลลิโวลต์(5 โวลต์)
คือระดับที ่ 1024 (ขอบเขตบนสำหรับอ้ำงอิง)
1 มิลลิโวลต์
คือค่ำอะนำลอก 1024/5000 = 0.2048
ดังนัน้
สรุป
A
R
0.2048
เมื่อ R คือค่ำควำมต้ำนทำนที่อ่ำนได้
เมื่อ A คือค่ำข้อมูลที่อ่ำนได้จำกแผงวงจร IPST MicroBOX
กำรทดลองที่ 23 อ่ำนค่ำควำมต้ำนทำน
1. ต่อ แผงวงจรวัดค่ำควำมต้ำนทำนเข้ำกับจุดต่อ PA4
100n
TL2272
Resistor
R
RESISTANCE
Resolution 1mV/Ohm
Full scale 4000 Ohm
A
RAW DATA = 1 0 3
R = 5 0 3 . 0 0 0 Oh m
กำรทดลองที่ 23 อ่ำนค่ำควำมต้ำนทำน
2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตำมตัวอย่ำงต่อไปนี้
#include<ipst.h>
void main()
{
float r=0.0;
while(1)
{
r = (float)analog(4)/0.2048;
lcd("R = %f Ohm
",r);
sleep(100);
}
}
บททดสอบ 7
เครื่องคัดเลือกควำมต้ำนทำน 1 กิโลโอห์ม
จำกชุดตัวต้ำนทำนที่มีให้ทำกำรวัดค่ำตัวต้ำนทำนเพื่อหำค่ำ 1 กิโลโอห์ม เมื่อพบโมดูล
LCD จะแสดงข้อควำม “DETECT!” พร้อมส่งเสียงแจ้งเตือน แต่เมื่อพบควำมต้ำนทำน
ค่ำอื่นโมดูล LCD จะแสดงข้อควำม “PASS”
100n
TL2272
Resistor
R
RESISTANCE
Resolution 1mV/Ohm
Full scale 4000 Ohm
A
RAW DATA = 1 0 3
R = 5 0 3 . 0 0 0 Oh m
ชุดคำสั่งสื่อสำรข้ อมูลอนุกรม
เมือ่ ต้องกำรนำ MicroBOX ติดต่อกับคอมพิวเตอร์ทำได้โดยใช้โมดูลสือ่ สำรข้อมูลอนุกรม
ผ่ำนสำย CX-4 โดยบนบอร์ดแสดงผล LCD จะมีจดุ ต่อสำหรับสือ่ สำรอนุกรมติดตัง้ ไว้แล้ว
สรุปฟังก์ชนในกำรใช้
ั่
งำนมีดงั นี้
1. ฟังก์ชนั ่ uart
ทำหน้ ำที่ส่งข้อมูลสำยอักขระออกทำงวงจรภำคส่งของโมดูล UART
2. ฟังก์ชนั ่ uart_putc ทำหน้ ำที่ส่งข้ออักขระหนึ่ งตัวออกทำงวงจรภำคส่งของโมดูล UART
3. ฟังก์ชนั ่ uart_set_baud ทำหน้ ำที่กำหนดอัตรำบอดหรืออัตรำเร็วในกำรสื่อสำรข้อมูล
อนุกรมกับคอมพิวเตอร์ (ค่ำปกติจะเป็ น 9600 บิตต่อวินำที)
4. ฟังก์ชนั ่ uart_getkey ทำหน้ ำที่เรียกอ่ำนข้อมูลที่ผำ่ นกำรสื่อสำรข้อมูลอนุกรม
กับคอมพิวเตอร์
กำรทดลองที่ 24
ส่ งข้ อความจาก MicroBOX ไปแสดงที่คอมพิวเตอร์
1. เชื่อมต่อสำยพอร์ตอนุกรมระหว่ำงพอร์ตอนุกรมที่แผงวงจร Display-io กับ
คอมพิวเตอร์
2. ปิดโปรแกรม AVR prog และโปรแกรมอื่นๆที่อำจจะจองพอร์ตอนุกรม ซึ่ง
ขัดขวำงกำรสื่อสำรข้อมูลอนุกรมระหว่ำง MicroBOX กับคอมพิวเตอร์ได้
3. เปิดโปรแกรม HyperTerminal
กำรทดลองที่ 24
ส่ งข้ อความจาก MicroBOX ไปแสดงที่คอมพิวเตอร์
4. เขียนโปรแกรมต่อไปนี้ ด้วย AVR Studio
5. ตัง้ ค่ำต่ำง ๆ ที่โปรแกรม Hyper Terminal
#include<ipst.h>
void main()
{
while(1)
{
uart("Hello IPST MicroBOX\r\n");
sleep(2000);
}
}
กำรทดลองที่ 24
ส่ งข้ อความจาก MicroBOX ไปแสดงที่คอมพิวเตอร์
6. โปรแกรม Hyper Terminal จะแสดงข้อควำมดังนี้
กำรทดลองที่ 25
กดคีย์ “1” เปิ ดปิ ดไฟจากคอมพิวเตอร์
• เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
• ต่อสำยจำกจุด PB4 ของแผงวงจร MicroBOX เข้ำกับแผงวงจร LED
• ต่อสำยจำกจุด PD6 ของแผงวงจร MicroBOX เข้ำกับแผงวงจรลำโพงเปี ยโซ
#include<ipst.h>
void main()
{
uart("Press key '1' for Toggle LED\r\n");
while(1)
{
if(uart_getkey()=='1')
{
beep_d(6);
toggle_b(4);
}
}
}
ขดลวด
NO (ปกติเปิด)
COM (ขาร่ วม)
NC (ปกติปิด)
• ใช้ไอซีขบั โหลดกระแสสูงเบอร์ ULN2003 บนบอร์ดจัดวงจรเพื่อขับรีเลย์ 12V 4 ช่อง
• ใช้ไฟเลี้ยง +12V แยกต่ำงหำก
• รับสัญญำณลอจิก “1” ในกำรกระตุ้นให้รีเลย์ทำงำน
• มีไฟแสดงกำรทำงำนของรีเลย์
• อัตรำทนได้ของหน้ ำสัมผัสรีเลย์ 220Vac 5A สำมำรถรองรับโหลดได้ไม่เกิน 600 วัตต์
+12V
C1
0.1uF/50V
VCC
1 IN1
OUT1 16
LED4
R4
1.8k
NC
RELAY4
RELAY4
LED3
2 IN2
OUT2 15
R3
1.8k
NC
LED2
OUT3 14
NO
C
RELAY3
RELAY3
3 IN3
NO
C
R2
1.8k
NO
C
NC
RELAY2
RELAY2
IC1
ULN2003
4 IN4
RELAY1
OUT4 13
GND
LED1
R1
1.8k
NO
C
NC
RELAY1
บททดสอบที่ 8
เปิด/ปิดอุปกรณ์ไฟฟ้ ำด้วยคอมพิวเตอร์
เขียนโปรแกรมควบคุมกำรเปิด/ปิดอุปกรณ์ ไฟฟ้ ำซึ่งจำลองสถำนะกำรณ์ ว่ำรีเลย์แต่ละ
ช่องได้ต่อเข้ำกับอุปกรณ์ไฟฟ้ ำครบทัง้ 4 ช่องเรียบร้อยแล้ว โดยมีเงื่อนไขดังนี้
1. เมื่อกดคีย์ ‘1’ ที่แป้ นคียบ์ อร์ดอุปกรณ์ที่ต่อเข้ำกับช่อง RELAY-1 จะต้องทำงำน
2. เมื่อกดคีย์ ‘2’ ที่แป้ นคียบ์ อร์ดอุปกรณ์ที่ต่อเข้ำกับช่อง RELAY-2 จะต้องทำงำน
3. เมื่อกดคีย์ ‘3’ ที่แป้ นคียบ์ อร์ดอุปกรณ์ที่ต่อเข้ำกับช่อง RELAY-3 จะต้องทำงำน
4. เมื่อกดคีย์ ‘4’ ที่แป้ นคียบ์ อร์ดอุปกรณ์ที่ต่อเข้ำกับช่อง RELAY-4 จะต้องทำงำน
5. เมือ่ กดคีย์ ‘0’ ทีแ่ ป้ นคียบ์ อร์ดอุปกรณ์ทงั ้ หมดจะต้องหยุดทำงำน
• ใช้ไอซีขบั มอเตอร์เบอร์ L293D สำมำรถขับมอเตอร์ได้ 2 ช่อง
• ใช้ไฟเลี้ยงในย่ำน +6 ถึง +12V แยกต่ำงหำก
• ใช้สญ
ั ญำณควบคุมมอเตอร์ช่องละ 3 เส้น ทำให้ควบคุมได้ครบทุกเงื่อนไข
• มีจดุ ต่อหลำยแบบทำให้สำมำรถติดต่อกับไมโครคอนโทรลเลอร์ได้สะดวก
• มีไฟแสดงขัว้ ของแรงดันที่จ่ำยให้กบั มอเตอร์
• จุดต่อมอเตอร์ทงั ้ 2 ช่องเป็ นเทอร์มินอลบล็อก แยกกันอิสระ
+5V
R4
2.2k
R3
1k
LED1
+5V
+5V
1E
1A
1B
K7
Motor1
CONTROL
16
VCC
+
-
LED2
Vm
K9
+Vm
C3
470/
16V
8
VM
C4
470/
16V
1Y 3
K1
PWM1
1
K2
DIR1A
2 1A
K3
DIR1B
7 1B
1E
R1
1k
C1
0.1F
+
K10
MOTOR1
K4
PWM2
9
3Y
10 2A
K6
DIR2B
15 2B
LED1
11
R2
1k
2E
K5
DIR2A
2B
2A
2E
G
K8
Motor2
CONTROL
IC1
L293D
2Y 6
C2
0.1F
+
K11
MOTOR2
4Y
G
4
G
5
G
12
G
13
14
LED2
กำรทดลองที่ 26
มอเตอร์ช่อง 1 หมุนกลับทิศทุก 5 วินำที ด้วยกำลังขับ 60%
กำรทดลองที่ 26
มอเตอร์ช่อง 1 หมุนกลับทิศทุก 5 วินำที ด้วยกำลังขับ 60%
• เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
• ต่อสำยจำกจุด PB4 ของแผงวงจร MicroBOX เข้ำกับแผงวงจร LED
#include <ipst.h>
void main()
{
while(1)
{
motor(1,60);
sleep(5000);
motor(1,-60);
sleep(5000);
motor_stop(1);
sleep(2000);
}
}
กำรทดลองที่ 26
มอเตอร์ช่อง 1 หมุนกลับทิศทุก 5 วินำที ด้วยกำลังขับ 60%
• เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
• ต่อสำยจำกจุด PB4 ของแผงวงจร MicroBOX เข้ำกับแผงวงจร LED
#include <ipst.h>
void main()
{
while(1)
{
motor(1,analog(3)/11);
}
}
กำรทดลองที่ 26
มอเตอร์ช่อง 1 หมุนกลับทิศทุก 5 วินำที ด้วยกำลังขับ 60%
• เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ำกับแผงวงจรหลัก MicroBOX
• ต่อสำยจำกจุด PB4 ของแผงวงจร MicroBOX เข้ำกับแผงวงจร LED
#include <ipst.h>
void main()
{
int ad1=0;
while(1)
{
ad1=(analog(3)-512);
ad1=ad1/6;
motor(1,ad1);
}
}