หน้าเว็บ

วันอังคารที่ 30 กรกฎาคม พ.ศ. 2556

ตัวอย่างโค้ด SHT11(เซนเซอร์วัดค่าอุณหภูมิและความชื้น) กับ PIC18F2550





โมดูล SHT11

เป็นโมดูลวัดความชื้นสัมพัทธ์และอุณหภูมิจากบริษัท Sensirion (www.sensirion.com) มีขนาดเล็กและเพื่อความสะดวกในการใช้งานซึ่งมีคุณสมบัติทางเทคนิคดังนี้คะ
  • ทำหน้าที่เป็นทั้งตัววัดความชื้นและอุณหภูมิภายในตัวถังเดียวกัน
  • สามารถกำหนดความละเอียดของย่านการวัดได้
  • มีขนาดเล็กและกินพลังงานต่ำ ทำงานในย่านแรงดัน +2.4V ถึง+5.5V
  • เสถียรภาพในการทำงานสูง

ขาสัญญาณสำหรับสื่อสารข้อมูลของโมดูล SHT11

  • PIN  1  :  DATA หรือ Serial Data (SDA)
  • PIN  2   : NC (No connect)
  • PIN  3  :  CLOCK หรือ Serial Clock (SCK)
  • PIN  4  :  GND
  • PIN  5   : NC (No connect)
  • PIN  6  :  NC (No connect)
  • PIN  7  :  NC (No connect)
  • PIN  8  :  +5V 




ทดลองต่อวังจร SHT11 กับ PIC18F2550 เลยคะ

ทำการต่อวงจรตามรูปข้างล่างเลยค่า โดยการทำงานของวงจรที่เราทำขึ้นเราจะทำการอ่านค่าจากเซนเซอร์ จากนั้นนำมาแสดงที่ serial port  ทางคอมพิวเตอร์คะ ซึ่งโปรแกรมที่เราเขียนจะทำการอ่านค่าวนซ้ำทุก 1 วินาที




ขึ้นตอนต่อไป คือการเขียนโปรแกรม ผู้เขียนจะใช้ CCS C คอมไพเลอร์ร่วมกับ MPLAB IDE  ซึ่งในโค้ดข้างล่างเราต้องทำการ add library "sht1x.c" ซึ่ง library นี้ผู้เขียนได้ทำการแก้ไขจากไลบราลี่เดิมที่มีอยู่แล้ว โดยเพื่อนๆ สามารถดาวน์โหลดไลบราลี่ได้จากลิ้งนี้คะ (link here) เมื่อดาวน์โหลดมาแล้วให้เอาไปแทนไลบราลี่ตัวเดิมซึ่งอยูใน  "C:\Program Files (x86)\PICC\Drivers" จากนั้นเขียนโปรแกรมตามโค้ดข้างล่างเลยคะ



//******************************************************
//Project        : SHT11 Example
//Purpose        : Test SHT11
//Auther         : JUMP start innovation
//Email          : jumpstartinnovation@gmail.com
//Complier       : CCS.PCWH.v4.134
//Hardware       : PIC18F2550
//**********************************************************

#include <18f2550.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// *** Device Specification ***
#fuses HS            // use Oscillator mode HS
#fuses NOWDT // doesn't use watch dog
#fuses NOLVP         // doesn't use Low Voltage for program
#fuses NOPROTECT     // No program detect

#use delay (clock=20M, crystal)
// use built-in function: delay_ms() & delay_us() by crytal 20MHz

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC,errors)

// Assign pin for sht1x
#define sht_data_pin   PIN_B0
#define sht_clk_pin    PIN_B1
#include<sht1x.c>



/*******************************************************************************
*  Function prototypes
********************************************************************************/
void headle(void);

