IPST-MicroBOX
  กล่องสมองกล
กิจกรรมการทดลอง
   การทดลองอุปกรณ์กลุม
                     ่
แผงวงจรขับ LED สองสี : ZX-LED2C
                       ZX-LED2
                              O   LED
                                        220
                                                        +S       LOW
                                    R
                                        Bi-color
                             G            LED
                                                        +S      HIGH




                ใช้ LED แบบ 2 สี ในการแสดงผล โดยเลือกได้ 2 แบบ
                ช่อง HIGH ถ้าอินพุตเป็ นลอจิก "1" LED ติดเป็ นสีแดง
                ช่อง LOW ถ้าอินพุตเป็ นลอจิก "0" LED ติดเป็ นสีเขียว
                ถ้าไม่ใช่สญญาณที กําหนด LED จะดับ
                          ั
การทดลองที 1 ควบคุมการติดดับของ LED



             L ED Bl i n k i n g




                                                                           ZX-LED2C
                                                Bi-color LED
                                                      +        S   -   +   S   -




1.ทําการเชือมต่อแผงวงจร ZX-LED2C เข้ากับบอร์ด IPST ทีตําแหน่ ง PD7
การทดลองที 1 ควบคุมการติดดับของ LED
2.เปิดโปรแกรม 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-400
5. เชือมต่อสายระหว่าง PX-400
กับคอมพิวเตอร์
6. จ่ายไฟให้กบบอร์ด IPST
              ั
7. เปิดโปรแกรม AVR Prog โดย
ไปทีหน้ าต่าง Tools
เลือก AVR Prog
การทดลองที 1 ควบคุมการติดดับของ LED
             1. เลือกไฟล์
                                            8. กดปุ่ ม Browse เลือกตําแหน่ งที เก็บ
                                            โปรแกรม (นามสกุล *.hex ) จะเก็บไว้ไน
                                            โฟลเดอร์ Default
                                            9. เลือกเบอร์ของไมโครคอนโทรลเลอร์
                                            ให้ตรง
                                            10. ถ้าไม่จาเป็ นไม่ให้เข้าไปเปลียนแปลง
                                                        ํ
                                            ค่าในโฟลเดอร์ Advanced
                                            11. กดปุ่ ม Program เพือโปรแกรมข้อมูล
3. Program                                  ลงไปยังไมโครคอนโทรลเลอร์




                            2. เลือกเบอร์
sleep - คําสังหน่ วงเวลา
 อยูในไฟล์เฮดเดอร์ sleep.h
     ่
 การใช้งาน
   sleep(m) – หน่วงเวลา m มิลลิวนาที (โดยประมาณ)
                                ิ
        ตําแหน่ งพอร์ต

out_d(x,y) – คําสังกําหนดขาพอร์ตมีลอจิก “0” หรือ “1”
 อยูในไฟล์เฮดเดอร์ in_out.h
     ่
 การใช้งาน
   out_d(7,1) กําหนดให้ PD7 มีลอจิก “1”
   out_d(6,0) กําหนดให้ PD6 มีลอจิก “0”
แผงวงจรสวิ ตช์ : ZX-SWITCH
                 ZX-           D   SWITCH



                              SWITCH                 10k         S
                                                                 +   LOW



                                   510                           S
                                                                 +   HIGH
                                            R


                                                 G    Bi-color LED




               +5    0V ลอจิก “0”                                    +5

      R1
      10k            5V ลอจิก “1”               R1

               0V                               10k
                                                                     5V
SW1                                      SW1

               GND                                                   GND
การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์
1.ทําการเชือมต่อแผงวงจร ZX-LED2C เข้ากับบอร์ด IPST ทีตําแหน่ ง PD7
2. เชือมต่อแผงวงจรสวิตช์เข้ากับช่อง PB4




                                                                                       ZX-LED2C
                                                            Bi-color LED
                            ATMEGA16
                                                                  +        S   -   +   S   -
การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์
3. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่แล้ว
เขียนโปรแกรมต่อไปนี ลงไป
#include <ipst.h>
main()
{
       while(1)
       {
              if(in_b(4)==0)
              {
                     out_d(7,1);
              }
              else
              {
                     out_d(7,0);
              }
       }
}
การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์
4. คอมไพล์โปรแกรม
5. ดาวน์โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์
6. ทดสอบการทํางานของโปรแกรม



เมือกดสวิตช์ LED ......

เมือปล่อยสวิตช์ LED …..
บททดสอบ 1 สวิตช์กดติด กดดับ




                                                                                                   ZX-LED2C
                                                                        Bi-color LED
                                 ATMEGA16
                                                                              +        S   -   +   S   -




เขียนโปรแกรมใช้ฮาร์ดแวร์เดิม เมือกดสวิตช์ 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
               ั

