80
การเขียนโปรแกรมบน IPST- MicroBOX นายยอดชาย ขุนสังวาลย์ โรงเรียนสงวนหญิง

การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การเขยนโปรแกรมบน IPST-

MicroBOX

นายยอดชาย ขนสงวาลยโรงเรยนสงวนหญง

Page 2: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เนอหา• แผงวงจรควบคมหลก• เครองมอพฒนาโปรแกรมบน MicroBOX

• การเชอมตอกบพซ• การดาวนโหลดโปรแกรม• แผงวงจรอนพท/เอาพทและการใชงาน

Page 3: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การเตรยมตว

• ตดตงโปรแกรม AVR Studio 4

• ตดตงโปรแกรม WinAVR

• ตดตงโปรแกรม PonyProg2000

Page 4: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

โปรแกรม AVR Studio

• เปนเครองมอหลกในการพฒนาโปรแกรมบนไมโครคอลโทรเลอรตระกล AVR

• คณสมบตหลก ๆ ▫ เครองมอส าหรบจดการโครงงาน▫ เอดเตอรเพอแกไขซอรสไฟล▫ เครองมอจ าลองการท างานของไมโครคอลโทรเลอร

Page 5: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

โปรแกรม WinAVR• คอมไพเลอรภาษา C เพอแปลโปรแกรมทเขยนส าหรบสถาปตยกรรม AVR

• ถกเรยกใชงานผานโปรแกรม AVR Studio

Page 6: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ทดลองสรางโปรเจคใหม

• เลอก New Project หลงจากเรยกโปรแกรม AVR Studio

Page 7: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

กลองสรางโปรเจค• Project type: AVR GCC

• Project name: Counting• เลอก Location ตามความเหมาะสม

Page 8: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

หนาจอหลกของ AVR Studio

รายชอไฟลท

เกยวของ

เอดเตอรภาษา C

กลองรายงานผลการ

คอมไพลโปรแกรม

Page 9: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การปรบแตงคาในโปรเจค

• โปรเจคทสรางขนใหมตองผานการปรบคาตาง ๆ กอนเรมพฒนาโปรแกรม• เลอกเมน Project Configuration Options

Page 10: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การปรบแตงในสวน General

atmega16

16000000

เชคทงหมด

Page 11: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การปรบแตงในสวน Include

Directories

กด Add เพอเพมไดเรคตอร

ipst_include ลงไป

Page 12: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การปรบแตงในสวน Libraries

•ปรบแตงเฉพาะเมอตองการใชงานไฟลเฮดเดอร lcd.h และ/หรอ serial.h

เพมไลบราร libm.a

Page 13: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ชดค าสงในไลบราร IPST

• in_out.h – รวมค าสงพนฐานเพอจดการอนพทเอาทพท• sleep.h – รวมค าสงหนวงเวลาเปนมลลวนาท• led.h – รวมค าสงแสดงผลขอมลบนแถว LED 8 ดวง• segment.h – รวมค าสงแสดงผลขอมลบน LED แบบ 7 สวน• timer.h – รวมค าสงจบเวลา• analog.h - รวมค าสงอานคาอนพทแบบแอนะลอก• sound.h – รวมค าสงสงสญญาณเสยงออกทางล าโพงเปยโซ• motor.h – รวมค าสงควบคมมอเตอรไฟตรง

Page 14: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แผงวงจรแสดงผลตวเลข 4 หลก

• เปนอปกรณหลกในการแสดงผล•การเชอมตอทางฮารดแวร

▫ เสยบจมเปอรดานลางในต าแหนง COMMON CONTROL ชดแสดงผล

LED 8 ดวง

อปกรณแสดงผล

7 สวน 4 หลก

PORTC

PB1

PB2

PB3

PB4

PORT

DIGIT1

DIGIT2

DIGIT3

DIGIT4

แผงวงจรหลก แผงวงจรแสดงผล

PB0 LED

Page 15: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - โปรแกรมนบเลข#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint16_t i = 0;

while (1)

{

sleep(1000);

segment(i++);

if (i > 10) i = 0;

}

}

Page 16: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

โปรแกรม PonyProg2000

• ใชส าหรบสงโปรแกรมทอยในรหสภาษาเครองไปยงไมโครคอนโทรลเลอร