/***********************************************************************
 * FUNCTION:    headle
 * DESCRIPTION: Show headle title though rs232
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void headle(void){
                fprintf(HOSTPC,"\n\r******************************************************\n\r");
                fprintf(HOSTPC,"Project        : SHT11 Example\n\r");
                fprintf(HOSTPC,"Purpose        : Test SHT11\n\r");
                fprintf(HOSTPC,"Auther         : JUMP start innovation\n\r");
                fprintf(HOSTPC,"Email          : jumpstartinnovation@gmail.com\n\r");
                fprintf(HOSTPC,"Complier       : CCS.PCWH.v4.134\n\r");
                fprintf(HOSTPC,"Hardware       : PIC18F2550\n\r");
                fprintf(HOSTPC,"**********************************************************\n\r");
    }


/***********************************************************************
 * FUNCTION:    main
 * DESCRIPTION: main function
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void main(void){

        float truehumid;
        float restemp;
        
headle(); //show message output to serial port

        sht_init(); //Initial SHT11
        fprintf(HOSTPC,">> Initial SHT11 ... DONE\n\r");

        while(true){
                  sht_rd (restemp, truehumid);
                  fprintf(HOSTPC,"Temperature   :%2.1f\n\r",restemp);
                  fprintf(HOSTPC,"Humidity      :%2.1f\n\r", truehumid);
                  fprintf(HOSTPC,"------------------\n\r\n\r");
                  delay_ms(1000);

            }

        }


เมื่อทำการคอมไพล์เสร็จเรียบร้อยแล้ว ทดลองรันดูเลยคะ จะได้ผลตาม Video ข้างล่างคะ





เราสามารถนำไปประยุกต์ใช้ได้อย่างหลากหลายเช่น
  • ระบบ เปิด-ปิด สปริงเกอร์ ที่ใช้สำหรับควบคุมความชื้นโรงเพาะเห็ด
  • ใช้ความคุมการ เปิด-ปิด ฮิตเตอร์สำหรับห้องปิดเช่น ห้องซาวน่า เป็นต้น

คลิปวีดีโอข้างล่างเป็นการประยุกต์โดยจะทำการเตือนเมื่ออุณหภูมิและความชื้นเกินกว่าค่าที่ตั้งเอาไว้ โดยวงจรนี้จะต่อตัวเซนเซอร์สองตัว ซึ่งแยกทำงานกันแบบอิสระ




วันอาทิตย์ที่ 28 กรกฎาคม พ.ศ. 2556

LCD display บน PIC18F2550

บทความนี้เป็นตัวอย่างโค้ดสำหรับ PIC เชื่อมต่อกับ LCD 16x2 โดยเราจะพิมพ์ข้อความไปที่จอ LCD คะ ซึ่งขาของตัว LCD Module ดูตามข้อมูลด้านล่างคะ

Pin NoSymbolLevelDescription
1VSS0VGround
2VDD5VSupply Voltage for logic
3VO(Variable)Operating voltage for LCD
4RSH/LH: DATA, L: Instruction code
5R/WH/LH: Read(MPU?Module) L: Write(MPU?Module)
6EH,H->LChip enable signal
7DB0H/LData bus line
8DB1H/LData bus line
9DB2H/LData bus line
10DB3H/LData bus line
11DB4H/LData bus line
12DB5H/LData bus line
13DB6H/LData bus line
14DB7H/LData bus line
15A5VLED +
16K0VLED-



โดยขั้นตอนในการติดต่อกับตัว LCD Module ดูได้จาก flowchart ของโปรแกรมด้านล่างคะ



จากนั้นทำการต่อวงจรในโปรแกรม proteus ตามวงจรข้างล่างเลยคะ



ขึ้นตอนต่อไป คือการเขียนโปรแกรม ผู้เขียนจะใช้ CCS C คอมไพเลอร์ร่วมกับ MPLAB IDE  ซึ่งในโค้ดข้างล่างเราต้องทำการ add library "lcd.c" ซึ่ง library นี้ผู้เขียนได้ทำการแก้ไขจากไลบราลี่เดิมที่มีอยู่แล้ว โดยเพื่อนๆ สามารถดาวน์โหลดไลบราลี่ได้จากลิ้งนี้คะ (link here) เมื่อดาวน์โหลดมาแล้วให้เอาไปแทนไลบราลี่ตัวเดิมซึ่งอยูใน  "C:\Program Files (x86)\PICC\Drivers" จากนั้นเขียนโปรแกรมตามโค้ดข้างล่างเลยคะ


//******************************************************
//Project        : LCD print out
//Purpose        : Test LCD Module
//Auther         : JUMP start innovation
//Email          : jumpstartinnovation@gmail.com
//Complier       : CCS.PCWH.v4.134
//Hardware       : PIC18F2550
//**********************************************************

#include <18f2550.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// *** Device Specification ***
#fuses HS            // use Oscillator mode HS
#fuses NOWDT // doesn't use watch dog
#fuses NOLVP         // doesn't use Low Voltage for program
#fuses NOPROTECT     // No program detect

#use delay (clock=20M, crystal)
// use built-in function: delay_ms() & delay_us() by crytal 20MHz

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC,errors)

#define _FLEX_LCD216_H  //  LCD Type 16x2
//#define _FLEX_LCD416_H  //  LCD Type 16x4
// Assign MCU's pin to LCD
#define LCD_DB4   PIN_B2
#define LCD_DB5   PIN_B3
#define LCD_DB6   PIN_B4
#define LCD_DB7   PIN_B5
#define LCD_RS    PIN_B0
#define LCD_E     PIN_B1
//#define LCD_RW    PIN_B1  // Doesn't use RW connect to GND
#include <lcd.c> // include LCD library CCS C

/*******************************************************************************
*  Function prototypes
********************************************************************************/
void headle(void);

