02 lab microbox1
DESCRIPTION
กิจกรรมการทดลองกลุ่ม แผงวงจรตรวจจับแบบดิจิตอลTRANSCRIPT
IPST-MicroBOX
กล่องสมองกล
กิจกรรมการทดลองการทดลองอุปกรณ์กลุม่
แผงวงจรขบั แผงวงจรขบั LED LED สองสี สองสี : : ZXZX--LEDLED22CC
220
HIGH
LOW
O LED
Bi-colorLED
R
G
+S
+S
ใช้ LED แบบ 2 สีในการแสดงผล โดยเลือกได้ 2 แบบช่อง HIGH ถ้าอินพตุเป็นลอจิก "1" LED ติดเป็นสีแดง ช่อง LOW ถ้าอินพตุเป็นลอจิก "0" LED ติดเป็นสีเขียว ถ้าไม่ใช่สญัญาณที�กาํหนด LED จะดบั
การทดลองที� 1 ควบคมุการติดดบัของ LED
1.ทาํการเชื�อมต่อแผงวงจร ZX-LED2C เข้ากบับอรด์ IPST ที�ตาํแหน่ง PD7
LED Bl i nk i ng ZX-LED
2C
Bi-co
lor L
ED
-+ S -+ S
การทดลองที� 1 ควบคมุการติดดบัของ LED2.เปิดโปรแกรม AVR Studio สรา้งโปรเจก็ตใ์หม่แลว้ เขียนโปรแกรมต่อไปนี�ลงไป
#include <ipst.h>main(){
while(1){
out_d(7,1);sleep(500);out_d(7,0);sleep(500);
}}
การทดลองที� 1 ควบคมุการติดดบัของ LED
ไมเ่กิดข้อผิดพลาด
กดปุ่ มเพื�อคอมไพล์
3. คอมไพลโ์ปรแกรม ตรวจสอบหน้าต่าง Build ต้องแสดงข้อความ "Build Secceeded” แสดงว่าโปรแกรมที�เขียนขึ�นไม่มีข้อผิดพลาด
4. เปิดโปรแกรม AVR Prog โดยไปที�หน้าต่าง Tools เลือก AVR Prog
การทดลองที� 1 ควบคมุการติดดบัของ LED
4. เปิดโปรแกรม AVR Prog โดยไปที�หน้าต่าง Tools เลือก AVR Prog* ข้อที� 4 ข้ามขั �นตอนสาํคญัไปคือ การเชื�อมต่อบอรด์ IPST เข้ากบัคอมพิวเตอรแ์ละจ่ายไฟให้กบับอรด์ IPST
4. ทาํการเชื�อมต่อบอรด์ IPST เข้ากบัเครื�องโปรแกรม PX-4005. เชื�อมต่อสายระหว่าง PX-400 กบัคอมพิวเตอร์6. จ่ายไฟให้กบับอรด์ IPST7. เปิดโปรแกรม AVR Prog โดยไปที�หน้าต่าง Tools เลือก AVR Prog
8. กดปุ่ ม Browse เลือกตาํแหน่งที�เกบ็โปรแกรม (นามสกลุ *.hex ) จะเกบ็ไว้ไนโฟลเดอร ์Default9. เลือกเบอรข์องไมโครคอนโทรลเลอร ์ให้ตรง10. ถ้าไม่จาํเป็นไม่ให้เข้าไปเปลี�ยนแปลงค่าในโฟลเดอร ์Advanced 11. กดปุ่ ม Program เพื�อโปรแกรมข้อมลูลงไปยงัไมโครคอนโทรลเลอร์
การทดลองที� 1 ควบคมุการติดดบัของ LED1. เลือกไฟล์
2. เลือกเบอร์
3. Program
sleep sleep -- คาํสั �งหน่วงเวลาคาํสั �งหน่วงเวลา
อยูใ่นไฟลเ์ฮดเดอร ์sleep.h
การใชง้าน
sleep(m) – หน่วงเวลา m มลิลวินิาท ี(โดยประมาณ)
out_d(x,y) out_d(x,y) –– คาํสั �งกาํหนดขาพอรต์มีลอจิก คาํสั �งกาํหนดขาพอรต์มีลอจิก ““00” ” หรือ หรือ ““11””
อยูใ่นไฟลเ์ฮดเดอร ์in_out.h
การใชง้าน
out_d(7,1) กาํหนดให ้PD7 มลีอจกิ “1”
out_d(6,0) กาํหนดให ้PD6 มลีอจกิ “0”
ตาํแหน่งพอรต์
แผงวงจรสวิตช ์แผงวงจรสวิตช ์: : ZXZX--SWITCHSWITCH D SWITCH
LOW
HIGH510
Bi-color LED
10kSWITCH +S
+SR
G
+5
GND
10kR1
SW1
0V
+5
GND
10kR1
SW1
5V
0V ลอจิก “0”
5V ลอจิก “1”
ZX
-LED
2C
Bi-co
lor L
ED
-+ S -+ S
ATMEGA16
การทดลองที� 2 การอ่านค่าจากแผงวงจรสวิตช์1.ทาํการเชื�อมต่อแผงวงจร ZX-LED2C เข้ากบับอรด์ IPST ที�ตาํแหน่ง PD72. เชื�อมต่อแผงวงจรสวิตชเ์ขา้กบัช่อง PB4
3. เปิดโปรแกรม AVR Studio สรา้งโปรเจก็ตใ์หม่แลว้ เขียนโปรแกรมต่อไปนี�ลงไป
#include <ipst.h>main(){
while(1){
if(in_b(4)==0){
out_d(7,1);}else{
out_d(7,0);}
}}
การทดลองที� 2 การอ่านค่าจากแผงวงจรสวิตช์
การทดลองที� 2 การอ่านค่าจากแผงวงจรสวิตช์
4. คอมไพลโ์ปรแกรม5. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์6. ทดสอบการทาํงานของโปรแกรม
เมื�อกดสวิตช ์LED ......
เมื�อปล่อยสวิตช ์LED …..
บททดสอบ 1 สวิตชก์ดติด กดดบั
ZX-LED
2C
Bi-co
lor LE
D
-+ S -+ S
ATMEGA16
เขียนโปรแกรมใช้ฮารด์แวรเ์ดิม เมื�อกดสวิตช ์1 ครั �ง LED ติด กดสวิตชอี์ก 1 ครั �ง LED ดบั สลบักนัไปเรื�อย ๆ
เฉลย รปูแบบที� 1
#include <ipst.h>void main(){
while(1){
if(in_b(4)==0){toggle_d(7);sleep(300);}
}}
เฉลย รปูแบบที� 2
#include <ipst.h>char a=0;main(){
while(1){
if(in_b(4)==0){
if (a==0){
a=1;out_d(7,1);
}else{
a=0;out_d(7,0);
}sleep(300);
}}
}
ฟังชั�นสาํหรับอ่านค่าจากพอร์ตอินพุตฟังก์ชั�น in_a สาํหรับอา่นคา่ระดบัสญัญาณดิจิตอลจากพอร์ต Aฟังก์ชั�น in_b สาํหรับอา่นคา่ระดบัสญัญาณดิจิตอลจากพอร์ต Bฟังก์ชั�น in_c สาํหรับอา่นคา่ระดบัสญัญาณดิจิตอลจากพอร์ต Cฟังก์ชั�น in_d สาํหรับอา่นคา่ระดบัสญัญาณดิจิตอลจากพอร์ต D
รปูแบบฟังกช์ั �นchar in_a(x)char in_b(x)char in_c(x)char in_d(x)
พารามิเตอร ์x ทาํหน้าที�กาํหนดขาสญัญาณที�ต้องการอ่านค่าซึ�งมีค่าตั �งแต่ 0 ถึง 7 การคืนค่า อาจมีค่าเป็น 0 หรือ 1
GND 11GND
31
+5V
RB5
RB6
RB7
SW1
R510k
R710k
R910k
R4150R
R6150R
R8150R
6
7
8
SW2
SW3
ตวัอย่าง
if (in_b5==0){out_d(6,1);
}
แผงวงจรแสดงผลตวัเลข 4 หลกั : Display4
ใช้แสดงผลในรปูแบบของตวัเลข 4 หลกัหรอืไฟแสดงตาํแหน่ง 8 จดุหรอืผสมกนั
• ใช ้LED ตวัเลข 7 ส่วน 4 หลกัแบบแคโทดร่วม
และม ีLED จาํนวน 8 ดวง สามารถเลอืกใหแ้ยกกนัแสดงผลหรอืรวมกนักไ็ด ้• มจีุดต่อขาพอรต์ C แบบ 10 ขา จํานวน 2 จุด เพื�อต่อกบัแผงวงจรหลกั MicroBOX และต่อพ่วงเพื�อขยายจาํนวนหลกัที�ตอ้งการแสดงผล เมื�อขยายจะเป็นการขยายคราวละ 4 หลกั และมจีุดต่อ 3 ขา อนัเป็นขาควบคุมการแสดงผลของแต่ละหลกั หากใชป้กต ิ4 หลกัจะมจีุดต่อควบคุม 4 ชุด
+5V
LED1-LED8
Rp21k*8
J1
ONcommon
controlled
Q1KRC102M
Q2KRC102M
Q3KRC102M
Q4KRC102M
Q5KRC102M
+5V
Rp1220k*8
+5V
R1-R8300R
A7A6A5A4A3A2A1A0
Y7Y6Y5Y4Y3Y2Y1Y0
GND
VCC
98765432
1112131415161718
10
20
OE2OE11 19
J1DIGIT1
J2DIGIT2
J3DIGIT3
J4DIGIT4
J5LED
C101uF/50V
K2PORT
K1PORT
IC174HC541 DISP1 DISP2 DISP3 DISP4
dp
gf
e
d
c
b
a
วงจรของแผงวงจรแสดงผลตวัเลข 4 หลกั : Display4
รปูแบบฟังกช์ั �น void segment(unsigned int val)
พารามิเตอร ์val ทาํหน้าที�กาํหนดค่าข้อมูลที�ต้องการแสดงผลข้อมูลที� LED ตวัเลข 7 ส่วน(ทั �ง 4 หลกั) ช่วงข้อมูลที�เป็นไปได้คือตั �งแต่ 0 ถึง 9999 เท่านั�น ถ้าค่าข้อมูลมีค่ามากกว่านี�จะแสดงข้อความเป็น “----”
ตวัอย่างที� 1segment(2549); // แสดงค่าข้อมูล 2549 ที� LED ตวัเลข 7 ส่วน
ตัวอย่างที� 2int i=0;
while(1){
sleep(1000); // หน่วงเวลา 1 วินาทีsegment(i++); // แสดงค่าข้อมูลของ i ที� 7 เซกเมนต์ พร้อมเพิ�มค่า i
}
ฟังกช์ั �น segment หรอื SEGMENT สาํหรบัแสดงผลขอ้มูลที� LED ตวัเลข 7 ส่วน
การทดลองที� 3 แสดงผลข้อมูลที� 7 เซกเมนต ์โดยเพิ�มค่าขึ�น 1 ค่าทุกๆ 1 วินาที เริ�มต้นที�ค่า 0
1. ทาํการเชื�อมต่อแผงวงจร 7
เซกเมนตเ์ข้ากบับอรด์ IPST• เชื�อมต่อสายขอ้มลู 8 บติจากพอรต์ C
เขา้กบัจุดต่อ PORT ของ DSP4
• ต่อสายจากจุด PB4 เขา้กบัจุดต่อ DIGIT4
• ต่อสายจากจุด PB3 เขา้กบัจุดต่อ DIGIT3
• ต่อสายจากจุด PB2 เขา้กบัจุดต่อ DIGIT2
• ต่อสายจากจุด PB1 เขา้กบัจุดต่อ DIGIT1
2. เปิดโปรแกรม AVR Studio สรา้งโปรเจก็ตใ์หม่แลว้ เขียนโปรแกรมต่อไปนี�ลงไป
#include <ipst.h>main(){
int i=0;while(1){
segment(i++);sleep(1000);
}}
การทดลองที� 3
การทดลองที� 3
4. คอมไพลโ์ปรแกรม5. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์6. ทดสอบการทาํงานของโปรแกรม
การทดลองที� 4 แสดงผลข้อมูลที� 7 เซกเมนต์ โดยการเพิ�มค่าขึ�น 1 ค่าทุกๆ 1 วินาที เริ�มต้นจาก 0 เมื�อนับถึง 10 ให้ปิดการแสดงผล
1. ใช้วงจรในการทดลองที� 3
#include <ipst.h>main(){
int i=0;for(i=0;i<11;i++){
segment(i);sleep(1000);
}segment_off();while(1);
}
2. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่แล้ว เขียนโปรแกรมต่อไปนี�ลงไป
การทดลองที� 5 แสดงผลข้อมูลที� 7 เซกเมนต ์โดยแสดงค่าจาํนวนครั �งในการกดสวิตช ์(ใช้วิธีกดค้างค่าการนับจะไม่เพิ�มขึ�น)
1. ใช้วงจรในการทดลองที� 3 แล้วต่อสวิตชเ์พิ�มเติมเข้าที�ตาํแหน่ง PD7 ในตาํแหน่งขา LOW
การทดลองที� 5 แสดงผลข้อมูลที� 7 เซกเมนต ์โดยแสดงค่าจาํนวนครั �งในการกดสวิตช ์(ใช้วิธีกดค้างค่าการนับจะไม่เพิ�มขึ�น)
2. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่แล้วเขียนโปรแกรมต่อไปนี�ลงไป4. คอมไพลโ์ปรแกรม5. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์6. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
int i=0;while(1){
segment(i);if(in_d(7)==0){
while(in_d(7)==0);sleep(100);i++;
}}
}
การทดลองที� 6 แสดงค่าจาํนวนครั �งในการกดสวิตชที์� 7 เซกเมนต ์ เพิ�มขึ�นทีละ 1 เมื�อกดค้างค่าการนับจะเพิ�มขึ�นอย่างต่อเนื�อง
1. ใช้วงจรในการทดลองที� 52. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่แล้วเขียนโปรแกรมต่อไปนี�ลงไป4. คอมไพลโ์ปรแกรม5. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์6. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
int i=0;while(1){
segment(i);if(in_d(7)==0){
i++;sleep(200);
}}
}
บททดสอบ 2
เขียนโปรแกรมตั �งเวลานับ 60 วินาที ในแบบนับลง (Count down) เมื�อนับลงมาจนกระทั �งถึง 0 หน้าจอแสดงผลจะต้องดบัลงอตัโนมติั
บททดสอบ 3 เขียนโปรแกรมแสดงผลข้อมูลที� 7 เซกเมนต ์โดยให้แสดงค่าเริ�มต้นที� 100 เมื�อกดสวิตชที์� PD7 ค่าการนับจะต้องเพิ�มขึ�น 1 ค่า เมื�อมีการกดสวิตชที์� PD6 ค่าการนับจะต้องลดลง 1 ค่า
การทดลองที� 7 แสดงผล LED 8 หลกั โดยแสดงค่าความสมัพนัธ์ของตวัเลขที�กาํหนดให้ออกไปแสดงผลในรปูเลขฐานสอง 0b11000001
1. เชื�อมต่อสายข้อมูล 8 บิตจากพอรต์ Cของบอรด์ IPST เข้ากบับอรด์ DSP-4
2. ต่อสายจากจุด PB0 เข้ากบับอรด์ DSP-43. จ ั �มเปอรจ์ ั �มไปทาง COM CONTROL
การทดลองที� 7 แสดงผล LED 8 หลกั โดยแสดงค่าความสมัพนัธ์ของตวัเลขที�กาํหนดให้ออกไปแสดงผลในรปูเลขฐานสอง 0b11000001
4. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ตใ์หม่ แล้วเขียนโปรแกรมต่อไปนี�ลงไป5. คอมไพลโ์ปรแกรม6. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์7. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
while(1){
led8(0b11000001);}
}
การทดลองที� การทดลองที� 88 ไฟกระพริบ LED 8 หลกั โปรแกรมจะสั �งให้ LED บิต 2 (หลกัที� 3 เมื�อนับจากซ้ายมือ) กบับิต 7(หลกัที� 8 เมื�อนับจากซ้ายมือ)กระพริบต่อเนื�อง
1. ใช้วงจรในการทดลองที� 72. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี�ลงไป3. คอมไพลโ์ปรแกรม4. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์5. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
while(1){
led8(0b10000100);sleep(200);led8(0b00000000);sleep(200);
}}
การทดลองที� 9 ไฟกระพริบ LED 8 หลกั ไล่ลาํดบัจากซ้ายไปขวา
1. ใช้วงจรในการทดลองที� 72. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี�ลงไป3. คอมไพลโ์ปรแกรม4. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์5. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
char i = 0b10000000;while (1){
led8(i);i = i >> 1;if (i == 0){i = 0b10000000;}sleep(100);
}}
บททดสอบ 4
เขียนโปรแกรมแสดงไฟวิ�งที� LED 8 หลกั โดยวิ�งวนจากบิต 0 ไปยงับิต 7
แผงวงจรลาํโพงเปียโซ แผงวงจรลาํโพงเปียโซ : : SPEAKERSPEAKER
C110/16V
SP1Piezospeaker
S+
K1SOUND
• ใช้ลาํโพงเปียโซ มีอิมพีแดนซ์ 32W
• มีค่าความถี�เรโซแนนซ์ในย่าน 1 ถึง 3kHz
ชดุคาํสั �งสาํหรบักาํเนิดเสียง
beep_a(char ch)beep_b(char ch)beep_c(char ch)beep_d(char ch)
ฟังกช์นั beep กาํเนิดเสียงความที� 2kHz นาน 10 mSec
ตวัอยา่งbeep_d(3);
ส่งเสยีงออกลาํโพงที�ตําแหน่ง PD3
รปูแบบ
ฟังกช์นั sound กาํเนิดเสียงโดยกาํหนดความถี�และระยะเวลาได้
sound_a(char ch,int freq,int time)sound_b(char ch,int freq,int time)sound_c(char ch,int freq,int time)sound_d(char ch,int freq,int time)
รปูแบบ ตวัอยา่ง
sound_b(3,800,500)
ส่งเสยีงออกลาํโพงที�ตําแหน่ง PB3 ความถี� 800 Hz ระยะเวลา 0.5 วนิาที
การทดลองที� 10 โปรแกรมกาํเนิดสญัญาณเสียงแบบง่ายที�ขา PD6
1. เชื�อมต่อลาํโพงเปียโซเข้ากบั PD6
SPEAKER
* ยงัไม่ต้องถอดบอรด์ 7 เซกเมนต์ออก เพื�อใช้ในการทดลองต่อไป
2. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี�ลงไป3. คอมไพลโ์ปรแกรม4. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์5. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
while (1){
beep_d(6);sleep(200);beep_d(6);sleep(1000);
}}
การทดลองที� 10 โปรแกรมกาํเนิดสญัญาณเสียงแบบง่ายที�ขา PD6
2. เปิดโปรแกรม AVR Studio สร้างโปรเจก็ต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี�ลงไป3. คอมไพลโ์ปรแกรม4. ดาวน์โหลดโปรแกรมลงไปยงัไมโครคอนโทรลเลอร์5. ทดสอบการทาํงานของโปรแกรม
#include <ipst.h>main(){
while (1){
sound_d(6,800,500);sleep(200);sound_d(6,800,500);sleep(1000);
}}
การทดลองที� 11 โปรแกรมกาํเนิดสญัญาณเสียงแบบง่ายแบบที� 2 ที�ขา PD6