รูปแบบฟังก์ชน
            ั
                                                                 +5V

                                       R4    R5     R7     R9          ตัวอย่าง
                                      150R   10k    10k    10k
                             RB5 6

       char in_a(x)          RB6 7
                                       R6
                                      150R
                                              SW1
                                                                       if (in_b5==0)
       char in_b(x)          RB7 8
                                       R8
                                      150R
                                                     SW2               {
                                                                         out_d(6,1);
       char in_c(x)          GND
                                 31
                                                            SW3
                                                                       }
       char in_d(x)
                             GND 11




พารามิเตอร์ x ทําหน้ าทีกําหนดขาสัญญาณทีต้องการอ่านค่าซึงมีค่าตังแต่ 0 ถึง 7
การคืนค่า อาจมีค่าเป็ น 0 หรือ 1
แผงวงจรแสดงผลตัวเลข 4 หลัก : Display4
                     ใช้แสดงผลในรูปแบบของตัวเลข 4 หลัก
                     หรือไฟแสดงตําแหน่ ง 8 จุดหรือผสมกัน

                     • ใช้ LED ตัวเลข 7 ส่วน 4 หลักแบบแคโทดร่วม
                     และมี LED จํานวน 8 ดวง สามารถเลือกให้แยกกัน
                     แสดงผลหรือรวมกันก็ได้
                     • มีจุดต่อขาพอร์ต C แบบ 10 ขา จํานวน 2 จุด
                     เพือต่อกับแผงวงจรหลัก MicroBOX และต่อพ่วง
                     เพือขยายจํานวนหลักทีต้องการแสดงผล
                     เมือขยายจะเป็ นการขยายคราวละ 4 หลัก
                     และมีจุดต่อ 3 ขา อันเป็ นขาควบคุมการแสดงผลของ
                     แต่ละหลัก หากใช้ปกติ 4 หลักจะมีจุดต่อควบคุม 4 ชุด
วงจรของแผงวงจรแสดงผลตัวเลข 4 หลัก : Display4

                                  +5V

                                                     C1
                                   20
                                                  01uF/50V
   +5V                         VCC
                               IC1                                                                                          Rp2
          K2                                                                                                                1k*8
         PORT
                             74HC541                               DISP1    DISP2       DISP3        DISP4
                         2                   18                a
                             A0         Y0
                         3   A1         Y1   17               b
                         4                   16                c
                             A2         Y2
                         5                   15               d
                             A3         Y3
                         6                   14                e
                             A4         Y4
                         7   A5         Y5   13                f
                         8                   12               g
                             A6         Y6
                         9                   11               dp
                             A7         Y7
                         1                   19     R1-R8
 K1                          OE1 OE2
PORT                            GND                 300R       Q1         Q2           Q3          Q4
                                  10                         KRC102M   KRC102M      KRC102M     KRC102M
                 Rp1
                                                   +5V
                220k*8



                                          J1
                                        DIGIT1

                                          J2
                                        DIGIT2

                                                                                                             LED1-LED8
                                                                                                                           common
                                          J3                                                                              controlled   ON
                                        DIGIT3
                                                                                                                  Q5
                                          J4                                                                    KRC102M                 J1
                                        DIGIT4


                                          J5
                                         LED
ฟังก์ชน segment หรือ SEGMENT สําหรับแสดงผลข้อมูลที LED ตัวเลข 7 ส่วน
      ั
 รูปแบบฟังก์ชน void segment(unsigned int val)
             ั

 พารามิ เตอร์ val ทําหน้ าทีกําหนดค่าข้อมูลทีต้องการแสดงผลข้อมูลที LED ตัวเลข 7 ส่วน(ทัง 4 หลัก)
 ช่วงข้อมูลทีเป็ นไปได้คือตังแต่ 0 ถึง 9999 เท่านัน ถ้าค่าข้อมูลมีค่ามากกว่านี จะแสดงข้อความเป็ น “----”

 ตัวอย่างที 1
       segment(2549);                      //   แสดงค่าข้อมูล 2549 ที LED ตัวเลข 7 ส่วน
 ตัวอย่ างที 2
        int i=0;
        while(1)
        {
               sleep(1000);                            // หน่ วงเวลา 1 วินาที
               segment(i++);                           // แสดงค่ าข้ อมูลของ i ที 7 เซกเมนต์ พร้ อมเพิมค่ า i
        }
การทดลองที 3
แสดงผลข้อมูลที 7 เซกเมนต์ โดยเพิมค่าขึน 1 ค่าทุกๆ 1 วินาที เริมต้นทีค่า 0

                                        1. ทําการเชือมต่อแผงวงจร 7
                                        เซกเมนต์เข้ากับบอร์ด IPST
                                        • เชือมต่อสายข้อมูล 8 บิตจากพอร์ต C
                                        เข้ากับจุดต่อ PORT ของ DSP4
                                        • ต่อสายจากจุด PB4 เข้ากับจุดต่อ DIGIT4
                                        • ต่อสายจากจุด PB3 เข้ากับจุดต่อ DIGIT3
                                        • ต่อสายจากจุด PB2 เข้ากับจุดต่อ DIGIT2
                                        • ต่อสายจากจุด PB1 เข้ากับจุดต่อ DIGIT1