/***********************************************************************
 * FUNCTION:    headle
 * DESCRIPTION: Show headle title though rs232
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void headle(void){
                fprintf(HOSTPC,"\n\r******************************************************\n\r");
                fprintf(HOSTPC,"Project        : LCD print out\n\r");
                fprintf(HOSTPC,"Purpose        : Test LCD Module\n\r");
                fprintf(HOSTPC,"Auther         : JUMP start innovation\n\r");
                fprintf(HOSTPC,"Email          : jumpstartinnovation@gmail.com\n\r");
                fprintf(HOSTPC,"Complier       : CCS.PCWH.v4.134\n\r");
                fprintf(HOSTPC,"Hardware       : PIC18F2550\n\r");
                fprintf(HOSTPC,"**********************************************************\n\r");
    }


/***********************************************************************
 * FUNCTION:    main
 * DESCRIPTION: main function
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void main(void){

headle(); //show message output to serial port

        lcd_init(); //Initial LCD
        fprintf(HOSTPC,">> LCD Initial ... DONE\n\r");

        while(true){

            printf(lcd_putc,"\f");  //clear LCD screen

            lcd_gotoxy(4,1); //goto lcd position x=1, y=1
            printf(lcd_putc,"Hello World");

            lcd_gotoxy(2,2); //goto lcd position x=2, y=2
            printf(lcd_putc,"* JUMP START *");
            
            delay_ms(1000);

            // clear LCD screen line 1
            lcd_gotoxy(16, 1); //goto lcd position x=16, y=1
            for(int i=0; i < 16; i++){
                printf(lcd_putc," \b\b"); //back space
                delay_ms(100);
            }

            // clear LCD screen line 2
            lcd_gotoxy(16, 2); //goto lcd position x=16, y=1
            for(i=0; i < 16; i++){
                printf(lcd_putc," \b\b"); //back space
                delay_ms(100);
            }

        }
}




เมื่อทำการคอมไพล์เสร็จเรียบร้อยแล้ว ทดลองรันดูเลยคะ จะได้ผลตาม Video ข้างล่างคะ







การติดต่อ Serial Port (RS232)กับ PIC

Serial Port คือ พอร์ตอนุกรม ในการสื่อสารข้อมูลนั้นพอร์ตอนุกรมจะมีความเร็วในการสื่อสารที่ช้ากว่าแบบ ขนาน เพราะการเคลื่อนย้ายข้อมูลแบบอนุกรมนั้นเป็นการส่งข้อมูลครั้งละ 1 บิต แต่พอร์ตขนานนั้นสามารถส่งข้อมูลทีละหลายๆ บิทพร้อมๆกันได้ แต่ข้อดีของการสื่อสารข้อมูลแบบอนุกรมคือ สามารถส่งข้อมูลได้ในระยะทางที่ไกลกว่าแบบขนาน และใช้สายสัญญาณที่น้อยกว่าการสื่อสารข้อมูลแบบขนาน




ประเภทของการสื่อสารแบบอนุกรมแบ่งตามลักษณะสัญญาณในการส่งแบ่งได้ 2 แบบ คือ

1.การสื่อสารแบบซิงโครนัส (Synchronous) เป็นการสื่อสารข้อมูลโดยใช้สัญญาณนาฬิกาในการควบคุมจังหวะของการรับส่งสัญญาณ
2.การสื่อสารแบบอะซิงโครนัส (Asynchronous) เป็นการสื่อสารที่ใช้สายข้อมูลเพียงตัวเดียว จะใช้รูปแบบของการส่งข้อมูล(Bit Pattern) เป็นตัวกำหนดว่าส่วนไหนเป็นส่วนเริ่มต้นข้อมูล ส่วนไหนเป็นตัวข้อมูล ส่วนไหนจะเป็นตัวตรวจสอบความถูกต้องของข้อมูล และส่วนไหนเป็นส่วนปิดท้ายของข้อมูล โดยต้องกำหนดให้สัญญาณนาฬิกาเท่ากันทั้งภาคส่งและภาครับ

คอนเน็กเตอร์ที่นิยมใช้จะเป็นชนิด D-Type แบบ 9 ขา และแบบ 25 ขา โดยจะติดตั้งอยู่หลังเครื่องคอมพิวเตอร์ ระดับแรงดันจะมีค่าระหว่าง -3 โวลต์ ถึง-15โวลต์คะ


การเชื่อมต่อ Seria Port ระหว่างไมโครคอนโทรเลอร์กับคอมพิวเตอร์

ในการพัฒนาโปรแกรมไมโครคอนโทรเลอร์ โดยเทคนิคส่วนตัวของเจ้าของบล๊อค เราจำเป็นอย่างยิ่งที่ต้องเห็นการทำงานแต่ละสเตปหรือเป็นการดีบัคโปรแกรมคะ ว่าตอนนี้ไมโครคอนโลรเลอร์ทำงานอยู่ในส่วนไหนตำแหน่งไหนของโค้ด ซึ่งวิธีง่ายสุดคือการสั่ง printf ออกมาทางหน้าจอคอมพิวเตอร์ เช่น

if(x == 1){
       printf("Positon 1  >>  x=1\n\r");
}else if(x==2){
       printf("Positon 2  >>  x=2\n\r");
}else{
       printf("Positon 3 >> x=other\n\r");
}

การเชื่อมต่อ serial port กับไมโครคอนโทรเลอร์จำเป็นที่จะต้องมีไอซีที่ใช้ในการแปรงระดังสัญญาณระหว่างTTL Level (5 Volt) กับ RS232 Level (+/- 9 Volt) โดยเราจะใช้ไอซี MAX232 ในการเชื่อมต่อ


ในการทดลองนี้ เราจะใช้ PIC เบอร์ PIC18F2550 ซึ่งเป็นไมโครคอนโทรเลอร์ 28 pins คะ ซึ่งตัวเล็กกระทัดลัดแต่ประสิทธิภาพไม่เล็กเหมือนตัวนะคะ โดยคุณสมบัติของไอซีเบอร์ดังกล่างคือ



การต่อวงจรให้ต่อตามรูปข้างล่างคะ โดยสัญญาณ Tx และ Rx ของ UART ในตัวไมโครคอนโทรเลอร์ จะต่ออยู่ที่ขา C6 และ C7 เราจะให้ Crytal ความถี่ 20MHz เป็นสัญญาณนาฬิกาให้กับไมโครคอนโทรเลอร์คะ ส่วน C1 (0.1uF) ที่ต่อระหว่าง VDD กับ VSS ซึ่งต้องต่อไกล้ๆนะค่ะ  ตัวนี้ค่อนข้างสำคัญคะ เพราะเจ้าของบล๊อคเองเคยเจอว่า ถ้าเราลืมต่อมัน บางทีมันเวิร์คบ้างไม่เวิร์คบ้าง อาจเป็นเพราะอาจจมี noise จากข้างนอก หรือจาก clock ของตัวมันเองมากวนคะ ซึ่งจะทำให้เราหลงทางได้ ^^ 


การเขียนโปรแกรมโดยใช้ CCS C ทำงานบน MPLAB IDE

ขึ้นตอนต่อไปเป็นขึ้นตอนที่สำคัญคะ คือการเขียนโปรแกรม ผู้เขียนจะใช้ CCS C คอมไพเลอร์ร่วมกับ MPLAB IDE ซึ่งภายในโค้ดผู้เขียนจะอธิบายโค้ดไปทีละบรรทัดเลยค่าาา ^^





 Source code  (ไฟล์.hex ดาวน์โหลดได้จากลิ้งนี่คะ)

#include <18f2550.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// *** Device Specification ***
#fuses HS            // ใช้ Oscillator mode HS
#fuses NOWDT // ไม่ใช้ Watch dog 
#fuses NOLVP         // ไม่ใช้การโปรแกรมแบบ Low Voltage
#fuses NOPROTECT     // ไม่ต้องทำการป้องกันการอ่านโค้ด

#use delay (clock=20M, crystal)
// ใช้ built-in function: delay_ms() & delay_us() โดยใช้ crytal ความถี่ 20MHz 

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC,errors)
// กำหมดการเชื่อมต่อกับ serial port โดยกำหนดคอนฟิคต่างๆ และใช้ stream ชื่อว่า HOSTPC โดยจะใช้เป็นช่องทางการสั่ง fprintf


/*******************************************************************************
*  Function prototypes
********************************************************************************/
void headle(void);