• ตดตอผานพอรตแบบขนาน• โปรแกรมจะถกเขยนลงบนหนวยความจ าแบบแฟลชทอยภายในไมโครคอนโทรลเลอร

Page 17: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ปรบแตงคาใน PonyProg2000

• Setup Interface Setup▫ Parallel, Avr ISP I/O, LPT1

• Device AVR micro ATmega16

Page 18: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การเชอมตอกบพซ

ดานหลงของเครองคอมพวเตอร

Page 19: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เคลยรบต JTAGEN

Page 20: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

สรปขนตอนการพฒนาโปรแกรมAVR Studio

ไฟล .c WinAVRไฟล

.hexPonyProg2000

Page 21: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - โปรแกรมนบเลขถอยหลง#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

int16_t i = 20;

while (1)

{

sleep(1000);

segment(i--);

if (i < 0) i = 20;

}

}

ใหแนใจวาไมใชตวแปร

แบบ unsigned

Page 22: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

อปกรณแสดงผลพนฐาน

• แผงวงจรแสดงผล 4 หลก

• ไลบราร segment.h ชดแสดงผล

LED 8 ดวง

อปกรณแสดงผล

7 สวน 4 หลก

Page 23: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ชดค าสงส าหรบวงจรแสดงผล

• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, segment.h

• ค าสงในไลบราร▫ segment(x) – น าคา x มาแสดงผลเปนตวเลข 4 หลก▫ segment_dot(d) – ก าหนดจดในต าแหนง d ไดแก 1 (ขวา), 2,3,4

(ซาย)▫ segment_off() – ปดการแสดงผลขอมลของ LED 7 สวน▫ led8(d) – แสดงคา d บนแถว LED ในรปเลขฐานสอง▫ led8_off() – ก าหนดใหแถว LED อยในสถานะดบ

Page 24: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

sleep - ค าสงหนวงเวลา

•อยในไฟลเฮดเดอร sleep.h

•การใชงาน▫ sleep(m) – หนวงเวลา m มลลวนาท

(โดยประมาณ)

Page 25: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เครองตงเวลาหนงนาท

• สรางโปรเจคใหม: Timer

• ให MicroBOX ท างานเปนนาฬกาจบเวลา 1 นาท▫ แสดงเลข 60 เมอเปดเครอง นบถอยหลงทกวนาท▫ นบถงศนยใหหนาจอดบไป

Page 26: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - Timer#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

int16_t i = 60;

while (i >= 0)

{

segment(i--);

sleep(1000);

}

segment_off();

while (1) { }

}

Page 27: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เพมสสนใหไทเมอร

• ท าใหจดซายมอกระพรบทก ๆ ครงวนาทเมอเวลายงเดนอย

Page 28: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย – Timer ไฟกระพรบ#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void blink()

{

while (1)

{

segment(0);

sleep(500);

segment_off();

sleep(500);

}

}

void main()

{

int16_t i = 60;

while (i >= 0)

{

segment(i--);

segment_dot(1);

sleep(500);

segment_dot(0);

sleep(500);

}

blink();

}

Page 29: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง – ใชงานแถว LED#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint8_t i = 0;

while (1)

{

led8(i);

i++;

sleep(100);

}

}

Page 30: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - ไฟวงหลายแบบ• เขยนโปรแกรมไฟวงในรปแบบตาง ๆ

1.

2.

3.

4.

5.

6.

7.

8.

1.

2.

3.

4.

5.

6.

7.

8.

แบบท 1 แบบท 2

Page 31: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ไฟวงหลายรปแบบ

• แบบทสาม 1.

2.

3.

5.

6.

7.

4.

Page 32: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - ไฟวงแบบทหนง#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint8_t i = 0b10000000;

while (1)

{

led8(i);

i = i >> 1;

if (i == 0) i = 0b10000000;

sleep(100);

}

}

Page 33: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - ไฟวงแบบทสอง#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint8_t i = 0b11000000;

while (1)

{

led8(i);

i = i >> 1;

if (i == 0b00000001) i = 0b10000001;

if (i == 0b01000000) i = 0b11000000;

sleep(100);

}

}

Page 34: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - ไฟวงแบบทสอง (อกแบบ)#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint8_t i = 0b10000000, j = 0b01000000;

while (1)