การทดลองที 3
2. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่แล้ว
เขียนโปรแกรมต่อไปนี ลงไป

#include <ipst.h>
main()
{
     int i=0;
     while(1)
     {
          segment(i++);
          sleep(1000);
     }
 }
การทดลองที 3
4. คอมไพล์โปรแกรม
5. ดาวน์โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์
6. ทดสอบการทํางานของโปรแกรม
การทดลองที 4   แสดงผลข้อมูลที 7 เซกเมนต์ โดยการเพิมค่าขึน 1 ค่าทุกๆ 1 วินาที
               เริมต้นจาก 0 เมือนับถึง 10 ให้ปิดการแสดงผล



#include <ipst.h>
main()
                                         1. ใช้วงจรในการทดลองที 3
{
     int i=0;
     for(i=0;i<11;i++)                   2. เปิดโปรแกรม AVR Studio
     {                                   สร้างโปรเจ็กต์ใหม่แล้ว เขียน
          segment(i);                    โปรแกรมต่อไปนี ลงไป
          sleep(1000);
     }
     segment_off();
     while(1);
}
การทดลองที 5   แสดงผลข้อมูลที 7 เซกเมนต์ โดยแสดงค่าจํานวนครังในการกดสวิตช์
               (ใช้วิธีกดค้างค่าการนับจะไม่เพิมขึน)


                                     1. ใช้วงจรในการทดลองที 3
                                        แล้วต่อสวิตช์เพิมเติม
                                        เข้าที ตําแหน่ ง PD7
                                        ในตําแหน่ งขา LOW
การทดลองที 5   แสดงผลข้อมูลที 7 เซกเมนต์ โดยแสดงค่าจํานวนครังในการกดสวิตช์
               (ใช้วิธีกดค้างค่าการนับจะไม่เพิมขึน)

#include <ipst.h>                         2. เปิดโปรแกรม AVR Studio
main()                                    สร้างโปรเจ็กต์ใหม่
{                                         แล้วเขียนโปรแกรมต่อไปนี ลงไป
  int i=0;                                4. คอมไพล์โปรแกรม
  while(1)                                5. ดาวน์ โหลดโปรแกรมลงไปยัง
  {
     segment(i);                          ไมโครคอนโทรลเลอร์
     if(in_d(7)==0)                       6. ทดสอบการทํางานของโปรแกรม
     {
       while(in_d(7)==0);
       sleep(100);
       i++;
     }
  }
}
การทดลองที 6     แสดงค่าจํานวนครังในการกดสวิตช์ที 7 เซกเมนต์ เพิมขึนที ละ 1
                 เมือกดค้างค่าการนับจะเพิมขึนอย่างต่อเนื อง

                                          1. ใช้วงจรในการทดลองที 5