/***********************************************************************
 * FUNCTION:    headle
 * DESCRIPTION: Show headle title though rs232
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void headle(void){
                fprintf(HOSTPC,"\n\r**********************************************************************************\n\r");
                fprintf(HOSTPC,"Project        : RS232 print out \n\r");
                fprintf(HOSTPC,"Purpose        : Test serial port \n\r");
                fprintf(HOSTPC,"Auther         : JUMP start innovation\n\r");
                fprintf(HOSTPC,"Email          : jumpstartinnovation@gmail.com\n\r");
                fprintf(HOSTPC,"Complier       : CCS.PCWH.v4.134\n\r");
                fprintf(HOSTPC,"Hardware       : PIC18F2550\n\r");
                fprintf(HOSTPC,"**********************************************************************************\n\r");
    }

/***********************************************************************
 * FUNCTION:    main
 * DESCRIPTION: main function
 * PARAMETERS:  nothing
 * RETURNED:    nothing
 ***********************************************************************/
void main(void){

int i; // ประกาศตัวแปล i เป็นชนิด integer
headle(); //แรกฟังก์ชั่น headle เพื่อแสดงข้อความออกทาง serial port
fprintf(HOSTPC,"Hello World\n\r");  //แสดงข้อความ Hello World ออกทางหน้าจอ

// ทำการสั่งพิมพ์ค่า i ออกทางหน้าจอ โดยค่า i จะแสดงค่าตั้งแต่ 0 จนถึง 9 แล้ววนกลับมาใหม่
for(i = 0; i < 10; i++){
fprintf(HOSTPC,"i = %d\n\r",i);
}

}