{

led8(i | j);

i = i >> 1; j = j >> 1;

if (i == 0) i = 0b10000000;

if (j == 0) j = 0b10000000;

sleep(100);

}

}

Page 35: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - ไฟวงแบบทสาม#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <sleep.h>

void main()

{

uint8_t i = 0b10000000, j = 0b00000001;

while (1)

{

led8(i | j);

i = i >> 1; j = j << 1;

if (i == 0) i = 0b10000000;

if (j == 0) j = 0b00000001;

sleep(100);

}

}

Page 36: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

สวตชกดตดปลอยดบ

• เปนอปกรณอนพทแบบดจตอล• เชอมตอกบพอรตไดทกพอรต ยกเวนพอรต C

Page 37: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ค าสงอนพทเอาทพทแบบดจตอล

• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h

• ค าสงในไลบราร▫ in_a(p) – อานคาดจตอลอนพทจากพอรต A ขา p▫ in_b(p) – อานคาดจตอลอนพทจากพอรต B ขา p▫ in_c(p) – อานคาดจตอลอนพทจากพอรต C ขา p▫ in_d(p) – อานคาดจตอลอนพทจากพอรต D ขา p▫ out_a(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของพอรต A

▫ out_b(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของพอรต B

▫ out_c(p,d) – สงคา d (0 หรอ 1) ไปยงขา p ของ

Page 38: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - เครองออกหวย

• กดสวตชคางเพอท าการวนสมตวเลข• ปลอยสวตชเพอแสดงตวเลขทสมได

กดสวตชคาง

ปลอย

Page 39: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - เครองออกหวย#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

void main()

{

uint16_t i = 0;

while (1)

{

if (in_d(7) == 1)

{

i++;

if (i > 9999) i = 0;

}

segment(i);

}

}

#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

void main()

{

uint16_t i = 0;

while (1)

{

if (in_d(7) == 1)

{

i = random() % 10000;

}

segment(i);

}

}

หรอ

Page 40: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แผงวงจรแสดงผล LED สองส

• เปนอปกรณเอาทพทแบบดจตอล• เชอมไดกบทกพอรต ยกเวนพอรต C

Page 41: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เปดปด LED ดวยสวตช

• ท าใบงานท 4.2

• กดสวตชแลวปลอยหนงครง ใหไฟ (LED) ตด• กดแลวปลอยอกครง ใหไฟดบ

Page 42: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย – เปดปด LED ดวยสวตช#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

void main()

{

out_d(6, 0);

while (1)

{

while (in_d(7) == 0) {}

toggle_d(6);

while (in_d(7) == 1) {}

}

}

LED ตออยกบ D6

สวตชตอกบ D7

Page 43: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - ควบคมไฟดวยสวตช• เชอมวงจร LED สองสเขากบ PD6• เชอมวงจรสวตชชอง HIGH เขากบ PD7

• ขอควรระวง▫ อยาใชหวตอบนแผงวงจร LED สองสพรอมกนทงค

#include <avr/io.h>

#include <in_out.h>

void main()

{

while (1)

{

if (in_d(7) == 1)

out_d(6,1);

else

out_d(6,0);

}

}

#include <avr/io.h>

#include <in_out.h>

void main()

{

while (1)

{

out_d(6,in_d(7));

}

}

หรอ

Page 44: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - เครองนบเลขดวยการกด• นบจ านวนครงการกดสวตชและแสดงผลออกทาง LED 7 สวน

• ทดลองใชงานและสงเกตวาตวเลขปรากฏตามจ านวนครงทกดจรงหรอไม

#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

void main()

{

uint16_t i = 0;

while (1)

{

while (in_d(7) == 0){}

while (in_d(7) == 1){}

i++; segment(i);

}

}

sleep(10);

sleep(10);

#include <sleep.h>

Page 45: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

Contact Bouncingลอจก

เวลา

1

0

จงหวะทสวตชถกกด (หรอปลอย)

Page 46: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การสรางค าสงตรวจสอบสวตช

• สรางเปนมาโคร▫ เขยนไวกอน main()

• สรางเปนฟงกชน

#define wait_d(x) \

while (in_d(x) == 0){} sleep(10); \

while (in_d(x) == 1){} sleep(10);

void wait_d(uint8_t x)

{

while (in_d(x) == 0){} sleep(10);

while (in_d(x) == 1){} sleep(10);

}

Page 47: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรล าโพงเปยโซ• ใชงานรวมกบชดค าสงในไลบราร sound.h

• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, sound.h

• ค าสงในไลบราร▫ beep_a(p) – ก าเนดเสยงความถ 2000Hz นาน 10 ms ทขา p ของพอรต A (ใชกบพอรต B, C และ D ไดเชนกนโดยใช beep_b, ฯลฯ)

▫ sound_a(p, f, t) – ก าเนดเสยงความถ fHz นาน tมลลวนาททขา p ของพอรต A (ใชกบพอรตอนไดเชนกนโดยใช sound_b, ฯลฯ)

Page 48: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - ประตเซเวน#include <avr/io.h>

#include <in_out.h>

#include <sleep.h>

#include <sound.h>

void main()

{

while (1)

{

if (in_d(7) == 1)

{

sound_d(5, 659, 500);

sound_d(5, 523, 500);

}

}

}

ล ำโพงตอเขำทพอรต PD5

Page 49: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวรบแสงอนฟราเรด 38kHz

• เปนอปกรณรบขอมลดจทล• ใหโลจก ‘0’ ถาตรวจจบคลนอนฟราเรดยานความถ 38kHz ได

Page 50: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

สญญาณดจทลและสญญาณแอนะลอก

สญญาณดจทล

สญญาณแอนาลอก

0

1

อำนอนพทแบบ

ดจทล

อำนอนพทแบบ

แอนำลอก

0

1

0

1023

Page 51: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

การใชงานอปกรณแบบแอนะลอก

• Mega16 มวงจรแปลงสญญาณอะนาลอกเปนดจตอลภายในตว▫ ใชงานผานพอรต PA0 – PA7▫ ความละเอยด 10 บต (0-1023)

• อปกรณแอนะลอกทมให▫ วงจรตรวจจบแสงสวาง, แสงอนฟราเรด▫ วงจรตรวจจบเสยง▫ วงจรตรวจจบแสงสะทอน▫ วงจรตวตานทานปรบคาได▫ วงจรตรวจจบอณหภม

Page 52: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรตรวจจบแสงสวาง

Page 53: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ชดวงจรตรวจจบแสงอนฟราเรด•ตวก าเนดแสงอนฟราเรด (เอาทพท)

• โฟโตทรานซสเตอรอนฟราเรด (อนพท)▫ แสงมากใหคานอย

Page 54: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรจบแสงสะทอน

• แสงมากใหคานอย

Page 55: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรรบเสยง

• เสยงดงใหคามาก

Page 56: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรวดอณหภม

อณหภมสงข นใหคานอยลง

อณหภมสงข นใหคามากข น

Page 57: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

วงจรตวตานทานปรบคาได

เลอนมาทางขวาไดคามากข น

เลอนไปทางซายไดคามากข น

Page 58: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ค าสงอานคาแอนะลอก

• ไฟลเฮดเดอรทใช▫ avr/io.h, analog.h

• ค าสงในไลบราร มเพยงค าสงเดยวคอ▫ analog(ch) – คนคาระหวาง 0 ถง 1023 เพอบงบอกระดบแรงดน

(สญญาณแอนะลอก) ทวดไดทขา ch ของพอรต A

Page 59: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

โปรแกรมทดสอบอปกรณแอนะลอก

• ตอตวตานทานแกนเลอนเขาทพอรต PA0

• ทดสอบโปรแกรมตอไปน#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <analog.h>

void main()

{

while(1) segment(in_a(0));

}

จากนนเปลยนเปน

ค าสง analog(0)

Page 60: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - แขงปรบมอ

• ตอไมโครโฟนเขาทพอรต PA0

• ปรบมอจากระยะหางระยะหนงโดยท าใหตวเลขมากกวาเดมใหได#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <analog.h>

void main()

{

uint16_t aval, max = 0;

while(1)

{

aval = analog(0);

if (aval > max) max = aval;

segment(max);

}

}

Page 61: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - เปดปดไฟดวยแสง

• จ าลองการควบคมไฟภายในบานดวยแสง• ฮารดแวรทใช: แผงวงจร LED สองส, แผงวงจรวดแสง, ตวตานทานปรบคาได

•การท างาน:▫ สวาง LED ดบ▫ มด LED ตด▫ ก าหนดความไวดวยวงจรความตานทานปรบคาได

Page 62: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - เปดปดไฟดวยแสง#include <avr/io.h>

#include <in_out.h>

#include <analog.h>

void main()

{

while(1)

{

if (analog(0) > analog(1))

out_a(5,1);

else

out_a(5,0);

}

}

ตอตววดแสงท PA0 (แสงนอยคามาก)

ตอตวตานทานท PA1

ตอ LED ท PA5 ชอง HIGH

Page 63: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - เปดปดไฟดวยเสยง

• เปดปดไฟโดยใชวธปรบมอ• ฮารดแวรทใช: LED สองส, วงจรรบเสยง, ตวตานทานปรบคาได• การท างาน:

▫ ปรบครงแรกใหไฟ (LED) ตด▫ ปรบอกครงใหไฟ (LED) ดบ▫ ใชตวตานทานปรบคาไดก าหนดความไว

Page 64: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - เปดปดไฟดวยเสยง#include <avr/io.h>

#include <in_out.h>

#include <analog.h>

#include <sleep.h>

void main()

{

out_a(5,0); // initially on

while(1)

{

if (analog(0) > analog(1))

{

toggle_a(5);

sleep(1000);

}

}

}

ตอไมโครโฟนท PA0

ตอตวตานทานท PA1

ตอ LED ท PA5 ชอง HIGH

Page 65: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด – นบคนเขาราน

• จ าลองอปกรณตรวจจบคนเดนเขาหนาราน• เมอคนเดนผานใหเพมคาบน 7-Segment (พรอมนงหนอง)

• เลอกใชตววดตามสมควร▫ ตววดแสง + ไฟฉาย▫ ตววดอนฟราเรด + LED แบบอนฟราเรด▫ ตววดแสงสะทอน▫ ตววดเสยง▫ ตววดอณหภม ???

Page 66: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - นบคนเขาราน#include <avr/io.h>

#include <in_out.h>

#include <segment.h>

#include <analog.h>

#include <sleep.h>

#include <sound.h>

void main()

{

uint16_t count = 0;

segment(count); out_d(7, 1);

while (1)

{

while (analog(0) < 100) {} sleep(10);

while (analog(0) > 100) {} sleep(10);

count++; segment(count);

sound_d(5, 659, 500);

sound_d(5, 523, 1000);

}

}

ตอ IR LED ท PD7

ตอตวรบ IR ท PA0 (แสงมากคานอย)

ตอล าโพงท PD5

Page 67: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แผงวงจรควบคมมอเตอรไฟตรง

• การเชอมตอกบแผงวงจรหลก- +

- + - +

OUT2 OUT1

PWM2

DIR2A

DIR2B

PWM1

DIR1A

DIR1B

- +

PD4

PD2

PD3

+Vm

แผงวงจรควบคมมอเตอร แผงวงจรหลก

DC In/Out

Page 68: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ค าสงควบคมมอเตอรไฟตรง

• ไฟลเฮดเดอรทใช▫ avr/io.h, in_out.h, motor.h

•ค าสงในไลบราร▫ motor(ch, pwr) – ขบมอเตอรชอง ch ดวยก าลง pwr%

▫ motor_stop(ch) – หยดมอเตอรชอง chหรอใช motor_stop(ALL) เพอหยดมอเตอรทงค

Page 69: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ทดสอบการท างานของมอเตอร#include <avr/io.h>

#include <in_out.h>

#include <motor.h>

#include <sleep.h>

void main()

{

motor(1, 50); // เดนหนำ 50%

sleep(10000);

motor(1, 100); // เดนหนำ 100%

sleep(10000);

motor(1, -50); // ถอยหลง 50%

sleep(10000);

motor_stop(1); // หยด

while (1) {}

}

Page 70: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยาง - พดลมตดเพดาน

• กดสวตชครงแรกเปด กดอกทแรงขน กดอกทปด (ใช PD7)

#include <avr/io.h>

#include <in_out.h>

#include <motor.h>

#include <sleep.h>

uint8_t switch_d(uint8_t x)

{

if (in_d(x) == 1)

{

sleep(5); while (in_d(x) == 1) {}

sleep(5); return 1;

}

else return 0;

}

void main()

{

uint16_t power = 0;

while (1)

{

if (switch_d(7) == 1)

{

power = power + 33;

if (power > 100)

{

power = 0;

motor_stop(1);

}

motor(1, power);

}

}

}

Page 71: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - พดลมสมองกล

• จ าลองการท างานของพดลมดวยมอเตอร โดยปรบความแรงใหสอดคลองกบสภาพแวดลอม

• การท างาน:▫ ใชสวตชเพอเปดและปดเทานน▫ อากาศเยน (ต ากวา 25oC) พดลมหมนชา▫ อากาศรอนแตมด พดลมหมนปานกลาง▫ อากาศรอนและสวาง พดลมหมนเรว

Page 72: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ประตเลอนอตโนมต

แหลงก าเนดแสงอนฟราเรดตวตรวจจบแสง

อนฟราเรด

มอเตอรเลอนบานประต

กลองควบคม

Page 73: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

รเลย (Relay)

ขดลวดแมเหลกไฟฟา

หนาสมผส

สปรง

จดตอสญญาณควบคม

จดตอกบอปกรณไฟฟา

Page 74: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แผงวงจรควบคมรเลย

• ใชควบคมอปกรณไฟฟาภายนอก โดยเฉพาะพวกทตองใชกบแรงดนหรอกระแสสง ๆ

Page 75: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ภายในรเลยและการใชงาน• การท างาน

• การตอใชงานกบอปกรณภายนอก

ปอนกระแสขบรเลย ตอเขากบอปกรณ

ไฟฟาภายนอก

NC = Normally Closed

NO = Normally Open

C = Common

Page 76: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ตวอยางการเชอมตอแผงควบคมรเลย• ชอง RELAY-n แตละชองสามารถตอกบพอรตใดกได ยกเวนพอรต C

• ทดลองสงลอจก 1 และ 0 ไปท PD0

- +

NC

C

NO

RELAY-1

- +

PD0

-12V+

แผงวงจรควบคมรเลย แผงวงจรหลก

DC In/Out

Page 77: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - เปดปดไฟดวยแสง

• จ าลองการควบคมไฟภายในบานดวยแสง (เหมอนแบบฝกหดกอนหนา)

• ฮารดแวรทใช: หลอดไฟ, แผงวงจรวดแสง, ตวตานทานปรบคาได, แผงวงจรควบคมรเลย

•การท างาน:▫ สวาง หลอดไฟดบ▫ มด หลอดไฟตด▫ ก าหนดความไวดวยวงจรความตานทานปรบคาได

Page 78: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

แบบฝกหด - โรงเรอนอจฉรยะ

• สรางระบบปรบอากาศใหโรงเลยงสตว• แบบจ าลอง

▫ หลอดไฟ (จรง ๆ) แทนฮตเตอรใหความอบอน▫ มอเตอร แทนปมน าใหความเยน

• การท างาน▫ ควบคมอณหภมใหอยในชวง 20-30oC▫ หากรอนเกนไปใหเปดปมน า▫ หากเยนเกนไปใหเปดฮตเตอร

Page 79: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

ค านวณคาแรงดน

• จากกราฟคณสมบตของเทอรมสเตอร▫ อณหภม 20oC ไดความตานทานประมาณ 12k

▫ อณหภม 30oC ไดความตานทานประมาณ 8k

• ใชสตร

• ได Dlow = 558, Dhigh = 455

D

DRt

1023

10

t

t

R

RD

10

1023

Page 80: การเขียนโปรแกรมบน IPST- MicroBOX · •ให้ MicroBOX ท างานเป็นนาฬิกาจับเวลา 1 นาที

เฉลย - โรงเรอนอจฉรยะ#include <avr/io.h>

#include <in_out.h>

#include <sleep.h>

#include <motor.h>

#include <analog.h>

#define LOW 558

#define HIGH 455

void main()

{

uint16_t temp;

ตอตววดอณหภมท PA0

ตอรเลยท PD0

while (1)

{

temp = analog(0);

if (temp > LOW) // too cold

{

out_d(0, 1);

motor_stop(1);

}

else if (temp < HIGH) // too hot

{

out_d(0, 0);

motor(1, 100);

}

else

{

out_d(0, 0);

motor_stop(1);

}

}

}