#include <ipst.h>
main()
                                          2. เปิดโปรแกรม AVR Studio
{                                         สร้างโปรเจ็กต์ใหม่
  int i=0;                                แล้วเขียนโปรแกรมต่อไปนี ลงไป
  while(1)                                4. คอมไพล์โปรแกรม
  {                                       5. ดาวน์ โหลดโปรแกรมลงไปยัง
     segment(i);
     if(in_d(7)==0)
                                          ไมโครคอนโทรลเลอร์
     {                                    6. ทดสอบการทํางานของโปรแกรม
       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-4
                                      3. จัมเปอร์จมไปทาง COM CONTROL
                                                   ั
การทดลองที 7           แสดงผล LED 8 หลัก โดยแสดงค่าความสัมพันธ์ของตัวเลขที
                       กําหนดให้ออกไปแสดงผลในรูปเลขฐานสอง 0b11000001

4. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี ลงไป
5. คอมไพล์โปรแกรม
6. ดาวน์ โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์
7. ทดสอบการทํางานของโปรแกรม


    #include <ipst.h>
    main()
    {
      while(1)
      {
         led8(0b11000001);
      }
    }
การทดลองที 8   ไฟกระพริบ LED 8 หลัก โปรแกรมจะสังให้ LED บิต 2 (หลักที 3 เมือนับ
               จากซ้ายมือ) กับบิต 7(หลักที 8 เมือนับจากซ้ายมือ)กระพริบต่อเนื อง



                                         1. ใช้วงจรในการทดลองที 7
                                         2. เปิดโปรแกรม AVR Studio
 #include <ipst.h>                       สร้างโปรเจ็กต์ใหม่ แล้วเขียน
 main()
 {
                                         โปรแกรมต่อไปนี ลงไป
    while(1)                             3. คอมไพล์โปรแกรม
    {                                    4. ดาวน์ โหลดโปรแกรมลงไปยัง
      led8(0b10000100);                  ไมโครคอนโทรลเลอร์
      sleep(200);                        5. ทดสอบการทํางานของโปรแกรม
      led8(0b00000000);
      sleep(200);
    }
  }
การทดลองที 9      ไฟกระพริบ LED 8 หลัก ไล่ลาดับจากซ้ายไปขวา
                                           ํ




                                       1. ใช้วงจรในการทดลองที 7
 #include <ipst.h>                     2. เปิดโปรแกรม AVR Studio
 main()                                สร้างโปรเจ็กต์ใหม่ แล้วเขียน
 {
   char i = 0b10000000;                โปรแกรมต่อไปนี ลงไป
   while (1)                           3. คอมไพล์โปรแกรม
   {                                   4. ดาวน์ โหลดโปรแกรมลงไปยัง
     led8(i);
     i = i >> 1;                       ไมโครคอนโทรลเลอร์
     if (i == 0)                       5. ทดสอบการทํางานของโปรแกรม
     {i = 0b10000000;}
     sleep(100);
   }
 }
บททดสอบ 4

            เขียนโปรแกรมแสดงไฟวิงที LED 8 หลัก
             โดยวิงวนจากบิต 0 ไปยังบิต 7
แผงวงจรลําโพงเปี ยโซ : SPEAKER
                           • ใช้ลาโพงเปี ยโซ มีอิมพีแดนซ์ 32W
                                 ํ
                           • มีค่าความถีเรโซแนนซ์ในย่าน 1 ถึง 3kHz




         K1
       SOUND
                 C1
   +           10/16V
   S




                  SP1
                 Piezo
                speaker
ชุดคําสังสําหรับกําเนิดเสียง
ฟังก์ชน beep กําเนิดเสียงความที 2kHz นาน 10 mSec
      ั
    รูปแบบ
                          ตัวอย่าง
 beep_a(char    ch)
 beep_b(char    ch)        beep_d(3);
 beep_c(char    ch)       ส่งเสียงออกลําโพงทีตําแหน่ ง PD3
 beep_d(char    ch)

ฟังก์ชน sound กําเนิดเสียงโดยกําหนดความถีและระยะเวลาได้
      ั

    รูปแบบ                                         ตัวอย่าง
sound_a(char   ch,int   freq,int      time)         sound_b(3,800,500)
sound_b(char   ch,int   freq,int      time)
                                                   ส่งเสียงออกลําโพงทีตําแหน่ ง PB3
sound_c(char   ch,int   freq,int      time)
sound_d(char   ch,int   freq,int      time)        ความถี 800 Hz ระยะเวลา 0.5 วินาที
การทดลองที 10              โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายที ขา PD6

 1. เชือมต่อลําโพงเปี ยโซเข้ากับ PD6

  * ยังไม่ต้องถอดบอร์ด 7 เซกเมนต์ออก เพือใช้ในการทดลองต่อไป




                                                       SPEAKER
การทดลองที 10   โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายที ขา PD6


                                       2. เปิดโปรแกรม AVR Studio
                                       สร้างโปรเจ็กต์ใหม่ แล้วเขียน
                                       โปรแกรมต่อไปนี ลงไป
 #include <ipst.h>                     3. คอมไพล์โปรแกรม
 main()                                4. ดาวน์ โหลดโปรแกรมลงไปยัง
 {                                     ไมโครคอนโทรลเลอร์
   while (1)
   {
                                       5. ทดสอบการทํางานของโปรแกรม
      beep_d(6);
      sleep(200);
      beep_d(6);
      sleep(1000);
   }
 }
การทดลองที 11   โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายแบบที 2 ที ขา PD6


                                       2. เปิดโปรแกรม AVR Studio
                                       สร้างโปรเจ็กต์ใหม่ แล้วเขียน
                                       โปรแกรมต่อไปนี ลงไป
 #include <ipst.h>                     3. คอมไพล์โปรแกรม
 main()                                4. ดาวน์ โหลดโปรแกรมลงไปยัง
 {                                     ไมโครคอนโทรลเลอร์
   while (1)
   {
                                       5. ทดสอบการทํางานของโปรแกรม
      sound_d(6,800,500);
      sleep(200);
      sound_d(6,800,500);
      sleep(1000);
   }
 }

02 lab microbox1

  • 1.
  • 2.
    แผงวงจรขับ LED สองสี: ZX-LED2C ZX-LED2 O LED 220 +S LOW R Bi-color G LED +S HIGH ใช้ LED แบบ 2 สี ในการแสดงผล โดยเลือกได้ 2 แบบ ช่อง HIGH ถ้าอินพุตเป็ นลอจิก "1" LED ติดเป็ นสีแดง ช่อง LOW ถ้าอินพุตเป็ นลอจิก "0" LED ติดเป็ นสีเขียว ถ้าไม่ใช่สญญาณที กําหนด LED จะดับ ั
  • 3.
    การทดลองที 1 ควบคุมการติดดับของLED L ED Bl i n k i n g ZX-LED2C Bi-color LED + S - + S - 1.ทําการเชือมต่อแผงวงจร ZX-LED2C เข้ากับบอร์ด IPST ทีตําแหน่ ง PD7
  • 4.
    การทดลองที 1 ควบคุมการติดดับของLED 2.เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่แล้ว เขียนโปรแกรมต่อไปนี ลงไป #include <ipst.h> main() { while(1) { out_d(7,1); sleep(500); out_d(7,0); sleep(500); } }
  • 5.
    การทดลองที 1 ควบคุมการติดดับของLED 3. คอมไพล์โปรแกรม ตรวจสอบ หน้ าต่าง Build ต้องแสดง ข้อความ "Build Secceeded” กดปุ่ มเพือคอมไพล์ แสดงว่าโปรแกรมที เขียนขึนไม่มี ข้อผิดพลาด 4. เปิดโปรแกรม AVR Prog โดย ไปที หน้ าต่าง Tools เลือก AVR Prog ไม่เกิ ดข้อผิดพลาด
  • 6.
    การทดลองที 1 ควบคุมการติดดับของLED 4. เปิดโปรแกรม AVR Prog โดยไปที หน้ าต่าง Tools เลือก AVR Prog * ข้อที 4 ข้ามขันตอนสําคัญไปคือ การเชือมต่อบอร์ด IPST เข้ากับคอมพิวเตอร์และจ่ายไฟให้กบบอร์ด IPST ั 4. ทําการเชือมต่อบอร์ด IPST เข้ากับเครืองโปรแกรม PX-400 5. เชือมต่อสายระหว่าง PX-400 กับคอมพิวเตอร์ 6. จ่ายไฟให้กบบอร์ด IPST ั 7. เปิดโปรแกรม AVR Prog โดย ไปทีหน้ าต่าง Tools เลือก AVR Prog
  • 7.
    การทดลองที 1 ควบคุมการติดดับของLED 1. เลือกไฟล์ 8. กดปุ่ ม Browse เลือกตําแหน่ งที เก็บ โปรแกรม (นามสกุล *.hex ) จะเก็บไว้ไน โฟลเดอร์ Default 9. เลือกเบอร์ของไมโครคอนโทรลเลอร์ ให้ตรง 10. ถ้าไม่จาเป็ นไม่ให้เข้าไปเปลียนแปลง ํ ค่าในโฟลเดอร์ Advanced 11. กดปุ่ ม Program เพือโปรแกรมข้อมูล 3. Program ลงไปยังไมโครคอนโทรลเลอร์ 2. เลือกเบอร์
  • 8.
    sleep - คําสังหน่วงเวลา  อยูในไฟล์เฮดเดอร์ sleep.h ่  การใช้งาน sleep(m) – หน่วงเวลา m มิลลิวนาที (โดยประมาณ) ิ ตําแหน่ งพอร์ต out_d(x,y) – คําสังกําหนดขาพอร์ตมีลอจิก “0” หรือ “1”  อยูในไฟล์เฮดเดอร์ in_out.h ่  การใช้งาน out_d(7,1) กําหนดให้ PD7 มีลอจิก “1” out_d(6,0) กําหนดให้ PD6 มีลอจิก “0”
  • 9.
    แผงวงจรสวิ ตช์ :ZX-SWITCH ZX- D SWITCH SWITCH 10k S + LOW 510 S + HIGH R G Bi-color LED +5 0V ลอจิก “0” +5 R1 10k 5V ลอจิก “1” R1 0V 10k 5V SW1 SW1 GND GND
  • 10.
    การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์ 1.ทําการเชือมต่อแผงวงจรZX-LED2C เข้ากับบอร์ด IPST ทีตําแหน่ ง PD7 2. เชือมต่อแผงวงจรสวิตช์เข้ากับช่อง PB4 ZX-LED2C Bi-color LED ATMEGA16 + S - + S -
  • 11.
    การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์ 3.เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่แล้ว เขียนโปรแกรมต่อไปนี ลงไป #include <ipst.h> main() { while(1) { if(in_b(4)==0) { out_d(7,1); } else { out_d(7,0); } } }
  • 12.
    การทดลองที 2 การอ่านค่าจากแผงวงจรสวิตช์ 4.คอมไพล์โปรแกรม 5. ดาวน์โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์ 6. ทดสอบการทํางานของโปรแกรม เมือกดสวิตช์ LED ...... เมือปล่อยสวิตช์ LED …..
  • 13.
    บททดสอบ 1 สวิตช์กดติดกดดับ ZX-LED2C Bi-color LED ATMEGA16 + S - + S - เขียนโปรแกรมใช้ฮาร์ดแวร์เดิม เมือกดสวิตช์ 1 ครัง LED ติด กดสวิตช์อีก 1 ครัง LED ดับ สลับกันไปเรือย ๆ
  • 14.
    เฉลย รูปแบบที 1 #include <ipst.h> void main() { while(1) { if(in_b(4)==0) { toggle_d(7); sleep(300); } } }
  • 15.
    เฉลย รูปแบบที 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); } } }
  • 16.
    ฟั งชันสําหรับอ่ านค่าจากพอร์ ตอินพุต ฟั งก์ ชน in_a สําหรับอ่านค่าระดับสัญญาณดิจิตอลจากพอร์ ต A ั ฟั งก์ ชน in_b สําหรับอ่านค่าระดับสัญญาณดิจิตอลจากพอร์ ต B ั ฟั งก์ ชน in_c สําหรับอ่านค่าระดับสัญญาณดิจิตอลจากพอร์ ต C ั ฟั งก์ ชน in_d สําหรับอ่านค่าระดับสัญญาณดิจิตอลจากพอร์ ต D ั รูปแบบฟังก์ชน ั +5V R4 R5 R7 R9 ตัวอย่าง 150R 10k 10k 10k RB5 6 char in_a(x) RB6 7 R6 150R SW1 if (in_b5==0) char in_b(x) RB7 8 R8 150R SW2 { out_d(6,1); char in_c(x) GND 31 SW3 } char in_d(x) GND 11 พารามิเตอร์ x ทําหน้ าทีกําหนดขาสัญญาณทีต้องการอ่านค่าซึงมีค่าตังแต่ 0 ถึง 7 การคืนค่า อาจมีค่าเป็ น 0 หรือ 1
  • 17.
    แผงวงจรแสดงผลตัวเลข 4 หลัก: Display4 ใช้แสดงผลในรูปแบบของตัวเลข 4 หลัก หรือไฟแสดงตําแหน่ ง 8 จุดหรือผสมกัน • ใช้ LED ตัวเลข 7 ส่วน 4 หลักแบบแคโทดร่วม และมี LED จํานวน 8 ดวง สามารถเลือกให้แยกกัน แสดงผลหรือรวมกันก็ได้ • มีจุดต่อขาพอร์ต C แบบ 10 ขา จํานวน 2 จุด เพือต่อกับแผงวงจรหลัก MicroBOX และต่อพ่วง เพือขยายจํานวนหลักทีต้องการแสดงผล เมือขยายจะเป็ นการขยายคราวละ 4 หลัก และมีจุดต่อ 3 ขา อันเป็ นขาควบคุมการแสดงผลของ แต่ละหลัก หากใช้ปกติ 4 หลักจะมีจุดต่อควบคุม 4 ชุด
  • 18.
    วงจรของแผงวงจรแสดงผลตัวเลข 4 หลัก: Display4 +5V C1 20 01uF/50V +5V VCC IC1 Rp2 K2 1k*8 PORT 74HC541 DISP1 DISP2 DISP3 DISP4 2 18 a A0 Y0 3 A1 Y1 17 b 4 16 c A2 Y2 5 15 d A3 Y3 6 14 e A4 Y4 7 A5 Y5 13 f 8 12 g A6 Y6 9 11 dp A7 Y7 1 19 R1-R8 K1 OE1 OE2 PORT GND 300R Q1 Q2 Q3 Q4 10 KRC102M KRC102M KRC102M KRC102M Rp1 +5V 220k*8 J1 DIGIT1 J2 DIGIT2 LED1-LED8 common J3 controlled ON DIGIT3 Q5 J4 KRC102M J1 DIGIT4 J5 LED
  • 19.
    ฟังก์ชน segment หรือSEGMENT สําหรับแสดงผลข้อมูลที LED ตัวเลข 7 ส่วน ั รูปแบบฟังก์ชน void segment(unsigned int val) ั พารามิ เตอร์ val ทําหน้ าทีกําหนดค่าข้อมูลทีต้องการแสดงผลข้อมูลที LED ตัวเลข 7 ส่วน(ทัง 4 หลัก) ช่วงข้อมูลทีเป็ นไปได้คือตังแต่ 0 ถึง 9999 เท่านัน ถ้าค่าข้อมูลมีค่ามากกว่านี จะแสดงข้อความเป็ น “----” ตัวอย่างที 1 segment(2549); // แสดงค่าข้อมูล 2549 ที LED ตัวเลข 7 ส่วน ตัวอย่ างที 2 int i=0; while(1) { sleep(1000); // หน่ วงเวลา 1 วินาที segment(i++); // แสดงค่ าข้ อมูลของ i ที 7 เซกเมนต์ พร้ อมเพิมค่ า i }
  • 20.
    การทดลองที 3 แสดงผลข้อมูลที 7เซกเมนต์ โดยเพิมค่าขึน 1 ค่าทุกๆ 1 วินาที เริมต้นทีค่า 0 1. ทําการเชือมต่อแผงวงจร 7 เซกเมนต์เข้ากับบอร์ด IPST • เชือมต่อสายข้อมูล 8 บิตจากพอร์ต C เข้ากับจุดต่อ PORT ของ DSP4 • ต่อสายจากจุด PB4 เข้ากับจุดต่อ DIGIT4 • ต่อสายจากจุด PB3 เข้ากับจุดต่อ DIGIT3 • ต่อสายจากจุด PB2 เข้ากับจุดต่อ DIGIT2 • ต่อสายจากจุด PB1 เข้ากับจุดต่อ DIGIT1
  • 21.
    การทดลองที 3 2. เปิดโปรแกรมAVR Studio สร้างโปรเจ็กต์ใหม่แล้ว เขียนโปรแกรมต่อไปนี ลงไป #include <ipst.h> main() { int i=0; while(1) { segment(i++); sleep(1000); } }
  • 22.
    การทดลองที 3 4. คอมไพล์โปรแกรม 5.ดาวน์โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์ 6. ทดสอบการทํางานของโปรแกรม
  • 23.
    การทดลองที 4 แสดงผลข้อมูลที 7 เซกเมนต์ โดยการเพิมค่าขึน 1 ค่าทุกๆ 1 วินาที เริมต้นจาก 0 เมือนับถึง 10 ให้ปิดการแสดงผล #include <ipst.h> main() 1. ใช้วงจรในการทดลองที 3 { int i=0; for(i=0;i<11;i++) 2. เปิดโปรแกรม AVR Studio { สร้างโปรเจ็กต์ใหม่แล้ว เขียน segment(i); โปรแกรมต่อไปนี ลงไป sleep(1000); } segment_off(); while(1); }
  • 24.
    การทดลองที 5 แสดงผลข้อมูลที 7 เซกเมนต์ โดยแสดงค่าจํานวนครังในการกดสวิตช์ (ใช้วิธีกดค้างค่าการนับจะไม่เพิมขึน) 1. ใช้วงจรในการทดลองที 3 แล้วต่อสวิตช์เพิมเติม เข้าที ตําแหน่ ง PD7 ในตําแหน่ งขา LOW
  • 25.
    การทดลองที 5 แสดงผลข้อมูลที 7 เซกเมนต์ โดยแสดงค่าจํานวนครังในการกดสวิตช์ (ใช้วิธีกดค้างค่าการนับจะไม่เพิมขึน) #include <ipst.h> 2. เปิดโปรแกรม AVR Studio main() สร้างโปรเจ็กต์ใหม่ { แล้วเขียนโปรแกรมต่อไปนี ลงไป int i=0; 4. คอมไพล์โปรแกรม while(1) 5. ดาวน์ โหลดโปรแกรมลงไปยัง { segment(i); ไมโครคอนโทรลเลอร์ if(in_d(7)==0) 6. ทดสอบการทํางานของโปรแกรม { while(in_d(7)==0); sleep(100); i++; } } }
  • 26.
    การทดลองที 6 แสดงค่าจํานวนครังในการกดสวิตช์ที 7 เซกเมนต์ เพิมขึนที ละ 1 เมือกดค้างค่าการนับจะเพิมขึนอย่างต่อเนื อง 1. ใช้วงจรในการทดลองที 5 #include <ipst.h> main() 2. เปิดโปรแกรม AVR Studio { สร้างโปรเจ็กต์ใหม่ int i=0; แล้วเขียนโปรแกรมต่อไปนี ลงไป while(1) 4. คอมไพล์โปรแกรม { 5. ดาวน์ โหลดโปรแกรมลงไปยัง segment(i); if(in_d(7)==0) ไมโครคอนโทรลเลอร์ { 6. ทดสอบการทํางานของโปรแกรม i++; sleep(200); } } }
  • 27.
    บททดสอบ 2 เขียนโปรแกรมตังเวลานับ 60 วินาที ในแบบนับลง (Count down) เมือนับ ลงมาจนกระทังถึง 0 หน้ าจอแสดงผล จะต้องดับลงอัตโนมัติ
  • 28.
    บททดสอบ 3 เขียนโปรแกรมแสดงผลข้อมูลที 7 เซกเมนต์ โดยให้แสดงค่าเริมต้น ที 100 เมือกดสวิตช์ที PD7 ค่าการนับจะต้อง เพิมขึน 1 ค่า เมือมีการกดสวิตช์ที PD6 ค่าการนับ จะต้องลดลง 1 ค่า
  • 29.
    การทดลองที 7 แสดงผล LED 8 หลัก โดยแสดงค่าความสัมพันธ์ของตัวเลขที กําหนดให้ออกไปแสดงผลในรูปเลขฐานสอง 0b11000001 1. เชือมต่ อสายข้อมูล 8 บิ ตจากพอร์ต C ของบอร์ด IPST เข้ากับบอร์ด DSP-4 2. ต่อสายจากจุด PB0 เข้ากับบอร์ด DSP-4 3. จัมเปอร์จมไปทาง COM CONTROL ั
  • 30.
    การทดลองที 7 แสดงผล LED 8 หลัก โดยแสดงค่าความสัมพันธ์ของตัวเลขที กําหนดให้ออกไปแสดงผลในรูปเลขฐานสอง 0b11000001 4. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่ แล้วเขียนโปรแกรมต่อไปนี ลงไป 5. คอมไพล์โปรแกรม 6. ดาวน์ โหลดโปรแกรมลงไปยังไมโครคอนโทรลเลอร์ 7. ทดสอบการทํางานของโปรแกรม #include <ipst.h> main() { while(1) { led8(0b11000001); } }
  • 31.
    การทดลองที 8 ไฟกระพริบ LED 8 หลัก โปรแกรมจะสังให้ LED บิต 2 (หลักที 3 เมือนับ จากซ้ายมือ) กับบิต 7(หลักที 8 เมือนับจากซ้ายมือ)กระพริบต่อเนื อง 1. ใช้วงจรในการทดลองที 7 2. เปิดโปรแกรม AVR Studio #include <ipst.h> สร้างโปรเจ็กต์ใหม่ แล้วเขียน main() { โปรแกรมต่อไปนี ลงไป while(1) 3. คอมไพล์โปรแกรม { 4. ดาวน์ โหลดโปรแกรมลงไปยัง led8(0b10000100); ไมโครคอนโทรลเลอร์ sleep(200); 5. ทดสอบการทํางานของโปรแกรม led8(0b00000000); sleep(200); } }
  • 32.
    การทดลองที 9 ไฟกระพริบ LED 8 หลัก ไล่ลาดับจากซ้ายไปขวา ํ 1. ใช้วงจรในการทดลองที 7 #include <ipst.h> 2. เปิดโปรแกรม AVR Studio main() สร้างโปรเจ็กต์ใหม่ แล้วเขียน { char i = 0b10000000; โปรแกรมต่อไปนี ลงไป while (1) 3. คอมไพล์โปรแกรม { 4. ดาวน์ โหลดโปรแกรมลงไปยัง led8(i); i = i >> 1; ไมโครคอนโทรลเลอร์ if (i == 0) 5. ทดสอบการทํางานของโปรแกรม {i = 0b10000000;} sleep(100); } }
  • 33.
    บททดสอบ 4 เขียนโปรแกรมแสดงไฟวิงที LED 8 หลัก โดยวิงวนจากบิต 0 ไปยังบิต 7
  • 34.
    แผงวงจรลําโพงเปี ยโซ :SPEAKER • ใช้ลาโพงเปี ยโซ มีอิมพีแดนซ์ 32W ํ • มีค่าความถีเรโซแนนซ์ในย่าน 1 ถึง 3kHz K1 SOUND C1 + 10/16V S SP1 Piezo speaker
  • 35.
    ชุดคําสังสําหรับกําเนิดเสียง ฟังก์ชน beep กําเนิดเสียงความที2kHz นาน 10 mSec ั รูปแบบ ตัวอย่าง beep_a(char ch) beep_b(char ch) beep_d(3); beep_c(char ch) ส่งเสียงออกลําโพงทีตําแหน่ ง PD3 beep_d(char ch) ฟังก์ชน sound กําเนิดเสียงโดยกําหนดความถีและระยะเวลาได้ ั รูปแบบ ตัวอย่าง sound_a(char ch,int freq,int time) sound_b(3,800,500) sound_b(char ch,int freq,int time) ส่งเสียงออกลําโพงทีตําแหน่ ง PB3 sound_c(char ch,int freq,int time) sound_d(char ch,int freq,int time) ความถี 800 Hz ระยะเวลา 0.5 วินาที
  • 36.
    การทดลองที 10 โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายที ขา PD6 1. เชือมต่อลําโพงเปี ยโซเข้ากับ PD6 * ยังไม่ต้องถอดบอร์ด 7 เซกเมนต์ออก เพือใช้ในการทดลองต่อไป SPEAKER
  • 37.
    การทดลองที 10 โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายที ขา PD6 2. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่ แล้วเขียน โปรแกรมต่อไปนี ลงไป #include <ipst.h> 3. คอมไพล์โปรแกรม main() 4. ดาวน์ โหลดโปรแกรมลงไปยัง { ไมโครคอนโทรลเลอร์ while (1) { 5. ทดสอบการทํางานของโปรแกรม beep_d(6); sleep(200); beep_d(6); sleep(1000); } }
  • 38.
    การทดลองที 11 โปรแกรมกําเนิดสัญญาณเสี ยงแบบง่ายแบบที 2 ที ขา PD6 2. เปิดโปรแกรม AVR Studio สร้างโปรเจ็กต์ใหม่ แล้วเขียน โปรแกรมต่อไปนี ลงไป #include <ipst.h> 3. คอมไพล์โปรแกรม main() 4. ดาวน์ โหลดโปรแกรมลงไปยัง { ไมโครคอนโทรลเลอร์ while (1) { 5. ทดสอบการทํางานของโปรแกรม sound_d(6,800,500); sleep(200); sound_d(6,800,500); sleep(1000); } }