ทดลอง Simulation โดยใช้ Proteus Software

ต่อวงจรตามรูปข้างล่างเลยคะ โดยกำหนด clock ให้กับไมโครคอนโทรเลอร์เป็นค่า 20MHz แต่ถ้าจำไม่ได้ว่าทำการ config มันยังไงให้กลับไปดูบนความก่อนหน้านี้คะ (link here) ส่วนไฟล์ไบนาลี่ไปเอามาได้จากลิ้งนี้คะ (link here)
เมื่อต่อเสร็จแล้วลองรันดูเลยค่าาาา .... ^^



บทความนี้น่าจะเป็นพื้นฐานที่สำคัญในการพัฒนาไมโครคอนโทรเลอร์นะคะ .... ขอบคุณที่เข้ามาติดตามค่าาาา ^^



วันเสาร์ที่ 27 กรกฎาคม พ.ศ. 2556

XBee module



Xbee เป็นอุปกรณ์ที่มี Microcontroller และ RF IC อยู่ภายใน (อ้างอิงได้จาก Schematic ) ทำหน้าที่เป็น อุปกรณ์ transceiver (อุปกรณ์รับ-ส่งสัญญาณ) แบบ แบบ Half Duplex ย่านความถี่ 2.4 Ghz มีการจัดการโดยใช้พลังงานต่ำ ใช้งานง่าย มี interface ที่ใช้รับและส่งข้อมูลกับ Xbee เป็น UART (TTL) ซึ่งสำหรับทางด้านไมโครคอนโทรลเลอร์ เรานำขาที่ใช้ติดต่อสื่อสาร UART ของXbee ต่อเข้ากับ UART ของ ไมโครคอนโทรลเลอร์ ได้เลยคะ





Xbee สามารถใช้งานตามมาตรฐาน Zigbee ได้ โดยที่ท่านไม่ต้องเขียนโปรแกรมสร้าง เครือข่าย Zigbee เลย เพราะว่าทางผู้ผลิตได้จัดทำ firmware ที่จะโหลดเข้าไปในตัว Xbee ให้เราสามารถ set parameter ผ่าน software interface (X-CTU หรือโปรแกรมที่เขียนขึ้นเอง) , ผ่านทาง At command (เหมือนกับการควบคุม GSM Module ) โดยใช้ Hyper terminal หรือ ผ่านทางการรับส่งข้อมูลด้วยไมโครคอนโทรลเลอร์ ได้อย่างง่ายดาย โดยเมื่อ set Xbee ให้ทำงานเป็นอุปกรณ์ในเครือข่าย Zigbeeแล้ว เราจะเรียก Xbee แต่ละตัวว่าเป็น Node คะ







Xbee นั้น ใช้ย่านความถี่ 2.4 Ghz ซึ่งเป็นย่านเดียวกันกับ Bluetooth หรือ Wireless Lan ดังนั้นหลายคนอาจจะสงสัยว่า สัญญาณมันจะกวนกันหรือไม่ คำตอบคือ กวนกันคะ ยกตัวอย่างเช่น เรามี wireless lan ใช้ Access Point 1 ตัว และเราก็ยังใช้เครื่องโทรศัพท์แบบ ถือไปมาได้ (2.4 GHz cordless telephones) ซึ่งก็ใช้ย่าน 2.4 Ghz เช่นกัน แล้วเราก็ทดสอบใช้งาน Xbee ด้วยคะ ผลปรากฏว่า การรับส่งสัญญาณก็ขาดหายไปบ้าง แต่บางครั้งก็ครบถ้วน นั่นอาจเป็นเพราะกำลังส่งของ Xbeeและระยะทางของ node ที่เราทดสอบใกล้กันมากคะ





ช่องสัญญาณย่านความถี่ 2.4 Ghz นี้เรียกว่าเป็นย่านไมโครเวฟ หลักสำคัญของย่านไมโครเวฟอย่างหนึ่งคือ การวางตำแหน่งตัวรับส่งสัญญาณนั้น ต้องตั้งแบบ line of sight (ไม่มีสิ่งกีดขวางใด ๆ) ถึงจะได้กำลังส่งสูงสุด  สำหรับกำลังส่งของ Xbee ในรุ่น Pro จะใช้ 50-60 mw ใน datasheet บอกว่าได้ไกลถึง 1.5 km. แต่ก็ต้องเป็นลักษณะ ของ line of sight คะ หากไม่ใช่เงื่อนไขนี้ เราจะได้ระยะการรับส่งสัญญาณที่ลดลง นอกเหนือจากเรื่อง line of sight แล้ว ยังมีเรื่องสัญญาณรบกวนต่าง ๆ (Interference) 








ขอขอบคุณข้อมูลจาก http://www.thaieasyelec.com/Review-Product-Article/what-is-xbee.html

วันศุกร์ที่ 26 กรกฎาคม พ.ศ. 2556

Proteus (Software Simulation and PCB design)

โปรแกรม Proteus เป็นโปรแกรมที่มีความสามารถมากอีกโปรแกรมหนึ่ง ในงานด้านอิเล็กทรอนิกส์ เพราะสามารถออกแบบวงจรไฟฟ้า พร้อมทั้งจำลองการทำงานของวงจรได้ ทั้งยังสามารถออกแบบลายวงจรพิมพ์ได้อีกด้วย ความสามารถที่โดดเด่นของ Proteus นั้น จะกล่าวได้ว่าเป็นโปรแกรมที่สามารถจำลองพฤติกรรม (Simulator) การทำงานของวงจรที่ใช้ Microcontroller เบอร์ต่าง ได้มากมาย โดยไม่ต้องประกอบวงจรให้เสียเวลา เพื่อพิสูจน์ว่าโปรแกรมที่เขียนขึ้นใช้งานได้หรือไม่ โดยวงจรและโปรแกรม (Source code) ที่ตรวจสอบด้วยโปรแกรม Proteus เป็นที่เรียบร้อยแล้วว่าถูกต้อง เราก็สามารถสร้างวงจรจริงได้ตามต้องการ




ความเป็นมาของโปรแกรม Proteus
โปรแกรม Proteus หรือ Proteus VSM (Virtual System Modeling) เป็นโปรแกรมที่พัฒนาขึ้น โดยบริษัท แล็บเซ็นเตอร์อิเล็กทรอนิกส์ จำกัด (Labcenter Electronics Ltd.) ที่ประเทศอังกฤษ โปรแกรม Proteus มีชื่อเต็มว่า Labcenter Electronics Proteus ซึ่งภายในโปรแกรมจะประกอบด้วยส่วนประกอบหลัก 2 ส่วน คือ ISIS และ ARES โปรแกรม Proteus จะมีอยู่หลายเวอร์ชันให้เลือกใช้งาน ซึ่งเวอร์ชันในปัจจุบัน คือ เวอร์ชัน 7 และถ้าต้องการศึกษาหาข้อมูลเกี่ยวกับเวอร์ชันนี้ ก็สามารถเยี่ยมชมได้ที่เว็บไซต์ http://www.labcenter.co.uk




ความสามารถในการทำงานของโปรแกรม Proteus ก็คือ สามารถจำลองการทำงานของวงจรอิเล็กทรอนิกส์ได้หลากหลายรูปแบบ ไม่ว่าจะเป็นแบบอนาล็อกและแบบดิจิตอล หรือทั้งแบบอนาล็อกและดิจิตอลผสมกัน นอกจากนี้ Proteus ยังสามารถออกแบบลายวงจรพิมพ์ (PCB) ได้อีกด้วย จุดเด่นของโปรแกรม Proteus ที่เป็นที่นิยมและชื่นชอบก็คือ การจำลองการทำงานของวงจรอิเล็กทรอนิกส์ ที่ใช้ไมโครคอนโทรลเลอร์ตระกูลต่าง ไม่ว่าจะเป็น PIC, MCS-51, AVR และ ARM เป็นต้น ทำให้นักเขียนโปรแกรมหรือโปรแกรมเมอร์สามารถตรวจสอบได้ว่าโปรแกรม หรือซอสโค้ด (Source Code) ที่เขียนขึ้นมานั้น สามารถสนับสนุนกับวงจรฮาร์ดแวร์ที่ต่อได้หรือไม่ ถ้าโปรแกรม (Source Code) ที่เขียนขึ้น ไม่สนับสนุนกับวงจรฮาร์ดแวร์ที่ต่อโปรแกรมเมอร์ก็จะทำการพัฒนาโปรแกรม (Source Code) ที่เขียนขึ้นใหม่ หรือปรับปรุงวงจรฮาร์ดแวร์ใน Proteus จนกว่าโปรแกรมที่เขียนขึ้นและฮาร์ดแวร์ที่ต่อ สามารถสนับสนุนซึ่งกันและกัน ทำให้การสร้างโครงงานต่าง สามารถประหยัดเวลาและค่าใช้จ่ายเป็นอย่างมาก เพราะในอดีตการเขียนโปรแกรมขึ้นมานั้น จะต้องต่อวงจรจริงเพื่อทดสอบ ทำให้เสียเวลาและค่าใช้จ่ายมาก ในกรณีที่วงจรฮาร์ดแวร์และโปรแกรมที่เขียนขึ้นไม่สนับสนุนซึ่งกันและกัน

การจำลองการทำงานของวงจร

การออกแบบลายวงจร





ขอบคุณข้อมูลจากเว๊ปไซต์ http://www.xtranetworks.com